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 written
set.${foo}). If an attribute name inside of a
set declaration evaluates to null (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 and
nix-build have a new flag,
, 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
and
have been renamed to and
, respectively.nix-instantiate,
nix-build and nix-shell now
have a flag (or ) that
allows you to specify the expression to be evaluated as a command
line argument. For instance, nix-instantiate --eval -E
'1 + 2' will print 3.nix-shell improvements:It has a new flag, (or
), 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 to
default.nix if the former doesn’t
exist. This makes it convenient to have a
shell.nix in your project to set up a
nice development environment.It evaluates the derivation attribute
shellHook, if set. Since
stdenv does not normally execute this hook,
it allows you to do nix-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 your setting;
otherwise, it will bind-mount the /dev from
outside the chroot.Similarly, if you don’t have /dev/pts listed
in , Nix will mount a private
devpts 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
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 flag now allows attribute names with
dots in them, e.g.
$ nix-instantiate --eval '<nixos>' -A 'config.systemd.units."nscd.service".text'
The option to
nix-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
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 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 of
libutil, 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.