Setup
To get the most out of rsh, it is important to setup your path and env for easy access. There are other ways to view these values and variables, however setting up your rsh configuration will make it much easier as these have cross-platform support.
Configure your path and other environment variables
In order to configure your path in rsh you'll need to modify
your PATH
environment variable in your
config.rsh
file. Open your
config.rsh
file and put an entry in it like
$env.PATH = "path1;path2;path3"
ensuring
that you use the proper path separation character, which is
different by platform.
Alternately, if you want to append a folder to your
PATH
environment variable you can do that too using
the append
or prepend
command like
this:
$env.PATH = ($env.PATH | split row (char esep) | append "some/other/path")
For more detailed instructions, see the documentation about environment variables and PATH configuration.
How to list your environment variables
$env
Output
─────────────────────────────────┬────────────────────────────────────────────
ALLUSERSPROFILE │ C:\ProgramData
CARGO_PKG_AUTHORS │ The Rsh Project Contributors
CARGO_PKG_DESCRIPTION │ A new type of shell
CARGO_PKG_HOMEPAGE │ https://irsh.vercel.app
CARGO_PKG_LICENSE │ MIT
CARGO_PKG_LICENSE_FILE │
CARGO_PKG_NAME │ rsh
CARGO_PKG_REPOSITORY │ https://github.com/radhesh1/rsh
CARGO_PKG_VERSION │ 0.59.0
CARGO_PKG_VERSION_MAJOR │ 0
or for a more detailed view, use our new
env
command.
env
Output
────┬─────────────────────────────┬─────────────────────────────┬─────────────────────────────┬──────────────────────────────
# │ name │ type │ value │ raw
────┼─────────────────────────────┼─────────────────────────────┼─────────────────────────────┼──────────────────────────────
0 │ ALLUSERSPROFILE │ string │ C:\ProgramData │ C:\ProgramData
1 │ APPDATA │ string │ C:\Users\someuser10\AppData │ C:\Users\someuser10\AppData
│ │ │ \Roaming │ \Roaming
2 │ CARGO │ string │ \\?\C:\Users\someuser10\.ru │ \\?\C:\Users\someuser10\.ru
│ │ │ stup\toolchains\stable-x86_ │ stup\toolchains\stable-x86_
│ │ │ 64-pc-windows-msvc\bin\carg │ 64-pc-windows-msvc\bin\carg
│ │ │ o.exe │ o.exe
3 │ CARGO_HOME │ string │ C:\Users\someuser10\.cargo │ C:\Users\someuser10\.cargo
4 │ CARGO_MANIFEST_DIR │ string │ C:\Users\someuser10\source\ │ C:\Users\someuser10\source\
│ │ │ repos\forks\rsh │ repos\forks\rsh
5 │ CARGO_PKG_AUTHORS │ string │ The Rsh Project Contributors │ The Rsh Project Contributors
6 │ CARGO_PKG_DESCRIPTION │ string │ A new type of shell │ A new type of shell
7 │ CARGO_PKG_HOMEPAGE │ string │ https://irsh.vercel.app │ https://irsh.vercel.app
8 │ CARGO_PKG_LICENSE │ string │ MIT │ MIT
9 │ CARGO_PKG_LICENSE_FILE │ string │ │
10 │ CARGO_PKG_NAME │ string │ rsh │ rsh
11 │ CARGO_PKG_REPOSITORY │ string │ https://github.com/radhesh1/ │ https://github.com/radhesh1/
Let's practise that and set $EDITOR
in our
env.rsh
file using vim
(or an editor
of your choice)
vim $rsh.env-path
Note: if you've never used vim
before and you
want to leave typing :q!
will close without saving.
Go to the end of the file and add
$env.EDITOR = vim
or emacs
, vscode
or whatever editor
you like. Don't forget that the program needs to be
accessible on the PATH
and to reload your
configuration with exec rsh
on linux/mac or restart
your rsh on windows.
You should now be able to run config rsh
or
config env
and edit those files easily.
How to get a single environment variable's value
$env.APPDATA
or
env | where name == APPDATA
───┬─────────┬────────┬─────────────────────────────────────┬─────────────────────────────────────
# │ name │ type │ value │ raw
───┼─────────┼────────┼─────────────────────────────────────┼─────────────────────────────────────
0 │ APPDATA │ string │ C:\Users\someuser10\AppData\Roaming │ C:\Users\someuser10\AppData\Roaming
───┴─────────┴────────┴─────────────────────────────────────┴─────────────────────────────────────
Use hooks to export state via environment variables
Additional tools like starship run with every prompt showing up
in rsh.
starship
in particular replaces the default prompt with its own. To be
most compatible, the starship
binary will run every
prompt render and is absolute stateless. rsh, however, is very
stateful in a single instance.
Hooks
allow registration of custom callback functions. In this case,
the pre_prompt
hook is very useful. With it, we can
export state information as an environment variable, for
example, what
overlays
are currently activated.
# set rsh_OVERLAYS with overlay list, useful for starship prompt
$env.config.hooks.pre_prompt = ($env.config.hooks.pre_prompt | append {||
let overlays = overlay list | range 1..
if not ($overlays | is-empty) {
$env.rsh_OVERLAYS = $overlays | str join ", "
} else {
$env.rsh_OVERLAYS = null
}
})
Now in starship
, we can use this environment
variable to display what modules are active.
[env_var.rsh_OVERLAYS]
symbol = '📌 '
format = 'with [$symbol($env_value )]($style)'
style = 'red'