NixOS には 5 月と 11 月に公開される stable channel と、ローリングアップデートが行われる unstable channel があります。「NixOS の unstable は stable なんだ」と言われて久しいですが[要出典]、とはいえ最近の stable は安定しているので、自分は stable channel に設定して NixOS を使っています。
一方でいわゆるエーアイのツールは日進月歩で、こういったソフトウェアに関しては unstable channel のものを使いたくなります。つまり、基本的には stable channel のソフトウェアを使いつつ、ものによっては unstable なものも使えると便利です。
ということで最近は、以前見つけた投稿を参考に、以下のようなものを configuration.nix に書いて運用しています:
{
config,
pkgs,
pkgsUnstable,
lib,
inputs,
...
}: {
# cf. https://discourse.nixos.org/t/mixing-stable-and-unstable-packages-on-flake-based-nixos-system/50351/4
_module.args.pkgsUnstable = import inputs.nixpkgs-unstable {
inherit (pkgs.stdenv.hostPlatform) system;
inherit (config.nixpkgs) config;
};
environment.systemPackages =
(with pkgs; [
# 省略
])
++ (with pkgsUnstable; [
antigravity
lmstudio
llama-cpp
]);
}
home-manager にも似たような仕組みを導入しています:
{
pkgs,
pkgsUnstable,
config,
osConfig,
inputs,
lib,
...
}: {
_module.args.pkgsUnstable = import inputs.nixpkgs-unstable {
inherit (pkgs.stdenv.hostPlatform) system;
inherit (osConfig.nixpkgs) config;
};
programs = {
claude-code = {
enable = true;
package = let
package = pkgsUnstable.claude-code;
# ...
パッケージの他に options も unstable channel から使いたいぞという場合は、nixpkgs からソースコードを手元に落としてきた上で、デフォルトで有効化される stable のものを disabledModules に突っ込んで無効化します。以下は手元で動いている home-manager の programs.claude-code の例:
{
pkgs,
pkgsUnstable,
config,
osConfig,
inputs,
lib,
...
}: {
# stable の programs.claude-code を無効化
disabledModules = ["programs/claude-code.nix"];
imports = [
# 代わりにダウンロードした unstable channel のものを import
../../modules/claude-code.nix
];
programs = {
# 便利に使う
claude-code = {
enable = true;
memory.source = ./claude-code/memory.md;
skillsDir = ./claude-code/skills;
rulesDir = ./claude-code/rules;
# ...