fish
, xonsh
, and zsh
support for the nix run
and nix-shell
environments of the Nix package manager.
Features:
- When entering a
nix run
ornix-shell
environment, the shell stays the same. - Inside those environments, your prompt prints the loaded packages to the right.
- Alternatively, print that information by executing:
nix-shell-info
nix-shell --command
or the like still execute insidebash
, such that scripts don't break.
any-nix-shell can be installed from stable nixpkgs. For instance,
$ nix-env -i any-nix-shell
installs any-nix-shell
into your user environment.
In the following we describe how to enable the any-nix-shell
plugin
for your user.
This differs slightly among fish
, xonsh
, and zsh
.
Add the following to your ~/.config/fish/config.fish. Create it if it doesn't exist.
any-nix-shell fish --info-right | source
Add the following to your xonsh
configuration file.
(Create it if it doesn't exist.)
execx($(any-nix-shell xonsh --info-right))
Add the following to your ~/.zshrc. Create it if it doesn't exist.
any-nix-shell zsh --info-right | source /dev/stdin
Alternatively the any-nix-shell
plugin can be enabled system-wide.
This enables it for every user.
To do so, add the following to your configuration (/etc/nixos/configuration.nix).
{
programs.fish.enable = true;
programs.fish.interactiveShellInit = ''
${pkgs.any-nix-shell}/bin/any-nix-shell fish --info-right | source
'';
}
{
programs.xonsh.enable = true;
programs.xonsh.config = ''
execx($(${pkgs.any-nix-shell}/bin/any-nix-shell xonsh --info-right))
'';
}
{
programs.zsh.enable = true;
programs.zsh.promptInit = ''
${pkgs.any-nix-shell}/bin/any-nix-shell zsh --info-right | source /dev/stdin
'';
}
{
programs.zsh.enable = true;
programs.zsh.initExtra = ''
any-nix-shell zsh --info-right | source /dev/stdin
'';
}
The any-nix-shell
command (which is used for enabling the plugin in a specific shell) optionally takes any of the following flags:
Flag | Description |
---|---|
--info-right |
While in a nix shell or nix-shell environment, display information about the loaded packages at the right. |