Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
nix3-env-shell(1)	     General Commands Manual	       nix3-env-shell(1)

	    Warning
	    This program is experimental and its interface is subject to change.

Name
     nix env shell - run a shell in which the specified packages are available

Synopsis
     nix env shell [option...] installables...

Examples
     *	Start a shell providing youtube-dl from the nixpkgs flake:

     # nix shell nixpkgs#youtube-dl
     # youtube-dl --version
     2020.11.01.1

     *	Start a shell providing GNU Hello from NixOS 20.03:

     # nix shell nixpkgs/nixos-20.03#hello

     *	Run GNU Hello:

     # nix shell nixpkgs#hello --command hello --greeting 'Hi everybody!'
     Hi everybody!

     *	Run multiple commands in a shell environment:

     # nix shell nixpkgs#gnumake --command sh -c "cd src && make"

     *	Run GNU Hello in a chroot store:

     # nix shell --store ~/my-nix nixpkgs#hello --command hello

     *	Start a shell providing GNU Hello in a chroot store:

     # nix shell --store ~/my-nix nixpkgs#hello nixpkgs#bashInteractive --command bash

	    Note that it's necessary to specify bash explicitly because your de-
	    fault shell (e.g. /bin/bash) generally will not exist in the chroot.

Description
     nix shell runs a command in an environment in which the $PATH variable pro-
     vides the specified installables. If no command is specified, it starts the
     default shell of your user account specified by $SHELL.

Use as a #!-interpreter
     You  can  use nix as a script interpreter to allow scripts written in arbi-
     trary languages to obtain their own dependencies via Nix. This is	done  by
     starting the script with the following lines:

     #! /usr/bin/env nix
     #! nix shell installables --command real-interpreter

     where  real-interpreter  is  the areala script interpreter that will be in-
     voked by nix shell after it has obtained the dependencies	and  initialised
     the  environment, and installables are the attribute names of the dependen-
     cies in Nixpkgs.

     The lines starting with #! nix specify options (see above). Note  that  you
     cannot  write  #! /usr/bin/env nix shell -i ... because many operating sys-
     tems only allow one argument in #! lines.

     For example, here is a Python script that depends on Python and  the  pret-
     tytable package:

     #! /usr/bin/env nix
     #! nix shell github:tomberek/-#python3With.prettytable --command python

     import prettytable

     # Print a simple table.
     t = prettytable.PrettyTable(["N", "N^2"])
     for n in range(1, 10): t.add_row([n, n * n])
     print(t)

     Similarly,  the  following is a Perl script that specifies that it requires
     Perl and the HTML::TokeParser::Simple and LWP packages:

     #! /usr/bin/env nix
     #! nix shell github:tomberek/-#perlWith.HTMLTokeParserSimple.LWP --command perl -x

     use HTML::TokeParser::Simple;

     # Fetch nixos.org and print all hrefs.
     my $p = HTML::TokeParser::Simple->new(url => 'http://nixos.org/');

     while (my $token = $p->get_tag("a")) {
	 my $href = $token->get_attr("href");
	 print "$href\n" if $href;
     }

     Sometimes you need to pass a simple Nix expression to customize  a  package
     like Terraform:

     #! /usr/bin/env nix
     #! nix shell --impure --expr ``
     #! nix with (import (builtins.getFlake ''nixpkgs'') {});
     #! nix terraform.withPlugins (plugins: [ plugins.openstack ])
     #! nix ``
     #! nix --command bash

     terraform "$@"

	    Note

	    You must use double backticks (``) when passing a simple Nix expres-
	    sion in a nix shell shebang.

     Finally,  using  the  merging  of multiple nix shell shebangs the following
     Haskell script uses a specific branch of Nixpkgs/NixOS  (the  21.11  stable
     branch):

     #!/usr/bin/env nix
     #!nix shell --override-input nixpkgs github:NixOS/nixpkgs/nixos-21.11
     #!nix github:tomberek/-#haskellWith.download-curl.tagsoup --command runghc

     import Network.Curl.Download
     import Text.HTML.TagSoup
     import Data.Either
     import Data.ByteString.Char8 (unpack)

     -- Fetch nixos.org and print all hrefs.
     main = do
       resp <- openURI "https://nixos.org/"
       let tags = filter (isTagOpenName "a") $ parseTags $ unpack $ fromRight undefined resp
       let tags' = map (fromAttrib "href") tags
       mapM_ putStrLn $ filter (/= "") tags'

     If you want to be even more precise, you can specify a specific revision of
     Nixpkgs:

     #!nix shell --override-input nixpkgs github:NixOS/nixpkgs/eabc38219184cc3e04a974fe31857d8e0eac098d

     You can also use a Nix expression to build your own dependencies. For exam-
     ple, the Python example could have been written as:

     #! /usr/bin/env nix
     #! nix shell --impure --file deps.nix -i python

     where the file deps.nix in the same directory as the #!-script contains:

     with import <nixpkgs> {};
     python3.withPackages (ps: with ps; [ prettytable ])

Options
     *	--command / -c command args

	Command and arguments to be executed, defaulting to $SHELL

     *	--stdin

	Read  installables  from  the standard input. No default installable ap-
	plied.

   Common evaluation options
     *	--arg name expr

	Pass the value expr as the argument name to Nix functions.

     *	--arg-from-file name path

	Pass the contents of file path as the argument name to Nix functions.

     *	--arg-from-stdin name

	Pass the contents of stdin as the argument name to Nix functions.

     *	--argstr name string

	Pass the string string as the argument name to Nix functions.

     *	--debugger

	Start an interactive environment if evaluation fails.

     *	--eval-store store-url

	The URL of the Nix store to use for evaluation, i.e.  to  store  deriva-
	tions (.drv files) and inputs referenced by them.

     *	--impure

	Allow access to mutable paths and repositories.

     *	--include / -I path

	Add path to search path entries used to resolve lookup paths

	This option may be given multiple times.

	Paths  added  through -I take precedence over the nix-path configuration
	setting and the NIX_PATH environment variable.

     *	--override-flake original-ref resolved-ref

	Override the flake registries, redirecting original-ref to resolved-ref.

   Common flake-related options
     *	--commit-lock-file

	Commit changes to the flake's lock file.

     *	--inputs-from flake-url

	Use the inputs of the specified flake as registry entries.

     *	--no-registries

	Don't allow lookups in the flake registries.

	       DEPRECATED

	       Use --no-use-registries instead.

     *	--no-update-lock-file

	Do not allow any updates to the flake's lock file.

     *	--no-write-lock-file

	Do not write the flake's newly generated lock file.

     *	--output-lock-file flake-lock-path

	Write the given lock file instead of  flake.lock  within  the  top-level
	flake.

     *	--override-input input-path flake-url

	Override  a  specific  flake  input (e.g. dwarffs/nixpkgs). This implies
	--no-write-lock-file.

     *	--recreate-lock-file

	Recreate the flake's lock file from scratch.

	       DEPRECATED

	       Use nix flake update instead.

     *	--reference-lock-file flake-lock-path

	Read the given lock file instead  of  flake.lock  within  the  top-level
	flake.

     *	--update-input input-path

	Update	a  specific flake input (ignoring its previous entry in the lock
	file).

	       DEPRECATED

	       Use nix flake update instead.

   Logging-related options
     *	--debug

	Set the logging verbosity level to `debug'.

     *	--log-format format

	Set the format of log output; one of raw,  internal-json,  bar	or  bar-
	with-logs.

     *	--print-build-logs / -L

	Print full build logs on standard error.

     *	--quiet

	Decrease the logging verbosity level.

     *	--verbose / -v

	Increase the logging verbosity level.

   Miscellaneous global options
     *	--help

	Show usage information.

     *	--offline

	Disable substituters and consider all previously downloaded files up-to-
	date.

     *	--option name value

	Set the Nix configuration setting name to value (overriding nix.conf).

     *	--refresh

	Consider all previously downloaded files out-of-date.

     *	--repair

	During	evaluation, rewrite missing or corrupted files in the Nix store.
	During building, rebuild missing or corrupted store paths.

     *	--version

	Show version information.

   Options that change environment variables
     *	--ignore-env / -i

	Clear the entire environment, except for those	specified  with  --keep-
	env-var.

     *	--keep-env-var / -k name

	Keep the environment variable name, when using --ignore-env.

     *	--set-env-var / -s name value

	Sets an environment variable name with value.

     *	--unset-env-var / -u name

	Unset the environment variable name.

   Options that change the interpretation of installables
     *	--expr expr

	Interpret installables as attribute paths relative to the Nix expression
	expr.

     *	--file / -f file

	Interpret installables as attribute paths relative to the Nix expression
	stored	in  file.  If  file is the character -, then a Nix expression is
	read from standard input. Implies --impure.

	Note

	See man nix.conf for overriding configuration settings with command line
	flags.

							       nix3-env-shell(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nix3-env-shell&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help