MacOSX
NixOS

macOSでNixpkgsのアップグレード

TL;DR

NixpkgsのmacOSインストーラはマルチユーザインストーラなので、rootユーザにインストールされているnixパッケージのアップデートが必要。

$ sudo -i nix-env -q
nix-2.0
nss-cacert-3.35
$ nix-env --version
nix-env (Nix) 2.0

モチベーション

最近nix-channel --updateした環境では、nix-env -qaするとエラーになってしまう。

$ nix-env -qa ct
error: undefined variable ‘placeholder’ at /nix/store/f81z(snip)ba37/nixpkgs/pkgs/development/libraries/pipewire/default.nix:37:46

これは、Nix 2.0でplaceholder変数が導入されたけれど、Nix 1.11以前には存在していないため発生するエラーなので、先にNix自体をアップグレードする必要がある。しかしbrew upgradeのようなそれ自身をアップグレードするコマンドは用意されていない。

現在、macOS版のNixpkgsはマルチユーザ用にインストールされているので、Nixpkgs自体をアップグレードするには、rootnixパッケージを更新する必要がある。

$ sudo -i su -
root# nix-channel --update
root# nix-env -iA nixpkgs.nix
root# launchctl stop org.nixos.nix-daemon
root# launchctl start org.nixos.nix-daemon

sudo -i nix-channel --updateでも良さそうに思えるが、

error: unable to download ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-18.09pre133932.ee28e35ba37/nixexprs.tar.xz’: Problem with the SSL CA cert (path? access rights?) (77)

というエラーでうまく動作しなかった。