Niv
Nix を用いるプロジェクトにおいて,Nix でインストールされる依存のヴァージョン管理を簡単にするためのツール. <nixpkgs> が指す revision は個々人のマシンによって異なるため,リポジトリにチェックインするコードはこれに依存してはいけない.
さもなくば開発環境やビルドの再現性が失われてしまう.
代わりに,NixOS/nixpkgs の特定の revision を固定してこれに依存するべきなのだが,Niv を用いることで簡単に実現できる.
インストール
code:sh
$ nix-env -iA nixpkgs.niv
プロジェクトでのセットアップ
code:sh
$ niv init
nix/sources.json と nix/sources.nix が生成されるので commit する.
(nix/sources.nixは .gitattributes を書いて linguist-generated=true を設定しておくとよい.)
ついでに以下のようなファイルを置いておくと便利.
code:nix/pkgs.nix
let
sources = import ./sources.nix;
in
import sources.nixpkgs
使い方
code:shell.nix
let
pkgs = import ./nix/pkgs.nix {};
in
# ...
とすることで,nix/sources.json に記述された特定の nixpkgs の revision にアクセスできる.
nixpkgs のアップデート
これが簡単にできるのが Niv のいいところ.
code:shell
$ niv update nixpkgs
その他
nixpkgs 以外の依存を管理することもできる (というかそれが本来の機能)