以前の記事で nh os switch について紹介しました。nh には他にも様々な機能があり、そのうちの一つは nh clean all です。これは不要になったパッケージの削除(GC)を行うためのコマンドです。
NixOS では通常、明示的なパッケージの削除を行う代わりに GC の仕組みを用います。その際に使われるのが nix-collect-garbage コマンドですが、使い方に少しクセがあり直感的ではありません。nh clean all コマンドを使うと GC を比較的分かりやすく行うことができます。
手動で nh clean all を実行する場合、以下のようなコマンドが便利です:
nh clean all --ask --keep-since 14d
このコマンドでは、現在のシステムから使用されていないパッケージや、ビルドして 2 週間以上経っている gcroot から参照されているものが削除されます。--ask をつけているので、コマンドを実行するとこれから削除されるものが一覧表示されます。そのため、何が削除されるかを確認してから削除することができます。
自動で定期的に nh clean all を実行する場合、NixOS Options のサポートが使えます。以下のように設定します:
programs.nh = {
enable = true;
clean.enable = true;
clean.extraArgs = "--keep-since 14d";
};