Nix
Release 1.7 (2014-04-11)
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@hostnamewill cause Nix to download binaries from the specified machine, if it has them.nix-store -randnix-buildhave 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-instantiateflags--eval-onlyand--parse-onlyhave been renamed to--evaland--parse, respectively.nix-instantiate,nix-buildandnix-shellnow 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-shellimprovements: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 hellowill start a shell in which the given packages are present.
It now uses
shell.nixas the default expression, falling back todefault.nixif the former doesn’t exist. This makes it convenient to have ashell.nixin your project to set up a nice development environment.It evaluates the derivation attribute
shellHook, if set. Sincestdenvdoes 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
/devcontaining only a minimal set of devices (such as/dev/null). Note that it only does this if you don’t have/devlisted in yourbuild-chroot-dirssetting; otherwise, it will bind-mount the/devfrom outside the chroot.Similarly, if you don’t have
/dev/ptslisted inbuild-chroot-dirs, Nix will mount a privatedevptsfilesystem on the chroot’s/dev/pts.New built-in function:
builtins.toJSON, which returns a JSON representation of a value.nix-env -qhas a new flag--jsonto print a JSON representation of the installed or available packages.nix-envnow supports meta attributes with more complex values, such as attribute sets.The
-Aflag now allows attribute names with dots in them, e.g.$ nix-instantiate --eval '<nixos>' -A 'config.systemd.units."nscd.service".text'The
--max-freedoption tonix-store --gcnow accepts a unit specifier. For example,nix-store --gc --max-freed 1Gwill free up to 1 gigabyte of disk space.nix-collect-garbagehas a new flag--delete-older-thanNd, which deletes all user environment generations older than N days. Likewise,nix-env --delete-generationsaccepts a Ndage 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
__curPosthat 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:15The command
nix-setuid-helperis 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.