<section 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="ssec-relnotes-1.6.0"> <title>Release 1.6 (2013-09-10)</title> <para>In addition to the usual bug fixes, this release has several new features:</para> <itemizedlist> <listitem> <para>The command <command>nix-build --run-env</command> has been renamed to <command>nix-shell</command>.</para> </listitem> <listitem> <para><command>nix-shell</command> now sources <filename>$stdenv/setup</filename> <emphasis>inside</emphasis> the interactive shell, rather than in a parent shell. This ensures that shell functions defined by <literal>stdenv</literal> can be used in the interactive shell.</para> </listitem> <listitem> <para><command>nix-shell</command> has a new flag <option>--pure</option> to clear the environment, so you get an environment that more closely corresponds to the “real” Nix build. </para> </listitem> <listitem> <para><command>nix-shell</command> now sets the shell prompt (<envar>PS1</envar>) to ensure that Nix shells are distinguishable from your regular shells.</para> </listitem> <listitem> <para><command>nix-env</command> no longer requires a <literal>*</literal> argument to match all packages, so <literal>nix-env -qa</literal> is equivalent to <literal>nix-env -qa '*'</literal>.</para> </listitem> <listitem> <para><command>nix-env -i</command> has a new flag <option>--remove-all</option> (<option>-r</option>) to remove all previous packages from the profile. This makes it easier to do declarative package management similar to NixOS’s <option>environment.systemPackages</option>. For instance, if you have a specification <filename>my-packages.nix</filename> like this: <programlisting> with import <nixpkgs> {}; [ thunderbird geeqie ... ] </programlisting> then after any change to this file, you can run: <screen> $ nix-env -f my-packages.nix -ir </screen> to update your profile to match the specification.</para> </listitem> <listitem> <para>The ‘<literal>with</literal>’ language construct is now more lazy. It only evaluates its argument if a variable might actually refer to an attribute in the argument. For instance, this now works: <programlisting> let pkgs = with pkgs; { foo = "old"; bar = foo; } // overrides; overrides = { foo = "new"; }; in pkgs.bar </programlisting> This evaluates to <literal>"new"</literal>, while previously it gave an “infinite recursion” error.</para> </listitem> <listitem> <para>Nix now has proper integer arithmetic operators. For instance, you can write <literal>x + y</literal> instead of <literal>builtins.add x y</literal>, or <literal>x < y</literal> instead of <literal>builtins.lessThan x y</literal>. The comparison operators also work on strings.</para> </listitem> <listitem> <para>On 64-bit systems, Nix integers are now 64 bits rather than 32 bits.</para> </listitem> <listitem> <para>When using the Nix daemon, the <command>nix-daemon</command> worker process now runs on the same CPU as the client, on systems that support setting CPU affinity. This gives a significant speedup on some systems.</para> </listitem> <listitem> <para>If a stack overflow occurs in the Nix evaluator, you now get a proper error message (rather than “Segmentation fault”) on some systems.</para> </listitem> <listitem> <para>In addition to directories, you can now bind-mount regular files in chroots through the (now misnamed) option <option>build-chroot-dirs</option>.</para> </listitem> </itemizedlist> <para>This release has contributions from Domen Kožar, Eelco Dolstra, Florian Friesdorf, Gergely Risko, Ivan Kozik, Ludovic Courtès and Shea Levy.</para> </section>