Provided by: nix-bin_2.6.0+dfsg-3_amd64 bug

Name

       nix-instantiate - instantiate store derivations from Nix expressions

Synopsis

       nix-instantiate [--parse | --eval [--strict] [--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 generates store derivations (../glossary.md) from (high-level)
       Nix  expressions.  It  evaluates  the  Nix expressions in each of files (which defaults to
       ./default.nix). Each top-level expression should evaluate  to  a  derivation,  a  list  of
       derivations,  or  a  set  of derivations. The paths of the resulting 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  in
         ATerm format.

       • --eval
         Just  parse  and  evaluate  the  input files, and print the resulting values on standard
         output. No instantiation of store derivations takes place.

       • --find-file
         Look up the given files in Nix’s 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 nixpkgs=/home/alice/nixpkgs, then  nix-instantiate  --find-file
         nixpkgs/default.nix will print /home/alice/nixpkgs/default.nix.

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

                Warning

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

       • --json
         When  used  with  --eval,  print  the  resulting  value as an JSON representation of the
         abstract syntax tree rather than as an ATerm.

       • --xml
         When used with --eval, print the  resulting  value  as  an  XML  representation  of  the
         abstract  syntax  tree  rather than as an ATerm.  The schema is the same as that used by
         the toXML built-in (../expressions/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.

Examples

       Instantiating store derivations from a Nix expression, and building them using nix-store:

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

       $ nix-store -r $(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 -E 'with import <nixpkgs> { }; hello'
       /nix/store/j8s4zyv75a724q38cb0r87rlczaiag4y-hello-2.8.drv

       This is equivalent to:

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

       Parsing and evaluating Nix expressions:

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

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

       $ nix-instantiate --eval --xml -E '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 -E 'rec { x = "foo"; y = x; }'
       ...
         <attr name="x">
           <string value="foo" />
         </attr>
         <attr name="y">
           <unevaluated />
         </attr>
       ...

       Note that y is left unevaluated (the XML representation doesn’t attempt to show non-normal
       forms).

       $ nix-instantiate --eval --xml --strict -E 'rec { x = "foo"; y = x; }'
       ...
         <attr name="x">
           <string value="foo" />
         </attr>
         <attr name="y">
           <string value="foo" />
         </attr>
       ...

                                                                               nix-instantiate(1)