nix-shell1Nixnix-shellstart an interactive shell based on a Nix expressionnix-shellnamevaluenamevalueattrPathcmdregexppackagespathDescriptionThe command nix-shell will build the
dependencies of the specified derivation, but not the derivation
itself. It will then start an interactive shell in which all
environment variables defined by the derivation
path have been set to their corresponding
values, and the script $stdenv/setup has been
sourced. This is useful for reproducing the environment of a
derivation for development.If path is not given,
nix-shell defaults to
shell.nix if it exists, and
default.nix otherwise.If the derivation defines the variable
shellHook, it will be evaluated after
$stdenv/setup has been sourced. Since this hook is
not executed by regular Nix builds, it allows you to perform
initialisation specific to nix-shell. For example,
the derivation attribute
shellHook =
''
echo "Hello shell"
'';
will cause nix-shell to print Hello shell.OptionsAll options not listed here are passed to nix-store
--realise, except for and
/ which are passed to
nix-instantiate. See
also .cmdIn the environment of the derivation, run the
shell command cmd instead of starting
an interactive shell. However, if you end the shell command with
return, you still get an interactive shell.
This can be useful for doing any additional
initialisation.regexpDo not build any dependencies whose store path
matches the regular expression regexp.
This option may be specified multiple times.If this flag is specified, the environment is
almost entirely cleared before the interactive shell is started,
so you get an environment that more closely corresponds to the
“real” Nix build. A few variables, in particular
HOME, USER and
DISPLAY, are retained. Note that
~/.bashrc and (depending on your Bash
installation) /etc/bashrc are still sourced,
so any variables set there will affect the interactive
shell. / Set up an environment in which the specified
packages are present. The command line arguments are interpreted
as attribute names inside the Nix Packages collection. Thus,
nix-shell -p libjpeg openjdk will start a shell
in which the packages denoted by the attribute names
libjpeg and openjdk are
present.The following common options are supported:ExamplesTo build the dependencies of the package Pan, and start an
interactive shell in which to build it:
$ nix-shell '<nixpkgs>' -A pan
[nix-shell]$ unpackPhase
[nix-shell]$ cd pan-*
[nix-shell]$ configurePhase
[nix-shell]$ buildPhase
[nix-shell]$ ./pan/gui/pan
To clear the environment first, and do some additional automatic
initialisation of the interactive shell:
$ nix-shell '<nixpkgs>' -A pan --pure \
--command 'export NIX_DEBUG=1; export NIX_CORES=8; return'
Nix expressions can also be given on the command line. For instance,
the following starts a shell containing the packages
sqlite and libX11:
$ nix-shell -E 'with import <nixpkgs> { }; runCommand "dummy" { buildInputs = [ sqlite xorg.libX11 ]; } ""'
A shorter way to do the same is:
$ nix-shell -p sqlite xorg.libX11
[nix-shell]$ echo $NIX_LDFLAGS
… -L/nix/store/j1zg5v…-sqlite-3.8.0.2/lib -L/nix/store/0gmcz9…-libX11-1.6.1/lib …
Environment variables