aboutsummaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/manual/advanced-topics/advanced-topics.xml1
-rw-r--r--doc/manual/advanced-topics/diff-hook.xml205
-rw-r--r--doc/manual/advanced-topics/distributed-builds.xml7
-rw-r--r--doc/manual/command-ref/conf-file.xml91
-rw-r--r--doc/manual/command-ref/env-common.xml12
-rw-r--r--doc/manual/command-ref/nix-channel.xml23
-rw-r--r--doc/manual/command-ref/nix-copy-closure.xml9
-rw-r--r--doc/manual/command-ref/nix-instantiate.xml4
-rw-r--r--doc/manual/command-ref/nix-shell.xml2
-rw-r--r--doc/manual/command-ref/nix-store.xml8
-rw-r--r--doc/manual/command-ref/opt-common.xml12
-rw-r--r--doc/manual/expressions/builtins.xml42
-rw-r--r--doc/manual/expressions/language-constructs.xml22
-rw-r--r--doc/manual/packages/basic-package-mgmt.xml6
-rw-r--r--doc/manual/packages/s3-substituter.xml6
-rw-r--r--doc/manual/release-notes/rl-2.2.xml122
16 files changed, 519 insertions, 53 deletions
diff --git a/doc/manual/advanced-topics/advanced-topics.xml b/doc/manual/advanced-topics/advanced-topics.xml
index b710f9f2b..c304367aa 100644
--- a/doc/manual/advanced-topics/advanced-topics.xml
+++ b/doc/manual/advanced-topics/advanced-topics.xml
@@ -7,5 +7,6 @@
<title>Advanced Topics</title>
<xi:include href="distributed-builds.xml" />
+<xi:include href="diff-hook.xml" />
</part>
diff --git a/doc/manual/advanced-topics/diff-hook.xml b/doc/manual/advanced-topics/diff-hook.xml
new file mode 100644
index 000000000..fb4bf819f
--- /dev/null
+++ b/doc/manual/advanced-topics/diff-hook.xml
@@ -0,0 +1,205 @@
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xml:id="chap-diff-hook"
+ version="5.0"
+ >
+
+<title>Verifying Build Reproducibility with <option linkend="conf-diff-hook">diff-hook</option></title>
+
+<subtitle>Check build reproducibility by running builds multiple times
+and comparing their results.</subtitle>
+
+<para>Specify a program with Nix's <xref linkend="conf-diff-hook" /> to
+compare build results when two builds produce different results. Note:
+this hook is only executed if the results are not the same, this hook
+is not used for determining if the results are the same.</para>
+
+<para>For purposes of demonstration, we'll use the following Nix file,
+<filename>deterministic.nix</filename> for testing:</para>
+
+<programlisting>
+let
+ inherit (import &lt;nixpkgs&gt; {}) runCommand;
+in {
+ stable = runCommand "stable" {} ''
+ touch $out
+ '';
+
+ unstable = runCommand "unstable" {} ''
+ echo $RANDOM > $out
+ '';
+}
+</programlisting>
+
+<para>Additionally, <filename>nix.conf</filename> contains:
+
+<programlisting>
+diff-hook = /etc/nix/my-diff-hook
+run-diff-hook = true
+</programlisting>
+
+where <filename>/etc/nix/my-diff-hook</filename> is an executable
+file containing:
+
+<programlisting>
+#!/bin/sh
+exec &gt;&amp;2
+echo "For derivation $3:"
+/run/current-system/sw/bin/diff -r "$1" "$2"
+</programlisting>
+
+</para>
+
+<para>The diff hook is executed by the same user and group who ran the
+build. However, the diff hook does not have write access to the store
+path just built.</para>
+
+<section>
+ <title>
+ Spot-Checking Build Determinism
+ </title>
+
+ <para>
+ Verify a path which already exists in the Nix store by passing
+ <option>--check</option> to the build command.
+ </para>
+
+ <para>If the build passes and is deterministic, Nix will exit with a
+ status code of 0:</para>
+
+ <screen>
+$ nix-build ./deterministic.nix -A stable
+these derivations will be built:
+ /nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv
+building '/nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv'...
+/nix/store/yyxlzw3vqaas7wfp04g0b1xg51f2czgq-stable
+
+$ nix-build ./deterministic.nix -A stable --check
+checking outputs of '/nix/store/z98fasz2jqy9gs0xbvdj939p27jwda38-stable.drv'...
+/nix/store/yyxlzw3vqaas7wfp04g0b1xg51f2czgq-stable
+</screen>
+
+ <para>If the build is not deterministic, Nix will exit with a status
+ code of 1:</para>
+
+ <screen>
+$ nix-build ./deterministic.nix -A unstable
+these derivations will be built:
+ /nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv
+building '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'...
+/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable
+
+$ nix-build ./deterministic.nix -A unstable --check
+checking outputs of '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'...
+error: derivation '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv' may not be deterministic: output '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable' differs
+</screen>
+
+<para>In the Nix daemon's log, we will now see:
+<screen>
+For derivation /nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv:
+1c1
+&lt; 8108
+---
+&gt; 30204
+</screen>
+</para>
+
+ <para>Using <option>--check</option> with <option>--keep-failed</option>
+ will cause Nix to keep the second build's output in a special,
+ <literal>.check</literal> path:</para>
+
+ <screen>
+$ nix-build ./deterministic.nix -A unstable --check --keep-failed
+checking outputs of '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv'...
+note: keeping build directory '/tmp/nix-build-unstable.drv-0'
+error: derivation '/nix/store/cgl13lbj1w368r5z8gywipl1ifli7dhk-unstable.drv' may not be deterministic: output '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable' differs from '/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable.check'
+</screen>
+
+ <para>In particular, notice the
+ <literal>/nix/store/krpqk0l9ib0ibi1d2w52z293zw455cap-unstable.check</literal>
+ output. Nix has copied the build results to that directory where you
+ can examine it.</para>
+
+ <note xml:id="check-dirs-are-unregistered">
+ <title><literal>.check</literal> paths are not registered store paths</title>
+
+ <para>Check paths are not protected against garbage collection,
+ and this path will be deleted on the next garbage collection.</para>
+
+ <para>The path is guaranteed to be alive for the duration of
+ <xref linkend="conf-diff-hook" />'s execution, but may be deleted
+ any time after.</para>
+
+ <para>If the comparison is performed as part of automated tooling,
+ please use the diff-hook or author your tooling to handle the case
+ where the build was not deterministic and also a check path does
+ not exist.</para>
+ </note>
+
+ <para>
+ <option>--check</option> is only usable if the derivation has
+ been built on the system already. If the derivation has not been
+ built Nix will fail with the error:
+ <screen>
+error: some outputs of '/nix/store/hzi1h60z2qf0nb85iwnpvrai3j2w7rr6-unstable.drv' are not valid, so checking is not possible
+</screen>
+
+ Run the build without <option>--check</option>, and then try with
+ <option>--check</option> again.
+ </para>
+</section>
+
+<section>
+ <title>
+ Automatic and Optionally Enforced Determinism Verification
+ </title>
+
+ <para>
+ Automatically verify every build at build time by executing the
+ build multiple times.
+ </para>
+
+ <para>
+ Setting <xref linkend="conf-repeat" /> and
+ <xref linkend="conf-enforce-determinism" /> in your
+ <filename>nix.conf</filename> permits the automated verification
+ of every build Nix performs.
+ </para>
+
+ <para>
+ The following configuration will run each build three times, and
+ will require the build to be deterministic:
+
+ <programlisting>
+enforce-determinism = true
+repeat = 2
+</programlisting>
+ </para>
+
+ <para>
+ Setting <xref linkend="conf-enforce-determinism" /> to false as in
+ the following configuration will run the build multiple times,
+ execute the build hook, but will allow the build to succeed even
+ if it does not build reproducibly:
+
+ <programlisting>
+enforce-determinism = false
+repeat = 1
+</programlisting>
+ </para>
+
+ <para>
+ An example output of this configuration:
+ <screen>
+$ nix-build ./test.nix -A unstable
+these derivations will be built:
+ /nix/store/ch6llwpr2h8c3jmnf3f2ghkhx59aa97f-unstable.drv
+building '/nix/store/ch6llwpr2h8c3jmnf3f2ghkhx59aa97f-unstable.drv' (round 1/2)...
+building '/nix/store/ch6llwpr2h8c3jmnf3f2ghkhx59aa97f-unstable.drv' (round 2/2)...
+output '/nix/store/6xg356v9gl03hpbbg8gws77n19qanh02-unstable' of '/nix/store/ch6llwpr2h8c3jmnf3f2ghkhx59aa97f-unstable.drv' differs from '/nix/store/6xg356v9gl03hpbbg8gws77n19qanh02-unstable.check' from previous round
+/nix/store/6xg356v9gl03hpbbg8gws77n19qanh02-unstable
+</screen>
+ </para>
+</section>
+</chapter>
diff --git a/doc/manual/advanced-topics/distributed-builds.xml b/doc/manual/advanced-topics/distributed-builds.xml
index bbb573e35..9ac4a92cd 100644
--- a/doc/manual/advanced-topics/distributed-builds.xml
+++ b/doc/manual/advanced-topics/distributed-builds.xml
@@ -180,4 +180,11 @@ builders = @/etc/nix/machines
causes the list of machines in <filename>/etc/nix/machines</filename>
to be included. (This is the default.)</para>
+<para>If you want the builders to use caches, you likely want to set
+the option <link linkend='conf-builders-use-substitutes'><literal>builders-use-substitutes</literal></link>
+in your local <filename>nix.conf</filename>.</para>
+
+<para>To build only on remote builders and disable building on the local machine,
+you can use the option <option>--max-jobs 0</option>.</para>
+
</chapter>
diff --git a/doc/manual/command-ref/conf-file.xml b/doc/manual/command-ref/conf-file.xml
index e9947ebc6..24fbf28cf 100644
--- a/doc/manual/command-ref/conf-file.xml
+++ b/doc/manual/command-ref/conf-file.xml
@@ -1,7 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
<refentry xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
- xml:id="sec-conf-file">
+ xml:id="sec-conf-file"
+ version="5">
<refmeta>
<refentrytitle>nix.conf</refentrytitle>
@@ -240,6 +242,71 @@ false</literal>.</para>
</varlistentry>
+ <varlistentry xml:id="conf-diff-hook"><term><literal>diff-hook</literal></term>
+ <listitem>
+ <para>
+ Absolute path to an executable capable of diffing build results.
+ The hook executes if <xref linkend="conf-run-diff-hook" /> is
+ true, and the output of a build is known to not be the same.
+ This program is not executed to determine if two results are the
+ same.
+ </para>
+
+ <para>
+ The diff hook is executed by the same user and group who ran the
+ build. However, the diff hook does not have write access to the
+ store path just built.
+ </para>
+
+ <para>The diff hook program receives three parameters:</para>
+
+ <orderedlist>
+ <listitem>
+ <para>
+ A path to the previous build's results
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ A path to the current build's results
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The path to the build's derivation
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ The path to the build's scratch directory. This directory
+ will exist only if the build was run with
+ <option>--keep-failed</option>.
+ </para>
+ </listitem>
+ </orderedlist>
+
+ <para>
+ The stderr and stdout output from the diff hook will not be
+ displayed to the user. Instead, it will print to the nix-daemon's
+ log.
+ </para>
+
+ <para>When using the Nix daemon, <literal>diff-hook</literal> must
+ be set in the <filename>nix.conf</filename> configuration file, and
+ cannot be passed at the command line.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry xml:id="conf-enforce-determinism">
+ <term><literal>enforce-determinism</literal></term>
+
+ <listitem><para>See <xref linkend="conf-repeat" />.</para></listitem>
+ </varlistentry>
+
<varlistentry xml:id="conf-extra-sandbox-paths">
<term><literal>extra-sandbox-paths</literal></term>
@@ -595,9 +662,9 @@ password <replaceable>my-password</replaceable>
they are deterministic. The default value is 0. If the value is
non-zero, every build is repeated the specified number of
times. If the contents of any of the runs differs from the
- previous ones, the build is rejected and the resulting store paths
- are not registered as “valid” in Nix’s database.</para></listitem>
-
+ previous ones and <xref linkend="conf-enforce-determinism" /> is
+ true, the build is rejected and the resulting store paths are not
+ registered as “valid” in Nix’s database.</para></listitem>
</varlistentry>
<varlistentry xml:id="conf-require-sigs"><term><literal>require-sigs</literal></term>
@@ -628,6 +695,19 @@ password <replaceable>my-password</replaceable>
</varlistentry>
+ <varlistentry xml:id="conf-run-diff-hook"><term><literal>run-diff-hook</literal></term>
+ <listitem>
+ <para>
+ If true, enable the execution of <xref linkend="conf-diff-hook" />.
+ </para>
+
+ <para>
+ When using the Nix daemon, <literal>run-diff-hook</literal> must
+ be set in the <filename>nix.conf</filename> configuration file,
+ and cannot be passed at the command line.
+ </para>
+ </listitem>
+ </varlistentry>
<varlistentry xml:id="conf-sandbox"><term><literal>sandbox</literal></term>
@@ -657,7 +737,8 @@ password <replaceable>my-password</replaceable>
<varname>__noChroot</varname> attribute set to
<literal>true</literal> do not run in sandboxes.</para>
- <para>The default is <literal>false</literal>.</para>
+ <para>The default is <literal>true</literal> on Linux and
+ <literal>false</literal> on all other platforms.</para>
</listitem>
diff --git a/doc/manual/command-ref/env-common.xml b/doc/manual/command-ref/env-common.xml
index 361d3e2b0..6a3aaae71 100644
--- a/doc/manual/command-ref/env-common.xml
+++ b/doc/manual/command-ref/env-common.xml
@@ -14,7 +14,8 @@
<varlistentry><term><envar>IN_NIX_SHELL</envar></term>
<listitem><para>Indicator that tells if the current environment was set up by
- <command>nix-shell</command>.</para></listitem>
+ <command>nix-shell</command>. Since Nix 2.0 the values are
+ <literal>"pure"</literal> and <literal>"impure"</literal></para></listitem>
</varlistentry>
@@ -52,10 +53,15 @@ nixpkgs=/home/eelco/Dev/nixpkgs-branch:/etc/nixos</screen>
<envar>NIX_PATH</envar> to
<screen>
-nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz</screen>
+nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-15.09.tar.gz</screen>
tells Nix to download the latest revision in the Nixpkgs/NixOS
- 14.12 channel.</para>
+ 15.09 channel.</para>
+
+ <para>A following shorthand can be used to refer to the official channels:
+
+ <screen>nixpkgs=channel:nixos-15.09</screen>
+ </para>
<para>The search path can be extended using the <option
linkend="opt-I">-I</option> option, which takes precedence over
diff --git a/doc/manual/command-ref/nix-channel.xml b/doc/manual/command-ref/nix-channel.xml
index ff4021a76..5a2866e6b 100644
--- a/doc/manual/command-ref/nix-channel.xml
+++ b/doc/manual/command-ref/nix-channel.xml
@@ -31,12 +31,11 @@
<refsection><title>Description</title>
-<para>A Nix channel is a mechanism that allows you to automatically stay
-up-to-date with a set of pre-built Nix expressions. A Nix channel is
-just a URL that points to a place containing both a set of Nix
-expressions and a pointer to a binary cache. <phrase
-condition="manual">See also <xref linkend="sec-channels"
-/>.</phrase></para>
+<para>A Nix channel is a mechanism that allows you to automatically
+stay up-to-date with a set of pre-built Nix expressions. A Nix
+channel is just a URL that points to a place containing a set of Nix
+expressions. <phrase condition="manual">See also <xref
+linkend="sec-channels" />.</phrase></para>
<para>This command has the following operations:
@@ -172,18 +171,6 @@ following files:</para>
</varlistentry>
- <varlistentry><term><filename>binary-cache-url</filename></term>
-
- <listitem><para>A file containing the URL to a binary cache (such
- as <uri>https://cache.nixos.org</uri>). Nix will automatically
- check this cache for pre-built binaries, if the user has
- sufficient rights to add binary caches. For instance, in a
- multi-user Nix setup, the binary caches provided by the channels
- of the root user are used automatically, but caches corresponding
- to the channels of non-root users are ignored.</para></listitem>
-
- </varlistentry>
-
</variablelist>
</refsection>
diff --git a/doc/manual/command-ref/nix-copy-closure.xml b/doc/manual/command-ref/nix-copy-closure.xml
index 800e1db6a..e6dcf180a 100644
--- a/doc/manual/command-ref/nix-copy-closure.xml
+++ b/doc/manual/command-ref/nix-copy-closure.xml
@@ -95,15 +95,6 @@ those paths. If this bothers you, use
</varlistentry>
- <!--
- <varlistentry><term><option>- -show-progress</option></term>
-
- <listitem><para>Show the progress of each path's transfer as it's made.
- This requires the <command>pv</command> utility to be in <envar>PATH</envar>.</para></listitem>
-
- </varlistentry>
- -->
-
<varlistentry><term><option>--include-outputs</option></term>
<listitem><para>Also copy the outputs of store derivations
diff --git a/doc/manual/command-ref/nix-instantiate.xml b/doc/manual/command-ref/nix-instantiate.xml
index 39c1282fc..53f06aed1 100644
--- a/doc/manual/command-ref/nix-instantiate.xml
+++ b/doc/manual/command-ref/nix-instantiate.xml
@@ -154,7 +154,9 @@ input.</para>
<listitem><para>When used with <option>--eval</option>, 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).</para>
+ instantiation of every evaluated derivation). If this option is
+ not enabled, there may be uninstantiated store paths in the final
+ output.</para>
</listitem>
diff --git a/doc/manual/command-ref/nix-shell.xml b/doc/manual/command-ref/nix-shell.xml
index cb443c888..bb4a4e420 100644
--- a/doc/manual/command-ref/nix-shell.xml
+++ b/doc/manual/command-ref/nix-shell.xml
@@ -337,7 +337,7 @@ following Haskell script uses a specific branch of Nixpkgs/NixOS (the
<programlisting><![CDATA[
#! /usr/bin/env nix-shell
-#! nix-shell -i runghc -p haskellPackages.ghc haskellPackages.HTTP haskellPackages.tagsoup
+#! nix-shell -i runghc -p "haskellPackages.ghcWithPackages (ps: [ps.HTTP ps.tagsoup])"
#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-18.03.tar.gz
import Network.HTTP
diff --git a/doc/manual/command-ref/nix-store.xml b/doc/manual/command-ref/nix-store.xml
index 41a04f265..d73cb92ee 100644
--- a/doc/manual/command-ref/nix-store.xml
+++ b/doc/manual/command-ref/nix-store.xml
@@ -1282,6 +1282,7 @@ ktorrent-2.2.1/NEWS
<cmdsynopsis>
<command>nix-store</command>
<arg choice='plain'><option>--dump-db</option></arg>
+ <arg rep='repeat'><replaceable>paths</replaceable></arg>
</cmdsynopsis>
</refsection>
@@ -1292,6 +1293,13 @@ Nix database to standard output. It can be loaded into an empty Nix
store using <option>--load-db</option>. This is useful for making
backups and when migrating to different database schemas.</para>
+<para>By default, <option>--dump-db</option> will dump the entire Nix
+database. When one or more store paths is passed, only the subset of
+the Nix database for those store paths is dumped. As with
+<option>--export</option>, the user is responsible for passing all the
+store paths for a closure. See <option>--export</option> for an
+example.</para>
+
</refsection>
</refsection>
diff --git a/doc/manual/command-ref/opt-common.xml b/doc/manual/command-ref/opt-common.xml
index 4c572e129..b8a2f260e 100644
--- a/doc/manual/command-ref/opt-common.xml
+++ b/doc/manual/command-ref/opt-common.xml
@@ -107,14 +107,22 @@
<varlistentry xml:id="opt-max-jobs"><term><option>--max-jobs</option> / <option>-j</option>
<replaceable>number</replaceable></term>
- <listitem><para>Sets the maximum number of build jobs that Nix will
+ <listitem>
+
+ <para>Sets the maximum number of build jobs that Nix will
perform in parallel to the specified number. Specify
<literal>auto</literal> to use the number of CPUs in the system.
The default is specified by the <link
linkend='conf-max-jobs'><literal>max-jobs</literal></link>
configuration setting, which itself defaults to
<literal>1</literal>. A higher value is useful on SMP systems or to
- exploit I/O latency.</para></listitem>
+ exploit I/O latency.</para>
+
+ <para> Setting it to <literal>0</literal> disallows building on the local
+ machine, which is useful when you want builds to happen only on remote
+ builders.</para>
+
+ </listitem>
</varlistentry>
diff --git a/doc/manual/expressions/builtins.xml b/doc/manual/expressions/builtins.xml
index dcd7aaf24..69123fff0 100644
--- a/doc/manual/expressions/builtins.xml
+++ b/doc/manual/expressions/builtins.xml
@@ -23,6 +23,7 @@ available as <function>builtins.derivation</function>.</para>
<varlistentry xml:id='builtin-abort'>
<term><function>abort</function> <replaceable>s</replaceable></term>
+ <term><function>builtins.abort</function> <replaceable>s</replaceable></term>
<listitem><para>Abort Nix expression evaluation, print error
message <replaceable>s</replaceable>.</para></listitem>
@@ -251,6 +252,8 @@ if builtins ? getEnv then builtins.getEnv "PATH" else ""</programlisting>
<varlistentry xml:id='builtin-derivation'>
<term><function>derivation</function>
<replaceable>attrs</replaceable></term>
+ <term><function>builtins.derivation</function>
+ <replaceable>attrs</replaceable></term>
<listitem><para><function>derivation</function> is described in
<xref linkend='ssec-derivation' />.</para></listitem>
@@ -260,6 +263,7 @@ if builtins ? getEnv then builtins.getEnv "PATH" else ""</programlisting>
<varlistentry xml:id='builtin-dirOf'>
<term><function>dirOf</function> <replaceable>s</replaceable></term>
+ <term><function>builtins.dirOf</function> <replaceable>s</replaceable></term>
<listitem><para>Return the directory part of the string
<replaceable>s</replaceable>, that is, everything before the final
@@ -318,6 +322,8 @@ if builtins ? getEnv then builtins.getEnv "PATH" else ""</programlisting>
<varlistentry xml:id='builtin-fetchTarball'>
<term><function>fetchTarball</function>
<replaceable>url</replaceable></term>
+ <term><function>builtins.fetchTarball</function>
+ <replaceable>url</replaceable></term>
<listitem><para>Download the specified URL, unpack it and return
the path of the unpacked tree. The file must be a tape archive
@@ -708,8 +714,21 @@ builtins.genList (x: x * x) 5
<listitem><para>Return a base-16 representation of the
cryptographic hash of string <replaceable>s</replaceable>. The
hash algorithm specified by <replaceable>type</replaceable> must
- be one of <literal>"md5"</literal>, <literal>"sha1"</literal> or
- <literal>"sha256"</literal>.</para></listitem>
+ be one of <literal>"md5"</literal>, <literal>"sha1"</literal>,
+ <literal>"sha256"</literal> or <literal>"sha512"</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id='builtin-hashFile'>
+ <term><function>builtins.hashFile</function>
+ <replaceable>type</replaceable> <replaceable>p</replaceable></term>
+
+ <listitem><para>Return a base-16 representation of the
+ cryptographic hash of the file at path <replaceable>p</replaceable>. The
+ hash algorithm specified by <replaceable>type</replaceable> must
+ be one of <literal>"md5"</literal>, <literal>"sha1"</literal>,
+ <literal>"sha256"</literal> or <literal>"sha512"</literal>.</para></listitem>
</varlistentry>
@@ -729,6 +748,8 @@ builtins.genList (x: x * x) 5
<varlistentry xml:id='builtin-import'>
<term><function>import</function>
<replaceable>path</replaceable></term>
+ <term><function>builtins.import</function>
+ <replaceable>path</replaceable></term>
<listitem><para>Load, parse and return the Nix expression in the
file <replaceable>path</replaceable>. If <replaceable>path
@@ -868,10 +889,20 @@ x: x + 456</programlisting>
</varlistentry>
+ <varlistentry><term><function>builtins.isPath</function>
+ <replaceable>e</replaceable></term>
+
+ <listitem><para>Return <literal>true</literal> if
+ <replaceable>e</replaceable> evaluates to a path, and
+ <literal>false</literal> otherwise.</para></listitem>
+
+ </varlistentry>
<varlistentry xml:id='builtin-isNull'>
<term><function>isNull</function>
<replaceable>e</replaceable></term>
+ <term><function>builtins.isNull</function>
+ <replaceable>e</replaceable></term>
<listitem><para>Return <literal>true</literal> if
<replaceable>e</replaceable> evaluates to <literal>null</literal>,
@@ -940,6 +971,8 @@ builtins.listToAttrs
<varlistentry xml:id='builtin-map'>
<term><function>map</function>
<replaceable>f</replaceable> <replaceable>list</replaceable></term>
+ <term><function>builtins.map</function>
+ <replaceable>f</replaceable> <replaceable>list</replaceable></term>
<listitem><para>Apply the function <replaceable>f</replaceable> to
each element in the list <replaceable>list</replaceable>. For
@@ -1134,6 +1167,8 @@ Evaluates to <literal>[ "foo" ]</literal>.
<varlistentry xml:id='builtin-removeAttrs'>
<term><function>removeAttrs</function>
<replaceable>set</replaceable> <replaceable>list</replaceable></term>
+ <term><function>builtins.removeAttrs</function>
+ <replaceable>set</replaceable> <replaceable>list</replaceable></term>
<listitem><para>Remove the attributes listed in
<replaceable>list</replaceable> from
@@ -1302,6 +1337,8 @@ builtins.substring 0 3 "nixos"
<varlistentry xml:id='builtin-throw'>
<term><function>throw</function>
<replaceable>s</replaceable></term>
+ <term><function>builtins.throw</function>
+ <replaceable>s</replaceable></term>
<listitem><para>Throw an error message
<replaceable>s</replaceable>. This usually aborts Nix expression
@@ -1420,6 +1457,7 @@ in foo</programlisting>
<varlistentry xml:id='builtin-toString'>
<term><function>toString</function> <replaceable>e</replaceable></term>
+ <term><function>builtins.toString</function> <replaceable>e</replaceable></term>
<listitem><para>Convert the expression
<replaceable>e</replaceable> to a string.
diff --git a/doc/manual/expressions/language-constructs.xml b/doc/manual/expressions/language-constructs.xml
index f961ed921..0d0cbbe15 100644
--- a/doc/manual/expressions/language-constructs.xml
+++ b/doc/manual/expressions/language-constructs.xml
@@ -43,7 +43,7 @@ encountered</quote>).</para></footnote>.</para>
<simplesect xml:id="sect-let-expressions"><title>Let-expressions</title>
-<para>A let-expression allows you define local variables for an
+<para>A let-expression allows you to define local variables for an
expression. For instance,
<programlisting>
@@ -217,7 +217,25 @@ but can also be written as:
ellipsis(<literal>...</literal>) as you can access attribute names as
<literal>a</literal>, using <literal>args.a</literal>, which was given as an
additional attribute to the function.
- </para></listitem>
+ </para>
+
+ <warning>
+ <para>
+ The <literal>args@</literal> expression is bound to the argument passed to the function which
+ means that attributes with defaults that aren't explicitly specified in the function call
+ won't cause an evaluation error, but won't exist in <literal>args</literal>.
+ </para>
+ <para>
+ For instance
+<programlisting>
+let
+ function = args@{ a ? 23, ... }: args;
+in
+ function {}
+</programlisting>
+ will evaluate to an empty attribute set.
+ </para>
+ </warning></listitem>
</itemizedlist>
diff --git a/doc/manual/packages/basic-package-mgmt.xml b/doc/manual/packages/basic-package-mgmt.xml
index e8d1419da..0f21297f3 100644
--- a/doc/manual/packages/basic-package-mgmt.xml
+++ b/doc/manual/packages/basic-package-mgmt.xml
@@ -24,11 +24,11 @@ symlinks to the files of the active applications. </para>
<para>Components are installed from a set of <emphasis>Nix
expressions</emphasis> that tell Nix how to build those packages,
including, if necessary, their dependencies. There is a collection of
-Nix expressions called the Nix Package collection that contains
+Nix expressions called the Nixpkgs package collection that contains
packages ranging from basic development stuff such as GCC and Glibc,
to end-user applications like Mozilla Firefox. (Nix is however not
-tied to the Nix Package collection; you could write your own Nix
-expressions based on it, or completely new ones.)</para>
+tied to the Nixpkgs package collection; you could write your own Nix
+expressions based on Nixpkgs, or completely new ones.)</para>
<para>You can manually download the latest version of Nixpkgs from
<link xlink:href='http://nixos.org/nixpkgs/download.html'/>. However,
diff --git a/doc/manual/packages/s3-substituter.xml b/doc/manual/packages/s3-substituter.xml
index 2ec9687a0..1722090ef 100644
--- a/doc/manual/packages/s3-substituter.xml
+++ b/doc/manual/packages/s3-substituter.xml
@@ -89,7 +89,7 @@ the S3 URL:</para>
"Version": "2012-10-17",
"Statement": [
{
- "Sid": "AlowDirectReads",
+ "Sid": "AllowDirectReads",
"Action": [
"s3:GetObject",
"s3:GetBucketLocation"
@@ -113,7 +113,7 @@ the S3 URL:</para>
exactly <uri>s3://example-nix-cache</uri>.</para>
<para>Nix will use the <link
- xlink:href="https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default.">default
+ xlink:href="https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/credentials.html">default
credential provider chain</link> for authenticating requests to
Amazon S3.</para>
@@ -138,7 +138,7 @@ the S3 URL:</para>
be <uri>s3://example-nix-cache</uri>.</para>
<para>Nix will use the <link
- xlink:href="https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html#credentials-default.">default
+ xlink:href="https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/credentials.html">default
credential provider chain</link> for authenticating requests to
Amazon S3.</para>
diff --git a/doc/manual/release-notes/rl-2.2.xml b/doc/manual/release-notes/rl-2.2.xml
index abe9b49ad..d29eb87e8 100644
--- a/doc/manual/release-notes/rl-2.2.xml
+++ b/doc/manual/release-notes/rl-2.2.xml
@@ -4,25 +4,139 @@
version="5.0"
xml:id="ssec-relnotes-2.2">
-<title>Release 2.2 (201?-??-??)</title>
+<title>Release 2.2 (2019-01-11)</title>
-<para>This release has the following changes:</para>
+<para>This is primarily a bug fix release. It also has the following
+changes:</para>
<itemizedlist>
<listitem>
+ <para>In derivations that use structured attributes (i.e. that
+ specify set the <varname>__structuredAttrs</varname> attribute to
+ <literal>true</literal> to cause all attributes to be passed to
+ the builder in JSON format), you can now specify closure checks
+ per output, e.g.:
+
+<programlisting>
+outputChecks."out" = {
+ # The closure of 'out' must not be larger than 256 MiB.
+ maxClosureSize = 256 * 1024 * 1024;
+
+ # It must not refer to C compiler or to the 'dev' output.
+ disallowedRequisites = [ stdenv.cc "dev" ];
+};
+
+outputChecks."dev" = {
+ # The 'dev' output must not be larger than 128 KiB.
+ maxSize = 128 * 1024;
+};
+</programlisting>
+
+ </para>
+ </listitem>
+
+
+ <listitem>
<para>The derivation attribute
<varname>requiredSystemFeatures</varname> is now enforced for
local builds, and not just to route builds to remote builders.
The supported features of a machine can be specified through the
- configuration setting <varname>system-features</varname>.
- </para>
+ configuration setting <varname>system-features</varname>.</para>
+
+ <para>By default, <varname>system-features</varname> includes
+ <literal>kvm</literal> if <filename>/dev/kvm</filename>
+ exists. For compatibility, it also includes the pseudo-features
+ <literal>nixos-test</literal>, <literal>benchmark</literal> and
+ <literal>big-parallel</literal> which are used by Nixpkgs to route
+ builds to particular Hydra build machines.</para>
+
</listitem>
<listitem>
<para>Sandbox builds are now enabled by default on Linux.</para>
</listitem>
+ <listitem>
+ <para>The new command <command>nix doctor</command> shows
+ potential issues with your Nix installation.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <literal>fetchGit</literal> builtin function now uses a
+ caching scheme that puts different remote repositories in distinct
+ local repositories, rather than a single shared repository. This
+ may require more disk space but is faster.</para>
+ </listitem>
+
+ <listitem>
+ <para>The <literal>dirOf</literal> builtin function now works on
+ relative paths.</para>
+ </listitem>
+
+ <listitem>
+ <para>Nix now supports <link
+ xlink:href="https://www.w3.org/TR/SRI/">SRI hashes</link>,
+ allowing the hash algorithm and hash to be specified in a single
+ string. For example, you can write:
+
+<programlisting>
+import &lt;nix/fetchurl.nix> {
+ url = https://nixos.org/releases/nix/nix-2.1.3/nix-2.1.3.tar.xz;
+ hash = "sha256-XSLa0FjVyADWWhFfkZ2iKTjFDda6mMXjoYMXLRSYQKQ=";
+};
+</programlisting>
+
+ instead of
+
+<programlisting>
+import &lt;nix/fetchurl.nix> {
+ url = https://nixos.org/releases/nix/nix-2.1.3/nix-2.1.3.tar.xz;
+ sha256 = "5d22dad058d5c800d65a115f919da22938c50dd6ba98c5e3a183172d149840a4";
+};
+</programlisting>
+
+ </para>
+
+ <para>In fixed-output derivations, the
+ <varname>outputHashAlgo</varname> attribute is no longer mandatory
+ if <varname>outputHash</varname> specifies the hash.</para>
+
+ <para><command>nix hash-file</command> and <command>nix
+ hash-path</command> now print hashes in SRI format by
+ default. They also use SHA-256 by default instead of SHA-512
+ because that's what we use most of the time in Nixpkgs.</para>
+ </listitem>
+
+ <listitem>
+ <para>Integers are now 64 bits on all platforms.</para>
+ </listitem>
+
+ <listitem>
+ <para>The evaluator now prints profiling statistics (enabled via
+ the <envar>NIX_SHOW_STATS</envar> and
+ <envar>NIX_COUNT_CALLS</envar> environment variables) in JSON
+ format.</para>
+ </listitem>
+
+ <listitem>
+ <para>The option <option>--xml</option> in <command>nix-store
+ --query</command> has been removed. Instead, there now is an
+ option <option>--graphml</option> to output the dependency graph
+ in GraphML format.</para>
+ </listitem>
+
+ <listitem>
+ <para>All <filename>nix-*</filename> commands are now symlinks to
+ <filename>nix</filename>. This saves a bit of disk space.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>nix repl</command> now uses
+ <literal>libeditline</literal> or
+ <literal>libreadline</literal>.</para>
+ </listitem>
+
</itemizedlist>
</section>