blog.anqou.net
rss
author
tags

NixOS で stable channel を使いつつ unstable なものも使う

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;
      # ...