aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/command-ref
diff options
context:
space:
mode:
Diffstat (limited to 'doc/manual/command-ref')
-rw-r--r--doc/manual/command-ref/command-ref.xml20
-rw-r--r--doc/manual/command-ref/conf-file.xml538
-rw-r--r--doc/manual/command-ref/env-common.xml340
-rw-r--r--doc/manual/command-ref/files.xml14
-rw-r--r--doc/manual/command-ref/main-commands.xml17
-rw-r--r--doc/manual/command-ref/nix-build.xml190
-rw-r--r--doc/manual/command-ref/nix-channel.xml113
-rw-r--r--doc/manual/command-ref/nix-collect-garbage.xml68
-rw-r--r--doc/manual/command-ref/nix-copy-closure.xml187
-rw-r--r--doc/manual/command-ref/nix-daemon.xml35
-rw-r--r--doc/manual/command-ref/nix-env.xml1301
-rw-r--r--doc/manual/command-ref/nix-hash.xml165
-rw-r--r--doc/manual/command-ref/nix-install-package.xml199
-rw-r--r--doc/manual/command-ref/nix-instantiate.xml263
-rw-r--r--doc/manual/command-ref/nix-prefetch-url.xml94
-rw-r--r--doc/manual/command-ref/nix-pull.xml51
-rw-r--r--doc/manual/command-ref/nix-push.xml399
-rw-r--r--doc/manual/command-ref/nix-shell.xml201
-rw-r--r--doc/manual/command-ref/nix-store.xml1352
-rw-r--r--doc/manual/command-ref/opt-common-syn.xml47
-rw-r--r--doc/manual/command-ref/opt-common.xml389
-rw-r--r--doc/manual/command-ref/opt-inst-syn.xml22
-rw-r--r--doc/manual/command-ref/utilities.xml23
23 files changed, 6028 insertions, 0 deletions
diff --git a/doc/manual/command-ref/command-ref.xml b/doc/manual/command-ref/command-ref.xml
new file mode 100644
index 000000000..cfad9b7d7
--- /dev/null
+++ b/doc/manual/command-ref/command-ref.xml
@@ -0,0 +1,20 @@
+<part xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id='part-command-ref'>
+
+<title>Command Reference</title>
+
+<partintro>
+<para>This section lists commands and options that you can use when you
+work with Nix.</para>
+</partintro>
+
+<xi:include href="opt-common.xml" />
+<xi:include href="env-common.xml" />
+<xi:include href="main-commands.xml" />
+<xi:include href="utilities.xml" />
+<xi:include href="files.xml" />
+
+</part>
diff --git a/doc/manual/command-ref/conf-file.xml b/doc/manual/command-ref/conf-file.xml
new file mode 100644
index 000000000..e420d1ed6
--- /dev/null
+++ b/doc/manual/command-ref/conf-file.xml
@@ -0,0 +1,538 @@
+<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">
+
+<refmeta>
+ <refentrytitle>nix.conf</refentrytitle>
+ <manvolnum>5</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix.conf</refname>
+ <refpurpose>Nix configuration file</refpurpose>
+</refnamediv>
+
+<refsection><title>Description</title>
+
+<para>A number of persistent settings of Nix are stored in the file
+<filename><replaceable>sysconfdir</replaceable>/nix/nix.conf</filename>.
+This file is a list of <literal><replaceable>name</replaceable> =
+<replaceable>value</replaceable></literal> pairs, one per line.
+Comments start with a <literal>#</literal> character. Here is an example
+configuration file:</para>
+
+<programlisting>
+gc-keep-outputs = true # Nice for developers
+gc-keep-derivations = true # Idem
+env-keep-derivations = false
+</programlisting>
+
+<para>You can override settings using the <option>--option</option>
+flag, e.g. <literal>--option gc-keep-outputs false</literal>.</para>
+
+<para>The following settings are currently available:
+
+<variablelist>
+
+
+ <varlistentry xml:id="conf-gc-keep-outputs"><term><literal>gc-keep-outputs</literal></term>
+
+ <listitem><para>If <literal>true</literal>, the garbage collector
+ will keep the outputs of non-garbage derivations. If
+ <literal>false</literal> (default), outputs will be deleted unless
+ they are GC roots themselves (or reachable from other roots).</para>
+
+ <para>In general, outputs must be registered as roots separately.
+ However, even if the output of a derivation is registered as a
+ root, the collector will still delete store paths that are used
+ only at build time (e.g., the C compiler, or source tarballs
+ downloaded from the network). To prevent it from doing so, set
+ this option to <literal>true</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-gc-keep-derivations"><term><literal>gc-keep-derivations</literal></term>
+
+ <listitem><para>If <literal>true</literal> (default), the garbage
+ collector will keep the derivations from which non-garbage store
+ paths were built. If <literal>false</literal>, they will be
+ deleted unless explicitly registered as a root (or reachable from
+ other roots).</para>
+
+ <para>Keeping derivation around is useful for querying and
+ traceability (e.g., it allows you to ask with what dependencies or
+ options a store path was built), so by default this option is on.
+ Turn it off to safe a bit of disk space (or a lot if
+ <literal>gc-keep-outputs</literal> is also turned on).</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>env-keep-derivations</literal></term>
+
+ <listitem><para>If <literal>false</literal> (default), derivations
+ are not stored in Nix user environments. That is, the derivation
+ any build-time-only dependencies may be garbage-collected.</para>
+
+ <para>If <literal>true</literal>, when you add a Nix derivation to
+ a user environment, the path of the derivation is stored in the
+ user environment. Thus, the derivation will not be
+ garbage-collected until the user environment generation is deleted
+ (<command>nix-env --delete-generations</command>). To prevent
+ build-time-only dependencies from being collected, you should also
+ turn on <literal>gc-keep-outputs</literal>.</para>
+
+ <para>The difference between this option and
+ <literal>gc-keep-derivations</literal> is that this one is
+ “sticky”: it applies to any user environment created while this
+ option was enabled, while <literal>gc-keep-derivations</literal>
+ only applies at the moment the garbage collector is
+ run.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-max-jobs"><term><literal>build-max-jobs</literal></term>
+
+ <listitem><para>This option defines the maximum number of jobs
+ that Nix will try to build in parallel. The default is
+ <literal>1</literal>. You should generally set it to the number
+ of CPUs in your system (e.g., <literal>2</literal> on an Athlon 64
+ X2). It can be overridden using the <option
+ linkend='opt-max-jobs'>--max-jobs</option> (<option>-j</option>)
+ command line switch.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-cores"><term><literal>build-cores</literal></term>
+
+ <listitem><para>Sets the value of the
+ <envar>NIX_BUILD_CORES</envar> environment variable in the
+ invocation of builders. Builders can use this variable at their
+ discretion to control the maximum amount of parallelism. For
+ instance, in Nixpkgs, if the derivation attribute
+ <varname>enableParallelBuilding</varname> is set to
+ <literal>true</literal>, the builder passes the
+ <option>-j<replaceable>N</replaceable></option> flag to GNU Make.
+ It can be overridden using the <option
+ linkend='opt-cores'>--cores</option> command line switch and
+ defaults to <literal>1</literal>. The value <literal>0</literal>
+ means that the builder should use all available CPU cores in the
+ system.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-max-silent-time"><term><literal>build-max-silent-time</literal></term>
+
+ <listitem>
+
+ <para>This option defines the maximum number of seconds that a
+ builder can go without producing any data on standard output or
+ standard error. This is useful (for instance in an automated
+ build system) to catch builds that are stuck in an infinite
+ loop, or to catch remote builds that are hanging due to network
+ problems. It can be overridden using the <option
+ linkend="opt-max-silent-time">--max-silent-time</option> command
+ line switch.</para>
+
+ <para>The value <literal>0</literal> means that there is no
+ timeout. This is also the default.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-timeout"><term><literal>build-timeout</literal></term>
+
+ <listitem>
+
+ <para>This option defines the maximum number of seconds that a
+ builder can run. This is useful (for instance in an automated
+ build system) to catch builds that are stuck in an infinite loop
+ but keep writing to their standard output or standard error. It
+ can be overridden using the <option
+ linkend="opt-timeout">--timeout</option> command line
+ switch.</para>
+
+ <para>The value <literal>0</literal> means that there is no
+ timeout. This is also the default.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-max-log-size"><term><literal>build-max-log-size</literal></term>
+
+ <listitem>
+
+ <para>This option defines the maximum number of bytes that a
+ builder can write to its stdout/stderr. If the builder exceeds
+ this limit, it’s killed. A value of <literal>0</literal> (the
+ default) means that there is no limit.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-users-group"><term><literal>build-users-group</literal></term>
+
+ <listitem><para>This options specifies the Unix group containing
+ the Nix build user accounts. In multi-user Nix installations,
+ builds should not be performed by the Nix account since that would
+ allow users to arbitrarily modify the Nix store and database by
+ supplying specially crafted builders; and they cannot be performed
+ by the calling user since that would allow him/her to influence
+ the build result.</para>
+
+ <para>Therefore, if this option is non-empty and specifies a valid
+ group, builds will be performed under the user accounts that are a
+ member of the group specified here (as listed in
+ <filename>/etc/group</filename>). Those user accounts should not
+ be used for any other purpose!</para>
+
+ <para>Nix will never run two builds under the same user account at
+ the same time. This is to prevent an obvious security hole: a
+ malicious user writing a Nix expression that modifies the build
+ result of a legitimate Nix expression being built by another user.
+ Therefore it is good to have as many Nix build user accounts as
+ you can spare. (Remember: uids are cheap.)</para>
+
+ <para>The build users should have permission to create files in
+ the Nix store, but not delete them. Therefore,
+ <filename>/nix/store</filename> should be owned by the Nix
+ account, its group should be the group specified here, and its
+ mode should be <literal>1775</literal>.</para>
+
+ <para>If the build users group is empty, builds will be performed
+ under the uid of the Nix process (that is, the uid of the caller
+ if <envar>NIX_REMOTE</envar> is empty, the uid under which the Nix
+ daemon runs if <envar>NIX_REMOTE</envar> is
+ <literal>daemon</literal>). Obviously, this should not be used in
+ multi-user settings with untrusted users.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-use-chroot</literal></term>
+
+ <listitem><para>If set to <literal>true</literal>, builds will be
+ performed in a <emphasis>chroot environment</emphasis>, i.e., the
+ build will be isolated from the normal file system hierarchy and
+ will only see its dependencies in the Nix store, the temporary
+ build directory, private versions of <filename>/proc</filename>,
+ <filename>/dev</filename>, <filename>/dev/shm</filename> and
+ <filename>/dev/pts</filename>, and the paths configured with the
+ <link linkend='conf-build-chroot-dirs'><literal>build-chroot-dirs</literal>
+ option</link>. This is useful to prevent undeclared dependencies
+ on files in directories such as
+ <filename>/usr/bin</filename>.</para>
+
+ <para>The use of a chroot requires that Nix is run as root (so you
+ should use the <link linkend='conf-build-users-group'>“build
+ users” feature</link> to perform the actual builds under different
+ users than root). Currently, chroot builds only work on Linux
+ because Nix uses “bind mounts” to make the Nix store and other
+ directories available inside the chroot.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-chroot-dirs"><term><literal>build-chroot-dirs</literal></term>
+
+ <listitem><para>A list of paths bind-mounted into Nix chroot
+ environments. Contrary to what the name suggests, the specified
+ paths do not have to be directories; you can bind-mount other
+ types of files as well. You can use the syntax
+ <literal><replaceable>target</replaceable>=<replaceable>source</replaceable></literal>
+ to mount a path in a different location in the chroot; for
+ instance, <literal>/bin=/nix-bin</literal> will mount the path
+ <literal>/nix-bin</literal> as <literal>/bin</literal> inside the
+ chroot.</para>
+
+ <para>Depending on how Nix was built, the default value for this option
+ may be empty or provide <filename>/bin/sh</filename> as a
+ bind-mount of <command>bash</command>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-build-extra-chroot-dirs"><term><literal>build-extra-chroot-dirs</literal></term>
+
+ <listitem><para>A list of additional paths appended to
+ <option>build-chroot-dirs</option>. Useful if you want to extend
+ its default value.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-use-substitutes</literal></term>
+
+ <listitem><para>If set to <literal>true</literal> (default), Nix
+ will use binary substitutes if available. This option can be
+ disabled to force building from source.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-fallback</literal></term>
+
+ <listitem><para>If set to <literal>true</literal>, Nix will fall
+ back to building from source if a binary substitute fails. This
+ is equivalent to the <option>--fallback</option> flag. The
+ default is <literal>false</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-cache-failures</literal></term>
+
+ <listitem><para>If set to <literal>true</literal>, Nix will
+ “cache” build failures, meaning that it will remember (in its
+ database) that a derivation previously failed. If you then try to
+ build the derivation again, Nix will immediately fail rather than
+ perform the build again. Failures in fixed-output derivations
+ (such as <function>fetchurl</function> calls) are never cached.
+ The “failed” status of a derivation can be cleared using
+ <command>nix-store --clear-failed-paths</command>. By default,
+ failure caching is disabled.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-keep-log</literal></term>
+
+ <listitem><para>If set to <literal>true</literal> (the default),
+ Nix will write the build log of a derivation (i.e. the standard
+ output and error of its builder) to the directory
+ <filename>/nix/var/log/nix/drvs</filename>. The build log can be
+ retrieved using the command <command>nix-store -l
+ <replaceable>path</replaceable></command>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>build-compress-log</literal></term>
+
+ <listitem><para>If set to <literal>true</literal> (the default),
+ build logs written to <filename>/nix/var/log/nix/drvs</filename>
+ will be compressed on the fly using bzip2. Otherwise, they will
+ not be compressed.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>use-binary-caches</literal></term>
+
+ <listitem><para>If set to <literal>true</literal> (the default),
+ Nix will check the binary caches specified by
+ <option>binary-caches</option> and related options to obtain
+ binary substitutes.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>binary-caches</literal></term>
+
+ <listitem><para>A list of URLs of binary caches, separated by
+ whitespace. The default is
+ <literal>http://cache.nixos.org</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>binary-caches-files</literal></term>
+
+ <listitem><para>A list of names of files that will be read to
+ obtain additional binary cache URLs. The default is
+ <literal>/nix/var/nix/profiles/per-user/<replaceable>username</replaceable>/channels/binary-caches/*</literal>.
+ Note that when you’re using the Nix daemon,
+ <replaceable>username</replaceable> is always equal to
+ <literal>root</literal>, so Nix will only use the binary caches
+ provided by the channels installed by root. Do not set this
+ option to read files created by untrusted users!</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>trusted-binary-caches</literal></term>
+
+ <listitem><para>A list of URLs of binary caches, separated by
+ whitespace. These are not used by default, but can be enabled by
+ users of the Nix daemon by specifying <literal>--option
+ binary-caches <replaceable>urls</replaceable></literal> on the
+ command line. Unprivileged users are only allowed to pass a
+ subset of the URLs listed in <literal>binary-caches</literal> and
+ <literal>trusted-binary-caches</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>extra-binary-caches</literal></term>
+
+ <listitem><para>Additional binary caches appended to those
+ specified in <option>binary-caches</option> and
+ <option>binary-caches-files</option>. When used by unprivileged
+ users, untrusted binary caches (i.e. those not listed in
+ <option>trusted-binary-caches</option>) are silently
+ ignored.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>binary-caches-parallel-connections</literal></term>
+
+ <listitem><para>The maximum number of parallel HTTP connections
+ used by the binary cache substituter to get NAR info files. This
+ number should be high to minimise latency. It defaults to
+ 150.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>force-manifest</literal></term>
+
+ <listitem><para>If this option is set to <literal>false</literal>
+ (default) and a Nix channel provides both a manifest and a binary
+ cache, only the binary cache will be used. If set to
+ <literal>true</literal>, the manifest will be fetched as well.
+ This is useful if you want to use binary patches (which are
+ currently not supported by binary caches).</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>system</literal></term>
+
+ <listitem><para>This option specifies the canonical Nix system
+ name of the current installation, such as
+ <literal>i686-linux</literal> or
+ <literal>powerpc-darwin</literal>. Nix can only build derivations
+ whose <literal>system</literal> attribute equals the value
+ specified here. In general, it never makes sense to modify this
+ value from its default, since you can use it to ‘lie’ about the
+ platform you are building on (e.g., perform a Mac OS build on a
+ Linux machine; the result would obviously be wrong). It only
+ makes sense if the Nix binaries can run on multiple platforms,
+ e.g., ‘universal binaries’ that run on <literal>powerpc-darwin</literal> and
+ <literal>i686-darwin</literal>.</para>
+
+ <para>It defaults to the canonical Nix system name detected by
+ <filename>configure</filename> at build time.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>fsync-metadata</literal></term>
+
+ <listitem><para>If set to <literal>true</literal>, changes to the
+ Nix store metadata (in <filename>/nix/var/nix/db</filename>) are
+ synchronously flushed to disk. This improves robustness in case
+ of system crashes, but reduces performance. The default is
+ <literal>true</literal>.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry><term><literal>auto-optimise-store</literal></term>
+
+ <listitem><para>If set to <literal>true</literal>, Nix
+ automatically detects files in the store that have identical
+ contents, and replaces them with hard links to a single copy.
+ This saves disk space. If set to <literal>false</literal> (the
+ default), you can still run <command>nix-store
+ --optimise</command> to get rid of duplicate
+ files.</para></listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-connect-timeout"><term><literal>connect-timeout</literal></term>
+
+ <listitem>
+
+ <para>The timeout (in seconds) for establishing connections in
+ the binary cache substituter. It corresponds to
+ <command>curl</command>’s <option>--connect-timeout</option>
+ option.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-log-servers"><term><literal>log-servers</literal></term>
+
+ <listitem>
+
+ <para>A list of URL prefixes (such as
+ <literal>http://hydra.nixos.org/log</literal>) from which
+ <command>nix-store -l</command> will try to fetch build logs if
+ they’re not available locally.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-trusted-users"><term><literal>trusted-users</literal></term>
+
+ <listitem>
+
+ <para>A list of names of users (separated by whitespace) that
+ have additional rights when connecting to the Nix daemon, such
+ as the ability to specify additional binary caches, or to import
+ unsigned NARs. You can also specify groups by prefixing them
+ with <literal>@</literal>; for instance,
+ <literal>@wheel</literal> means all users in the
+ <literal>wheel</literal> group. The default is
+ <literal>root</literal>.</para>
+
+ <warning><para>The users listed here have the ability to
+ compromise the security of a multi-user Nix store. For instance,
+ they could install Trojan horses subsequently executed by other
+ users. So you should consider carefully whether to add users to
+ this list.</para></warning>
+
+ </listitem>
+
+ </varlistentry>
+
+
+ <varlistentry xml:id="conf-allowed-users"><term><literal>allowed-users</literal></term>
+
+ <listitem>
+
+ <para>A list of names of users (separated by whitespace) that
+ are allowed to connect to the Nix daemon. As with the
+ <option>trusted-users</option> option, you can specify groups by
+ prefixing them with <literal>@</literal>. Also, you can allow
+ all users by specifying <literal>*</literal>. The default is
+ <literal>*</literal>.</para>
+
+ <para>Note that trusted users are always allowed to connect.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+
+</variablelist>
+
+</para>
+
+</refsection>
+
+</refentry>
diff --git a/doc/manual/command-ref/env-common.xml b/doc/manual/command-ref/env-common.xml
new file mode 100644
index 000000000..c501d1c01
--- /dev/null
+++ b/doc/manual/command-ref/env-common.xml
@@ -0,0 +1,340 @@
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-common-env">
+
+<title>Common Environment Variables</title>
+
+
+<para>Most Nix commands interpret the following environment variables:</para>
+
+<variablelist xml:id="env-common">
+
+
+<varlistentry><term><envar>NIX_PATH</envar></term>
+
+ <listitem>
+
+ <para>A colon-separated list of directories used to look up Nix
+ expressions enclosed in angle brackets (i.e.,
+ <literal>&lt;<replaceable>path</replaceable>></literal>). For
+ instance, the value
+
+ <screen>
+/home/eelco/Dev:/etc/nixos</screen>
+
+ will cause Nix to look for paths relative to
+ <filename>/home/eelco/Dev</filename> and
+ <filename>/etc/nixos</filename>, in that order. It is also
+ possible to match paths against a prefix. For example, the value
+
+ <screen>
+nixpkgs=/home/eelco/Dev/nixpkgs-branch:/etc/nixos</screen>
+
+ will cause Nix to search for
+ <literal>&lt;nixpkgs/<replaceable>path</replaceable>></literal> in
+ <filename>/home/eelco/Dev/nixpkgs-branch/<replaceable>path</replaceable></filename>
+ and
+ <filename>/etc/nixos/nixpkgs/<replaceable>path</replaceable></filename>.
+ </para>
+
+ <para>The search path can be extended using the
+ <option>-I</option> option, which takes precedence over
+ <envar>NIX_PATH</envar>.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_IGNORE_SYMLINK_STORE</envar></term>
+
+ <listitem>
+
+ <para>Normally, the Nix store directory (typically
+ <filename>/nix/store</filename>) is not allowed to contain any
+ symlink components. This is to prevent “impure” builds. Builders
+ sometimes “canonicalise” paths by resolving all symlink components.
+ Thus, builds on different machines (with
+ <filename>/nix/store</filename> resolving to different locations)
+ could yield different results. This is generally not a problem,
+ except when builds are deployed to machines where
+ <filename>/nix/store</filename> resolves differently. If you are
+ sure that you’re not going to do that, you can set
+ <envar>NIX_IGNORE_SYMLINK_STORE</envar> to <envar>1</envar>.</para>
+
+ <para>Note that if you’re symlinking the Nix store so that you can
+ put it on another file system than the root file system, on Linux
+ you’re better off using <literal>bind</literal> mount points, e.g.,
+
+ <screen>
+$ mkdir /nix
+$ mount -o bind /mnt/otherdisk/nix /nix</screen>
+
+ Consult the <citerefentry><refentrytitle>mount</refentrytitle>
+ <manvolnum>8</manvolnum></citerefentry> manual page for details.</para>
+
+ </listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_STORE_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix store (default
+ <filename><replaceable>prefix</replaceable>/store</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_DATA_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix static data
+ directory (default
+ <filename><replaceable>prefix</replaceable>/share</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_LOG_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix log directory
+ (default <filename><replaceable>prefix</replaceable>/log/nix</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_STATE_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix state directory
+ (default <filename><replaceable>prefix</replaceable>/var/nix</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_DB_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix database (default
+ <filename><replaceable>$NIX_STATE_DIR</replaceable>/db</filename>, i.e.,
+ <filename><replaceable>prefix</replaceable>/var/nix/db</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_CONF_DIR</envar></term>
+
+ <listitem><para>Overrides the location of the Nix configuration
+ directory (default
+ <filename><replaceable>prefix</replaceable>/etc/nix</filename>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>TMPDIR</envar></term>
+
+ <listitem><para>Use the specified directory to store temporary
+ files. In particular, this includes temporary build directories;
+ these can take up substantial amounts of disk space. The default is
+ <filename>/tmp</filename>.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="envar-build-hook"><term><envar>NIX_BUILD_HOOK</envar></term>
+
+ <listitem>
+
+ <para>Specifies the location of the <emphasis>build hook</emphasis>,
+ which is a program (typically some script) that Nix will call
+ whenever it wants to build a derivation. This is used to implement
+ distributed builds<phrase condition="manual"> (see <xref
+ linkend="chap-distributed-builds" />)</phrase>.</para>
+
+ <!--
+ The protocol by
+ which the calling Nix process and the build hook communicate is as
+ follows.
+
+ <para>The build hook is called with the following command-line
+ arguments:
+
+ <orderedlist>
+
+ <listitem><para>A boolean value <literal>0</literal> or
+ <literal>1</literal> specifying whether Nix can locally execute
+ more builds, as per the <link
+ linkend="opt-max-jobs"><option>- -max-jobs</option> option</link>.
+ The purpose of this argument is to allow the hook to not have to
+ maintain bookkeeping for the local machine.</para></listitem>
+
+ <listitem><para>The Nix platform identifier for the local machine
+ (e.g., <literal>i686-linux</literal>).</para></listitem>
+
+ <listitem><para>The Nix platform identifier for the derivation,
+ i.e., its <link linkend="attr-system"><varname>system</varname>
+ attribute</link>.</para></listitem>
+
+ <listitem><para>The store path of the derivation.</para></listitem>
+
+ </orderedlist>
+
+ </para>
+
+ <para>On the basis of this information, and whatever persistent
+ state the build hook keeps about other machines and their current
+ load, it has to decide what to do with the build. It should print
+ out on standard error one of the following responses (terminated by
+ a newline, <literal>"\n"</literal>):
+
+ <variablelist>
+
+ <varlistentry><term><literal># decline</literal></term>
+
+ <listitem><para>The build hook is not willing or able to perform
+ the build; the calling Nix process should do the build itself,
+ if possible.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal># postpone</literal></term>
+
+ <listitem><para>The build hook cannot perform the build now, but
+ can do so in the future (e.g., because all available build slots
+ on remote machines are in use). The calling Nix process should
+ postpone this build until at least one currently running build
+ has terminated.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal># accept</literal></term>
+
+ <listitem><para>The build hook has accepted the
+ build.</para></listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ </para>
+
+ <para>After sending <literal># accept</literal>, the hook should
+ read one line from standard input, which will be the string
+ <literal>okay</literal>. It can then proceed with the build.
+ Before sending <literal>okay</literal>, Nix will store in the hook’s
+ current directory a number of text files that contain information
+ about the derivation:
+
+ <variablelist>
+
+ <varlistentry><term><filename>inputs</filename></term>
+
+ <listitem><para>The set of store paths that are inputs to the
+ build process (one per line). These have to be copied
+ <emphasis>to</emphasis> the remote machine (in addition to the
+ store derivation itself).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><filename>outputs</filename></term>
+
+ <listitem><para>The set of store paths that are outputs of the
+ derivation (one per line). These have to be copied
+ <emphasis>from</emphasis> the remote machine if the build
+ succeeds.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><filename>references</filename></term>
+
+ <listitem><para>The reference graph of the inputs, in the format
+ accepted by the command <command>nix-store
+ - -register-validity</command>. It is necessary to run this
+ command on the remote machine after copying the inputs to inform
+ Nix on the remote machine that the inputs are valid
+ paths.</para></listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ </para>
+
+ <para>The hook should copy the inputs to the remote machine,
+ register the validity of the inputs, perform the remote build, and
+ copy the outputs back to the local machine. An exit code other than
+ <literal>0</literal> indicates that the hook has failed. An exit
+ code equal to 100 means that the remote build failed (as opposed to,
+ e.g., a network error).</para>
+ -->
+
+ </listitem>
+
+
+</varlistentry>
+
+
+<varlistentry xml:id="envar-remote"><term><envar>NIX_REMOTE</envar></term>
+
+ <listitem><para>This variable should be set to
+ <literal>daemon</literal> if you want to use the Nix daemon to
+ execute Nix operations. This is necessary in <link
+ linkend="ssec-multi-user">multi-user Nix installations</link>.
+ Otherwise, it should be left unset.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="envar-other-stores"><term><envar>NIX_OTHER_STORES</envar></term>
+
+ <listitem><para>This variable contains the paths of remote Nix
+ installations from which packages can be copied, separated by colons.
+ <phrase condition="manual">See <xref linkend="sec-sharing-packages"
+ /> for details.</phrase> Each path should be the
+ <filename>/nix</filename> directory of a remote Nix installation
+ (i.e., not the <filename>/nix/store</filename> directory). The
+ paths are subject to globbing, so you can set it so something like
+ <literal>/var/run/nix/remote-stores/*/nix</literal> and mount
+ multiple remote filesystems in
+ <literal>/var/run/nix/remote-stores</literal>.</para>
+
+ <para>Note that if you’re building through the <link
+ linkend="sec-nix-daemon">Nix daemon</link>, the only setting for
+ this variable that matters is the one that the
+ <command>nix-daemon</command> process uses. So if you want to
+ change it, you have to restart the daemon.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_SHOW_STATS</envar></term>
+
+ <listitem><para>If set to <literal>1</literal>, Nix will print some
+ evaluation statistics, such as the number of values
+ allocated.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>NIX_COUNT_CALLS</envar></term>
+
+ <listitem><para>If set to <literal>1</literal>, Nix will print how
+ often functions were called during Nix expression evaluation. This
+ is useful for profiling your Nix expressions.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><envar>GC_INITIAL_HEAP_SIZE</envar></term>
+
+ <listitem><para>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.</para></listitem>
+
+</varlistentry>
+
+
+</variablelist>
+
+
+</chapter>
diff --git a/doc/manual/command-ref/files.xml b/doc/manual/command-ref/files.xml
new file mode 100644
index 000000000..7bbc96e89
--- /dev/null
+++ b/doc/manual/command-ref/files.xml
@@ -0,0 +1,14 @@
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id='ch-files'>
+
+<title>Files</title>
+
+<para>This section lists configuration files that you can use when you
+work with Nix.</para>
+
+<xi:include href="conf-file.xml" />
+
+</chapter> \ No newline at end of file
diff --git a/doc/manual/command-ref/main-commands.xml b/doc/manual/command-ref/main-commands.xml
new file mode 100644
index 000000000..0f4169243
--- /dev/null
+++ b/doc/manual/command-ref/main-commands.xml
@@ -0,0 +1,17 @@
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id='ch-main-commands'>
+
+<title>Main Commands</title>
+
+<para>This section lists commands and options that you can use when you
+work with Nix.</para>
+
+<xi:include href="nix-env.xml" />
+<xi:include href="nix-build.xml" />
+<xi:include href="nix-shell.xml" />
+<xi:include href="nix-store.xml" />
+
+</chapter> \ No newline at end of file
diff --git a/doc/manual/command-ref/nix-build.xml b/doc/manual/command-ref/nix-build.xml
new file mode 100644
index 000000000..669a48f8c
--- /dev/null
+++ b/doc/manual/command-ref/nix-build.xml
@@ -0,0 +1,190 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-build">
+
+<refmeta>
+ <refentrytitle>nix-build</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-build</refname>
+ <refpurpose>build a Nix expression</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-build</command>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="opt-common-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" />
+ <arg><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg><option>--argstr</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr</option></arg>
+ <arg choice='plain'><option>-A</option></arg>
+ </group>
+ <replaceable>attrPath</replaceable>
+ </arg>
+ <arg><option>--drv-link</option> <replaceable>drvlink</replaceable></arg>
+ <arg><option>--add-drv-link</option></arg>
+ <arg><option>--no-out-link</option></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--out-link</option></arg>
+ <arg choice='plain'><option>-o</option></arg>
+ </group>
+ <replaceable>outlink</replaceable>
+ </arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsection><title>Description</title>
+
+<para>The <command>nix-build</command> command builds the derivations
+described by the Nix expressions in <replaceable>paths</replaceable>.
+If the build succeeds, it places a symlink to the result in the
+current directory. The symlink is called <filename>result</filename>.
+If there are multiple Nix expressions, or the Nix expressions evaluate
+to multiple derivations, multiple sequentially numbered symlinks are
+created (<filename>result</filename>, <filename>result-2</filename>,
+and so on).</para>
+
+<para>If no <replaceable>paths</replaceable> are specified, then
+<command>nix-build</command> will use <filename>default.nix</filename>
+in the current directory, if it exists.</para>
+
+<para><command>nix-build</command> is essentially a wrapper around
+<link
+linkend="sec-nix-instantiate"><command>nix-instantiate</command></link>
+(to translate a high-level Nix expression to a low-level store
+derivation) and <link
+linkend="rsec-nix-store-realise"><command>nix-store
+--realise</command></link> (to build the store derivation).</para>
+
+<warning><para>The result of the build is automatically registered as
+a root of the Nix garbage collector. This root disappears
+automatically when the <filename>result</filename> symlink is deleted
+or renamed. So don’t rename the symlink.</para></warning>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<para>All options not listed here are passed to <command>nix-store
+--realise</command>, except for <option>--arg</option> and
+<option>--attr</option> / <option>-A</option> which are passed to
+<command>nix-instantiate</command>. <phrase condition="manual">See
+also <xref linkend="sec-common-options" />.</phrase></para>
+
+<variablelist>
+
+ <varlistentry><term><option>--drv-link</option> <replaceable>drvlink</replaceable></term>
+
+ <listitem><para>Add a symlink named
+ <replaceable>drvlink</replaceable> to the store derivation
+ produced by <command>nix-instantiate</command>. The derivation is
+ a root of the garbage collector until the symlink is deleted or
+ renamed. If there are multiple derivations, numbers are suffixed
+ to <replaceable>drvlink</replaceable> to distinguish between
+ them.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--add-drv-link</option></term>
+
+ <listitem><para>Shorthand for <option>--drv-link</option>
+ <filename>./derivation</filename>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--no-out-link</option></term>
+
+ <listitem><para>Do not create a symlink to the output path. Note
+ that as a result the output does not become a root of the garbage
+ collector, and so might be deleted by <command>nix-store
+ --gc</command>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry xml:id='opt-out-link'><term><option>--out-link</option> /
+ <option>-o</option> <replaceable>outlink</replaceable></term>
+
+ <listitem><para>Change the name of the symlink to the output path
+ created from <filename>result</filename> to
+ <replaceable>outlink</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<para>The following common options are supported:</para>
+
+<variablelist condition="manpage">
+ <xi:include href="opt-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='opt-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-build '&lt;nixpkgs>' -A firefox
+store derivation is /nix/store/qybprl8sz2lc...-firefox-1.5.0.7.drv
+/nix/store/d18hyl92g30l...-firefox-1.5.0.7
+
+$ ls -l result
+lrwxrwxrwx <replaceable>...</replaceable> result -> /nix/store/d18hyl92g30l...-firefox-1.5.0.7
+
+$ ls ./result/bin/
+firefox firefox-config</screen>
+
+<para>If a derivation has multiple outputs,
+<command>nix-build</command> will build the default (first) output.
+You can also build all outputs:
+<screen>
+$ nix-build '&lt;nixpkgs>' -A openssl.all
+</screen>
+This will create a symlink for each output named
+<filename>result-<replaceable>outputname</replaceable></filename>.
+The suffix is omitted if the output name is <literal>out</literal>.
+So if <literal>openssl</literal> has outputs <literal>out</literal>,
+<literal>bin</literal> and <literal>man</literal>,
+<command>nix-build</command> will create symlinks
+<literal>result</literal>, <literal>result-bin</literal> and
+<literal>result-man</literal>. It’s also possible to build a specific
+output:
+<screen>
+$ nix-build '&lt;nixpkgs>' -A openssl.man
+</screen>
+This will create a symlink <literal>result-man</literal>.</para>
+
+<para>Build a Nix expression given on the command line:
+
+<screen>
+$ nix-build -E 'with import &lt;nixpkgs> { }; runCommand "foo" { } "echo bar > $out"'
+$ cat ./result
+bar
+</screen>
+
+</para>
+
+</refsection>
+
+
+<refsection condition="manpage"><title>Environment variables</title>
+
+<variablelist>
+ <xi:include href="env-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='env-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-channel.xml b/doc/manual/command-ref/nix-channel.xml
new file mode 100644
index 000000000..e13394c7d
--- /dev/null
+++ b/doc/manual/command-ref/nix-channel.xml
@@ -0,0 +1,113 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-channel">
+
+<refmeta>
+ <refentrytitle>nix-channel</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-channel</refname>
+ <refpurpose>manage Nix channels</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-channel</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--add</option> <replaceable>url</replaceable> <arg choice='opt'><replaceable>name</replaceable></arg></arg>
+ <arg choice='plain'><option>--remove</option> <replaceable>url</replaceable></arg>
+ <arg choice='plain'><option>--list</option></arg>
+ <arg choice='plain'><option>--update</option> <arg rep='repeat'><replaceable>names</replaceable></arg></arg>
+ </group>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsection><title>Description</title>
+
+<para>A Nix channel is 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
+and a <command>nix-push</command> manifest. <phrase
+condition="manual">See also <xref linkend="sec-channels"
+/>.</phrase></para>
+
+<para>This command has the following operations:
+
+<variablelist>
+
+ <varlistentry><term><option>--add</option> <replaceable>url</replaceable> [<replaceable>name</replaceable>]</term>
+
+ <listitem><para>Adds a channel named
+ <replaceable>name</replaceable> with URL
+ <replaceable>url</replaceable> to the list of subscribed channels.
+ If <replaceable>name</replaceable> is omitted, it defaults to the
+ last component of <replaceable>url</replaceable>, with the
+ suffixes <literal>-stable</literal> or
+ <literal>-unstable</literal> removed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--remove</option> <replaceable>name</replaceable></term>
+
+ <listitem><para>Removes the channel named
+ <replaceable>name</replaceable> from the list of subscribed
+ channels.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--list</option></term>
+
+ <listitem><para>Prints the names and URLs of all subscribed
+ channels on standard output.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--update</option> [<replaceable>names</replaceable>…]</term>
+
+ <listitem><para>Downloads the Nix expressions of all subscribed
+ channels (or only those included in
+ <replaceable>names</replaceable> if specified), makes them the
+ default for <command>nix-env</command> operations (by symlinking
+ them from the directory <filename>~/.nix-defexpr</filename>), and
+ performs a <command>nix-pull</command> on the manifests of all
+ channels to make pre-built binaries available.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>Note that <option>--add</option> does not automatically perform
+an update.</para>
+
+<para>The list of subscribed channels is stored in
+<filename>~/.nix-channels</filename>.</para>
+
+<para>A channel consists of two elements: a bzipped Tar archive
+containing the Nix expressions, and a manifest created by
+<command>nix-push</command>. These must be stored under
+<literal><replaceable>url</replaceable>/nixexprs.tar.bz2</literal> and
+<literal><replaceable>url</replaceable>/MANIFEST</literal>,
+respectively.</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<para>To subscribe to the Nixpkgs channel and install the GNU Hello package:</para>
+
+<screen>
+$ nix-channel --add http://nixos.org/channels/nixpkgs-unstable
+$ nix-channel --update
+$ nix-env -iA nixpkgs.hello</screen>
+
+</refsection>
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-collect-garbage.xml b/doc/manual/command-ref/nix-collect-garbage.xml
new file mode 100644
index 000000000..f2009dcbd
--- /dev/null
+++ b/doc/manual/command-ref/nix-collect-garbage.xml
@@ -0,0 +1,68 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-collect-garbage">
+
+<refmeta>
+ <refentrytitle>nix-collect-garbage</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-collect-garbage</refname>
+ <refpurpose>delete unreachable store paths</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-collect-garbage</command>
+ <arg><option>--delete-old</option></arg>
+ <arg><option>-d</option></arg>
+ <arg><option>--delete-older-than</option> <replaceable>period</replaceable></arg>
+ <group choice='opt'>
+ <arg choice='plain'><option>--print-roots</option></arg>
+ <arg choice='plain'><option>--print-live</option></arg>
+ <arg choice='plain'><option>--print-dead</option></arg>
+ <arg choice='plain'><option>--delete</option></arg>
+ </group>
+ <arg><option>--dry-run</option></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-collect-garbage</command> is mostly an
+alias of <link linkend="rsec-nix-store-gc"><command>nix-store
+--gc</command></link>, that is, it deletes all unreachable paths in
+the Nix store to clean up your system. However, it provides two
+additional options: <option>-d</option> (<option>--delete-old</option>),
+which deletes all old generations of all profiles in
+<filename>/nix/var/nix/profiles</filename> by invoking
+<literal>nix-env --delete-generations old</literal> on all profiles
+(of course, this makes rollbacks to previous configurations
+impossible); and
+<option>--delete-older-than</option> <replaceable>period</replaceable>,
+where period is a value such as <literal>30d</literal>, which deletes
+all generations older than the specified number of days in all profiles
+in <filename>/nix/var/nix/profiles</filename> (except for the generations
+that were active at that point in time).
+</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<para>To delete from the Nix store everything that is not used by the
+current generations of each profile, do
+
+<screen>
+$ nix-collect-garbage -d</screen>
+
+</para>
+
+</refsection>
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-copy-closure.xml b/doc/manual/command-ref/nix-copy-closure.xml
new file mode 100644
index 000000000..3f8fd8017
--- /dev/null
+++ b/doc/manual/command-ref/nix-copy-closure.xml
@@ -0,0 +1,187 @@
+<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-nix-copy-closure">
+
+<refmeta>
+ <refentrytitle>nix-copy-closure</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-copy-closure</refname>
+ <refpurpose>copy a closure to or from a remote machine via SSH</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-copy-closure</command>
+ <group>
+ <arg choice='plain'><option>--to</option></arg>
+ <arg choice='plain'><option>--from</option></arg>
+ </group>
+ <arg><option>--sign</option></arg>
+ <arg><option>--gzip</option></arg>
+ <!--
+ <arg><option>- -show-progress</option></arg>
+ -->
+ <arg><option>--include-outputs</option></arg>
+ <arg><option>--use-substitutes</option></arg>
+ <arg><option>-s</option></arg>
+ <arg choice='plain'>
+ <replaceable>user@</replaceable><replaceable>machine</replaceable>
+ </arg>
+ <arg choice='plain'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para><command>nix-copy-closure</command> gives you an easy and
+efficient way to exchange software between machines. Given one or
+more Nix store paths <replaceable>paths</replaceable> on the local
+machine, <command>nix-copy-closure</command> computes the closure of
+those paths (i.e. all their dependencies in the Nix store), and copies
+all paths in the closure to the remote machine via the
+<command>ssh</command> (Secure Shell) command. With the
+<option>--from</option>, the direction is reversed:
+the closure of <replaceable>paths</replaceable> on a remote machine is
+copied to the Nix store on the local machine.</para>
+
+<para>This command is efficient because it only sends the store paths
+that are missing on the target machine.</para>
+
+<para>Since <command>nix-copy-closure</command> calls
+<command>ssh</command>, you may be asked to type in the appropriate
+password or passphrase. In fact, you may be asked
+<emphasis>twice</emphasis> because <command>nix-copy-closure</command>
+currently connects twice to the remote machine, first to get the set
+of paths missing on the target machine, and second to send the dump of
+those paths. If this bothers you, use
+<command>ssh-agent</command>.</para>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--to</option></term>
+
+ <listitem><para>Copy the closure of
+ <replaceable>paths</replaceable> from the local Nix store to the
+ Nix store on <replaceable>machine</replaceable>. This is the
+ default.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--from</option></term>
+
+ <listitem><para>Copy the closure of
+ <replaceable>paths</replaceable> from the Nix store on
+ <replaceable>machine</replaceable> to the local Nix
+ store.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--sign</option></term>
+
+ <listitem><para>Let the sending machine cryptographically sign the
+ dump of each path with the key in
+ <filename><replaceable>sysconfdir</replaceable>/nix/signing-key.sec</filename>.
+ If the user on the target machine does not have direct access to
+ the Nix store (i.e., if the target machine has a multi-user Nix
+ installation), then the target machine will check the dump against
+ <filename><replaceable>sysconfdir</replaceable>/nix/signing-key.pub</filename>
+ before unpacking it in its Nix store. This allows secure sharing
+ of store paths between untrusted users on two machines, provided
+ that there is a trust relation between the Nix installations on
+ both machines (namely, they have matching public/secret
+ keys).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--gzip</option></term>
+
+ <listitem><para>Enable compression of the SSH
+ connection.</para></listitem>
+
+ </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
+ included in the closure.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--use-substitutes</option> / <option>-s</option></term>
+
+ <listitem><para>Attempt to download missing paths on the target
+ machine using Nix’s substitute mechanism. Any paths that cannot
+ be substituted on the target are still copied normally from the
+ source. This is useful, for instance, if the connection between
+ the source and target machine is slow, but the connection between
+ the target machine and <literal>nixos.org</literal> (the default
+ binary cache server) is fast.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Environment variables</title>
+
+<variablelist>
+
+ <varlistentry><term><envar>NIX_SSHOPTS</envar></term>
+
+ <listitem><para>Additional options to be passed to
+ <command>ssh</command> on the command line.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>Copy Firefox with all its dependencies to a remote machine:
+
+<screen>
+$ nix-copy-closure --to alice@itchy.labs $(type -tP firefox)</screen>
+
+</para>
+
+<para>Copy Subversion from a remote machine and then install it into a
+user environment:
+
+<screen>
+$ nix-copy-closure --from alice@itchy.labs \
+ /nix/store/0dj0503hjxy5mbwlafv1rsbdiyx1gkdy-subversion-1.4.4
+$ nix-env -i /nix/store/0dj0503hjxy5mbwlafv1rsbdiyx1gkdy-subversion-1.4.4
+</screen>
+
+</para>
+
+</refsection>
+
+
+</refsection>
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-daemon.xml b/doc/manual/command-ref/nix-daemon.xml
new file mode 100644
index 000000000..4311664ed
--- /dev/null
+++ b/doc/manual/command-ref/nix-daemon.xml
@@ -0,0 +1,35 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-daemon">
+
+<refmeta>
+ <refentrytitle>nix-daemon</refentrytitle>
+ <manvolnum>8</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-daemon</refname>
+ <refpurpose>Nix multi-user support daemon</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-daemon</command>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The Nix daemon is necessary in multi-user Nix installations. It
+performs build actions and other operations on the Nix store on behalf
+of unprivileged users.</para>
+
+
+</refsection>
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-env.xml b/doc/manual/command-ref/nix-env.xml
new file mode 100644
index 000000000..494edc3e5
--- /dev/null
+++ b/doc/manual/command-ref/nix-env.xml
@@ -0,0 +1,1301 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-env">
+
+<refmeta>
+ <refentrytitle>nix-env</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-env</refname>
+ <refpurpose>manipulate or query Nix user environments</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-env</command>
+ <xi:include href="opt-common-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" />
+ <arg><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg><option>--argstr</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--file</option></arg>
+ <arg choice='plain'><option>-f</option></arg>
+ </group>
+ <replaceable>path</replaceable>
+ </arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--profile</option></arg>
+ <arg choice='plain'><option>-p</option></arg>
+ </group>
+ <replaceable>path</replaceable>
+ </arg>
+ <arg>
+ <arg choice='plain'><option>--system-filter</option></arg>
+ <replaceable>system</replaceable>
+ </arg>
+ <arg><option>--dry-run</option></arg>
+ <arg choice='plain'><replaceable>operation</replaceable></arg>
+ <arg rep='repeat'><replaceable>options</replaceable></arg>
+ <arg rep='repeat'><replaceable>arguments</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-env</command> is used to manipulate Nix
+user environments. User environments are sets of software packages
+available to a user at some point in time. In other words, they are a
+synthesised view of the programs available in the Nix store. There
+may be many user environments: different users can have different
+environments, and individual users can switch between different
+environments.</para>
+
+<para><command>nix-env</command> takes exactly one
+<emphasis>operation</emphasis> flag which indicates the subcommand to
+be performed. These are documented below.</para>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Common options</title>
+
+<para>This section lists the options that are common to all
+operations. These options are allowed for every subcommand, though
+they may not always have an effect. <phrase condition="manual">See
+also <xref linkend="sec-common-options" />.</phrase></para>
+
+<variablelist>
+
+ <varlistentry><term><option>--file</option></term>
+ <term><option>-f</option></term>
+
+ <listitem><para>Specifies the Nix expression (designated below as
+ the <emphasis>active Nix expression</emphasis>) used by the
+ <option>--install</option>, <option>--upgrade</option>, and
+ <option>--query --available</option> operations to obtain
+ derivations. The default is
+ <filename>~/.nix-defexpr</filename>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--profile</option></term>
+ <term><option>-p</option></term>
+
+ <listitem><para>Specifies the profile to be used by those
+ operations that operate on a profile (designated below as the
+ <emphasis>active profile</emphasis>). A profile is a sequence of
+ user environments called <emphasis>generations</emphasis>, one of
+ which is the <emphasis>current
+ generation</emphasis>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--dry-run</option></term>
+
+ <listitem><para>For the <option>--install</option>,
+ <option>--upgrade</option>, <option>--uninstall</option>,
+ <option>--switch-generation</option>,
+ <option>--delete-generations</option> and
+ <option>--rollback</option> operations, this flag will cause
+ <command>nix-env</command> to print what
+ <emphasis>would</emphasis> be done if this flag had not been
+ specified, without actually doing it.</para>
+
+ <para><option>--dry-run</option> also prints out which paths will
+ be <link linkend="gloss-substitute">substituted</link> (i.e.,
+ downloaded) and which paths will be built from source (because no
+ substitute is available).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--system-filter</option> <replaceable>system</replaceable></term>
+
+ <listitem><para>By default, operations such as <option>--query
+ --available</option> show derivations matching any platform. This
+ option allows you to use derivations for the specified platform
+ <replaceable>system</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<variablelist condition="manpage">
+ <xi:include href="opt-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='opt-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Files</title>
+
+<variablelist>
+
+ <varlistentry><term><filename>~/.nix-defexpr</filename></term>
+
+ <listitem><para>A directory that contains the default Nix
+ expressions used by the <option>--install</option>,
+ <option>--upgrade</option>, and <option>--query
+ --available</option> operations to obtain derivations. The
+ <option>--file</option> option may be used to override this
+ default.</para>
+
+ <para>The Nix expressions in this directory are combined into a
+ single set, with each file as an attribute that has the name of
+ the file. Thus, if <filename>~/.nix-defexpr</filename> contains
+ two files, <filename>foo</filename> and <filename>bar</filename>,
+ then the default Nix expression will essentially be
+
+<programlisting>
+{
+ foo = import ~/.nix-defexpr/foo;
+ bar = import ~/.nix-defexpr/bar;
+}</programlisting>
+
+ </para>
+
+ <para>The command <command>nix-channel</command> places symlinks
+ to the downloaded Nix expressions from each subscribed channel in
+ this directory.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><filename>~/.nix-profile</filename></term>
+
+ <listitem><para>A symbolic link to the user's current profile. By
+ default, this symlink points to
+ <filename><replaceable>prefix</replaceable>/var/nix/profiles/default</filename>.
+ The <envar>PATH</envar> environment variable should include
+ <filename>~/.nix-profile/bin</filename> for the user environment
+ to be visible to the user.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id="rsec-nix-env-install"><title>Operation <option>--install</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--install</option></arg>
+ <arg choice='plain'><option>-i</option></arg>
+ </group>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="opt-inst-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" />
+ <group choice='opt'>
+ <arg choice='plain'><option>--preserve-installed</option></arg>
+ <arg choice='plain'><option>-P</option></arg>
+ </group>
+ <group choice='opt'>
+ <arg choice='plain'><option>--remove-all</option></arg>
+ <arg choice='plain'><option>-r</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>args</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>The install operation creates a new user environment, based on
+the current generation of the active profile, to which a set of store
+paths described by <replaceable>args</replaceable> is added. The
+arguments <replaceable>args</replaceable> map to store paths in a
+number of possible ways:
+
+<itemizedlist>
+
+ <listitem><para>By default, <replaceable>args</replaceable> is a set
+ of derivation names denoting derivations in the active Nix
+ expression. These are realised, and the resulting output paths are
+ installed. Currently installed derivations with a name equal to the
+ name of a derivation being added are removed unless the option
+ <option>--preserve-installed</option> is
+ specified.</para>
+
+ <para>If there are multiple derivations matching a name in
+ <replaceable>args</replaceable> that have the same name (e.g.,
+ <literal>gcc-3.3.6</literal> and <literal>gcc-4.1.1</literal>), then
+ the derivation with the highest <emphasis>priority</emphasis> is
+ used. A derivation can define a priority by declaring the
+ <varname>meta.priority</varname> attribute. This attribute should
+ be a number, with a higher value denoting a lower priority. The
+ default priority is <literal>0</literal>.</para>
+
+ <para>If there are multiple matching derivations with the same
+ priority, then the derivation with the highest version will be
+ installed.</para>
+
+ <para>You can force the installation of multiple derivations with
+ the same name by being specific about the versions. For instance,
+ <literal>nix-env -i gcc-3.3.6 gcc-4.1.1</literal> will install both
+ version of GCC (and will probably cause a user environment
+ conflict!).</para></listitem>
+
+ <listitem><para>If <link
+ linkend='opt-attr'><option>--attr</option></link>
+ (<option>-A</option>) is specified, the arguments are
+ <emphasis>attribute paths</emphasis> that select attributes from the
+ top-level Nix expression. This is faster than using derivation
+ names and unambiguous. To find out the attribute paths of available
+ packages, use <literal>nix-env -qaP '*'</literal>.</para></listitem>
+
+ <listitem><para>If <option>--from-profile</option>
+ <replaceable>path</replaceable> is given,
+ <replaceable>args</replaceable> is a set of names denoting installed
+ store paths in the profile <replaceable>path</replaceable>. This is
+ an easy way to copy user environment elements from one profile to
+ another.</para></listitem>
+
+ <listitem><para>If <option>--from-expression</option> is given,
+ <replaceable>args</replaceable> are Nix <link
+ linkend="ss-functions">functions</link> that are called with the
+ active Nix expression as their single argument. The derivations
+ returned by those function calls are installed. This allows
+ derivations to be specified in an unambiguous way, which is necessary
+ if there are multiple derivations with the same
+ name.</para></listitem>
+
+ <listitem><para>If <replaceable>args</replaceable> are store
+ derivations, then these are <link
+ linkend="rsec-nix-store-realise">realised</link>, and the resulting
+ output paths are installed.</para></listitem>
+
+ <listitem><para>If <replaceable>args</replaceable> are store paths
+ that are not store derivations, then these are <link
+ linkend="rsec-nix-store-realise">realised</link> and
+ installed.</para></listitem>
+
+</itemizedlist>
+
+</para>
+
+</refsection>
+
+
+<refsection><title>Flags</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--prebuild-only</option> / <option>-b</option></term>
+
+ <listitem><para>Use only derivations for which a substitute is
+ registered, i.e., there is a pre-built binary available that can
+ be downloaded in lieu of building the derivation. Thus, no
+ packages will be built from source.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--preserve-installed</option></term>
+ <term><option>-P</option></term>
+
+ <listitem><para>Do not remove derivations with a name matching one
+ of the derivations being installed. Usually, trying to have two
+ versions of the same package installed in the same generation of a
+ profile will lead to an error in building the generation, due to
+ file name clashes between the two versions. However, this is not
+ the case for all packages.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--remove-all</option></term>
+ <term><option>-r</option></term>
+
+ <listitem><para>Remove all previously installed packages first.
+ This is equivalent to running <literal>nix-env -e '*'</literal>
+ first, except that everything happens in a single
+ transaction.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection xml:id='refsec-nix-env-install-examples'><title>Examples</title>
+
+<para>To install a specific version of <command>gcc</command> from the
+active Nix expression:
+
+<screen>
+$ nix-env --install gcc-3.3.2
+installing `gcc-3.3.2'
+uninstalling `gcc-3.1'</screen>
+
+Note the the previously installed version is removed, since
+<option>--preserve-installed</option> was not specified.</para>
+
+<para>To install an arbitrary version:
+
+<screen>
+$ nix-env --install gcc
+installing `gcc-3.3.2'</screen>
+
+</para>
+
+<para>To install using a specific attribute:
+
+<screen>
+$ nix-env -i -A gcc40mips
+$ nix-env -i -A xorg.xorgserver</screen>
+
+</para>
+
+<para>To install all derivations in the Nix expression <filename>foo.nix</filename>:
+
+<screen>
+$ nix-env -f ~/foo.nix -i '*'</screen>
+
+</para>
+
+<para>To copy the store path with symbolic name <literal>gcc</literal>
+from another profile:
+
+<screen>
+$ nix-env -i --from-profile /nix/var/nix/profiles/foo -i gcc</screen>
+
+</para>
+
+<para>To install a specific store derivation (typically created by
+<command>nix-instantiate</command>):
+
+<screen>
+$ nix-env -i /nix/store/fibjb1bfbpm5mrsxc4mh2d8n37sxh91i-gcc-3.4.3.drv</screen>
+
+</para>
+
+<para>To install a specific output path:
+
+<screen>
+$ nix-env -i /nix/store/y3cgx0xj1p4iv9x0pnnmdhr8iyg741vk-gcc-3.4.3</screen>
+
+</para>
+
+<para>To install from a Nix expression specified on the command-line:
+
+<screen>
+$ nix-env -f ./foo.nix -i -E \
+ 'f: (f {system = "i686-linux";}).subversionWithJava'</screen>
+
+I.e., this evaluates to <literal>(f: (f {system =
+"i686-linux";}).subversionWithJava) (import ./foo.nix)</literal>, thus
+selecting the <literal>subversionWithJava</literal> attribute from the
+set returned by calling the function defined in
+<filename>./foo.nix</filename>.</para>
+
+<para>A dry-run tells you which paths will be downloaded or built from
+source:
+
+<screen>
+$ nix-env -f pkgs/top-level/all-packages.nix -i f-spot --dry-run
+(dry run; not doing anything)
+installing `f-spot-0.0.10'
+the following derivations will be built:
+ /nix/store/0g63jv9aagwbgci4nnzs2dkxqz84kdja-libgnomeprintui-2.12.1.tar.bz2.drv
+ /nix/store/0gfarvxq6sannsdw8a1ir40j1ys2mqb4-ORBit2-2.14.2.tar.bz2.drv
+ /nix/store/0i9gs5zc04668qiy60ga2rc16abkj7g8-sqlite-2.8.17.drv
+ <replaceable>...</replaceable>
+the following paths will be substituted:
+ /nix/store/8zbipvm4gp9jfqh9nnk1n3bary1a37gs-perl-XML-Parser-2.34
+ /nix/store/b8a2bg7gnyvvvjjibp4axg9x1hzkw36c-mono-1.1.4
+ <replaceable>...</replaceable></screen>
+
+</para>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id="rsec-nix-env-upgrade"><title>Operation <option>--upgrade</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--upgrade</option></arg>
+ <arg choice='plain'><option>-u</option></arg>
+ </group>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="opt-inst-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" />
+ <group choice='opt'>
+ <arg choice='plain'><option>--lt</option></arg>
+ <arg choice='plain'><option>--leq</option></arg>
+ <arg choice='plain'><option>--eq</option></arg>
+ <arg choice='plain'><option>--always</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>args</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The upgrade operation creates a new user environment, based on
+the current generation of the active profile, in which all store paths
+are replaced for which there are newer versions in the set of paths
+described by <replaceable>args</replaceable>. Paths for which there
+are no newer versions are left untouched; this is not an error. It is
+also not an error if an element of <replaceable>args</replaceable>
+matches no installed derivations.</para>
+
+<para>For a description of how <replaceable>args</replaceable> is
+mapped to a set of store paths, see <link
+linkend="rsec-nix-env-install"><option>--install</option></link>. If
+<replaceable>args</replaceable> describes multiple store paths with
+the same symbolic name, only the one with the highest version is
+installed.</para>
+
+</refsection>
+
+<refsection><title>Flags</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--lt</option></term>
+
+ <listitem><para>Only upgrade a derivation to newer versions. This
+ is the default.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--leq</option></term>
+
+ <listitem><para>In addition to upgrading to newer versions, also
+ “upgrade” to derivations that have the same version. Version are
+ not a unique identification of a derivation, so there may be many
+ derivations that have the same version. This flag may be useful
+ to force “synchronisation” between the installed and available
+ derivations.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--eq</option></term>
+
+ <listitem><para><emphasis>Only</emphasis> “upgrade” to derivations
+ that have the same version. This may not seem very useful, but it
+ actually is, e.g., when there is a new release of Nixpkgs and you
+ want to replace installed applications with the same versions
+ built against newer dependencies (to reduce the number of
+ dependencies floating around on your system).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--always</option></term>
+
+ <listitem><para>In addition to upgrading to newer versions, also
+ “upgrade” to derivations that have the same or a lower version.
+ I.e., derivations may actually be downgraded depending on what is
+ available in the active Nix expression.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<para>For the other flags, see <option
+linkend="rsec-nix-env-install">--install</option>.</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env --upgrade gcc
+upgrading `gcc-3.3.1' to `gcc-3.4'
+
+$ nix-env -u gcc-3.3.2 --always <lineannotation>(switch to a specific version)</lineannotation>
+upgrading `gcc-3.4' to `gcc-3.3.2'
+
+$ nix-env --upgrade pan
+<lineannotation>(no upgrades available, so nothing happens)</lineannotation>
+
+$ nix-env -u '*' <lineannotation>(try to upgrade everything)</lineannotation>
+upgrading `hello-2.1.2' to `hello-2.1.3'
+upgrading `mozilla-1.2' to `mozilla-1.4'</screen>
+
+</refsection>
+
+<refsection xml:id="ssec-version-comparisons"><title>Versions</title>
+
+<para>The upgrade operation determines whether a derivation
+<varname>y</varname> is an upgrade of a derivation
+<varname>x</varname> by looking at their respective
+<literal>name</literal> attributes. The names (e.g.,
+<literal>gcc-3.3.1</literal> are split into two parts: the package
+name (<literal>gcc</literal>), and the version
+(<literal>3.3.1</literal>). The version part starts after the first
+dash not following by a letter. <varname>x</varname> is considered an
+upgrade of <varname>y</varname> if their package names match, and the
+version of <varname>y</varname> is higher that that of
+<varname>x</varname>.</para>
+
+<para>The versions are compared by splitting them into contiguous
+components of numbers and letters. E.g., <literal>3.3.1pre5</literal>
+is split into <literal>[3, 3, 1, "pre", 5]</literal>. These lists are
+then compared lexicographically (from left to right). Corresponding
+components <varname>a</varname> and <varname>b</varname> are compared
+as follows. If they are both numbers, integer comparison is used. If
+<varname>a</varname> is an empty string and <varname>b</varname> is a
+number, <varname>a</varname> is considered less than
+<varname>b</varname>. The special string component
+<literal>pre</literal> (for <emphasis>pre-release</emphasis>) is
+considered to be less than other components. String components are
+considered less than number components. Otherwise, they are compared
+lexicographically (i.e., using case-sensitive string comparison).</para>
+
+<para>This is illustrated by the following examples:
+
+<screen>
+1.0 &lt; 2.3
+2.1 &lt; 2.3
+2.3 = 2.3
+2.5 > 2.3
+3.1 > 2.3
+2.3.1 > 2.3
+2.3.1 > 2.3a
+2.3pre1 &lt; 2.3
+2.3pre3 &lt; 2.3pre12
+2.3a &lt; 2.3c
+2.3pre1 &lt; 2.3c
+2.3pre1 &lt; 2.3q</screen>
+
+</para>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--uninstall</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--uninstall</option></arg>
+ <arg choice='plain'><option>-e</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>drvnames</replaceable></arg>
+</cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The uninstall operation creates a new user environment, based on
+the current generation of the active profile, from which the store
+paths designated by the symbolic names
+<replaceable>names</replaceable> are removed.</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env --uninstall gcc
+$ nix-env -e '*' <lineannotation>(remove everything)</lineannotation></screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id="rsec-nix-env-set-flag"><title>Operation <option>--set-flag</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <arg choice='plain'><option>--set-flag</option></arg>
+ <arg choice='plain'><replaceable>name</replaceable></arg>
+ <arg choice='plain'><replaceable>value</replaceable></arg>
+ <arg choice='plain' rep='repeat'><replaceable>drvnames</replaceable></arg>
+</cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The <option>--set-flag</option> operation allows meta attributes
+of installed packages to be modified. There are several attributes
+that can be usefully modified, because they affect the behaviour of
+<command>nix-env</command> or the user environment build
+script:
+
+<itemizedlist>
+
+ <listitem><para><varname>priority</varname> can be changed to
+ resolve filename clashes. The user environment build script uses
+ the <varname>meta.priority</varname> attribute of derivations to
+ resolve filename collisions between packages. Lower priority values
+ denote a higher priority. For instance, the GCC wrapper package and
+ the Binutils package in Nixpkgs both have a file
+ <filename>bin/ld</filename>, so previously if you tried to install
+ both you would get a collision. Now, on the other hand, the GCC
+ wrapper declares a higher priority than Binutils, so the former’s
+ <filename>bin/ld</filename> is symlinked in the user
+ environment.</para></listitem>
+
+ <listitem><para><varname>keep</varname> can be set to
+ <literal>true</literal> to prevent the package from being upgraded
+ or replaced. This is useful if you want to hang on to an older
+ version of a package.</para></listitem>
+
+ <listitem><para><varname>active</varname> can be set to
+ <literal>false</literal> to “disable” the package. That is, no
+ symlinks will be generated to the files of the package, but it
+ remains part of the profile (so it won’t be garbage-collected). It
+ can be set back to <literal>true</literal> to re-enable the
+ package.</para></listitem>
+
+</itemizedlist>
+
+</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<para>To prevent the currently installed Firefox from being upgraded:
+
+<screen>
+$ nix-env --set-flag keep true firefox</screen>
+
+After this, <command>nix-env -u</command> will ignore Firefox.</para>
+
+<para>To disable the currently installed Firefox, then install a new
+Firefox while the old remains part of the profile:
+
+<screen>
+$ nix-env -q \*
+firefox-2.0.0.9 <lineannotation>(the current one)</lineannotation>
+
+$ nix-env --preserve-installed -i firefox-2.0.0.11
+installing `firefox-2.0.0.11'
+building path(s) `/nix/store/myy0y59q3ig70dgq37jqwg1j0rsapzsl-user-environment'
+collision between `/nix/store/<replaceable>...</replaceable>-firefox-2.0.0.11/bin/firefox'
+ and `/nix/store/<replaceable>...</replaceable>-firefox-2.0.0.9/bin/firefox'.
+<lineannotation>(i.e., can’t have two active at the same time)</lineannotation>
+
+$ nix-env --set-flag active false firefox
+setting flag on `firefox-2.0.0.9'
+
+$ nix-env --preserve-installed -i firefox-2.0.0.11
+installing `firefox-2.0.0.11'
+
+$ nix-env -q \*
+firefox-2.0.0.11 <lineannotation>(the enabled one)</lineannotation>
+firefox-2.0.0.9 <lineannotation>(the disabled one)</lineannotation></screen>
+
+</para>
+
+<para>To make files from <literal>binutils</literal> take precedence
+over files from <literal>gcc</literal>:
+
+<screen>
+$ nix-env --set-flag priority 5 binutils
+$ nix-env --set-flag priority 10 gcc</screen>
+
+</para>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--query</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--query</option></arg>
+ <arg choice='plain'><option>-q</option></arg>
+ </group>
+ <group choice='opt'>
+ <arg choice='plain'><option>--installed</option></arg>
+ <arg choice='plain'><option>--available</option></arg>
+ <arg choice='plain'><option>-a</option></arg>
+ </group>
+
+ <sbr />
+
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--status</option></arg>
+ <arg choice='plain'><option>-s</option></arg>
+ </group>
+ </arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr-path</option></arg>
+ <arg choice='plain'><option>-P</option></arg>
+ </group>
+ </arg>
+ <arg><option>--no-name</option></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--compare-versions</option></arg>
+ <arg choice='plain'><option>-c</option></arg>
+ </group>
+ </arg>
+ <arg><option>--system</option></arg>
+ <arg><option>--drv-path</option></arg>
+ <arg><option>--out-path</option></arg>
+ <arg><option>--description</option></arg>
+ <arg><option>--meta</option></arg>
+
+ <sbr />
+
+ <arg><option>--xml</option></arg>
+ <arg><option>--json</option></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--prebuilt-only</option></arg>
+ <arg choice='plain'><option>-b</option></arg>
+ </group>
+ </arg>
+
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr</option></arg>
+ <arg choice='plain'><option>-A</option></arg>
+ </group>
+ <replaceable>attribute-path</replaceable>
+ </arg>
+
+ <sbr />
+
+ <arg choice='plain' rep='repeat'><replaceable>names</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>The query operation displays information about either the store
+paths that are installed in the current generation of the active
+profile (<option>--installed</option>), or the derivations that are
+available for installation in the active Nix expression
+(<option>--available</option>). It only prints information about
+derivations whose symbolic name matches one of
+<replaceable>names</replaceable>. The wildcard <literal>*</literal>
+shows all derivations.</para>
+
+<para>The derivations are sorted by their <literal>name</literal>
+attributes.</para>
+
+</refsection>
+
+
+<refsection><title>Source selection</title>
+
+<para>The following flags specify the set of things on which the query
+operates.</para>
+
+<variablelist>
+
+ <varlistentry><term><option>--installed</option></term>
+
+ <listitem><para>The query operates on the store paths that are
+ installed in the current generation of the active profile. This
+ is the default.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--available</option></term>
+ <term><option>-a</option></term>
+
+ <listitem><para>The query operates on the derivations that are
+ available in the active Nix expression.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Queries</title>
+
+<para>The following flags specify what information to display about
+the selected derivations. Multiple flags may be specified, in which
+case the information is shown in the order given here. Note that the
+name of the derivation is shown unless <option>--no-name</option> is
+specified.</para>
+
+<!-- TODO: fix the terminology here; i.e., derivations, store paths,
+user environment elements, etc. -->
+
+<variablelist>
+
+ <varlistentry><term><option>--xml</option></term>
+
+ <listitem><para>Print the result in an XML representation suitable
+ for automatic processing by other tools. The root element is
+ called <literal>items</literal>, which contains a
+ <literal>item</literal> element for each available or installed
+ derivation. The fields discussed below are all stored in
+ attributes of the <literal>item</literal>
+ elements.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--json</option></term>
+
+ <listitem><para>Print the result in a JSON representation suitable
+ for automatic processing by other tools.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--prebuild-only</option> / <option>-b</option></term>
+
+ <listitem><para>Show only derivations for which a substitute is
+ registered, i.e., there is a pre-built binary available that can
+ be downloaded in lieu of building the derivation. Thus, this
+ shows all packages that probably can be installed
+ quickly.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--status</option></term>
+ <term><option>-s</option></term>
+
+ <listitem><para>Print the <emphasis>status</emphasis> of the
+ derivation. The status consists of three characters. The first
+ is <literal>I</literal> or <literal>-</literal>, indicating
+ whether the derivation is currently installed in the current
+ generation of the active profile. This is by definition the case
+ for <option>--installed</option>, but not for
+ <option>--available</option>. The second is <literal>P</literal>
+ or <literal>-</literal>, indicating whether the derivation is
+ present on the system. This indicates whether installation of an
+ available derivation will require the derivation to be built. The
+ third is <literal>S</literal> or <literal>-</literal>, indicating
+ whether a substitute is available for the
+ derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--attr-path</option></term>
+ <term><option>-P</option></term>
+
+ <listitem><para>Print the <emphasis>attribute path</emphasis> of
+ the derivation, which can be used to unambiguously select it using
+ the <link linkend="opt-attr"><option>--attr</option> option</link>
+ available in commands that install derivations like
+ <literal>nix-env --install</literal>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--no-name</option></term>
+
+ <listitem><para>Suppress printing of the <literal>name</literal>
+ attribute of each derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--compare-versions</option> /
+ <option>-c</option></term>
+
+ <listitem><para>Compare installed versions to available versions,
+ or vice versa (if <option>--available</option> is given). This is
+ useful for quickly seeing whether upgrades for installed
+ packages are available in a Nix expression. A column is added
+ with the following meaning:
+
+ <variablelist>
+
+ <varlistentry><term><literal>&lt;</literal> <replaceable>version</replaceable></term>
+
+ <listitem><para>A newer version of the package is available
+ or installed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>=</literal> <replaceable>version</replaceable></term>
+
+ <listitem><para>At most the same version of the package is
+ available or installed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>></literal> <replaceable>version</replaceable></term>
+
+ <listitem><para>Only older versions of the package are
+ available or installed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>- ?</literal></term>
+
+ <listitem><para>No version of the package is available or
+ installed.</para></listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ </para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--system</option></term>
+
+ <listitem><para>Print the <literal>system</literal> attribute of
+ the derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--drv-path</option></term>
+
+ <listitem><para>Print the path of the store
+ derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--out-path</option></term>
+
+ <listitem><para>Print the output path of the
+ derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--description</option></term>
+
+ <listitem><para>Print a short (one-line) description of the
+ derivation, if available. The description is taken from the
+ <literal>meta.description</literal> attribute of the
+ derivation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--meta</option></term>
+
+ <listitem><para>Print all of the meta-attributes of the
+ derivation. This option is only available with
+ <option>--xml</option>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env -q '*' <lineannotation>(show installed derivations)</lineannotation>
+bison-1.875c
+docbook-xml-4.2
+firefox-1.0.4
+MPlayer-1.0pre7
+ORBit2-2.8.3
+...
+
+$ nix-env -qa '*' <lineannotation>(show available derivations)</lineannotation>
+firefox-1.0.7
+GConf-2.4.0.1
+MPlayer-1.0pre7
+ORBit2-2.8.3
+...
+
+$ nix-env -qas '*' <lineannotation>(show status of available derivations)</lineannotation>
+-P- firefox-1.0.7 <lineannotation>(not installed but present)</lineannotation>
+--S GConf-2.4.0.1 <lineannotation>(not present, but there is a substitute for fast installation)</lineannotation>
+--S MPlayer-1.0pre3 <lineannotation>(i.e., this is not the installed MPlayer, even though the version is the same!)</lineannotation>
+IP- ORBit2-2.8.3 <lineannotation>(installed and by definition present)</lineannotation>
+...
+
+<lineannotation>(show available derivations in the Nix expression <!-- !!! <filename>-->foo.nix<!-- </filename> -->)</lineannotation>
+$ nix-env -f ./foo.nix -qa '*'
+foo-1.2.3
+
+$ nix-env -qc '*' <lineannotation>(compare installed versions to what’s available)</lineannotation>
+<replaceable>...</replaceable>
+acrobat-reader-7.0 - ? <lineannotation>(package is not available at all)</lineannotation>
+autoconf-2.59 = 2.59 <lineannotation>(same version)</lineannotation>
+firefox-1.0.4 &lt; 1.0.7 <lineannotation>(a more recent version is available)</lineannotation>
+<replaceable>...</replaceable>
+
+<lineannotation>(show info about a specific package, in XML)</lineannotation>
+$ nix-env -qa --xml --description firefox
+<![CDATA[<?xml version='1.0' encoding='utf-8'?>
+<items>
+ <item attrPath="0.0.firefoxWrapper"
+ description="Mozilla Firefox - the browser, reloaded (with various plugins)"
+ name="firefox-1.5.0.7" system="i686-linux" />
+</items>]]></screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--switch-profile</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--switch-profile</option></arg>
+ <arg choice='plain'><option>-S</option></arg>
+ </group>
+ <arg choice='req'><replaceable>path</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>This operation makes <replaceable>path</replaceable> the current
+profile for the user. That is, the symlink
+<filename>~/.nix-profile</filename> is made to point to
+<replaceable>path</replaceable>.</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env -S ~/my-profile</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--list-generations</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <arg choice='plain'><option>--list-generations</option></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>This operation print a list of all the currently existing
+generations for the active profile. These may be switched to using
+the <option>--switch-generation</option> operation. It also prints
+the creation date of the generation, and indicates the current
+generation.</para>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env --list-generations
+ 95 2004-02-06 11:48:24
+ 96 2004-02-06 11:49:01
+ 97 2004-02-06 16:22:45
+ 98 2004-02-06 16:24:33 (current)</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--delete-generations</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <arg choice='plain'><option>--delete-generations</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>generations</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>This operation deletes the specified generations of the current
+profile. The generations can be a list of generation numbers, the
+special value <literal>old</literal> to delete all non-current
+generations, or a value such as <literal>30d</literal> to delete all
+generations older than the specified number of days (except for the
+generation that was active at that point in time).
+Periodically deleting old generations is important to make garbage
+collection effective.</para>
+
+</refsection>
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env --delete-generations 3 4 8
+
+$ nix-env --delete-generations 30d
+
+$ nix-env -p other_profile --delete-generations old</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--switch-generation</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--switch-generation</option></arg>
+ <arg choice='plain'><option>-G</option></arg>
+ </group>
+ <arg choice='req'><replaceable>generation</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>This operation makes generation number
+<replaceable>generation</replaceable> the current generation of the
+active profile. That is, if the
+<filename><replaceable>profile</replaceable></filename> is the path to
+the active profile, then the symlink
+<filename><replaceable>profile</replaceable></filename> is made to
+point to
+<filename><replaceable>profile</replaceable>-<replaceable>generation</replaceable>-link</filename>,
+which is in turn a symlink to the actual user environment in the Nix
+store.</para>
+
+<para>Switching will fail if the specified generation does not exist.</para>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env -G 42
+switching from generation 50 to 42</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--rollback</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-env</command>
+ <arg choice='plain'><option>--rollback</option></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>This operation switches to the “previous” generation of the
+active profile, that is, the highest numbered generation lower than
+the current generation, if it exists. It is just a convenience
+wrapper around <option>--list-generations</option> and
+<option>--switch-generation</option>.</para>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-env --rollback
+switching from generation 92 to 91
+
+$ nix-env --rollback
+error: no generation older than the current (91) exists</screen>
+
+</refsection>
+
+</refsection>
+
+
+<refsection condition="manpage"><title>Environment variables</title>
+
+<variablelist>
+
+ <varlistentry><term><envar>NIX_PROFILE</envar></term>
+
+ <listitem><para>Location of the Nix profile. Defaults to the
+ target of the symlink <filename>~/.nix-profile</filename>, if it
+ exists, or <filename>/nix/var/nix/profiles/default</filename>
+ otherwise.</para></listitem>
+
+ </varlistentry>
+
+ <xi:include href="env-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='env-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-hash.xml b/doc/manual/command-ref/nix-hash.xml
new file mode 100644
index 000000000..897d92e2c
--- /dev/null
+++ b/doc/manual/command-ref/nix-hash.xml
@@ -0,0 +1,165 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-hash">
+
+<refmeta>
+ <refentrytitle>nix-hash</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-hash</refname>
+ <refpurpose>compute the cryptographic hash of a path</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-hash</command>
+ <arg><option>--flat</option></arg>
+ <arg><option>--base32</option></arg>
+ <arg><option>--truncate</option></arg>
+ <arg><option>--type</option> <replaceable>hashAlgo</replaceable></arg>
+ <arg choice='plain' rep='repeat'><replaceable>path</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>nix-hash</command>
+ <arg choice='plain'><option>--to-base16</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>hash</replaceable></arg>
+ </cmdsynopsis>
+ <cmdsynopsis>
+ <command>nix-hash</command>
+ <arg choice='plain'><option>--to-base32</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>hash</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-hash</command> computes the
+cryptographic hash of the contents of each
+<replaceable>path</replaceable> and prints it on standard output. By
+default, it computes an MD5 hash, but other hash algorithms are
+available as well. The hash is printed in hexadecimal.</para>
+
+<para>The hash is computed over a <emphasis>serialisation</emphasis>
+of each path: a dump of the file system tree rooted at the path. This
+allows directories and symlinks to be hashed as well as regular files.
+The dump is in the <emphasis>NAR format</emphasis> produced by <link
+linkend="refsec-nix-store-dump"><command>nix-store</command>
+<option>--dump</option></link>. Thus, <literal>nix-hash
+<replaceable>path</replaceable></literal> yields the same
+cryptographic hash as <literal>nix-store --dump
+<replaceable>path</replaceable> | md5sum</literal>.</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--flat</option></term>
+
+ <listitem><para>Print the cryptographic hash of the contents of
+ each regular file <replaceable>path</replaceable>. That is, do
+ not compute the hash over the dump of
+ <replaceable>path</replaceable>. The result is identical to that
+ produced by the GNU commands <command>md5sum</command> and
+ <command>sha1sum</command>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--base32</option></term>
+
+ <listitem><para>Print the hash in a base-32 representation rather
+ than hexadecimal. This base-32 representation is more compact and
+ can be used in Nix expressions (such as in calls to
+ <function>fetchurl</function>).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--truncate</option></term>
+
+ <listitem><para>Truncate hashes longer than 160 bits (such as
+ SHA-256) to 160 bits.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--type</option> <replaceable>hashAlgo</replaceable></term>
+
+ <listitem><para>Use the specified cryptographic hash algorithm,
+ which can be one of <literal>md5</literal>,
+ <literal>sha1</literal>, and
+ <literal>sha256</literal>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--to-base16</option></term>
+
+ <listitem><para>Don’t hash anything, but convert the base-32 hash
+ representation <replaceable>hash</replaceable> to
+ hexadecimal.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--to-base32</option></term>
+
+ <listitem><para>Don’t hash anything, but convert the hexadecimal
+ hash representation <replaceable>hash</replaceable> to
+ base-32.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>Computing hashes:
+
+<screen>
+$ mkdir test
+$ echo "hello" > test/world
+
+$ nix-hash test/ <lineannotation>(MD5 hash; default)</lineannotation>
+8179d3caeff1869b5ba1744e5a245c04
+
+$ nix-store --dump test/ | md5sum <lineannotation>(for comparison)</lineannotation>
+8179d3caeff1869b5ba1744e5a245c04 -
+
+$ nix-hash --type sha1 test/
+e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6
+
+$ nix-hash --type sha1 --base32 test/
+nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
+
+$ nix-hash --type sha256 --flat test/
+error: reading file `test/': Is a directory
+
+$ nix-hash --type sha256 --flat test/world
+5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03</screen>
+
+</para>
+
+<para>Converting between hexadecimal and base-32:
+
+<screen>
+$ nix-hash --type sha1 --to-base32 e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6
+nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
+
+$ nix-hash --type sha1 --to-base16 nvd61k9nalji1zl9rrdfmsmvyyjqpzg4
+e4fd8ba5f7bbeaea5ace89fe10255536cd60dab6</screen>
+
+</para>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-install-package.xml b/doc/manual/command-ref/nix-install-package.xml
new file mode 100644
index 000000000..fa3b46e22
--- /dev/null
+++ b/doc/manual/command-ref/nix-install-package.xml
@@ -0,0 +1,199 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-install-package">
+
+<refmeta>
+ <refentrytitle>nix-install-package</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-install-package</refname>
+ <refpurpose>install a Nix Package file</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-install-package</command>
+ <arg><option>--non-interactive</option></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--profile</option></arg>
+ <arg choice='plain'><option>-p</option></arg>
+ </group>
+ <replaceable>path</replaceable>
+ </arg>
+ <sbr />
+ <group choice='req'>
+ <arg choice='req'>
+ <option>--url</option>
+ <arg choice='plain'><replaceable>url</replaceable></arg>
+ </arg>
+ <arg choice='req'>
+ <arg choice='plain'><replaceable>file</replaceable></arg>
+ </arg>
+ </group>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-install-package</command> interactively
+installs a Nix Package file (<filename>*.nixpkg</filename>), which is
+a small file that contains a store path to be installed along with the
+URL of a <link linkend="sec-nix-push"><command>nix-push</command>
+manifest</link>. The Nix Package file is either
+<replaceable>file</replaceable>, or automatically downloaded from
+<replaceable>url</replaceable> if the <option>--url</option> switch is
+used.</para>
+
+<para><command>nix-install-package</command> is used in <link
+linkend="sec-one-click">one-click installs</link> to download and
+install pre-built binary packages with all necessary dependencies.
+<command>nix-install-package</command> is intended to be associated
+with the MIME type <literal>application/nix-package</literal> in a web
+browser so that it is invoked automatically when you click on
+<filename>*.nixpkg</filename> files. When invoked, it restarts itself
+in a terminal window (since otherwise it would be invisible when run
+from a browser), asks the user to confirm whether to install the
+package, and if so downloads and installs the package into the user’s
+current profile.</para>
+
+<para>To obtain a window, <command>nix-install-package</command> tries
+to restart itself with <command>xterm</command>,
+<command>konsole</command> and
+<command>gnome-terminal</command>.</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--non-interactive</option></term>
+
+ <listitem><para>Do not open a new terminal window and do not ask
+ for confirmation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--profile</option></term>
+ <term><option>-p</option></term>
+
+ <listitem><para>Install the package into the specified profile
+ rather than the user’s current profile.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>To install <filename>subversion-1.4.0.nixpkg</filename> into the
+user’s current profile, without any prompting:
+
+<screen>
+$ nix-install-package --non-interactive subversion-1.4.0.nixpkg</screen>
+
+</para>
+
+<para>To install the same package from some URL into a different
+profile:
+
+<screen>
+$ nix-install-package --non-interactive -p /nix/var/nix/profiles/eelco \
+ --url http://nix.cs.uu.nl/dist/nix/nixpkgs-0.10pre6622/pkgs/subversion-1.4.0-i686-linux.nixpkg</screen>
+
+</para>
+
+</refsection>
+
+
+<refsection><title>Format of <literal>nixpkg</literal> files</title>
+
+<para>A Nix Package file consists of a single line with the following
+format:
+
+<screen>
+NIXPKG1 <replaceable>manifestURL</replaceable> <replaceable>name</replaceable> <replaceable>system</replaceable> <replaceable>drvPath</replaceable> <replaceable>outPath</replaceable></screen>
+
+The elements are as follows:
+
+<variablelist>
+
+ <varlistentry><term><literal>NIXPKG1</literal></term>
+
+ <listitem><para>The version of the Nix Package
+ file.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><replaceable>manifestURL</replaceable></term>
+
+ <listitem><para>The manifest to be pulled by
+ <command>nix-pull</command>. The manifest must contain
+ <replaceable>outPath</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><replaceable>name</replaceable></term>
+
+ <listitem><para>The symbolic name and version of the
+ package.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><replaceable>system</replaceable></term>
+
+ <listitem><para>The platform identifier of the platform for which
+ this binary package is intended.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><replaceable>drvPath</replaceable></term>
+
+ <listitem><para>The path in the Nix store of the derivation from
+ which <replaceable>outPath</replaceable> was built. Not currently
+ used.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><replaceable>outPath</replaceable></term>
+
+ <listitem><para>The path in the Nix store of the package. After
+ <command>nix-install-package</command> has obtained the manifest
+ from <replaceable>manifestURL</replaceable>, it performs a
+ <literal>nix-env -i</literal> <replaceable>outPath</replaceable>
+ to install the binary package.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>An example follows:
+
+<screen>
+NIXPKG1 http://.../nixpkgs-0.10pre6622/MANIFEST subversion-1.4.0 i686-darwin \
+ /nix/store/4kh60jkp...-subversion-1.4.0.drv \
+ /nix/store/nkw7wpgb...-subversion-1.4.0</screen>
+
+(The line breaks (<literal>\</literal>) are for presentation purposes
+and not part of the actual file.)
+
+</para>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-instantiate.xml b/doc/manual/command-ref/nix-instantiate.xml
new file mode 100644
index 000000000..a4e45cf97
--- /dev/null
+++ b/doc/manual/command-ref/nix-instantiate.xml
@@ -0,0 +1,263 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-instantiate">
+
+<refmeta>
+ <refentrytitle>nix-instantiate</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-instantiate</refname>
+ <refpurpose>instantiate store derivations from Nix expressions</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-instantiate</command>
+ <group>
+ <arg choice='plain'><option>--parse</option></arg>
+ <arg choice='plain'>
+ <option>--eval</option>
+ <arg><option>--strict</option></arg>
+ <arg><option>--xml</option></arg>
+ </arg>
+ </group>
+ <arg><option>--read-write-mode</option></arg>
+ <arg><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr</option></arg>
+ <arg choice='plain'><option>-A</option></arg>
+ </group>
+ <replaceable>attrPath</replaceable>
+ </arg>
+ <arg><option>--add-root</option> <replaceable>path</replaceable></arg>
+ <arg><option>--indirect</option></arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--expr</option></arg>
+ <arg choice='plain'><option>-E</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>files</replaceable></arg>
+ <sbr/>
+ <command>nix-instantiate</command>
+ <arg choice='plain'><option>--file-file</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>files</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-instantiate</command> generates <link
+linkend="gloss-derivation">store derivations</link> from (high-level)
+Nix expressions. It evaluates the Nix expressions in each of
+<replaceable>files</replaceable> (which defaults to
+<replaceable>./default.nix</replaceable>). 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.</para>
+
+<para>If <replaceable>files</replaceable> is the character
+<literal>-</literal>, then a Nix expression will be read from standard
+input.</para>
+
+<para condition="manual">See also <xref linkend="sec-common-options"
+/> for a list of common options.</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry>
+ <term><option>--add-root</option> <replaceable>path</replaceable></term>
+ <term><option>--indirect</option></term>
+
+ <listitem><para>See the <link linkend="opt-add-root">corresponding
+ options</link> in <command>nix-store</command>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--parse</option></term>
+
+ <listitem><para>Just parse the input files, and print their
+ abstract syntax trees on standard output in ATerm
+ format.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--eval</option></term>
+
+ <listitem><para>Just parse and evaluate the input files, and print
+ the resulting values on standard output. No instantiation of
+ store derivations takes place.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--find-file</option></term>
+
+ <listitem><para>Look up the given files in Nix’s search path (as
+ specified by the <envar>NIX_PATH</envar> environment variable).
+ If found, print the corresponding absolute paths on standard
+ output. For instance, if <envar>NIX_PATH</envar> is
+ <literal>nixpkgs=/home/alice/nixpkgs</literal>, then
+ <literal>nix-instantiate --find-file nixpkgs/default.nix</literal>
+ will print
+ <literal>/home/alice/nixpkgs/default.nix</literal>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--xml</option></term>
+
+ <listitem><para>When used with <option>--parse</option> and
+ <option>--eval</option>, print the resulting expression as an
+ XML representation of the abstract syntax tree rather than as an
+ ATerm. The schema is the same as that used by the <link
+ linkend="builtin-toXML"><function>toXML</function>
+ built-in</link>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--json</option></term>
+
+ <listitem><para>When used with <option>--parse</option> and
+ <option>--eval</option>, print the resulting expression as an
+ JSON representation of the abstract syntax tree rather than as an
+ ATerm.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--strict</option></term>
+
+ <listitem><para>When used with <option>--eval</option>,
+ recursively evaluate list elements and attributes. Normally, such
+ sub-expressions are left unevaluated (since the Nix expression
+ language is lazy).</para>
+
+ <warning><para>This option can cause non-termination, because lazy
+ data structures can be infinitely large.</para></warning>
+
+ </listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--read-write-mode</option></term>
+
+ <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>
+
+ </listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<variablelist condition="manpage">
+ <xi:include href="opt-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='opt-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>Instantiating store derivations from a Nix expression, and
+building them using <command>nix-store</command>:
+
+<screen>
+$ nix-instantiate test.nix <lineannotation>(instantiate)</lineannotation>
+/nix/store/cigxbmvy6dzix98dxxh9b6shg7ar5bvs-perl-BerkeleyDB-0.26.drv
+
+$ nix-store -r $(nix-instantiate test.nix) <lineannotation>(build)</lineannotation>
+<replaceable>...</replaceable>
+/nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26 <lineannotation>(output path)</lineannotation>
+
+$ ls -l /nix/store/qhqk4n8ci095g3sdp93x7rgwyh9rdvgk-perl-BerkeleyDB-0.26
+dr-xr-xr-x 2 eelco users 4096 1970-01-01 01:00 lib
+...</screen>
+
+</para>
+
+<para>You can also give a Nix expression on the command line:
+
+<screen>
+$ nix-instantiate -E 'with import &lt;nixpkgs> { }; hello'
+/nix/store/j8s4zyv75a724q38cb0r87rlczaiag4y-hello-2.8.drv
+</screen>
+
+This is equivalent to:
+
+<screen>
+$ nix-instantiate '&lt;nixpkgs>' -A hello
+</screen>
+
+</para>
+
+<para>Parsing and evaluating Nix expressions:
+
+<screen>
+$ nix-instantiate --parse -E '1 + 2'
+1 + 2
+
+$ nix-instantiate --eval -E '1 + 2'
+3
+
+$ nix-instantiate --eval --xml -E '1 + 2'
+<![CDATA[<?xml version='1.0' encoding='utf-8'?>
+<expr>
+ <int value="3" />
+</expr>]]></screen>
+
+</para>
+
+<para>The difference between non-strict and strict evaluation:
+
+<screen>
+$ nix-instantiate --eval --xml -E 'rec { x = "foo"; y = x; }'
+<replaceable>...</replaceable><![CDATA[
+ <attr name="x">
+ <string value="foo" />
+ </attr>
+ <attr name="y">
+ <unevaluated />
+ </attr>]]>
+<replaceable>...</replaceable></screen>
+
+Note that <varname>y</varname> is left unevaluated (the XML
+representation doesn’t attempt to show non-normal forms).
+
+<screen>
+$ nix-instantiate --eval --xml --strict -E 'rec { x = "foo"; y = x; }'
+<replaceable>...</replaceable><![CDATA[
+ <attr name="x">
+ <string value="foo" />
+ </attr>
+ <attr name="y">
+ <string value="foo" />
+ </attr>]]>
+<replaceable>...</replaceable></screen>
+
+</para>
+
+</refsection>
+
+
+<refsection condition="manpage"><title>Environment variables</title>
+
+<variablelist>
+ <xi:include href="env-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='env-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-prefetch-url.xml b/doc/manual/command-ref/nix-prefetch-url.xml
new file mode 100644
index 000000000..885c958ce
--- /dev/null
+++ b/doc/manual/command-ref/nix-prefetch-url.xml
@@ -0,0 +1,94 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-prefetch-url">
+
+<refmeta>
+ <refentrytitle>nix-prefetch-url</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-prefetch-url</refname>
+ <refpurpose>copy a file from a URL into the store and print its hash</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-prefetch-url</command>
+ <arg><option>--type</option> <replaceable>hashAlgo</replaceable></arg>
+ <arg choice='plain'><replaceable>url</replaceable></arg>
+ <arg><replaceable>hash</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-prefetch-url</command> downloads the
+file referenced by the URL <replaceable>url</replaceable>, prints its
+cryptographic hash, and copies it into the Nix store. The file name
+in the store is
+<filename><replaceable>hash</replaceable>-<replaceable>baseName</replaceable></filename>,
+where <replaceable>baseName</replaceable> is everything following the
+final slash in <replaceable>url</replaceable>.</para>
+
+<para>This command is just a convenience for Nix expression writers.
+Often a Nix expression fetches some source distribution from the
+network using the <literal>fetchurl</literal> expression contained in
+Nixpkgs. However, <literal>fetchurl</literal> requires a
+cryptographic hash. If you don't know the hash, you would have to
+download the file first, and then <literal>fetchurl</literal> would
+download it again when you build your Nix expression. Since
+<literal>fetchurl</literal> uses the same name for the downloaded file
+as <command>nix-prefetch-url</command>, the redundant download can be
+avoided.</para>
+
+<para>If <replaceable>hash</replaceable> is specified, then a download
+is not performed if the Nix store already contains a file with the
+same hash and base name. Otherwise, the file is downloaded, and an
+error if signaled if the actual hash of the file does not match the
+specified hash.</para>
+
+<para>This command prints the hash on standard output. Additionally,
+if the environment variable <envar>PRINT_PATH</envar> is set, the path
+of the downloaded file in the Nix store is also printed.</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--type</option> <replaceable>hashAlgo</replaceable></term>
+
+ <listitem><para>Use the specified cryptographic hash algorithm,
+ which can be one of <literal>md5</literal>,
+ <literal>sha1</literal>, and
+ <literal>sha256</literal>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-prefetch-url ftp://ftp.nluug.nl/pub/gnu/make/make-3.80.tar.bz2
+0bbd1df101bc0294d440471e50feca71
+
+$ PRINT_PATH=1 nix-prefetch-url ftp://ftp.nluug.nl/pub/gnu/make/make-3.80.tar.bz2
+0bbd1df101bc0294d440471e50feca71
+/nix/store/wvyz8ifdn7wyz1p3pqyn0ra45ka2l492-make-3.80.tar.bz2</screen>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-pull.xml b/doc/manual/command-ref/nix-pull.xml
new file mode 100644
index 000000000..43d5a6c56
--- /dev/null
+++ b/doc/manual/command-ref/nix-pull.xml
@@ -0,0 +1,51 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-pull">
+
+<refmeta>
+ <refentrytitle>nix-pull</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-pull</refname>
+ <refpurpose>pull substitutes from a network cache</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-pull</command>
+ <arg choice='plain'><replaceable>url</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-pull</command> obtains a list of
+pre-built store paths from the URL <replaceable>url</replaceable>, and
+for each of these store paths, registers a substitute derivation that
+downloads and unpacks it into the Nix store. This is used to speed up
+installations: if you attempt to install something that has already
+been built and stored into the network cache, Nix can transparently
+re-use the pre-built store paths.</para>
+
+<para>The file at <replaceable>url</replaceable> must be compatible
+with the files created by <replaceable>nix-push</replaceable>.</para>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<screen>
+$ nix-pull http://nix.cs.uu.nl/dist/nix/nixpkgs-0.5pre753/MANIFEST</screen>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-push.xml b/doc/manual/command-ref/nix-push.xml
new file mode 100644
index 000000000..9c6cdfa2f
--- /dev/null
+++ b/doc/manual/command-ref/nix-push.xml
@@ -0,0 +1,399 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-push">
+
+<refmeta>
+ <refentrytitle>nix-push</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-push</refname>
+ <refpurpose>generate a binary cache</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-push</command>
+ <arg choice='plain'><option>--dest</option> <replaceable>dest-dir</replaceable></arg>
+ <arg><option>--bzip2</option></arg>
+ <arg><option>--none</option></arg>
+ <arg><option>--force</option></arg>
+ <arg><option>--link</option></arg>
+ <arg><option>--manifest</option></arg>
+ <arg><option>--manifest-path</option> <replaceable>filename</replaceable></arg>
+ <arg><option>--url-prefix</option> <replaceable>url</replaceable></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-push</command> produces a
+<emphasis>binary cache</emphasis>, a directory containing compressed
+Nix archives (NARs) plus some metadata of the closure of the specified
+store paths. This directory can then be made available through a web
+server to other Nix installations, allowing them to skip building from
+source and instead download binaries from the cache
+automatically.</para>
+
+<para><command>nix-push</command> performs the following actions.
+
+<orderedlist>
+
+ <listitem><para>Each path in <replaceable>paths</replaceable> is
+ built (using <link
+ linkend='rsec-nix-store-realise'><command>nix-store
+ --realise</command></link>).</para></listitem>
+
+ <listitem><para>All paths in the closure of
+ <replaceable>paths</replaceable> are determined (using
+ <command>nix-store --query --requisites
+ --include-outputs</command>). Note that since the
+ <option>--include-outputs</option> flag is used, if
+ <replaceable>paths</replaceable> includes a store derivation, you
+ get a combined source/binary distribution (e.g., source tarballs
+ will be included).</para></listitem>
+
+ <listitem><para>All store paths determined in the previous step are
+ packaged into a NAR (using <command>nix-store --dump</command>) and
+ compressed using <command>xz</command> or <command>bzip2</command>.
+ The resulting files have the extension <filename>.nar.xz</filename>
+ or <filename>.nar.bz2</filename>. Also for each store path, Nix
+ generates a file with extension <filename>.narinfo</filename>
+ containing metadata such as the references, cryptographic hash and
+ size of each path.</para></listitem>
+
+ <listitem><para>Optionally, a single <emphasis>manifest</emphasis>
+ file is created that contains the same metadata as the
+ <filename>.narinfo</filename> files. This is for compatibility with
+ Nix versions prior to 1.2 (see <command>nix-pull</command> for
+ details).</para></listitem>
+
+ <listitem><para>A file named <option>nix-cache-info</option> is
+ placed in the destination directory. The existence of this file
+ marks the directory as a binary cache.</para></listitem>
+
+</orderedlist>
+
+</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--dest</option> <replaceable>dest-dir</replaceable></term>
+
+ <listitem><para>Set the destination directory to
+ <replaceable>dir</replaceable>, which is created if it does not
+ exist. This flag is required.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--bzip2</option></term>
+
+ <listitem><para>Compress NARs using <command>bzip2</command>
+ instead of <command>xz -9</command>. The latter compresses about
+ 30% better on typical archives, decompresses about twice as fast,
+ but compresses a lot slower and is not supported by Nix prior to
+ version 1.2.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--none</option></term>
+
+ <listitem><para>Do not compress NARs.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--force</option></term>
+
+ <listitem><para>Overwrite <filename>.narinfo</filename> files if
+ they already exist.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--link</option></term>
+
+ <listitem><para>By default, NARs are generated in the Nix store
+ and then copied to <replaceable>dest-dir</replaceable>. If this
+ option is given, hard links are used instead. This only works if
+ <replaceable>dest-dir</replaceable> is on the same filesystem as
+ the Nix store.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--manifest</option></term>
+
+ <listitem><para>Force the generation of a manifest suitable for
+ use by <command>nix-pull</command>. The manifest is stored as
+ <filename><replaceable>dest-dir</replaceable>/MANIFEST</filename>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--manifest-path</option> <replaceable>filename</replaceable></term>
+
+ <listitem><para>Like <option>--manifest</option>, but store the
+ manifest in <replaceable>filename</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--url-prefix</option> <replaceable>url</replaceable></term>
+
+ <listitem><para>Manifests are expected to contain the absolute
+ URLs of NARs. For generating these URLs, the prefix
+ <replaceable>url</replaceable> is used. It defaults to
+ <uri>file://<replaceable>dest-dir</replaceable></uri>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>To add the closure of Thunderbird to a binary cache:
+
+<screen>
+$ nix-push --dest /tmp/cache $(nix-build -A thunderbird)
+</screen>
+
+Assuming that <filename>/tmp/cache</filename> is exported by a web
+server as <uri>http://example.org/cache</uri>, you can then use this
+cache on another machine to speed up the installation of Thunderbird:
+
+<screen>
+$ nix-build -A thunderbird --option binary-caches http://example.org/cache
+</screen>
+
+Alternatively, you could add <literal>binary-caches =
+http://example.org/cache</literal> to
+<filename>nix.conf</filename>.</para>
+
+<para>To also include build-time dependencies (such as source
+tarballs):
+
+<screen>
+$ nix-push --dest /tmp/cache $(nix-instantiate -A thunderbird)
+</screen>
+
+</para>
+
+<para>To generate a manifest suitable for <command>nix-pull</command>:
+
+<screen>
+$ nix-push --dest /tmp/cache $(nix-build -A thunderbird) --manifest
+</screen>
+
+On another machine you can then do:
+
+<screen>
+$ nix-pull http://example.org/cache
+</screen>
+
+to cause the binaries to be used by subsequent Nix operations.</para>
+
+</refsection>
+
+
+<refsection><title>Binary cache format and operation</title>
+
+<para>A binary cache with URL <replaceable>url</replaceable> only
+denotes a valid binary cache if the file
+<uri><replaceable>url</replaceable>/nix-cache-info</uri> exists. If
+this file does not exist (or cannot be downloaded), the cache is
+ignored. If it does exist, it must be a text file containing cache
+properties. Here’s an example:
+
+<screen>
+StoreDir: /nix/store
+WantMassQuery: 1
+Priority: 10
+</screen>
+
+The properties that are currently supported are:
+
+<variablelist>
+
+ <varlistentry><term><literal>StoreDir</literal></term>
+
+ <listitem><para>The path of the Nix store to which this binary
+ cache applies. Binaries are not relocatable — a binary built for
+ <filename>/nix/store</filename> won’t generally work in
+ <filename>/home/alice/store</filename> — so to prevent binaries
+ from being used in a wrong store, a binary cache is only used if
+ its <literal>StoreDir</literal> matches the local Nix
+ configuration. The default is
+ <filename>/nix/store</filename>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>WantMassQuery</literal></term>
+
+ <listitem><para>Query operations such as <command>nix-env
+ -qas</command> can cause thousands of cache queries, and thus
+ thousands of HTTP requests, to determine which packages are
+ available in binary form. While these requests are small, not
+ every server may appreciate a potential onslaught of queries. If
+ <literal>WantMassQuery</literal> is set to <literal>0</literal>
+ (default), “mass queries” such as <command>nix-env -qas</command>
+ will skip this cache. Thus a package may appear not to have a
+ binary substitute. However, the binary will still be used when
+ you actually install the package. If
+ <literal>WantMassQuery</literal> is set to <literal>1</literal>,
+ mass queries will use this cache.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>Priority</literal></term>
+
+ <listitem><para>Each binary cache has a priority (defaulting to
+ 50). Binary caches are checked for binaries in order of ascending
+ priority; thus a higher number denotes a lower priority. The
+ binary cache <uri>http://cache.nixos.org</uri> has priority
+ 40.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>Every time Nix needs to build some store path
+<replaceable>p</replaceable>, it will check each configured binary
+cache to see if it has a NAR file for <replaceable>p</replaceable>,
+until it finds one. If no cache has a NAR, Nix will fall back to
+building the path from source (if applicable). To see if a cache with
+URL <replaceable>url</replaceable> has a binary for
+<replaceable>p</replaceable>, Nix fetches
+<replaceable>url/h</replaceable>, where <replaceable>h</replaceable>
+is the hash part of <replaceable>p</replaceable>. Thus, if we have a
+cache <uri>http://cache.nixos.org</uri> and we want to obtain
+the store path
+<screen>
+/nix/store/a8922c0h87iilxzzvwn2hmv8x210aqb9-glibc-2.7
+</screen>
+then Nix will attempt to fetch
+<screen>
+http://cache.nixos.org/a8922c0h87iilxzzvwn2hmv8x210aqb9.narinfo
+</screen>
+(Commands such as <command>nix-env -qas</command> will issue an HTTP
+HEAD request, since it only needs to know if the
+<filename>.narinfo</filename> file exists.) The
+<filename>.narinfo</filename> file is a simple text file that looks
+like this:
+
+<screen>
+StorePath: /nix/store/a8922c0h87iilxzzvwn2hmv8x210aqb9-glibc-2.7
+URL: nar/0zzjpdz46mdn74v09m053yczlz4am038g8r74iy8w43gx8801h70.nar.bz2
+Compression: bzip2
+FileHash: sha256:0zzjpdz46mdn74v09m053yczlz4am038g8r74iy8w43gx8801h70
+FileSize: 24473768
+NarHash: sha256:0s491y1h9hxj5ghiizlxk7ax6jwbha00zwn7lpyd5xg5bhf60vzg
+NarSize: 109521136
+References: 2ma2k0ys8knh4an48n28vigcmc2z8773-linux-headers-2.6.23.16 ...
+Deriver: 7akyyc87ka32xwmqza9dvyg5pwx3j212-glibc-2.7.drv
+</screen>
+
+The fields are as follows:
+
+<variablelist>
+
+ <varlistentry><term><literal>StorePath</literal></term>
+
+ <listitem><para>The full store path, including the name part
+ (e.g., <literal>glibc-2.7</literal>). It must match the
+ requested store path.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>URL</literal></term>
+
+ <listitem><para>The URL of the NAR, relative to the binary cache
+ URL.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>Compression</literal></term>
+
+ <listitem><para>The compression method; either
+ <literal>xz</literal> or
+ <literal>bzip2</literal>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>FileHash</literal></term>
+
+ <listitem><para>The SHA-256 hash of the compressed
+ NAR.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>FileSize</literal></term>
+
+ <listitem><para>The size of the compressed NAR.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>NarHash</literal></term>
+
+ <listitem><para>The SHA-256 hash of the uncompressed NAR. This is
+ equal to the hash of the store path as returned by
+ <command>nix-store -q --hash
+ <replaceable>p</replaceable></command>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>NarSize</literal></term>
+
+ <listitem><para>The size of the uncompressed NAR.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>References</literal></term>
+
+ <listitem><para>The references of the store path, without the Nix
+ store prefix.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>Deriver</literal></term>
+
+ <listitem><para>The deriver of the store path, without the Nix
+ store prefix. This field is optional.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>System</literal></term>
+
+ <listitem><para>The Nix platform type of this binary, if known.
+ This field is optional.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>Thus, in our example, after recursively ensuring that the
+references exist (e.g.,
+<filename>/nix/store/2ma2k0ys8knh4an48n28vigcmc2z8773-linux-headers-2.6.23.16</filename>),
+Nix will fetch <screen>
+http://cache.nixos.org/nar/0zzjpdz46mdn74v09m053yczlz4am038g8r74iy8w43gx8801h70.nar.bz2
+</screen> and decompress and unpack it to
+<filename>/nix/store/a8922c0h87iilxzzvwn2hmv8x210aqb9-glibc-2.7</filename>.</para>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-shell.xml b/doc/manual/command-ref/nix-shell.xml
new file mode 100644
index 000000000..1cb2ebfdd
--- /dev/null
+++ b/doc/manual/command-ref/nix-shell.xml
@@ -0,0 +1,201 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-shell">
+
+<refmeta>
+ <refentrytitle>nix-shell</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-shell</refname>
+ <refpurpose>start an interactive shell based on a Nix expression</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-shell</command>
+ <arg><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg><option>--argstr</option> <replaceable>name</replaceable> <replaceable>value</replaceable></arg>
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr</option></arg>
+ <arg choice='plain'><option>-A</option></arg>
+ </group>
+ <replaceable>attrPath</replaceable>
+ </arg>
+ <arg><option>--command</option> <replaceable>cmd</replaceable></arg>
+ <arg><option>--exclude</option> <replaceable>regexp</replaceable></arg>
+ <arg><option>--pure</option></arg>
+ <group choice='req'>
+ <group choice='plain'>
+ <group>
+ <arg choice='plain'><option>--packages</option></arg>
+ <arg choice='plain'><option>-p</option></arg>
+ </group>
+ <replaceable>packages</replaceable>
+ </group>
+ <arg><replaceable>path</replaceable></arg>
+ </group>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-shell</command> will build the
+dependencies of the specified derivation, but not the derivation
+itself. It will then start an interactive shell in which all
+environment variables defined by the derivation
+<replaceable>path</replaceable> have been set to their corresponding
+values, and the script <literal>$stdenv/setup</literal> has been
+sourced. This is useful for reproducing the environment of a
+derivation for development.</para>
+
+<para>If <replaceable>path</replaceable> is not given,
+<command>nix-shell</command> defaults to
+<filename>shell.nix</filename> if it exists, and
+<filename>default.nix</filename> otherwise.</para>
+
+<para>If the derivation defines the variable
+<varname>shellHook</varname>, it will be evaluated after
+<literal>$stdenv/setup</literal> has been sourced. Since this hook is
+not executed by regular Nix builds, it allows you to perform
+initialisation specific to <command>nix-shell</command>. For example,
+the derivation attribute
+
+<programlisting>
+shellHook =
+ ''
+ echo "Hello shell"
+ '';
+</programlisting>
+
+will cause <command>nix-shell</command> to print <literal>Hello shell</literal>.</para>
+
+</refsection>
+
+
+<refsection><title>Options</title>
+
+<para>All options not listed here are passed to <command>nix-store
+--realise</command>, except for <option>--arg</option> and
+<option>--attr</option> / <option>-A</option> which are passed to
+<command>nix-instantiate</command>. <phrase condition="manual">See
+also <xref linkend="sec-common-options" />.</phrase></para>
+
+<variablelist>
+
+ <varlistentry><term><option>--command</option> <replaceable>cmd</replaceable></term>
+
+ <listitem><para>In the environment of the derivation, run the
+ shell command <replaceable>cmd</replaceable> instead of starting
+ an interactive shell. However, if you end the shell command with
+ <literal>return</literal>, you still get an interactive shell.
+ This can be useful for doing any additional
+ initialisation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--exclude</option> <replaceable>regexp</replaceable></term>
+
+ <listitem><para>Do not build any dependencies whose store path
+ matches the regular expression <replaceable>regexp</replaceable>.
+ This option may be specified multiple times.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--pure</option></term>
+
+ <listitem><para>If this flag is specified, the environment is
+ almost entirely cleared before the interactive shell is started,
+ so you get an environment that more closely corresponds to the
+ “real” Nix build. A few variables, in particular
+ <envar>HOME</envar>, <envar>USER</envar> and
+ <envar>DISPLAY</envar>, are retained. Note that
+ <filename>~/.bashrc</filename> and (depending on your Bash
+ installation) <filename>/etc/bashrc</filename> are still sourced,
+ so any variables set there will affect the interactive
+ shell.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--packages</option> / <option>-p</option></term>
+
+ <listitem><para>Set up an environment in which the specified
+ packages are present. The command line arguments are interpreted
+ as attribute names inside the Nix Packages collection. Thus,
+ <literal>nix-shell -p libjpeg openjdk</literal> will start a shell
+ in which the packages denoted by the attribute names
+ <varname>libjpeg</varname> and <varname>openjdk</varname> are
+ present.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<para>The following common options are supported:</para>
+
+<variablelist condition="manpage">
+ <xi:include href="opt-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='opt-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>To build the dependencies of the package Pan, and start an
+interactive shell in which to build it:
+
+<screen>
+$ nix-shell '&lt;nixpkgs>' -A pan
+[nix-shell]$ unpackPhase
+[nix-shell]$ cd pan-*
+[nix-shell]$ configurePhase
+[nix-shell]$ buildPhase
+[nix-shell]$ ./pan/gui/pan
+</screen>
+
+To clear the environment first, and do some additional automatic
+initialisation of the interactive shell:
+
+<screen>
+$ nix-shell '&lt;nixpkgs>' -A pan --pure \
+ --command 'export NIX_DEBUG=1; export NIX_CORES=8; return'
+</screen>
+
+Nix expressions can also be given on the command line. For instance,
+the following starts a shell containing the packages
+<literal>sqlite</literal> and <literal>libX11</literal>:
+
+<screen>
+$ nix-shell -E 'with import &lt;nixpkgs> { }; runCommand "dummy" { buildInputs = [ sqlite xorg.libX11 ]; } ""'
+</screen>
+
+A shorter way to do the same is:
+
+<screen>
+$ nix-shell -p sqlite xorg.libX11
+[nix-shell]$ echo $NIX_LDFLAGS
+… -L/nix/store/j1zg5v…-sqlite-3.8.0.2/lib -L/nix/store/0gmcz9…-libX11-1.6.1/lib …
+</screen>
+
+</para>
+
+</refsection>
+
+
+<refsection condition="manpage"><title>Environment variables</title>
+
+<variablelist>
+ <xi:include href="env-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='env-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/nix-store.xml b/doc/manual/command-ref/nix-store.xml
new file mode 100644
index 000000000..ae0f683f2
--- /dev/null
+++ b/doc/manual/command-ref/nix-store.xml
@@ -0,0 +1,1352 @@
+<refentry xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id="sec-nix-store">
+
+<refmeta>
+ <refentrytitle>nix-store</refentrytitle>
+ <manvolnum>1</manvolnum>
+ <refmiscinfo class="source">Nix</refmiscinfo>
+ <refmiscinfo class="version"><xi:include href="version.txt" parse="text"/></refmiscinfo>
+</refmeta>
+
+<refnamediv>
+ <refname>nix-store</refname>
+ <refpurpose>manipulate or query the Nix store</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="opt-common-syn.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(/db:nop/*)" />
+ <arg><option>--add-root</option> <replaceable>path</replaceable></arg>
+ <arg><option>--indirect</option></arg>
+ <arg choice='plain'><replaceable>operation</replaceable></arg>
+ <arg rep='repeat'><replaceable>options</replaceable></arg>
+ <arg rep='repeat'><replaceable>arguments</replaceable></arg>
+ </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsection><title>Description</title>
+
+<para>The command <command>nix-store</command> performs primitive
+operations on the Nix store. You generally do not need to run this
+command manually.</para>
+
+<para><command>nix-store</command> takes exactly one
+<emphasis>operation</emphasis> flag which indicates the subcommand to
+be performed. These are documented below.</para>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Common options</title>
+
+<para>This section lists the options that are common to all
+operations. These options are allowed for every subcommand, though
+they may not always have an effect. <phrase condition="manual">See
+also <xref linkend="sec-common-options" /> for a list of common
+options.</phrase></para>
+
+<variablelist>
+
+ <varlistentry xml:id="opt-add-root"><term><option>--add-root</option> <replaceable>path</replaceable></term>
+
+ <listitem><para>Causes the result of a realisation
+ (<option>--realise</option> and <option>--force-realise</option>)
+ to be registered as a root of the garbage collector<phrase
+ condition="manual"> (see <xref linkend="ssec-gc-roots"
+ />)</phrase>. The root is stored in
+ <replaceable>path</replaceable>, which must be inside a directory
+ that is scanned for roots by the garbage collector (i.e.,
+ typically in a subdirectory of
+ <filename>/nix/var/nix/gcroots/</filename>)
+ <emphasis>unless</emphasis> the <option>--indirect</option> flag
+ is used.</para>
+
+ <para>If there are multiple results, then multiple symlinks will
+ be created by sequentially numbering symlinks beyond the first one
+ (e.g., <filename>foo</filename>, <filename>foo-2</filename>,
+ <filename>foo-3</filename>, and so on).</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--indirect</option></term>
+
+ <listitem>
+
+ <para>In conjunction with <option>--add-root</option>, this option
+ allows roots to be stored <emphasis>outside</emphasis> of the GC
+ roots directory. This is useful for commands such as
+ <command>nix-build</command> that place a symlink to the build
+ result in the current directory; such a build result should not be
+ garbage-collected unless the symlink is removed.</para>
+
+ <para>The <option>--indirect</option> flag causes a uniquely named
+ symlink to <replaceable>path</replaceable> to be stored in
+ <filename>/nix/var/nix/gcroots/auto/</filename>. For instance,
+
+ <screen>
+$ nix-store --add-root /home/eelco/bla/result --indirect -r <replaceable>...</replaceable>
+
+$ ls -l /nix/var/nix/gcroots/auto
+lrwxrwxrwx 1 ... 2005-03-13 21:10 dn54lcypm8f8... -> /home/eelco/bla/result
+
+$ ls -l /home/eelco/bla/result
+lrwxrwxrwx 1 ... 2005-03-13 21:10 /home/eelco/bla/result -> /nix/store/1r11343n6qd4...-f-spot-0.0.10</screen>
+
+ Thus, when <filename>/home/eelco/bla/result</filename> is removed,
+ the GC root in the <filename>auto</filename> directory becomes a
+ dangling symlink and will be ignored by the collector.</para>
+
+ <warning><para>Note that it is not possible to move or rename
+ indirect GC roots, since the symlink in the
+ <filename>auto</filename> directory will still point to the old
+ location.</para></warning>
+
+ </listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<variablelist condition="manpage">
+ <xi:include href="opt-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='opt-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id='rsec-nix-store-realise'><title>Operation <option>--realise</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--realise</option></arg>
+ <arg choice='plain'><option>-r</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ <arg><option>--dry-run</option></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--realise</option> essentially “builds”
+the specified store paths. Realisation is a somewhat overloaded term:
+
+<itemizedlist>
+
+ <listitem><para>If the store path is a
+ <emphasis>derivation</emphasis>, realisation ensures that the output
+ paths of the derivation are <link
+ linkend="gloss-validity">valid</link> (i.e., the output path and its
+ closure exist in the file system). This can be done in several
+ ways. First, it is possible that the outputs are already valid, in
+ which case we are done immediately. Otherwise, there may be <link
+ linkend="gloss-substitute">substitutes</link> that produce the
+ outputs (e.g., by downloading them). Finally, the outputs can be
+ produced by performing the build action described by the
+ derivation.</para></listitem>
+
+ <listitem><para>If the store path is not a derivation, realisation
+ ensures that the specified path is valid (i.e., it and its closure
+ exist in the file system). If the path is already valid, we are
+ done immediately. Otherwise, the path and any missing paths in its
+ closure may be produced through substitutes. If there are no
+ (successful) subsitutes, realisation fails.</para></listitem>
+
+</itemizedlist>
+
+</para>
+
+<para>The output path of each derivation is printed on standard
+output. (For non-derivations argument, the argument itself is
+printed.)</para>
+
+<para>The following flags are available:</para>
+
+<variablelist>
+
+ <varlistentry><term><option>--dry-run</option></term>
+
+ <listitem><para>Print on standard error a description of what
+ packages would be built or downloaded, without actually performing
+ the operation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--ignore-unknown</option></term>
+
+ <listitem><para>If a non-derivation path does not have a
+ substitute, then silently ignore it.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>This operation is typically used to build store derivations
+produced by <link
+linkend="sec-nix-instantiate"><command>nix-instantiate</command></link>:
+
+<screen>
+$ nix-store -r $(nix-instantiate ./test.nix)
+/nix/store/31axcgrlbfsxzmfff1gyj1bf62hvkby2-aterm-2.3.1</screen>
+
+This is essentially what <link
+linkend="sec-nix-build"><command>nix-build</command></link> does.</para>
+
+</refsection>
+
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id='rsec-nix-store-gc'><title>Operation <option>--gc</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--gc</option></arg>
+ <group>
+ <arg choice='plain'><option>--print-roots</option></arg>
+ <arg choice='plain'><option>--print-live</option></arg>
+ <arg choice='plain'><option>--print-dead</option></arg>
+ <arg choice='plain'><option>--delete</option></arg>
+ </group>
+ <arg><option>--max-freed</option> <replaceable>bytes</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>Without additional flags, the operation <option>--gc</option>
+performs a garbage collection on the Nix store. That is, all paths in
+the Nix store not reachable via file system references from a set of
+“roots”, are deleted.</para>
+
+<para>The following suboperations may be specified:</para>
+
+<variablelist>
+
+ <varlistentry><term><option>--print-roots</option></term>
+
+ <listitem><para>This operation prints on standard output the set
+ of roots used by the garbage collector. What constitutes a root
+ is described in <xref linkend="ssec-gc-roots"
+ />.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--print-live</option></term>
+
+ <listitem><para>This operation prints on standard output the set
+ of “live” store paths, which are all the store paths reachable
+ from the roots. Live paths should never be deleted, since that
+ would break consistency — it would become possible that
+ applications are installed that reference things that are no
+ longer present in the store.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--print-dead</option></term>
+
+ <listitem><para>This operation prints out on standard output the
+ set of “dead” store paths, which is just the opposite of the set
+ of live paths: any path in the store that is not live (with
+ respect to the roots) is dead.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--delete</option></term>
+
+ <listitem><para>This operation performs an actual garbage
+ collection. All dead paths are removed from the
+ store. This is the default.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+<para>By default, all unreachable paths are deleted. The following
+options control what gets deleted and in what order:
+
+<variablelist>
+
+ <varlistentry><term><option>--max-freed</option> <replaceable>bytes</replaceable></term>
+
+ <listitem><para>Keep deleting paths until at least
+ <replaceable>bytes</replaceable> bytes have been deleted, then
+ stop. The argument <replaceable>bytes</replaceable> can be
+ followed by the multiplicative suffix <literal>K</literal>,
+ <literal>M</literal>, <literal>G</literal> or
+ <literal>T</literal>, denoting KiB, MiB, GiB or TiB
+ units.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+<para>The behaviour of the collector is also influenced by the <link
+linkend="conf-gc-keep-outputs"><literal>gc-keep-outputs</literal></link>
+and <link
+linkend="conf-gc-keep-derivations"><literal>gc-keep-derivations</literal></link>
+variables in the Nix configuration file.</para>
+
+<para>With <option>--delete</option>, the collector prints the total
+number of freed bytes when it finishes (or when it is interrupted).
+With <option>--print-dead</option>, it prints the number of bytes that
+would be freed.</para>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>To delete all unreachable paths, just do:
+
+<screen>
+$ nix-store --gc
+deleting `/nix/store/kq82idx6g0nyzsp2s14gfsc38npai7lf-cairo-1.0.4.tar.gz.drv'
+<replaceable>...</replaceable>
+8825586 bytes freed (8.42 MiB)</screen>
+
+</para>
+
+<para>To delete at least 100 MiBs of unreachable paths:
+
+<screen>
+$ nix-store --gc --max-freed $((100 * 1024 * 1024))</screen>
+
+</para>
+
+</refsection>
+
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--delete</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--delete</option></arg>
+ <arg><option>--ignore-liveness</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--delete</option> deletes the store paths
+<replaceable>paths</replaceable> from the Nix store, but only if it is
+safe to do so; that is, when the path is not reachable from a root of
+the garbage collector. This means that you can only delete paths that
+would also be deleted by <literal>nix-store --gc</literal>. Thus,
+<literal>--delete</literal> is a more targeted version of
+<literal>--gc</literal>.</para>
+
+<para>With the option <option>--ignore-liveness</option>, reachability
+from the roots is ignored. However, the path still won’t be deleted
+if there are other paths in the store that refer to it (i.e., depend
+on it).</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --delete /nix/store/zq0h41l75vlb4z45kzgjjmsjxvcv1qk7-mesa-6.4
+0 bytes freed (0.00 MiB)
+error: cannot delete path `/nix/store/zq0h41l75vlb4z45kzgjjmsjxvcv1qk7-mesa-6.4' since it is still alive</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id='refsec-nix-store-query'><title>Operation <option>--query</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--query</option></arg>
+ <arg choice='plain'><option>-q</option></arg>
+ </group>
+ <group choice='req'>
+ <arg choice='plain'><option>--outputs</option></arg>
+ <arg choice='plain'><option>--requisites</option></arg>
+ <arg choice='plain'><option>-R</option></arg>
+ <arg choice='plain'><option>--references</option></arg>
+ <arg choice='plain'><option>--referrers</option></arg>
+ <arg choice='plain'><option>--referrers-closure</option></arg>
+ <arg choice='plain'><option>--deriver</option></arg>
+ <arg choice='plain'><option>--deriver</option></arg>
+ <arg choice='plain'><option>--graph</option></arg>
+ <arg choice='plain'><option>--tree</option></arg>
+ <arg choice='plain'><option>--binding</option> <replaceable>name</replaceable></arg>
+ <arg choice='plain'><option>--hash</option></arg>
+ <arg choice='plain'><option>--size</option></arg>
+ <arg choice='plain'><option>--roots</option></arg>
+ </group>
+ <arg><option>--use-output</option></arg>
+ <arg><option>-u</option></arg>
+ <arg><option>--force-realise</option></arg>
+ <arg><option>-f</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--query</option> displays various bits of
+information about the store paths . The queries are described below. At
+most one query can be specified. The default query is
+<option>--outputs</option>.</para>
+
+<para>The paths <replaceable>paths</replaceable> may also be symlinks
+from outside of the Nix store, to the Nix store. In that case, the
+query is applied to the target of the symlink.</para>
+
+
+</refsection>
+
+
+<refsection><title>Common query options</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--use-output</option></term>
+ <term><option>-u</option></term>
+
+ <listitem><para>For each argument to the query that is a store
+ derivation, apply the query to the output path of the derivation
+ instead.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--force-realise</option></term>
+ <term><option>-f</option></term>
+
+ <listitem><para>Realise each argument to the query first (see
+ <link linkend="rsec-nix-store-realise"><command>nix-store
+ --realise</command></link>).</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection xml:id='nixref-queries'><title>Queries</title>
+
+<variablelist>
+
+ <varlistentry><term><option>--outputs</option></term>
+
+ <listitem><para>Prints out the <link
+ linkend="gloss-output-path">output paths</link> of the store
+ derivations <replaceable>paths</replaceable>. These are the paths
+ that will be produced when the derivation is
+ built.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--requisites</option></term>
+ <term><option>-R</option></term>
+
+ <listitem><para>Prints out the <link
+ linkend="gloss-closure">closure</link> of the store path
+ <replaceable>paths</replaceable>.</para>
+
+ <para>This query has one option:</para>
+
+ <variablelist>
+
+ <varlistentry><term><option>--include-outputs</option></term>
+
+ <listitem><para>Also include the output path of store
+ derivations, and their closures.</para></listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ <para>This query can be used to implement various kinds of
+ deployment. A <emphasis>source deployment</emphasis> is obtained
+ by distributing the closure of a store derivation. A
+ <emphasis>binary deployment</emphasis> is obtained by distributing
+ the closure of an output path. A <emphasis>cache
+ deployment</emphasis> (combined source/binary deployment,
+ including binaries of build-time-only dependencies) is obtained by
+ distributing the closure of a store derivation and specifying the
+ option <option>--include-outputs</option>.</para>
+
+ </listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--references</option></term>
+
+ <listitem><para>Prints the set of <link
+ linkend="gloss-reference">references</link> of the store paths
+ <replaceable>paths</replaceable>, that is, their immediate
+ dependencies. (For <emphasis>all</emphasis> dependencies, use
+ <option>--requisites</option>.)</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--referrers</option></term>
+
+ <listitem><para>Prints the set of <emphasis>referrers</emphasis> of
+ the store paths <replaceable>paths</replaceable>, that is, the
+ store paths currently existing in the Nix store that refer to one
+ of <replaceable>paths</replaceable>. Note that contrary to the
+ references, the set of referrers is not constant; it can change as
+ store paths are added or removed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--referrers-closure</option></term>
+
+ <listitem><para>Prints the closure of the set of store paths
+ <replaceable>paths</replaceable> under the referrers relation; that
+ is, all store paths that directly or indirectly refer to one of
+ <replaceable>paths</replaceable>. These are all the path currently
+ in the Nix store that are dependent on
+ <replaceable>paths</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--deriver</option></term>
+
+ <listitem><para>Prints the <link
+ linkend="gloss-deriver">deriver</link> of the store paths
+ <replaceable>paths</replaceable>. If the path has no deriver
+ (e.g., if it is a source file), or if the deriver is not known
+ (e.g., in the case of a binary-only deployment), the string
+ <literal>unknown-deriver</literal> is printed.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--graph</option></term>
+
+ <listitem><para>Prints the references graph of the store paths
+ <replaceable>paths</replaceable> in the format of the
+ <command>dot</command> tool of AT&amp;T's <link
+ xlink:href="http://www.graphviz.org/">Graphviz package</link>.
+ This can be used to visualise dependency graphs. To obtain a
+ build-time dependency graph, apply this to a store derivation. To
+ obtain a runtime dependency graph, apply it to an output
+ path.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--tree</option></term>
+
+ <listitem><para>Prints the references graph of the store paths
+ <replaceable>paths</replaceable> as a nested ASCII tree.
+ References are ordered by descending closure size; this tends to
+ flatten the tree, making it more readable. The query only
+ recurses into a store path when it is first encountered; this
+ prevents a blowup of the tree representation of the
+ graph.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--binding</option> <replaceable>name</replaceable></term>
+
+ <listitem><para>Prints the value of the attribute
+ <replaceable>name</replaceable> (i.e., environment variable) of
+ the store derivations <replaceable>paths</replaceable>. It is an
+ error for a derivation to not have the specified
+ attribute.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--hash</option></term>
+
+ <listitem><para>Prints the SHA-256 hash of the contents of the
+ store paths <replaceable>paths</replaceable> (that is, the hash of
+ the output of <command>nix-store --dump</command> on the given
+ paths). Since the hash is stored in the Nix database, this is a
+ fast operation.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--size</option></term>
+
+ <listitem><para>Prints the size in bytes of the contents of the
+ store paths <replaceable>paths</replaceable> — to be precise, the
+ size of the output of <command>nix-store --dump</command> on the
+ given paths. Note that the actual disk space required by the
+ store paths may be higher, especially on filesystems with large
+ cluster sizes.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--roots</option></term>
+
+ <listitem><para>Prints the garbage collector roots that point,
+ directly or indirectly, at the store paths
+ <replaceable>paths</replaceable>.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</refsection>
+
+
+<refsection><title>Examples</title>
+
+<para>Print the closure (runtime dependencies) of the
+<command>svn</command> program in the current user environment:
+
+<screen>
+$ nix-store -qR $(which svn)
+/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4
+/nix/store/9lz9yc6zgmc0vlqmn2ipcpkjlmbi51vv-glibc-2.3.4
+<replaceable>...</replaceable></screen>
+
+</para>
+
+<para>Print the build-time dependencies of <command>svn</command>:
+
+<screen>
+$ nix-store -qR $(nix-store -qd $(which svn))
+/nix/store/02iizgn86m42q905rddvg4ja975bk2i4-grep-2.5.1.tar.bz2.drv
+/nix/store/07a2bzxmzwz5hp58nf03pahrv2ygwgs3-gcc-wrapper.sh
+/nix/store/0ma7c9wsbaxahwwl04gbw3fcd806ski4-glibc-2.3.4.drv
+<replaceable>... lots of other paths ...</replaceable></screen>
+
+The difference with the previous example is that we ask the closure of
+the derivation (<option>-qd</option>), not the closure of the output
+path that contains <command>svn</command>.</para>
+
+<para>Show the build-time dependencies as a tree:
+
+<screen>
+$ nix-store -q --tree $(nix-store -qd $(which svn))
+/nix/store/7i5082kfb6yjbqdbiwdhhza0am2xvh6c-subversion-1.1.4.drv
++---/nix/store/d8afh10z72n8l1cr5w42366abiblgn54-builder.sh
++---/nix/store/fmzxmpjx2lh849ph0l36snfj9zdibw67-bash-3.0.drv
+| +---/nix/store/570hmhmx3v57605cqg9yfvvyh0nnb8k8-bash
+| +---/nix/store/p3srsbd8dx44v2pg6nbnszab5mcwx03v-builder.sh
+<replaceable>...</replaceable></screen>
+
+</para>
+
+<para>Show all paths that depend on the same OpenSSL library as
+<command>svn</command>:
+
+<screen>
+$ nix-store -q --referrers $(nix-store -q --binding openssl $(nix-store -qd $(which svn)))
+/nix/store/23ny9l9wixx21632y2wi4p585qhva1q8-sylpheed-1.0.0
+/nix/store/5mbglq5ldqld8sj57273aljwkfvj22mc-subversion-1.1.4
+/nix/store/dpmvp969yhdqs7lm2r1a3gng7pyq6vy4-subversion-1.1.3
+/nix/store/l51240xqsgg8a7yrbqdx1rfzyv6l26fx-lynx-2.8.5</screen>
+
+</para>
+
+<para>Show all paths that directly or indirectly depend on the Glibc
+(C library) used by <command>svn</command>:
+
+<screen>
+$ nix-store -q --referrers-closure $(ldd $(which svn) | grep /libc.so | awk '{print $3}')
+/nix/store/034a6h4vpz9kds5r6kzb9lhh81mscw43-libgnomeprintui-2.8.2
+/nix/store/15l3yi0d45prm7a82pcrknxdh6nzmxza-gawk-3.1.4
+<replaceable>...</replaceable></screen>
+
+Note that <command>ldd</command> is a command that prints out the
+dynamic libraries used by an ELF executable.</para>
+
+<para>Make a picture of the runtime dependency graph of the current
+user environment:
+
+<screen>
+$ nix-store -q --graph ~/.nix-profile | dot -Tps > graph.ps
+$ gv graph.ps</screen>
+
+</para>
+
+<para>Show every garbage collector root that points to a store path
+that depends on <command>svn</command>:
+
+<screen>
+$ nix-store -q --roots $(which svn)
+/nix/var/nix/profiles/default-81-link
+/nix/var/nix/profiles/default-82-link
+/nix/var/nix/profiles/per-user/eelco/profile-97-link
+</screen>
+
+</para>
+
+</refsection>
+
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<!--
+<refsection xml:id="rsec-nix-store-reg-val"><title>Operation <option>-XXX-register-validity</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>-XXX-register-validity</option></arg>
+</cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>TODO</para>
+
+</refsection>
+
+</refsection>
+-->
+
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--add</option></title>
+
+<refsection><title>Synopsis</title>
+
+<cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--add</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+</cmdsynopsis>
+
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--add</option> adds the specified paths to
+the Nix store. It prints the resulting paths in the Nix store on
+standard output.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --add ./foo.c
+/nix/store/m7lrha58ph6rcnv109yzx1nk1cj7k7zf-foo.c</screen>
+
+</refsection>
+
+</refsection>
+
+
+
+<!--######################################################################-->
+
+<refsection xml:id='refsec-nix-store-verify'><title>Operation <option>--verify</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--verify</option></arg>
+ <arg><option>--check-contents</option></arg>
+ <arg><option>--repair</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--verify</option> verifies the internal
+consistency of the Nix database, and the consistency between the Nix
+database and the Nix store. Any inconsistencies encountered are
+automatically repaired. Inconsistencies are generally the result of
+the Nix store or database being modified by non-Nix tools, or of bugs
+in Nix itself.</para>
+
+<para>This operation has the following options:
+
+<variablelist>
+
+ <varlistentry><term><option>--check-contents</option></term>
+
+ <listitem><para>Checks that the contents of every valid store path
+ has not been altered by computing a SHA-256 hash of the contents
+ and comparing it with the hash stored in the Nix database at build
+ time. Paths that have been modified are printed out. For large
+ stores, <option>--check-contents</option> is obviously quite
+ slow.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><option>--repair</option></term>
+
+ <listitem><para>If any valid path is missing from the store, or
+ (if <option>--check-contents</option> is given) the contents of a
+ valid path has been modified, then try to repair the path by
+ redownloading it. See <command>nix-store --repair-path</command>
+ for details.</para></listitem>
+
+ </varlistentry>
+
+</variablelist>
+
+</para>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--verify-path</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--verify-path</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--verify-path</option> compares the
+contents of the given store paths to their cryptographic hashes stored
+in Nix’s database. For every changed path, it prints a warning
+message. The exit status is 0 if no path has changed, and 1
+otherwise.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<para>To verify the integrity of the <command>svn</command> command and all its dependencies:
+
+<screen>
+$ nix-store --verify-path $(nix-store -qR $(which svn))
+</screen>
+
+</para>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--repair-path</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--repair-path</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--repair-path</option> attempts to
+“repair” the specified paths by redownloading them using the available
+substituters. If no substitutes are available, then repair is not
+possible.</para>
+
+<warning><para>During repair, there is a very small time window during
+which the old path (if it exists) is moved out of the way and replaced
+with the new path. If repair is interrupted in between, then the
+system may be left in a broken state (e.g., if the path contains a
+critical system component like the GNU C Library).</para></warning>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --verify-path /nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13
+path `/nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13' was modified!
+ expected hash `2db57715ae90b7e31ff1f2ecb8c12ec1cc43da920efcbe3b22763f36a1861588',
+ got `481c5aa5483ebc97c20457bb8bca24deea56550d3985cda0027f67fe54b808e4'
+
+$ nix-store --repair-path /nix/store/dj7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13
+fetching path `/nix/store/d7a81wsm1ijwwpkks3725661h3263p5-glibc-2.13'...
+…
+</screen>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection xml:id='refsec-nix-store-dump'><title>Operation <option>--dump</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--dump</option></arg>
+ <arg choice='plain'><replaceable>path</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--dump</option> produces a NAR (Nix
+ARchive) file containing the contents of the file system tree rooted
+at <replaceable>path</replaceable>. The archive is written to
+standard output.</para>
+
+<para>A NAR archive is like a TAR or Zip archive, but it contains only
+the information that Nix considers important. For instance,
+timestamps are elided because all files in the Nix store have their
+timestamp set to 0 anyway. Likewise, all permissions are left out
+except for the execute bit, because all files in the Nix store have
+644 or 755 permission.</para>
+
+<para>Also, a NAR archive is <emphasis>canonical</emphasis>, meaning
+that “equal” paths always produce the same NAR archive. For instance,
+directory entries are always sorted so that the actual on-disk order
+doesn’t influence the result. This means that the cryptographic hash
+of a NAR dump of a path is usable as a fingerprint of the contents of
+the path. Indeed, the hashes of store paths stored in Nix’s database
+(see <link linkend="refsec-nix-store-query"><literal>nix-store -q
+--hash</literal></link>) are SHA-256 hashes of the NAR dump of each
+store path.</para>
+
+<para>NAR archives support filenames of unlimited length and 64-bit
+file sizes. They can contain regular files, directories, and symbolic
+links, but not other types of files (such as device nodes).</para>
+
+<para>A Nix archive can be unpacked using <literal>nix-store
+--restore</literal>.</para>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--restore</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--restore</option></arg>
+ <arg choice='plain'><replaceable>path</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--restore</option> unpacks a NAR archive
+to <replaceable>path</replaceable>, which must not already exist. The
+archive is read from standard input.</para>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection xml:id='refsec-nix-store-export'><title>Operation <option>--export</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--export</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--export</option> writes a serialisation
+of the specified store paths to standard output in a format that can
+be imported into another Nix store with <command
+linkend="refsec-nix-store-import">nix-store --import</command>. This
+is like <command linkend="refsec-nix-store-dump">nix-store
+--dump</command>, except that the NAR archive produced by that command
+doesn’t contain the necessary meta-information to allow it to be
+imported into another Nix store (namely, the set of references of the
+path).</para>
+
+<para>This command does not produce a <emphasis>closure</emphasis> of
+the specified paths, so if a store path references other store paths
+that are missing in the target Nix store, the import will fail. To
+copy a whole closure, do something like
+
+<screen>
+$ nix-store --export $(nix-store -qR <replaceable>paths</replaceable>) > out</screen>
+
+</para>
+
+<para>For an example of how <option>--export</option> and
+<option>--import</option> can be used, see the source of the <command
+linkend="sec-nix-copy-closure">nix-copy-closure</command>
+command.</para>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection xml:id='refsec-nix-store-import'><title>Operation <option>--import</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--import</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--import</option> reads a serialisation of
+a set of store paths produced by <command
+linkend="refsec-nix-store-export">nix-store --export</command> from
+standard input and adds those store paths to the Nix store. Paths
+that already exist in the Nix store are ignored. If a path refers to
+another path that doesn’t exist in the Nix store, the import
+fails.</para>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--optimise</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--optimise</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--optimise</option> reduces Nix store disk
+space usage by finding identical files in the store and hard-linking
+them to each other. It typically reduces the size of the store by
+something like 25-35%. Only regular files and symlinks are
+hard-linked in this manner. Files are considered identical when they
+have the same NAR archive serialisation: that is, regular files must
+have the same contents and permission (executable or non-executable),
+and symlinks must have the same contents.</para>
+
+<para>After completion, or when the command is interrupted, a report
+on the achieved savings is printed on standard error.</para>
+
+<para>Use <option>-vv</option> or <option>-vvv</option> to get some
+progress indication.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --optimise
+hashing files in `/nix/store/qhqx7l2f1kmwihc9bnxs7rc159hsxnf3-gcc-4.1.1'
+<replaceable>...</replaceable>
+541838819 bytes (516.74 MiB) freed by hard-linking 54143 files;
+there are 114486 files with equal contents out of 215894 files in total
+</screen>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--read-log</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <group choice='req'>
+ <arg choice='plain'><option>--read-log</option></arg>
+ <arg choice='plain'><option>-l</option></arg>
+ </group>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--read-log</option> prints the build log
+of the specified store paths on standard output. The build log is
+whatever the builder of a derivation wrote to standard output and
+standard error. If a store path is not a derivation, the deriver of
+the store path is used.</para>
+
+<para>Build logs are kept in
+<filename>/nix/var/log/nix/drvs</filename>. However, there is no
+guarantee that a build log is available for any particular store path.
+For instance, if the path was downloaded as a pre-built binary through
+a substitute, then the log is unavailable. If the log is not available
+locally, then <command>nix-store</command> will try to download the
+log from the servers specified in the Nix option
+<option>log-servers</option>. For example, if it’s set to
+<literal>http://hydra.nixos.org/log</literal>, then Nix will check
+<literal>http://hydra.nixos.org/log/<replaceable>base-name</replaceable></literal>.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store -l $(which ktorrent)
+building /nix/store/dhc73pvzpnzxhdgpimsd9sw39di66ph1-ktorrent-2.2.1
+unpacking sources
+unpacking source archive /nix/store/p8n1jpqs27mgkjw07pb5269717nzf5f8-ktorrent-2.2.1.tar.gz
+ktorrent-2.2.1/
+ktorrent-2.2.1/NEWS
+<replaceable>...</replaceable>
+</screen>
+
+</refsection>
+
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--dump-db</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--dump-db</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--dump-db</option> writes a dump of the
+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>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--load-db</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--load-db</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--load-db</option> reads a dump of the Nix
+database created by <option>--dump-db</option> from standard input and
+loads it into the Nix database.</para>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--print-env</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--print-env</option></arg>
+ <arg choice='plain'><replaceable>drvpath</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>The operation <option>--print-env</option> prints out the
+environment of a derivation in a format that can be evaluated by a
+shell. The command line arguments of the builder are placed in the
+variable <envar>_args</envar>.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --print-env $(nix-instantiate '&lt;nixpkgs>' -A firefox)
+<replaceable>…</replaceable>
+export src; src='/nix/store/plpj7qrwcz94z2psh6fchsi7s8yihc7k-firefox-12.0.source.tar.bz2'
+export stdenv; stdenv='/nix/store/7c8asx3yfrg5dg1gzhzyq2236zfgibnn-stdenv'
+export system; system='x86_64-linux'
+export _args; _args='-e /nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25c-default-builder.sh'
+</screen>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--query-failed-paths</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--query-failed-paths</option></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>If build failure caching is enabled through the
+<literal>build-cache-failures</literal> configuration option, the
+operation <option>--query-failed-paths</option> will print out all
+store paths that have failed to build.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --query-failed-paths
+/nix/store/000zi5dcla86l92jn1g997jb06sidm7x-perl-PerlMagick-6.59
+/nix/store/0011iy7sfwbc1qj5a1f6ifjnbcdail8a-haskell-gitit-ghc7.0.4-0.8.1
+/nix/store/001c0yn1hkh86gprvrb46cxnz3pki7q3-gamin-0.1.10
+<replaceable>…</replaceable>
+</screen>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection><title>Operation <option>--clear-failed-paths</option></title>
+
+<refsection>
+ <title>Synopsis</title>
+ <cmdsynopsis>
+ <command>nix-store</command>
+ <arg choice='plain'><option>--clear-failed-paths</option></arg>
+ <arg choice='plain' rep='repeat'><replaceable>paths</replaceable></arg>
+ </cmdsynopsis>
+</refsection>
+
+<refsection><title>Description</title>
+
+<para>If build failure caching is enabled through the
+<literal>build-cache-failures</literal> configuration option, the
+operation <option>--clear-failed-paths</option> clears the “failed”
+state of the given store paths, allowing them to be built again. This
+is useful if the failure was actually transient (e.g. because the disk
+was full).</para>
+
+<para>If a path denotes a derivation, its output paths are cleared.
+You can provide the argument <literal>*</literal> to clear all store
+paths.</para>
+
+</refsection>
+
+<refsection><title>Example</title>
+
+<screen>
+$ nix-store --clear-failed-paths /nix/store/000zi5dcla86l92jn1g997jb06sidm7x-perl-PerlMagick-6.59
+$ nix-store --clear-failed-paths *
+</screen>
+
+</refsection>
+
+</refsection>
+
+
+<!--######################################################################-->
+
+<refsection condition="manpage"><title>Environment variables</title>
+
+<variablelist>
+ <xi:include href="env-common.xml#xmlns(db=http://docbook.org/ns/docbook)xpointer(//db:variablelist[@xml:id='env-common']/*)" />
+</variablelist>
+
+</refsection>
+
+
+</refentry>
diff --git a/doc/manual/command-ref/opt-common-syn.xml b/doc/manual/command-ref/opt-common-syn.xml
new file mode 100644
index 000000000..d65f4009e
--- /dev/null
+++ b/doc/manual/command-ref/opt-common-syn.xml
@@ -0,0 +1,47 @@
+<nop xmlns="http://docbook.org/ns/docbook">
+
+<arg><option>--help</option></arg>
+<arg><option>--version</option></arg>
+<arg rep='repeat'><option>--verbose</option></arg>
+<arg rep='repeat'><option>-v</option></arg>
+<arg><option>--no-build-output</option></arg>
+<arg><option>-Q</option></arg>
+<arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--max-jobs</option></arg>
+ <arg choice='plain'><option>-j</option></arg>
+ </group>
+ <replaceable>number</replaceable>
+</arg>
+<arg>
+ <option>--cores</option>
+ <replaceable>number</replaceable>
+</arg>
+<arg>
+ <option>--max-silent-time</option>
+ <replaceable>number</replaceable>
+</arg>
+<arg>
+ <option>--timeout</option>
+ <replaceable>number</replaceable>
+</arg>
+<arg><option>--keep-going</option></arg>
+<arg><option>-k</option></arg>
+<arg><option>--keep-failed</option></arg>
+<arg><option>-K</option></arg>
+<arg><option>--fallback</option></arg>
+<arg><option>--readonly-mode</option></arg>
+<arg><option>--log-type</option> <replaceable>type</replaceable></arg>
+<arg><option>--show-trace</option></arg>
+<arg>
+ <option>-I</option>
+ <replaceable>path</replaceable>
+</arg>
+<arg>
+ <option>--option</option>
+ <replaceable>name</replaceable>
+ <replaceable>value</replaceable>
+</arg>
+<sbr />
+
+</nop>
diff --git a/doc/manual/command-ref/opt-common.xml b/doc/manual/command-ref/opt-common.xml
new file mode 100644
index 000000000..3486c7e7d
--- /dev/null
+++ b/doc/manual/command-ref/opt-common.xml
@@ -0,0 +1,389 @@
+<chapter xmlns="http://docbook.org/ns/docbook" xml:id="sec-common-options">
+
+<title>Common Options</title>
+
+
+<para>Most Nix commands accept the following command-line options:</para>
+
+<variablelist xml:id="opt-common">
+
+<varlistentry><term><option>--help</option></term>
+
+ <listitem><para>Prints out a summary of the command syntax and
+ exits.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--version</option></term>
+
+ <listitem><para>Prints out the Nix version number on standard output
+ and exits.</para></listitem>
+</varlistentry>
+
+
+<varlistentry><term><option>--verbose</option></term>
+ <term><option>-v</option></term>
+
+ <listitem>
+
+ <para>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.</para>
+
+ <para>This option may be specified repeatedly. Currently, the
+ following verbosity levels exist:</para>
+
+ <variablelist>
+
+ <varlistentry><term>0</term>
+ <listitem><para>“Errors only”: only print messages
+ explaining why the Nix invocation failed.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>1</term>
+ <listitem><para>“Informational”: print
+ <emphasis>useful</emphasis> messages about what Nix is doing.
+ This is the default.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>2</term>
+ <listitem><para>“Talkative”: print more informational
+ messages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>3</term>
+ <listitem><para>“Chatty”: print even more
+ informational messages.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>4</term>
+ <listitem><para>“Debug”: print debug
+ information.</para></listitem>
+ </varlistentry>
+
+ <varlistentry><term>5</term>
+ <listitem><para>“Vomit”: print vast amounts of debug
+ information.</para></listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--no-build-output</option></term>
+ <term><option>-Q</option></term>
+
+ <listitem><para>By default, output written by builders to standard
+ output and standard error is echoed to the Nix command's standard
+ error. This option suppresses this behaviour. Note that the
+ builder's standard output and error are always written to a log file
+ in
+ <filename><replaceable>prefix</replaceable>/nix/var/log/nix</filename>.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="opt-max-jobs"><term><option>--max-jobs</option></term>
+ <term><option>-j</option></term>
+
+ <listitem><para>Sets the maximum number of build jobs that Nix will
+ perform in parallel to the specified number. The default is
+ specified by the <link
+ linkend='conf-build-max-jobs'><literal>build-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>
+
+</varlistentry>
+
+
+<varlistentry xml:id="opt-cores"><term><option>--cores</option></term>
+
+ <listitem><para>Sets the value of the <envar>NIX_BUILD_CORES</envar>
+ environment variable in the invocation of builders. Builders can
+ use this variable at their discretion to control the maximum amount
+ of parallelism. For instance, in Nixpkgs, if the derivation
+ attribute <varname>enableParallelBuilding</varname> is set to
+ <literal>true</literal>, the builder passes the
+ <option>-j<replaceable>N</replaceable></option> flag to GNU Make.
+ It defaults to the value of the <link
+ linkend='conf-build-cores'><literal>build-cores</literal></link>
+ configuration setting, if set, or <literal>1</literal> otherwise.
+ The value <literal>0</literal> means that the builder should use all
+ available CPU cores in the system.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="opt-max-silent-time"><term><option>--max-silent-time</option></term>
+
+ <listitem><para>Sets the maximum number of seconds that a builder
+ can go without producing any data on standard output or standard
+ error. The default is specified by the <link
+ linkend='conf-build-max-silent-time'><literal>build-max-silent-time</literal></link>
+ configuration setting. <literal>0</literal> means no
+ time-out.</para></listitem>
+
+</varlistentry>
+
+<varlistentry xml:id="opt-timeout"><term><option>--timeout</option></term>
+
+ <listitem><para>Sets the maximum number of seconds that a builder
+ can run. The default is specified by the <link
+ linkend='conf-build-timeout'><literal>build-timeout</literal></link>
+ configuration setting. <literal>0</literal> means no
+ timeout.</para></listitem>
+
+</varlistentry>
+
+<varlistentry><term><option>--keep-going</option></term>
+ <term><option>-k</option></term>
+
+ <listitem><para>Keep going in case of failed builds, to the
+ greatest extent possible. 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).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--keep-failed</option></term>
+ <term><option>-K</option></term>
+
+ <listitem><para>Specifies that in case of a build failure, the
+ temporary directory (usually in <filename>/tmp</filename>) in which
+ the build takes place should not be deleted. The path of the build
+ directory is printed as an informational message.
+ </para>
+ </listitem>
+</varlistentry>
+
+
+<varlistentry><term><option>--fallback</option></term>
+
+ <listitem>
+
+ <para>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.</para>
+
+ <para>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
+ realisation of the derivation will fail. When this option is
+ specified, Nix will build the derivation instead. Thus,
+ installation from binaries 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).</para>
+
+ </listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--readonly-mode</option></term>
+
+ <listitem><para>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.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="opt-log-type"><term><option>--log-type</option>
+<replaceable>type</replaceable></term>
+
+ <listitem>
+
+ <para>This option determines how the output written to standard
+ error is formatted. Nix’s diagnostic messages are typically
+ <emphasis>nested</emphasis>. For instance, when tracing Nix
+ expression evaluation (<command>nix-env -vvvvv</command>, messages
+ from subexpressions are nested inside their parent expressions. Nix
+ builder output is also often nested. For instance, the Nix Packages
+ generic builder nests the various build tasks (unpack, configure,
+ compile, etc.), and the GNU Make in <literal>stdenv-linux</literal>
+ has been patched to provide nesting for recursive Make
+ invocations.</para>
+
+ <para><replaceable>type</replaceable> can be one of the
+ following:
+
+ <variablelist>
+
+ <varlistentry><term><literal>pretty</literal></term>
+
+ <listitem><para>Pretty-print the output, indicating different
+ nesting levels using spaces. This is the
+ default.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>escapes</literal></term>
+
+ <listitem><para>Indicate nesting using escape codes that can be
+ interpreted by the <command>nix-log2xml</command> tool in the
+ Nix source distribution. The resulting XML file can be fed into
+ the <command>log2html.xsl</command> stylesheet to create an HTML
+ file that can be browsed interactively, using JavaScript to
+ expand and collapse parts of the output.</para></listitem>
+
+ </varlistentry>
+
+ <varlistentry><term><literal>flat</literal></term>
+
+ <listitem><para>Remove all nesting.</para></listitem>
+
+ </varlistentry>
+
+ </variablelist>
+
+ </para>
+
+ </listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--arg</option> <replaceable>name</replaceable> <replaceable>value</replaceable></term>
+
+ <listitem><para>This option is accepted by
+ <command>nix-env</command>, <command>nix-instantiate</command> and
+ <command>nix-build</command>. When evaluating Nix expressions, the
+ expression evaluator will automatically try to call functions that
+ it encounters. It can automatically call functions for which every
+ argument has a <link linkend='ss-functions'>default value</link>
+ (e.g., <literal>{ <replaceable>argName</replaceable> ?
+ <replaceable>defaultValue</replaceable> }:
+ <replaceable>...</replaceable></literal>). With
+ <option>--arg</option>, 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 <replaceable>name</replaceable>, it will call it with value
+ <replaceable>value</replaceable>.</para>
+
+ <para>For instance, the file
+ <literal>pkgs/top-level/all-packages.nix</literal> in Nixpkgs is
+ actually a function:
+
+<programlisting>
+{ # The system (e.g., `i686-linux') for which to build the packages.
+ system ? builtins.currentSystem
+ <replaceable>...</replaceable>
+}: <replaceable>...</replaceable></programlisting>
+
+ So if you call this Nix expression (e.g., when you do
+ <literal>nix-env -i <replaceable>pkgname</replaceable></literal>),
+ the function will be called automatically using the value <link
+ linkend='builtin-currentSystem'><literal>builtins.currentSystem</literal></link>
+ for the <literal>system</literal> argument. You can override this
+ using <option>--arg</option>, e.g., <literal>nix-env -i
+ <replaceable>pkgname</replaceable> --arg system
+ \"i686-freebsd\"</literal>. (Note that since the argument is a Nix
+ string literal, you have to escape the quotes.)</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--argstr</option> <replaceable>name</replaceable> <replaceable>value</replaceable></term>
+
+ <listitem><para>This option is like <option>--arg</option>, only the
+ value is not a Nix expression but a string. So instead of
+ <literal>--arg system \"i686-linux\"</literal> (the outer quotes are
+ to keep the shell happy) you can say <literal>--argstr system
+ i686-linux</literal>.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry xml:id="opt-attr"><term><option>--attr</option> / <option>-A</option>
+<replaceable>attrPath</replaceable></term>
+
+ <listitem><para>Select an attribute from the top-level Nix
+ expression being evaluated. (<command>nix-env</command>,
+ <command>nix-instantiate</command>, <command>nix-build</command> and
+ <command>nix-shell</command> only.) The <emphasis>attribute
+ path</emphasis> <replaceable>attrPath</replaceable> is a sequence of
+ attribute names separated by dots. For instance, given a top-level
+ Nix expression <replaceable>e</replaceable>, the attribute path
+ <literal>xorg.xorgserver</literal> would cause the expression
+ <literal><replaceable>e</replaceable>.xorg.xorgserver</literal> to
+ be used. See <link
+ linkend='refsec-nix-env-install-examples'><command>nix-env
+ --install</command></link> for some concrete examples.</para>
+
+ <para>In addition to attribute names, you can also specify array
+ indices. For instance, the attribute path
+ <literal>foo.3.bar</literal> selects the <literal>bar</literal>
+ attribute of the fourth element of the array in the
+ <literal>foo</literal> attribute of the top-level
+ expression.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--expr</option> / <option>-E</option></term>
+
+ <listitem><para>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.
+ (<command>nix-instantiate</command>, <command>nix-build</command>
+ and <command>nix-shell</command> only.)</para></listitem>
+
+</varlistentry>
+
+<varlistentry><term><option>--show-trace</option></term>
+
+ <listitem><para>Causes Nix to print out a stack trace in case of Nix
+ expression evaluation errors.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>-I</option> <replaceable>path</replaceable></term>
+
+ <listitem><para>Add a path to the Nix expression search path. This
+ option may be given multiple times. See the <envar>NIX_PATH</envar>
+ environment variable for information on the semantics of the Nix
+ search path. Paths added through <option>-I</option> take
+ precedence over <envar>NIX_PATH</envar>.</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--option</option> <replaceable>name</replaceable> <replaceable>value</replaceable></term>
+
+ <listitem><para>Set the Nix configuration option
+ <replaceable>name</replaceable> to <replaceable>value</replaceable>.
+ This overrides settings in the Nix configuration file (see
+ <citerefentry><refentrytitle>nix.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).</para></listitem>
+
+</varlistentry>
+
+
+<varlistentry><term><option>--repair</option></term>
+
+ <listitem><para>Fix corrupted or missing store paths by
+ redownloading or rebuilding them. Note that this is slow because it
+ requires computing a cryptographic hash of the contents of every
+ path in the closure of the build. Also note the warning under
+ <command>nix-store --repair-path</command>.</para></listitem>
+
+</varlistentry>
+
+
+</variablelist>
+
+
+</chapter>
diff --git a/doc/manual/command-ref/opt-inst-syn.xml b/doc/manual/command-ref/opt-inst-syn.xml
new file mode 100644
index 000000000..e8c3f1ec6
--- /dev/null
+++ b/doc/manual/command-ref/opt-inst-syn.xml
@@ -0,0 +1,22 @@
+<nop xmlns="http://docbook.org/ns/docbook">
+
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--prebuilt-only</option></arg>
+ <arg choice='plain'><option>-b</option></arg>
+ </group>
+ </arg>
+
+ <arg>
+ <group choice='req'>
+ <arg choice='plain'><option>--attr</option></arg>
+ <arg choice='plain'><option>-A</option></arg>
+ </group>
+ </arg>
+
+ <arg><option>--from-expression</option></arg>
+ <arg><option>-E</option></arg>
+
+ <arg><option>--from-profile</option> <replaceable>path</replaceable></arg>
+
+</nop>
diff --git a/doc/manual/command-ref/utilities.xml b/doc/manual/command-ref/utilities.xml
new file mode 100644
index 000000000..190962cea
--- /dev/null
+++ b/doc/manual/command-ref/utilities.xml
@@ -0,0 +1,23 @@
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ version="5.0"
+ xml:id='ch-utilities'>
+
+<title>Utilities</title>
+
+<para>This section lists utilities that you can use when you
+work with Nix.</para>
+
+<xi:include href="nix-channel.xml" />
+<xi:include href="nix-collect-garbage.xml" />
+<xi:include href="nix-copy-closure.xml" />
+<xi:include href="nix-daemon.xml" />
+<xi:include href="nix-hash.xml" />
+<xi:include href="nix-install-package.xml" />
+<xi:include href="nix-instantiate.xml" />
+<xi:include href="nix-prefetch-url.xml" />
+<xi:include href="nix-pull.xml" />
+<xi:include href="nix-push.xml" />
+
+</chapter> \ No newline at end of file