Code Apprentice

該用哪個 Nix Channel

· [Jack Shih]

在 nix 中,除了一般常見的 stable 跟 unstable 的 channel 之外,還會看到 unstable 還有分 nixpkgs-unstablenixos-unstablenixos-unstable-small 。 而 stable 則是有 nixos-24.05nixos-24.05-smallnixpkgs-24.05-darwin 。 那這時候就會開始想到底這些 channel 到底差在哪裡,該用哪個?

ˋ簡單來說,可以想像每一個 nix channel 都是在不同時間點的 nixpkgs-master,只是測試的項目不太一樣。 例如 nixos-* 的測試項目就會多測試屬於 nixos 相關的項目,確保從這個 channel 出去的版本不會把 nixos 弄壞。

*-small 則是因為測試的項目較一般的少,所以更新的速度較快。

stable 的部分則是對應 nixos 而生,所以有區分 nixos 跟 darwin(macOS) 的不同。 大概是因為有 nix-darwin 所以要有個跟 nixos 來對應。比如說 nixos 不需要去考慮 macOS 相關 package 的東西。

知道這些之後,要用哪個 channel 大致可以做決定,因為不同 channel 就差在更新速度不同,所以要使用哪個 channel 就取決於更新要多快,以及東西壞掉的機率。 如果想要走 rolling release 的話就使用 unstable 相關的 channel。 雖然就上面敘述來說,如果想要是可以在 nixos 中使用 nixpkgs-unstable,不過因為沒有針對 nixos 的測試,所以系統可能會壞掉。 因此是不建議這麼做,nixos 就使用 nixos-* 相關的 channel。

macOS 的部分,如果想要有像 nixos 差不多的體驗就走 nixpkgs-*.*-darwin ,如果沒有的話就直接用 nixpkgs-unstable

看了這麼多,可能會想到為什麼沒有 nixpkgs-stable 之類的版本,可能是因為一來 linux-based 就直接用 nixos 的 stable channel 就好。二來仔細想想,如果純粹把 nix 當作 package manager (naapm) 的話,穩定版好像沒有什麼意義。

如果是走 nix flake,那麼混搭也沒有這麼困難了,可以輕鬆做到「大部分的套件都用穩定版,但就這個我想要用最新版」 的情境。

reference

https://gist.github.com/grahamc/c60578c6e6928043d29a427361634df6#which-channel-is-right-for-me https://status.nixos.org https://discourse.nixos.org/t/differences-between-nix-channels/13998 https://discourse.nixos.org/t/difference-between-channels/579