1
0
Fork 0
mirror of https://github.com/NixOS/nix.dev.git synced 2024-10-18 14:32:43 -04:00
nix.dev/source/tutorials/first-steps/towards-reproducibility-pinning-nixpkgs.md
Valentin Gagarin 8a74a98c54
rewrite guide to pinning dependencies with niv (#782)
* rewrite guide to pinning dependencies with niv

* use the specific branch directly

Co-authored-by: Silvan Mosberger <github@infinisil.com>

* use the shell's niv explicitly

* Apply suggestions from code review

---------

Co-authored-by: Silvan Mosberger <github@infinisil.com>
2023-11-07 22:26:23 +01:00

1.3 KiB

(pinning-nixpkgs)=

Towards reproducibility: pinning Nixpkgs

In various Nix examples, you'll often see references to <nixpkgs>, as follows.

{ pkgs ? import <nixpkgs> {}
}:

...

This is a convenient way to quickly demonstrate a Nix expression and get it working by importing Nix packages.

However, the resulting Nix expression is not fully reproducible.

Pinning packages with URLs inside a Nix expression

To create fully reproducible Nix expressions, we can pin an exact version of Nixpkgs.

The simplest way to do this is to fetch the required Nixpkgs version as a tarball specified via the relevant Git commit hash:

{ pkgs ? import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/06278c77b5d162e62df170fec307e83f1812d94b.tar.gz") {}
}:

...

Picking the commit can be done via status.nixos.org, which lists all the releases and the latest commit that has passed all tests.

When choosing a commit, it is recommended to follow either

  • the latest stable NixOS release by using a specific version, such as nixos-21.05, or
  • the latest unstable release via nixos-unstable.

Next steps

  • For more examples and details of the different ways to pin nixpkgs, see {ref}ref-pinning-nixpkgs.