Release 1.7 (2014-04-11)
In addition to the usual bug fixes, this release has the following new features:
-
Antiquotation is now allowed inside of quoted attribute names (e.g.
set."${foo}"
). In the case where the attribute name is just a single antiquotation, the quotes can be dropped (e.g. the above example can be writtenset.${foo}
). If an attribute name inside of a set declaration evaluates tonull
(e.g.{ ${null} = false; }
), then that attribute is not added to the set. -
Experimental support for cryptographically signed binary caches. See the commit for details.
-
An experimental new substituter,
download-via-ssh
, that fetches binaries from remote machines via SSH. Specifying the flags--option use-ssh-substituter true --option ssh-substituter-hosts user@hostname
will cause Nix to download binaries from the specified machine, if it has them. -
nix-store -r
andnix-build
have a new flag,--check
, that builds a previously built derivation again, and prints an error message if the output is not exactly the same. This helps to verify whether a derivation is truly deterministic. For example:$ nix-build '<nixpkgs>' -A patchelf … $ nix-build '<nixpkgs>' -A patchelf --check … error: derivation `/nix/store/1ipvxs…-patchelf-0.6' may not be deterministic: hash mismatch in output `/nix/store/4pc1dm…-patchelf-0.6.drv'
-
The
nix-instantiate
flags--eval-only
and--parse-only
have been renamed to--eval
and--parse
, respectively. -
nix-instantiate
,nix-build
andnix-shell
now have a flag--expr
(or-E
) that allows you to specify the expression to be evaluated as a command line argument. For instance,nix-instantiate --eval -E '1 + 2'
will print3
. -
nix-shell
improvements:-
It has a new flag,
--packages
(or-p
), that sets up a build environment containing the specified packages from Nixpkgs. For example, the command$ nix-shell -p sqlite xorg.libX11 hello
will start a shell in which the given packages are present.
-
It now uses
shell.nix
as the default expression, falling back todefault.nix
if the former doesn’t exist. This makes it convenient to have ashell.nix
in your project to set up a nice development environment. -
It evaluates the derivation attribute
shellHook
, if set. Sincestdenv
does not normally execute this hook, it allows you to donix-shell
-specific setup. -
It preserves the user’s timezone setting.
-
-
In chroots, Nix now sets up a
/dev
containing only a minimal set of devices (such as/dev/null
). Note that it only does this if you don’t have/dev
listed in yourbuild-chroot-dirs
setting; otherwise, it will bind-mount the/dev
from outside the chroot.Similarly, if you don’t have
/dev/pts
listed inbuild-chroot-dirs
, Nix will mount a privatedevpts
filesystem on the chroot’s/dev/pts
. -
New built-in function:
builtins.toJSON
, which returns a JSON representation of a value. -
nix-env -q
has a new flag--json
to print a JSON representation of the installed or available packages. -
nix-env
now supports meta attributes with more complex values, such as attribute sets. -
The
-A
flag now allows attribute names with dots in them, e.g.$ nix-instantiate --eval '<nixos>' -A 'config.systemd.units."nscd.service".text'
-
The
--max-freed
option tonix-store --gc
now accepts a unit specifier. For example,nix-store --gc --max-freed 1G
will free up to 1 gigabyte of disk space. -
nix-collect-garbage
has a new flag--delete-older-than
Nd
, which deletes all user environment generations older than N days. Likewise,nix-env --delete-generations
accepts a Nd
age limit. -
Nix now heuristically detects whether a build failure was due to a disk-full condition. In that case, the build is not flagged as “permanently failed”. This is mostly useful for Hydra, which needs to distinguish between permanent and transient build failures.
-
There is a new symbol
__curPos
that expands to an attribute set containing its file name and line and column numbers, e.g.{ file = "foo.nix"; line = 10; column = 5; }
. There also is a new builtin function,unsafeGetAttrPos
, that returns the position of an attribute. This is used by Nixpkgs to provide location information in error messages, e.g.$ nix-build '<nixpkgs>' -A libreoffice --argstr system x86_64-darwin error: the package ‘libreoffice-4.0.5.2’ in ‘.../applications/office/libreoffice/default.nix:263’ is not supported on ‘x86_64-darwin’
-
The garbage collector is now more concurrent with other Nix processes because it releases certain locks earlier.
-
The binary tarball installer has been improved. You can now install Nix by running:
$ bash <(curl -L https://nixos.org/nix/install)
-
More evaluation errors include position information. For instance, selecting a missing attribute will print something like
error: attribute `nixUnstabl' missing, at /etc/nixos/configurations/misc/eelco/mandark.nix:216:15
-
The command
nix-setuid-helper
is gone. -
Nix no longer uses Automake, but instead has a non-recursive, GNU Make-based build system.
-
All installed libraries now have the prefix
libnix
. In particular, this gets rid oflibutil
, which could clash with libraries with the same name from other packages. -
Nix now requires a compiler that supports C++11.
This release has contributions from Danny Wilson, Domen Kožar, Eelco Dolstra, Ian-Woo Kim, Ludovic Courtès, Maxim Ivanov, Petr Rockai, Ricardo M. Correia and Shea Levy.