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

FreeBSD Manual Pages

  
 
  

home | help
nix-instantiate(1)	    General Commands Manual	    nix-instantiate(1)

Name
       nix-instantiate - instantiate store derivations from Nix	expressions

Synopsis
       nix-instantiate [--parse	| --eval [--strict] [--raw | --json | --xml] ]
       [--read-write-mode]  [--arg name	value] [{--attr| -A} attrPath] [--add-
       root path] [--expr | -E]	files

       nix-instantiate --find-file files

Description
       The  command  nix-instantiate  produces	store	derivation   <../glos-
       sary.md#gloss-store-derivation>s	from (high-level) Nix expressions.  It
       evaluates the Nix expressions in	each of	files (which defaults to ./de-
       fault.nix).  Each top-level expression should evaluate to a derivation,
       a list of derivations, or a set of derivations. The paths  of  the  re-
       sulting store derivations are printed on	standard output.

       If  files  is  the character -, then a Nix expression will be read from
       standard	input.

Options
         --add-root path

	  See the corresponding	option <nix-store.md> in nix-store.

         --parse

	  Just parse the input files, and print	their abstract syntax trees on
	  standard output as a Nix expression.

         --eval

	  Just parse and evaluate the input files,  and	 print	the  resulting
	  values on standard output.  Store derivations	are not	serialized and
	  written to the store,	but instead just hashed	and discarded.

		 Warning

		 This  option produces output which can	be parsed as a Nix ex-
		 pression which	will produce a different result	than the input
		 expression when evaluated.  For example, these	 two  Nix  ex-
		 pressions  print  the	same  result  despite having different
		 meaning:

	  $ nix-instantiate --eval --expr '{ a = {}; }'
	  { a =	<CODE>;	}
	  $ nix-instantiate --eval --expr '{ a = <CODE>; }'
	  { a =	<CODE>;	}

		 For human-readable output, nix	eval  (experimental)  is  more
		 informative:

	  $ nix-instantiate --eval --expr 'a: a'
	  <LAMBDA>
	  $ nix	eval --expr 'a:	a'
	  lambda @ string:1:1

		 For  machine-readable output, the --xml option	produces unam-
		 biguous output:

	  $ nix-instantiate --eval --xml --expr	'{ foo = <CODE>; }'
	  <?xml	version='1.0' encoding='utf-8'?>
	  <expr>
	    <attrs>
	      <attr column="3" line="1"	name="foo">
		<unevaluated />
	      </attr>
	    </attrs>
	  </expr>

         --find-file

	  Look up the given files in Nixs search path  (as  specified  by  the
	  NIX_PATH  environment	 variable).  If	found, print the corresponding
	  absolute paths on standard output. For instance, if NIX_PATH is nix-
	  pkgs=/home/alice/nixpkgs,  then  nix-instantiate  --find-file	 nixp-
	  kgs/default.nix will print /home/alice/nixpkgs/default.nix.

         --strict

	  When	used  with  --eval, recursively	evaluate list elements and at-
	  tributes. Normally, such sub-expressions are left unevaluated	(since
	  the Nix language is lazy).

		 Warning

		 This option can  cause	 non-termination,  because  lazy  data
		 structures can	be infinitely large.

         --raw

	  When used with --eval, the evaluation	result must be a string, which
	  is printed verbatim, without quoting,	escaping or trailing newline.

         --json

	  When	used  with --eval, print the resulting value as	an JSON	repre-
	  sentation of the abstract syntax tree	rather than as a  Nix  expres-
	  sion.

         --xml

	  When used with --eval, print the resulting value as an XML represen-
	  tation  of the abstract syntax tree rather than as a Nix expression.
	  The schema is	the same as that used by the toXML  built-in  <../lan-
	  guage/builtins.md>.

         --read-write-mode

	  When	used with --eval, perform evaluation in	read/write mode	so nix
	  language features that require it will still work (at	 the  cost  of
	  needing  to do instantiation of every	evaluated derivation). If this
	  option is not	enabled, there may be uninstantiated  store  paths  in
	  the final output.

Common Options
       Most Nix	commands accept	the following command-line options:

         --help <#opt-help>

	  Prints out a summary of the command syntax and exits.

         --version <#opt-version>

	  Prints out the Nix version number on standard	output and exits.

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

	  Increases  the  level	of verbosity of	diagnostic messages printed on
	  standard error.  For each Nix	operation, the information printed  on
	  standard  output  is	well-defined;  any  diagnostic	information is
	  printed on standard error, never on standard output.

	  This option may be specified repeatedly.  Currently,	the  following
	  verbosity levels exist:

	    0 Errors only

	  Only print messages explaining why the Nix invocation	failed.

	    1 Informational

	  Print	useful messages	about what Nix is doing.  This is the default.

	    2 Talkative

	  Print	more informational messages.

	    3 Chatty

	  Print	even more informational	messages.

	    4 Debug

	  Print	debug information.

	    5 Vomit

	  Print	vast amounts of	debug information.

         --quiet <#opt-quiet>

	  Decreases  the  level	of verbosity of	diagnostic messages printed on
	  standard error.  This	is the inverse option to -v / --verbose.

	  This option may be specified repeatedly.  See	the previous verbosity
	  levels list.

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

	  This option can be used to change the	output of the log format, with
	  format being one of:

	    raw

	  This is the raw format, as outputted by nix-build.

	    internal-json

	  Outputs the logs in a	structured manner.

		 Warning

		 While the schema itself is relatively stable, the  format  of
		 the  error-messages  (namely of the msg-field)	can change be-
		 tween releases.

	    bar

	  Only display a progress bar during the builds.

	    bar-with-logs

	  Display the raw logs,	with the progress bar at the bottom.

         --no-build-output <#opt-no-build-output> / -Q

	  By default, output written by	builders to standard output and	 stan-
	  dard	error is echoed	to the Nix command's standard error.  This op-
	  tion suppresses this behaviour.  Note	that  the  builder's  standard
	  output  and  error  are  always  written  to	a  log	file  in  pre-
	  fix/nix/var/log/nix.

         --max-jobs <#opt-max-jobs> / -j number

	  Sets the maximum number of build jobs	that Nix will perform in  par-
	  allel	 to  the  specified number.  Specify auto to use the number of
	  CPUs in the system.  The default is specified	by the	max-jobs  con-
	  figuration  setting,	which itself defaults to 1.  A higher value is
	  useful on SMP	systems	or to exploit I/O latency.

	  Setting it to	0 disallows building on	the local  machine,  which  is
	  useful when you want builds to happen	only on	remote builders.

         --cores <#opt-cores>

	  Sets	the  value  of the NIX_BUILD_CORES environment variable	in the
	  invocation of	builders.  Builders can	use  this  variable  at	 their
	  discretion  to  control  the maximum amount of parallelism.  For in-
	  stance, in Nixpkgs, if the derivation	attribute enableParallelBuild-
	  ing is set to	true, the builder passes the -jN flag to GNU Make.  It
	  defaults to the value	of the cores configuration setting, if set, or
	  1 otherwise.	The value 0 means that	the  builder  should  use  all
	  available CPU	cores in the system.

         --max-silent-time <#opt-max-silent-time>

	  Sets	the  maximum  number  of seconds that a	builder	can go without
	  producing any	data on	standard output	or standard  error.   The  de-
	  fault	 is specified by the max-silent-time configuration setting.  0
	  means	no time-out.

         --timeout <#opt-timeout>

	  Sets the maximum number of seconds that a builder can	run.  The  de-
	  fault	is specified by	the timeout configuration setting.  0 means no
	  timeout.

         --keep-going <#opt-keep-going> / -k

	  Keep	going  in case of failed builds, to the	greatest extent	possi-
	  ble.	That is, if building an	input of some  derivation  fails,  Nix
	  will	still  build  the other	inputs,	but not	the derivation itself.
	  Without this option, Nix stops if any	build fails (except for	builds
	  of substitutes), possibly killing builds in  progress	 (in  case  of
	  parallel or distributed builds).

         --keep-failed	<#opt-keep-failed> / -K

	  Specifies  that  in case of a	build failure, the temporary directory
	  (usually in /tmp) in which the  build	 takes	place  should  not  be
	  deleted.   The path of the build directory is	printed	as an informa-
	  tional message.

         --fallback <#opt-fallback>

	  Whenever Nix attempts	to build a derivation  for  which  substitutes
	  are  known  for  each	 output	 path,	but realising the output paths
	  through the substitutes fails, fall back on building the derivation.

	  The most common scenario in which this is useful  is	when  we  have
	  registered substitutes in order to perform binary distribution from,
	  say,	a network repository.  If the repository is down, the realisa-
	  tion of the derivation will fail.  When this	option	is  specified,
	  Nix  will build the derivation instead.  Thus, installation from bi-
	  naries falls back on installation from source.  This option  is  not
	  the  default	since  it  is  generally not desirable for a transient
	  failure in obtaining the substitutes to lead to a  full  build  from
	  source (with the related consumption of resources).

         --readonly-mode <#opt-readonly-mode>

	  When	this  option is	used, no attempt is made to open the Nix data-
	  base.	 Most Nix operations do	need database access, so those	opera-
	  tions	will fail.

         --arg	<#opt-arg> name	value

	  This	option	is accepted by nix-env,	nix-instantiate, nix-shell and
	  nix-build.  When evaluating Nix expressions, the expression  evalua-
	  tor will automatically try to	call functions that it encounters.  It
	  can  automatically call functions for	which every argument has a de-
	  fault	value <../language/syntax.md#functions>	 (e.g.,	 {  argName  ?
	  defaultValue }: ...).

	  With	--arg, you can also call functions that	have arguments without
	  a default value (or override a default  value).   That  is,  if  the
	  evaluator encounters a function with an argument named name, it will
	  call it with value value.

	  For  instance,  the  top-level  default.nix in Nixpkgs is actually a
	  function:

       { # The system (e.g., `i686-linux') for which to	build the packages.
       system ?	builtins.currentSystem
       ...
       }: ...

	      So if you	call this Nix expression (e.g.,	when  you  do  nix-env
	      --install	--attr pkgname), the function will be called automati-
	      cally	 using	    the	     value	builtins.currentSystem
	      <../language/builtins.md>	for  the  system  argument.   You  can
	      override	this  using --arg, e.g., nix-env --install --attr pkg-
	      name --arg system	\"i686-freebsd\".  (Note that since the	 argu-
	      ment is a	Nix string literal, you	have to	escape the quotes.)

         --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 value

	  This option is like --arg, only the value is not  a  Nix  expression
	  but  a string.  So instead of	--arg system \"i686-linux\" (the outer
	  quotes are to	keep the shell happy)  you  can	 say  --argstr	system
	  i686-linux.

         --attr <#opt-attr> / -A attrPath

	  Select  an  attribute	from the top-level Nix expression being	evalu-
	  ated.	 (nix-env, nix-instantiate,  nix-build	and  nix-shell	only.)
	  The  attribute  path attrPath	is a sequence of attribute names sepa-
	  rated	by dots.  For instance,	given a	top-level  Nix	expression  e,
	  the  attribute  path	xorg.xorgserver	 would	cause  the  expression
	  e.xorg.xorgserver to be used.	 See  nix-env  --install  <../command-
	  ref/nix-env/install.md> for some concrete examples.

	  In  addition to attribute names, you can also	specify	array indices.
	  For instance,	the attribute path foo.3.bar selects the bar attribute
	  of the fourth	element	of the array in	the foo	attribute of the  top-
	  level	expression.

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

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

         --expr <#opt-expr> / -E

	  Interpret the	command	line arguments as a list of Nix	expressions to
	  be  parsed and evaluated, rather than	as a list of file names	of Nix
	  expressions.	(nix-instantiate, nix-build and	nix-shell only.)

	  For nix-shell, this option is	commonly used to give you a  shell  in
	  which	you can	build the packages returned by the expression.	If you
	  want	to get a shell which contain the built packages	ready for use,
	  give your expression to the nix-shell	 --packages  convenience  flag
	  instead.

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

	  Add  an  entry  to  the  list	of search paths	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>.

         --impure <#opt-impure>

	  Allow	access to mutable paths	and repositories.

         --option <#opt-option> name value

	  Set the Nix configuration option name	to value.  This	overrides set-
	  tings	in the Nix configuration file (see nix.conf5).

         --repair <#opt-repair>

	  Fix corrupted	or missing store paths by redownloading	or  rebuilding
	  them.	  Note that this is slow because it requires computing a cryp-
	  tographic hash of the	contents of every path in the closure  of  the
	  build.  Also note the	warning	under nix-store	--repair-path.

	  Note

	  See  man  nix.conf  <../command-ref/conf-file.md#command-line-flags>
	  for overriding configuration settings	with command line flags.

Common Environment Variables
       Most Nix	commands interpret the following environment variables:

         IN_NIX_SHELL <#env-IN_NIX_SHELL>

	  Indicator that tells if the current environment was set up  by  nix-
	  shell. It can	have the values	pure or	impure.

         NIX_PATH <#env-NIX_PATH>

	  A colon-separated list of search path	entries	used to	resolve	lookup
	  paths	<../language/constructs/lookup-path.md>.

	  This	environment  variable overrides	the value of the nix-path con-
	  figuration setting <../command-ref/conf-file.md#conf-nix-path>.

	  It can be extended  using  the  -I  option  <../command-ref/opt-com-
	  mon.md#opt-I>.

		 Example

	  $ export NIX_PATH=`/home/eelco/Dev:nixos-config=/etc/nixos

	  If  NIX_PATH	is set to an empty string, resolving search paths will
	  always fail.

		 Example

	  $ NIX_PATH= nix-instantiate --eval '<nixpkgs>'
	  error: file 'nixpkgs'	was not	found in the Nix search	path (add it using $NIX_PATH or	-I)

         NIX_IGNORE_SYMLINK_STORE <#env-NIX_IGNORE_SYMLINK_STORE>

	  Normally, the	Nix store directory (typically /nix/store) is not  al-
	  lowed	 to  contain any symlink components. This is to	prevent	impure
	  builds. Builders sometimes canonicalise paths	by resolving all  sym-
	  link components. Thus, builds	on different machines (with /nix/store
	  resolving  to	 different  locations)	could yield different results.
	  This is generally not	a problem, except when builds are deployed  to
	  machines where /nix/store resolves differently. If you are sure that
	  youre	 not going to do that, you can set NIX_IGNORE_SYMLINK_STORE to
	  1.

	  Note that if youre symlinking	the Nix	store so that you can  put  it
	  on  another  file  system  than the root file	system,	on Linux youre
	  better off using bind	mount points, e.g.,

       $ mkdir /nix
       $ mount -o bind /mnt/otherdisk/nix /nix

	      Consult the mount	8 manual page for details.

         NIX_STORE_DIR	<#env-NIX_STORE_DIR>

	  Overrides the	location of the	Nix store (default prefix/store).

         NIX_DATA_DIR <#env-NIX_DATA_DIR>

	  Overrides the	location of the	Nix  static  data  directory  (default
	  prefix/share).

         NIX_LOG_DIR <#env-NIX_LOG_DIR>

	  Overrides  the  location  of	the  Nix  log  directory (default pre-
	  fix/var/log/nix).

         NIX_STATE_DIR	<#env-NIX_STATE_DIR>

	  Overrides the	location of the	 Nix  state  directory	(default  pre-
	  fix/var/nix).

         NIX_CONF_DIR <#env-NIX_CONF_DIR>

	  Overrides  the  location  of	the system Nix configuration directory
	  (default sysconfdir/nix, i.e.	/etc/nix on most systems).

         NIX_CONFIG <#env-NIX_CONFIG>

	  Applies settings from	Nix configuration from the  environment.   The
	  content  is treated as if it was read	from a Nix configuration file.
	  Settings are separated by the	newline	character.

         NIX_USER_CONF_FILES <#env-NIX_USER_CONF_FILES>

	  Overrides the	location of the	Nix user configuration files  to  load
	  from.

	  The  default	are  the locations according to	the XDG	Base Directory
	  Specification	      <https://specifications.freedesktop.org/basedir-
	  spec/basedir-spec-latest.html>.  See the XDG Base Directories	<#xdg-
	  base-directories> sub-section	for details.

	  The variable is treated as a list separated by the : token.

         TMPDIR <#env-TMPDIR>

	  Use the specified directory to store temporary files.	In particular,
	  this	includes  temporary  build directories;	these can take up sub-
	  stantial amounts of disk space. The default is /tmp.

         NIX_REMOTE <#env-NIX_REMOTE>

	  This variable	should be set to daemon	if you want  to	 use  the  Nix
	  daemon  to  execute  Nix operations. This is necessary in multi-user
	  Nix installations <../installation/multi-user.md>. If	the  Nix  dae-
	  mon's	Unix socket is at some non-standard path, this variable	should
	  be set to unix://path/to/socket. Otherwise, it should	be left	unset.

         NIX_SHOW_STATS <#env-NIX_SHOW_STATS>

	  If  set to 1,	Nix will print some evaluation statistics, such	as the
	  number of values allocated.

         NIX_COUNT_CALLS <#env-NIX_COUNT_CALLS>

	  If set to 1, Nix will	print how often	functions were	called	during
	  Nix expression evaluation. This is useful for	profiling your Nix ex-
	  pressions.

         GC_INITIAL_HEAP_SIZE <#env-GC_INITIAL_HEAP_SIZE>

	  If  Nix has been configured to use the Boehm garbage collector, this
	  variable sets	the initial size of the	heap in	bytes. It defaults  to
	  384  MiB.  Setting it	to a low value reduces memory consumption, but
	  will increase	runtime	due to the overhead of garbage collection.

   XDG Base Directories
       Nix follows the XDG Base	 Directory  Specification  <https://specifica-
       tions.freedesktop.org/basedir-spec/basedir-spec-latest.html>.

       For backwards compatibility, Nix	commands will follow the standard only
       when   use-xdg-base-directories	<../command-ref/conf-file.md#conf-use-
       xdg-base-directories>  is  enabled.   New  Nix  commands	  <../command-
       ref/new-cli/nix.md> (experimental) conform to the standard by default.

       The  following environment variables are	used to	determine locations of
       various state and configuration files:

         [XDG_CONFIG_HOME]{#env-XDGCONFIGHOME}	(default ~/.config)
         [XDG_STATE_HOME]{#env-XDGSTATEHOME} (default ~/.local/state)
         [XDG_CACHE_HOME]{#env-XDGCACHEHOME} (default ~/.cache)

       In addition, setting the	following environment variables	overrides  the
       XDG base	directories:

         [NIX_CONFIG_HOME]{#env-NIXCONFIGHOME}	(default $XDG_CONFIG_HOME/nix)
         [NIX_STATE_HOME]{#env-NIXSTATEHOME} (default $XDG_STATE_HOME/nix)
         [NIX_CACHE_HOME]{#env-NIXCACHEHOME} (default $XDG_CACHE_HOME/nix)

       When   use-xdg-base-directories	<../command-ref/conf-file.md#conf-use-
       xdg-base-directories> is	enabled, the configuration directory is:

       1. $NIX_CONFIG_HOME, if it is defined
       2. Otherwise, $XDG_CONFIG_HOME/nix, if XDG_CONFIG_HOME is defined
       3. Otherwise, ~/.config/nix.

       Likewise	for the	state and cache	directories.

Examples
       Instantiate store  derivation  <../glossary.md#gloss-store-derivation>s
       from a Nix expression, and build	them using nix-store:

       $ nix-instantiate test.nix (instantiate)
       /nix/store/cigxbmvy6dzix98dxxh9b6shg7ar5bvs-perl-BerkeleyDB-0.26.drv

       $ nix-store --realise $(nix-instantiate test.nix) (build)
       ...
       /nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26	(output	path)

       $ ls -l /nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26
       dr-xr-xr-x    2 eelco	users	     4096 1970-01-01 01:00 lib
       ...

       You can also give a Nix expression on the command line:

       $ nix-instantiate --expr	'with import <nixpkgs> { }; hello'
       /nix/store/j8s4zyv75a724q38cb0r87rlczaiag4y-hello-2.8.drv

       This is equivalent to:

       $ nix-instantiate '<nixpkgs>' --attr hello

       Parsing and evaluating Nix expressions:

       $ nix-instantiate --parse --expr	'1 + 2'
       1 + 2

       $ nix-instantiate --eval	--expr '1 + 2'
       3

       $ nix-instantiate --eval	--xml --expr '1	+ 2'
       <?xml version='1.0' encoding='utf-8'?>
       <expr>
	 <int value="3"	/>
       </expr>

       The difference between non-strict and strict evaluation:

       $ nix-instantiate --eval	--xml --expr '{	x = {};	}'
       <?xml version='1.0' encoding='utf-8'?>
       <expr>
	 <attrs>
	   <attr column="3" line="1" name="x">
	     <unevaluated />
	   </attr>
	 </attrs>
       </expr>

       $ nix-instantiate --eval	--xml --strict --expr '{ x = {}; }'
       <?xml version='1.0' encoding='utf-8'?>
       <expr>
	 <attrs>
	   <attr column="3" line="1" name="x">
	     <attrs>
	     </attrs>
	   </attr>
	 </attrs>
       </expr>

							    nix-instantiate(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=nix-instantiate&sektion=1&manpath=FreeBSD+Ports+15.0>

home | help