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.