Home Explore Blog CI



nix

6th chunk of `doc/manual/source/release-notes/rl-2.0.md`
695c0426b57d0aa6815f97ee55f14a8b089e23b47afcbb210000000100000fdd
    produce exactly the same output). When `enforce-determinism` is set
    to `false`, it’s [no
    longer](https://github.com/NixOS/nix/commit/8bdf83f936adae6f2c907a6d2541e80d4120f051)
    a fatal error if build rounds produce different output. Also, a hook
    named `diff-hook` is
    [provided](https://github.com/NixOS/nix/commit/9a313469a4bdea2d1e8df24d16289dc2a172a169)
    to allow you to run tools such as `diffoscope` when build rounds
    produce different output.

  - Configuring remote builds is a lot easier now. Provided you are not
    using the Nix daemon, you can now just specify a remote build
    machine on the command line, e.g. `--option builders
                    'ssh://my-mac x86_64-darwin'`. The environment variable
    `NIX_BUILD_HOOK` has been removed and is no longer needed. The
    environment variable `NIX_REMOTE_SYSTEMS` is still supported for
    compatibility, but it is also possible to specify builders in
    `nix.conf` by setting the option `builders =
                    @path`.

  - If a fixed-output derivation produces a result with an incorrect
    hash, the output path is moved to the location corresponding to the
    actual hash and registered as valid. Thus, a subsequent build of the
    fixed-output derivation with the correct hash is unnecessary.

  - `nix-shell`
    [now](https://github.com/NixOS/nix/commit/ea59f39326c8e9dc42dfed4bcbf597fbce58797c)
    sets the `IN_NIX_SHELL` environment variable during evaluation and
    in the shell itself. This can be used to perform different actions
    depending on whether you’re in a Nix shell or in a regular build.
    Nixpkgs provides `lib.inNixShell` to check this variable during
    evaluation.

  - `NIX_PATH` is now lazy, so URIs in the path are only downloaded if
    they are needed for evaluation.

  - You can now use `channel:` as a short-hand for
    <https://nixos.org/channels//nixexprs.tar.xz>. For example,
    `nix-build channel:nixos-15.09 -A hello` will build the GNU Hello
    package from the `nixos-15.09` channel. In the future, this may
    use Git to fetch updates more efficiently.

  - When `--no-build-output` is given, the last 10 lines of the build
    log will be shown if a build fails.

  - Networking has been improved:

      - HTTP/2 is now supported. This makes binary cache lookups [much
        more
        efficient](https://github.com/NixOS/nix/commit/90ad02bf626b885a5dd8967894e2eafc953bdf92).

      - We now retry downloads on many HTTP errors, making binary caches
        substituters more resilient to temporary failures.

      - HTTP credentials can now be configured via the standard `netrc`
        mechanism.

      - If S3 support is enabled at compile time, <s3://> URIs are
        [supported](https://github.com/NixOS/nix/commit/9ff9c3f2f80ba4108e9c945bbfda2c64735f987b)
        in all places where Nix allows URIs.

      - Brotli compression is now supported. In particular,
        [cache.nixos.org](https://cache.nixos.org/) build logs are now compressed
        using Brotli.

  - `nix-env`
    [now](https://github.com/NixOS/nix/commit/b0cb11722626e906a73f10dd9a0c9eea29faf43a)
    ignores packages with bad derivation names (in particular those
    starting with a digit or containing a dot).

  - Many configuration options have been renamed, either because they
    were unnecessarily verbose (e.g. `build-use-sandbox` is now just
    `sandbox`) or to reflect generalised behaviour (e.g. `binary-caches`
    is now `substituters` because it allows arbitrary store URIs). The
    old names are still supported for compatibility.

  - The `max-jobs` option can
    [now](https://github.com/NixOS/nix/commit/7251d048fa812d2551b7003bc9f13a8f5d4c95a5)
    be set to `auto` to use the number of CPUs in the system.

  - Hashes can
    [now](https://github.com/NixOS/nix/commit/c0015e87af70f539f24d2aa2bc224a9d8b84276b)
    be specified in base-64 format, in addition to base-16 and the
    non-standard base-32.

  - `nix-shell` now uses `bashInteractive` from Nixpkgs, rather than the

Title: Nix Improvements: Binary Reproducibility, Remote Builds, Fixed-Output Derivations, Nix-Shell Enhancements, and Networking
Summary
Nix has introduced improvements for binary reproducibility, such as allowing non-fatal errors for differing build outputs and a `diff-hook` for running tools like `diffoscope`. Configuring remote builds is easier, with the removal of `NIX_BUILD_HOOK`. Fixed-output derivations with incorrect hashes are now moved to the correct location. `nix-shell` sets the `IN_NIX_SHELL` environment variable. `NIX_PATH` is now lazy. HTTP/2 and Brotli compression are supported, and HTTP credentials can be configured via `netrc`. Many configuration options have been renamed for brevity and generality. `max-jobs` can be set to `auto` to use the number of CPUs.