Pinning Nixpkgs
Contents
Pinning Nixpkgs¶
Different ways:
As environment variable:
$NIX_PATH=URL-Icommand line parameter to most of commands likenix-build,nix-shell, etcUsing builtins.fetchTarball function that fetches the channel at evaluation time
Possible URL values¶
Local file path. Using just
.means that nixpkgs is located in current folder.Pinned to a specific commit:
https://github.com/NixOS/nixpkgs/archive/eabc38219184cc3e04a974fe31857d8e0eac098d.tar.gzUsing latest channel, meaning all tests have passed:
http://nixos.org/channels/nixos-22.11/nixexprs.tar.xzUsing latest channel, but hosted by GitHub:
https://github.com/NixOS/nixpkgs/archive/nixos-22.11.tar.gzUsing latest commit for release branch, but not tested yet:
https://github.com/NixOS/nixpkgs/archive/release-21.11.tar.gz
Examples¶
$ nix-build -I ~/dev$ nix-build -I nixpkgs=http://nixos.org/channels/nixos-22.11/nixexprs.tar.xz`
$ NIX_PATH=nixpkgs=http://nixos.org/channels/nixos-22.11/nixexprs.tar.xz nix-build ...`
Using just Nix:
let pkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/nixos-22.11.tar.gz") {}; in pkgs.stdenv.mkDerivation { ... }
To make ad-hoc environment available on NixOS:
{ nix.nixPath = [ ("nixpkgs=" + toString pkgs.path) ]; }