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 <../../development/experimental-
	      features.md#xp-feature-nix-command> and its interface is subject
	      to change.

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

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
	      default  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
       provides	the specified installables <./nix.md#installables>. If no com-
       mand  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 ar-
       bitrary 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 real script interpreter that will	be in-
       voked by	nix shell after	it has	obtained  the  dependencies  and  ini-
       tialised	 the  environment, and installables are	the attribute names of
       the dependencies	in Nixpkgs.

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

       For example, here is a Python script that depends  on  Python  and  the
       prettytable 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 re-
       quires 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 pack-
       age 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 ex-
	      pression 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  sta-
       ble 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 revi-
       sion of Nixpkgs:

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

       You can also use	a Nix expression to build your own  dependencies.  For
       example,	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 con-
       tains:

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

Options
         --command <#opt-command> / -c	command	args

	  Command and arguments	to be executed,	defaulting to $SHELL

         --stdin <#opt-stdin>

	  Read installables from the standard input.  No  default  installable
	  applied.

   Common evaluation options
         --arg	<#opt-arg> name	expr

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

         --arg-from-file <#opt-arg-from-file> name path

	  Pass	the  contents  of  file	path as	the argument name to Nix func-
	  tions.

         --arg-from-stdin <#opt-arg-from-stdin> name

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

         --argstr <#opt-argstr> name string

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

         --debugger <#opt-debugger>

	  Start	an interactive environment if evaluation fails.

         --eval-store <#opt-eval-store> store-url

	  The URL  of  the  Nix	 store	<../../store/types/index.md#store-url-
	  format>  to  use  for	 evaluation,  i.e.  to store derivations (.drv
	  files) and inputs referenced by them.

         --impure <#opt-impure>

	  Allow	access to mutable paths	and repositories.

         --include <#opt-include> / -I	path

	  Add path to  search  path  entries  used  to	resolve	 lookup	 paths
	  <../../language/constructs/lookup-path.md>

	  This option may be given multiple times.

	  Paths	 added through -I take precedence over the nix-path configura-
	  tion setting <../../command-ref/conf-file.md#conf-nix-path> and  the
	  NIX_PATH  environment	variable <../../command-ref/env-common.md#env-
	  NIX_PATH>.

         --override-flake <#opt-override-flake> original-ref resolved-ref

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

   Common flake-related	options
         --commit-lock-file <#opt-commit-lock-file>

	  Commit changes to the	flake's	lock file.

         --inputs-from	<#opt-inputs-from> flake-url

	  Use the inputs of the	specified flake	as registry entries.

         --no-registries <#opt-no-registries>

	  Don't	allow lookups in the flake registries.

		 DEPRECATED

		 Use --no-use-registries <../../command-ref/conf-file.md#conf-
		 use-registries> instead.

         --no-update-lock-file	<#opt-no-update-lock-file>

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

         --no-write-lock-file <#opt-no-write-lock-file>

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

         --output-lock-file <#opt-output-lock-file> flake-lock-path

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

         --override-input <#opt-override-input> input-path flake-url

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

         --recreate-lock-file <#opt-recreate-lock-file>

	  Recreate the flake's lock file from scratch.

		 DEPRECATED

		 Use nix flake	update	<../../command-ref/new-cli/nix3-flake-
		 update.md> instead.

         --reference-lock-file	<#opt-reference-lock-file> flake-lock-path

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

         --update-input <#opt-update-input> input-path

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

		 DEPRECATED

		 Use  nix  flake update	<../../command-ref/new-cli/nix3-flake-
		 update.md> instead.

   Logging-related options
         --debug <#opt-debug>

	  Set the logging verbosity level to `debug'.

         --log-format <#opt-log-format> format

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

         --print-build-logs <#opt-print-build-logs> / -L

	  Print	full build logs	on standard error.

         --quiet <#opt-quiet>

	  Decrease the logging verbosity level.

         --verbose <#opt-verbose> / -v

	  Increase the logging verbosity level.

   Miscellaneous global	options
         --help <#opt-help>

	  Show usage information.

         --offline <#opt-offline>

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

         --option <#opt-option> name value

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

         --refresh <#opt-refresh>

	  Consider all previously downloaded files out-of-date.

         --repair <#opt-repair>

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

         --version <#opt-version>

	  Show version information.

   Options that	change environment variables
         --ignore-env <#opt-ignore-env> / -i

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

         --keep-env-var <#opt-keep-env-var> / -k name

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

         --set-env-var	<#opt-set-env-var> / -s	name value

	  Sets an environment variable name with value.

         --unset-env-var <#opt-unset-env-var> / -u name

	  Unset	the environment	variable name.

   Options that	change the interpretation of installables
         --expr <#opt-expr> expr

	  Interpret	       installables	       <../../command-ref/new-
	  cli/nix.md#installables>  as attribute paths relative	to the Nix ex-
	  pression expr.

         --file <#opt-file> / -f file

	  Interpret	       installables	       <../../command-ref/new-
	  cli/nix.md#installables>  as attribute paths relative	to the Nix ex-
	  pression stored in file. If file is the character -, then a Nix  ex-
	  pression is read from	standard input.	Implies	--impure.

	  Note

	  See man nix.conf <../../command-ref/conf-file.md#command-line-flags>
	  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.0>

home | help