Set Shell Environment variables across multiple shells with a single configuration file.
You can install xshe
from Cargo (Rust's package manager) if you have it installed on your system.
If you don't have Cargo or don't want to use it,
you can also download the binaries for your system directly from GitHub,
or install Cargo first before proceeding.
Note: After installing xshe
, you might have to add the resulting xshe
binary to your PATH
.
(what's that?)
Install xshe
from crates.io with Cargo.
shell
cargo install -f xshe
Instead of using Cargo, you can download the latest release binary that corresponds with your system (or view all releases).
Make sure to add the xshe
binary to your PATH
,
or remember to use the full path to the binary whenever you run xshe
.
xshe.toml
fileCreate a file called xshe.toml
in ~/.config
. This is a TOML file that represents environment variables.
One variable is set per line. The file is read in order from top to bottom, so variables that appear earlier in the file can be used to define ones that appear later.
A typical line looks like this:
toml
CARGO_HOME = "$XDG_DATA_HOME/cargo"
This will then be converted into the correct format for whatever shell is being used. For example, in bash, this line becomes:
bash
export CARGO_HOME="$XDG_DATA_HOME/cargo";
While in fish, this line is:
fish
set -gx CARGO_HOME "$XDG_DATA_HOME/cargo";
PATH
variablesTo set variables that are arrays of values, like $PATH
, use this syntax:
toml
PATH = ["$PATH", "$BIN_HOME", "$CARGO_HOME/bin"]
xshe
will join each element together based on the shell that is specified.
To set environment variables for only one shell, add a new table called [shell.NAME]
after all standard definitions,
where NAME
is on of bash
, zsh
, or fish
.
Then list the environment variables that will only be added if xshe
is being used for the given shell.
For example, to make $HISTFILE
be different between shells and $ZSH_CACHE_DIR
only be set in zsh, do this:
```toml
[shell.bash]
HISTFILE = "$XDGSTATEHOME/bash_history"
[shell.zsh] HISTFILE = "$XDGSTATEHOME/zshhistory" ZSHCACHEDIR = "$XDGCACHE_HOME/oh-my-zsh" ```
xshe.toml
filePut the line corresponding to your shell in whatever file runs when loading environment variables.
For bash, this is ~/.bash_profile
, for zsh, this is ~/.zshenv
, and for fish, this is ~/.config/fish/config.fish
.
bash
eval "$(xshe bash)"
zsh
eval "$(xshe zsh)"
fish
eval "$(xshe fish)"
xshe
on PATH
If xshe
isn't on your PATH
(this is the cause of the error command not found: xshe
), you will have to manually type out the location:
zsh
eval "$(/path/to/xshe zsh)"
--file
(or -f
)To specify a custom file that is not located at ~/.config/xshe.toml
, pass the --file
option, like so:
zsh
eval "$(xshe zsh --file ~/some/other/location.toml)"
--toml
(or -t
)To directly specify TOML to parse as a config file, use --toml
.
For example, this line reads the file ~/path/to/xshe.toml
with cat
,
and then directly parses the text:
zsh
xshe zsh --toml "$(cat ~/path/to/xshe.toml)
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.