[Nix-dev] Nix 1.7 released

Eelco Dolstra eelco.dolstra at logicblox.com
Fri Apr 11 12:36:00 CEST 2014


Hi all,


I'm pleased to announce the availability of a new stable release of the
Nix package manager.  Release 1.7 can be found at

  http://hydra.nixos.org/release/nix/nix-1.7

and

  http://nixos.org/releases/nix/nix-1.7

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 at 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, --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 and nix-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 print 3.

  * 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 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 build-chroot-dirs setting; otherwise, it will bind-mount the
    /dev from outside the chroot.

    Similarly, if you don’t have /dev/pts listed in build-chroot-dirs, 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 --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 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 --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 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.

-- 
Eelco Dolstra | LogicBlox, Inc. | http://nixos.org/~eelco/


More information about the nix-dev mailing list