Release 1.9 (2015-06-12)
In addition to the usual bug fixes, this release has the following new features:
-
Signed binary cache support. You can enable signature checking by adding the following to
nix.conf
:signed-binary-caches = * binary-cache-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
This will prevent Nix from downloading any binary from the cache that is not signed by one of the keys listed in
binary-cache-public-keys
.Signature checking is only supported if you built Nix with the
libsodium
package.Note that while Nix has had experimental support for signed binary caches since version 1.7, this release changes the signature format in a backwards-incompatible way.
-
Automatic downloading of Nix expression tarballs. In various places, you can now specify the URL of a tarball containing Nix expressions (such as Nixpkgs), which will be downloaded and unpacked automatically. For example:
-
In
nix-env
:$ nix-env -f https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz -iA firefox
This installs Firefox from the latest tested and built revision of the NixOS 14.12 channel.
-
In
nix-build
andnix-shell
:$ nix-build https://github.com/NixOS/nixpkgs/archive/master.tar.gz -A hello
This builds GNU Hello from the latest revision of the Nixpkgs master branch.
-
In the Nix search path (as specified via
NIX_PATH
or-I
). For example, to start a shell containing the Pan package from a specific version of Nixpkgs:$ nix-shell -p pan -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/8a3eea054838b55aca962c3fbde9c83c102b8bf2.tar.gz
-
In
nixos-rebuild
(on NixOS):$ nixos-rebuild test -I nixpkgs=https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz
-
In Nix expressions, via the new builtin function
fetchTarball
:with import (fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-14.12.tar.gz) {}; …
(This is not allowed in restricted mode.)
-
-
nix-shell
improvements:-
nix-shell
now has a flag--run
to execute a command in thenix-shell
environment, e.g.nix-shell --run make
. This is like the existing--command
flag, except that it uses a non-interactive shell (ensuring that hitting Ctrl-C won’t drop you into the child shell). -
nix-shell
can now be used as a#!
-interpreter. This allows you to write scripts that dynamically fetch their own dependencies. For example, here is a Haskell script that, when invoked, first downloads GHC and the Haskell packages on which it depends:#! /usr/bin/env nix-shell #! nix-shell -i runghc -p haskellPackages.ghc haskellPackages.HTTP import Network.HTTP main = do resp <- Network.HTTP.simpleHTTP (getRequest "http://nixos.org/") body <- getResponseBody resp print (take 100 body)
Of course, the dependencies are cached in the Nix store, so the second invocation of this script will be much faster.
-
-
Chroot improvements:
-
Chroot builds are now supported on Mac OS X (using its sandbox mechanism).
-
If chroots are enabled, they are now used for all derivations, including fixed-output derivations (such as
fetchurl
). The latter do have network access, but can no longer access the host filesystem. If you need the old behaviour, you can set the optionbuild-use-chroot
torelaxed
. -
On Linux, if chroots are enabled, builds are performed in a private PID namespace once again. (This functionality was lost in Nix 1.8.)
-
Store paths listed in
build-chroot-dirs
are now automatically expanded to their closure. For instance, if you want/nix/store/…-bash/bin/sh
mounted in your chroot as/bin/sh
, you only need to saybuild-chroot-dirs = /bin/sh=/nix/store/…-bash/bin/sh
; it is no longer necessary to specify the dependencies of Bash.
-
-
The new derivation attribute
passAsFile
allows you to specify that the contents of derivation attributes should be passed via files rather than environment variables. This is useful if you need to pass very long strings that exceed the size limit of the environment. The Nixpkgs functionwriteTextFile
uses this. -
You can now use
~
in Nix file names to refer to your home directory, e.g.import ~/.nixpkgs/config.nix
. -
Nix has a new option
restrict-eval
that allows limiting what paths the Nix evaluator has access to. By passing--option restrict-eval true
to Nix, the evaluator will throw an exception if an attempt is made to access any file outside of the Nix search path. This is primarily intended for Hydra to ensure that a Hydra jobset only refers to its declared inputs (and is therefore reproducible). -
nix-env
now only creates a new “generation” symlink in/nix/var/nix/profiles
if something actually changed. -
The environment variable
NIX_PAGER
can now be set to overridePAGER
. You can set it tocat
to disable paging for Nix commands only. -
Failing
<...>
lookups now show position information. -
Improved Boehm GC use: we disabled scanning for interior pointers, which should reduce the “
Repeated allocation of very large block
” warnings and associated retention of memory.
This release has contributions from aszlig, Benjamin Staffin, Charles Strahan, Christian Theune, Daniel Hahler, Danylo Hlynskyi Daniel Peebles, Dan Peebles, Domen Kožar, Eelco Dolstra, Harald van Dijk, Hoang Xuan Phu, Jaka Hudoklin, Jeff Ramnani, j-keck, Linquize, Luca Bruno, Michael Merickel, Oliver Dunkl, Rob Vermaas, Rok Garbas, Shea Levy, Tobias Geerinckx-Rice and William A. Kennington III.