nix-shell 1 Nix nix-shell start an interactive shell based on a Nix expression nix-shell name value name value attrPath cmd regexp packages path Description The 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. Options All options not listed here are passed to nix-store --realise, except for and / which are passed to nix-instantiate. See also . cmd In 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. regexp Do 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: Examples To 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