From c31836008e45460513188a3fbeda4416f9153a05 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Wed, 19 Feb 2014 16:30:19 +0100 Subject: nix-instantiate: Add a flag --expr / -E to read expressions from the command line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is basically a shortcut for ‘echo 'expr...' | nix-instantiate -’. Also supported by nix-build and nix-shell. --- doc/manual/nix-build.xml | 10 ++++ doc/manual/nix-instantiate.xml | 116 +++++++++++++++++++++++------------------ doc/manual/nix-shell.xml | 22 +++++--- doc/manual/opt-common.xml | 64 +++++++++++++---------- 4 files changed, 126 insertions(+), 86 deletions(-) (limited to 'doc') diff --git a/doc/manual/nix-build.xml b/doc/manual/nix-build.xml index 969faf9d1694..3832f5fc3450 100644 --- a/doc/manual/nix-build.xml +++ b/doc/manual/nix-build.xml @@ -164,6 +164,16 @@ $ nix-build '<nixpkgs>' -A openssl.man This will create a symlink result-man. +Build a Nix expression given on the command line: + + +$ nix-build -E 'with import <nixpkgs> { }; runCommand "foo" { } "echo bar > $out"' +$ cat ./result +bar + + + + diff --git a/doc/manual/nix-instantiate.xml b/doc/manual/nix-instantiate.xml index a3d67debe66a..a780302e1971 100644 --- a/doc/manual/nix-instantiate.xml +++ b/doc/manual/nix-instantiate.xml @@ -2,7 +2,7 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xml:id="sec-nix-instantiate"> - + nix-instantiate 1 @@ -18,7 +18,15 @@ nix-instantiate - + + + + + + + + + name value @@ -29,18 +37,14 @@ path - - - - - - - - - - - - + + + + + files + + nix-instantiate + files @@ -50,8 +54,8 @@ The command nix-instantiate generates store derivations from (high-level) -Nix expressions. It loads and evaluates the Nix expressions in each -of files (which defaults to +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 @@ -61,12 +65,6 @@ on standard output. -, then a Nix expression will be read from standard input. -Most users and developers don’t need to use this command -(nix-env and nix-build perform -store derivation instantiation from Nix expressions automatically). -It is most commonly used for implementing new deployment -policies. - See also for a list of common options. @@ -86,25 +84,24 @@ policies. - - + Just parse the input files, and print their abstract syntax trees on standard output in ATerm format. - + - + - + Just parse and evaluate the input files, and print the resulting values on standard output. No instantiation of store derivations takes place. - + - + 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 @@ -113,9 +110,9 @@ policies. nix-instantiate --find-file nixpkgs/default.nix will print /home/alice/nixpkgs/default.nix. - + - + When used with and @@ -180,19 +177,34 @@ 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: -$ echo '"foo" + "bar"' | nix-instantiate --parse-only - -OpPlus(Str("foo"),Str("bar")) +$ nix-instantiate --parse-only -E '1 + 2' +1 + 2 -$ echo '"foo" + "bar"' | nix-instantiate --eval-only - -Str("foobar") +$ nix-instantiate --eval-only -E '1 + 2' +3 -$ echo '"foo" + "bar"' | nix-instantiate --eval-only --xml - +$ nix-instantiate --eval-only --xml -E '1 + 2' - + ]]> @@ -200,28 +212,28 @@ $ echo '"foo" + "bar"' | nix-instantiate --eval-only --xml - The difference between non-strict and strict evaluation: -$ echo 'rec { x = "foo"; y = x; }' | nix-instantiate --eval-only --xml - +$ nix-instantiate --eval-only --xml -E 'rec { x = "foo"; y = x; }' ... - - - - - ]]> + + + + + + ]]> ... Note that y is left unevaluated (the XML representation doesn’t attempt to show non-normal forms). -$ echo 'rec { x = "foo"; y = x; }' | nix-instantiate --eval-only --xml --strict - +$ nix-instantiate --eval-only --xml --strict -E 'rec { x = "foo"; y = x; }' ... - - - - - ]]> + + + + + + ]]> ... @@ -236,6 +248,6 @@ $ echo 'rec { x = "foo"; y = x; }' | nix-instantiate --eval-only --xml --strict - + diff --git a/doc/manual/nix-shell.xml b/doc/manual/nix-shell.xml index 4b369662e2af..8178cea69fe8 100644 --- a/doc/manual/nix-shell.xml +++ b/doc/manual/nix-shell.xml @@ -61,11 +61,11 @@ the derivation attribute shellHook = '' - echo "Hello shell!" + echo "Hello shell" ''; -will cause nix-shell to print Hello shell!. +will cause nix-shell to print Hello shell. @@ -132,11 +132,11 @@ interactive shell in which to build it: $ nix-shell '<nixpkgs>' -A pan -$ unpackPhase -$ cd pan-* -$ configurePhase -$ buildPhase -$ ./pan/gui/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 @@ -147,6 +147,14 @@ $ 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 ]; } ""' + + diff --git a/doc/manual/opt-common.xml b/doc/manual/opt-common.xml index a877b536a5c7..f8584f4d62ed 100644 --- a/doc/manual/opt-common.xml +++ b/doc/manual/opt-common.xml @@ -8,15 +8,15 @@ - + Prints out a summary of the command syntax and exits. - + - + Prints out the Nix version number on standard output and exits. @@ -26,7 +26,7 @@ - + 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 @@ -37,18 +37,18 @@ 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. @@ -68,11 +68,11 @@ “Vomit”: print vast amounts of debug information. - + - + @@ -85,7 +85,7 @@ builder's standard output and error are always written to a log file in prefix/nix/var/log/nix. - + @@ -99,7 +99,7 @@ configuration setting, which itself defaults to 1. A higher value is useful on SMP systems or to exploit I/O latency. - + @@ -117,7 +117,7 @@ configuration setting, if set, or 1 otherwise. The value 0 means that the builder should use all available CPU cores in the system. - + @@ -151,7 +151,7 @@ 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). - + @@ -188,7 +188,7 @@ resources). - + @@ -197,7 +197,7 @@ When this option is used, no attempt is made to open the Nix database. Most Nix operations do need database access, so those operations will fail. - + @@ -247,12 +247,12 @@ - - + + - + @@ -310,10 +310,10 @@ / attrPath - In nix-env, - nix-instantiate and nix-build, - allows you to select an attribute from the - top-level Nix expression being evaluated. The attribute + Select an attribute from the top-level Nix + expression being evaluated. (nix-env, + nix-instantiate, nix-build and + nix-shell only.) The attribute path attrPath is a sequence of attribute names separated by dots. For instance, given a top-level Nix expression e, the attribute path @@ -333,8 +333,18 @@ + / + + 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.) + + + - + Causes Nix to print out a stack trace in case of Nix expression evaluation errors. @@ -342,23 +352,23 @@ path - + Add a path to the Nix expression search path. This option may be given multiple times. See the NIX_PATH environment variable for information on the semantics of the Nix search path. Paths added through take precedence over NIX_PATH. - + name value - + Set the Nix configuration option name to value. This overrides settings in the Nix configuration file (see nix.conf5). - + -- cgit 1.4.1