Nix関係の個人的QA集
NixやNixOSについて躓いて解決したポイントや気になって調べたこと、コミュニティで尋ねて解決して頂いたことなどをQA形式で記述しておく。
P.S. 改めて書き出したら結構な割合natsukiumさんに答えてもらってる気がするので感謝
Q. インストール済んだけど何をしたらいい?
A. configuration.nix(NixOSの場合)を書き換えたりnix shellやnix profileを叩くなどして適当にnixpkgsからパッケージを引っ張ってくるだけでも十分便利だと思う。
色々やりたくなったらこのへん読みながら適当にいじるといいと思う。
Q. インストール後の環境で無線ネットワークを使っても繋がらない。インストール時と同じことをしようとすると失敗する
A. 折角NixOS使ってんならNix wayでやれ、宣言的に書けるぞ。やり方はドキュメントに全部載っている。
具体的にはこう
networking.wireless.networks = {
"にゃおん" = {
psk = "nyancat_nixisthebest";
};
};
Q. Wi-Fiのパスワードを直書きしたら設定を公開できないんだけど
A. network.wireless.secretsFile
にパスを書いて以下のようにする
これはコミットしなくていいので分離できる。
configuration.nix:
networking.wireless.secretsFile = "/path/to/wireless.conf";
networking.wireless.networks = {
"にゃおん" = {
pskRaw = "ext:psk_nyaon";
};
};
wireless.conf:
psk_nyaon=nyancat_nixisthebest
Q. Flakeの依存はバージョン指定をしないけど、どのタイミングで固定されるの?
A. 最初に依存が解決された時の最新に固定され、flake.lockに書き込まれる。
更新したくなったら nix flake update
で更新できる。
Q. /tmp
がtmpfsじゃないので吹き飛ばないんだけど
A. boot.tmp.useTmpfs = true;
をどこかに書くとtmpfsになる
Q. Live Mediaみたく電源を切ると状態が吹き飛ぶようにしたい
A. NixOSは /nix
があれば立ち上がるので /
をtmpfsにしてしまえばいい。後はブートローダーの書き込み用に /boot
もどこかに置けばいい。
やり方はimpermanenceの例に載っている。
注意点としては、パスワードを設定しても吹き飛ぶので users.users.{user}.hashedPassword
に mkpasswd
の結果を書き込む必要がある。
Q. tmpfs rootをやると nix flake update
の度に毎回ダウンロードが走る
A. この手のfetchのcacheは ($(NIX|XDG)_CACHE_HOME|~/.cache)/nix
で管理されているので、どうにかして永続化してやればおk。
環境変数いじるのが多分一番早い。
Q. リモートビルドではなく別マシンで完全にnixos-rebuildをやりたい
A. nixos-rebuild build
の結果をnix copy
してresult/bin/switch-to-configuration
を叩くといい。nixos-rebuild
は実は中でこれをやっているだけ
Q. nixos-rebuild build-vm
したVM内でこれやると壊れるんだが
A. VM用に書き換えられた部分を剥がそうとするのでおかしくなる。なのでnixos-rebuild build-vm
の結果をnix copy
すると便利。ご丁寧にresult/system
にリンク貼ってくれているのでこれを転送するだけ
Q. staticビルドをしたい
A. できる。genericに実装されているのでできないパッケージもある。
nixpkgsの参照が pkgs
だとすると pkgs.pkgsStatic
に切り替えると、staticビルドされるようになる。
定義はこれ
Q. NixOSのプロファイルのGCがしたい
A. sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than 14d
のようなやり方で可能
ref: https://discourse.nixos.org/t/list-and-delete-nixos-generations/29637/3