blog.anqou.net
rss
author
tags

NixOS 26.05 に移行する

NixOS 26.05 がリリースされてから三週間ほど経ちました。そろそろ頃合いかなと思い手元の環境を NixOS 25.11 から 26.05 に更新したので、その際にハマったポイントをまとめます。なお、合わせて Home Manager も release-25.11 ブランチから release-26.05 ブランチに変更しています。参考までに、flake.lock の差分は以下の通りです:

diff --git a/flake.lock b/flake.lock
index 7280bdc..da04aea 100644
--- a/flake.lock
+++ b/flake.lock
@@ -32,16 +32,16 @@
         ]
       },
       "locked": {
-        "lastModified": 1779506708,
-        "narHash": "sha256-QOD/CNm196nCJRheux/URi4/HE66fthdOMqCJoPP1Y0=",
+        "lastModified": 1781319724,
+        "narHash": "sha256-ZGuxexEMo4Xv28KJ0dX/m/PHN4oZIOnxHZpNTyrvx4M=",
         "owner": "nix-community",
         "repo": "home-manager",
-        "rev": "3ee51fbdac8c8bdfe1e7e1fcaba6520a563f394f",
+        "rev": "8355f0a16b2dbb06a97959a918af5b239bbe05ae",
         "type": "github"
       },
       "original": {
         "owner": "nix-community",
-        "ref": "release-25.11",
+        "ref": "release-26.05",
         "repo": "home-manager",
         "type": "github"
       }
@@ -80,16 +80,16 @@
     },
     "nixpkgs-stable": {
       "locked": {
-        "lastModified": 1781509190,
-        "narHash": "sha256-uJZs9Di8I6ciTp6jiojj0HzlNpBkud8ax5aT/O5aJkw=",
+        "lastModified": 1781216227,
+        "narHash": "sha256-9mUW6gNwoN2SWc/l0fW4svPNOulXLl8ijqKyeSOGgJE=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "d6df3513510aa548c83868fd22bfddd0a8c0a0d4",
+        "rev": "a0374025a863d007d98e3297f6aa46cc3141c2f0",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-25.11",
+        "ref": "nixos-26.05",
         "repo": "nixpkgs",
         "type": "github"
       }

#mpv

以前ブログ記事にもしたように、mpv のパッケージを override して ffmpeg の代わりに ffmpeg-full を使うようにしています。mpv のパッケージに修正が入り、この部分で次のようなエラーが出るようになりました:

error: function 'anonymous lambda' called with unexpected argument 'mpv'
at /nix/store/9figz32vbiblaw5x3li1hc8q9qwlwf27-source/pkgs/by-name/mp/mpv/package.nix:1:1:
     1| {
      | ^
     2|   stdenv,

フィールドの名前が mpv から mpv-unwrapped 変わったことによるものでした。以下のように修正しました:

programs.mpv = {
  package = with pkgs;
    mpv.override {
      mpv-unwrapped = mpv-unwrapped.override {
        ffmpeg = ffmpeg-full;
      };
    };
  # その他は同様
};

#Discord

Discord のパッケージング方法が変わったようで、以前の記事で紹介した バージョン固定の方法が使えなくなっていました。仕方がないので、NixOS 25.11 の discord パッケージを nixpkgs からダウンロードして、手元で callPackage を呼び出して使うようにしています。複数ファイルあるので若干面倒ですが nix/discord/ ディレクトリにダウンロードすると、以下のように書けます:

environment.systemPackages = with pkgs; [
  ((callPackage ./nix/discord {}).discord.overrideAttrs {
    version = "0.0.111";
    src = fetchurl {
      url = "https://stable.dl2.discordapp.net/apps/linux/0.0.111/discord-0.0.111.tar.gz";

      hash = "sha256-o4U6i223Agtbt1N9v0GO/Ivx68OQcX/N3mHXUX2gruA=";
    };
  })
];

#Grafana

services.grafana.enable = true して Grafana をインストールしていると、以下のようなエラーが出るようになっていました:

error:
Failed assertions:
- Grafana's secret key (services.grafana.settings.security.secret_key) doesn't have a default
value anymore. Please generate your own and use a file-provider on this option! See also
https://grafana.com/docs/grafana/latest/setup-grafana/configure-grafana/#secret_key
for more information.

See https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-database-encryption/#re-encrypt-secrets on how to re-encrypt.

As stated in the NixOS changelog for 26.05, there's no official way to rotate.
Either hard-code the old key ("SW2YcwTIb9zpOOhoPsMm") if your setup doesn't have any secrets in the DB that need
special protection or perform a rotation with a 3rd-party tool
(https://github.com/erooke/grafana-secretkey-rotation-tool/tree/d9dc788902fa5185e15cb15ce6129f7237ab6138).

この環境の Grafana は外部に公開しているものではなかったので、書かれている通りに key を指定すると動くようになりました:

services.grafana = {
  enable = true;
  settings.security.secret_key = "SW2YcwTIb9zpOOhoPsMm";
};

#Hyprland

Hyprland を有効にしている環境では、次のような警告が出るようになっていました:

The default value of `wayland.windowManager.hyprland.configType` has changed from `"hyprlang"` to `"lua"`.
You are currently using the legacy default (`"hyprlang"`) because `home.stateVersion` is less than "26.05".
To silence this warning and keep legacy behavior, set:
  wayland.windowManager.hyprland.configType = "hyprlang";
To adopt the new default behavior, set:
  wayland.windowManager.hyprland.configType = "lua";

全然知らなかったのですが、Hyprland は独自の設定言語である hyprlang を段階的に廃止し、Lua に移行することを決めたそうです[1]。hyprlang から Lua への移行はおいおいやることにして、一旦は以下のように hyprlang を使うように設定しておきました:

wayland.windowManager.hyprland = {
  configType = "hyprlang";
};

また Hyprland の更新によって suppressevent が使えなくなったようです。もともと Firefox の picture-in-picture のウィンドウがなにもしていないのに勝手に最大化してしまうので以下のような設定を入れていました:

windowrule = suppressevent maximize, class:(.\*)

試しにコメントアウトしてしばらく使ってみていますが、以前のように最大化してしまうことはなくなった?ようなので、もはや不要かもしれません。

#Hyprpaper

Hyprpaper の設定のフォーマットが変化していました。新しいフォーマットでは以下のように設定すると、全てのモニタで同じ壁紙を使えるようです:

services.hyprpaper = {
  enable = true;
  settings = {
    splash = false;
    wallpaper = [
      {
        monitor = "";
        path = "/path/to/wallpaper.png";
      }
    ];
  };
};

#Waybar

Waybar のコンポーネントがいろいろと壊れました。まずそもそも Waybar が起動できなくなりました。いろいろ試していると Cava のエラーメッセージとして must have even number of bars with stereo output と表示されていることに気づきました。そこで Waybar の設定で "bars": 13 となっていたのを 14 に変更すると正常に起動するようになりました。

さて Waybar を起動すると、CPU の温度を表示していたコンポーネントが消えていることに気づきました。これは Waybar が悪いというよりも /sys/class 配下の構造が変わってしまったことが原因で、温度を取得できなくなったようでした。 sensors コマンドでは正しく温度が表示されたので、Waybar の Wiki を参考に、以下のコマンドを実行して正しいパスを見つけて設定し直しました:

for i in /sys/class/hwmon/hwmon*/temp*_input; do
    echo "$(<$(dirname $i)/name): $(cat ${i%_*}_label 2>/dev/null || echo $(basename ${i%_*})) $(readlink -f $i)";
done

#nvim-treesitter

NeoVim が 0.11.7 から 0.12.3 に更新されたことにより nvim-treesitter が正常に動作しなくなっていました。自分は全然知らなかったのですが、そもそも最近では NeoVim 本体に treesitter の仕組みが取り込まれた事により nvim-treesitter の役割が変化したようです:

またそれにより、NixOS 26.05 では nvim-treesitter を使わずとも treesitter の恩恵が受けられるようになっているそうです。詳細はマニュアルを参照してください。

https://github.com/NixOS/nixpkgs/blob/nixos-26.05/doc/languages-frameworks/neovim.section.md?plain=1#L249-L269

ただこのマニュアルの方法では、treesitter を有効化する言語を自分で指定する必要があるので面倒です。インターネットをさまよったところ、以下の方法で nvim-treesitter を使いつつ自動で treesitter を有効化できることがわかったので、一旦これで運用しようと思います:

https://discourse.nixos.org/t/how-to-setup-the-new-nvim-treesitter-via-home-manager/74151/3

なお nvim-treesitter は現在アーカイブされています[2]。代替として tree-sitter-manager.nvim のような新しいプラグインが出てきている?ようですが、nixpkgs には含まれておらず、そもそも Home Manager による管理ができる環境で必要かどうかもよくわかりません。ということで今のところは様子見です。

#その他

その他の細かい話です:

#適用

適用する際は nixos-rebuild switch で適用すると現在のセッションがめちゃくちゃになる恐れがあるので nixos-rebuild boot で適用して再起動をかけるのが良いでしょう(一敗)。最悪起動できなくなっても NixOS ならブートローダーのところで古いビルドを選べるので安心です。

注釈

  1. この記事を読んで初めて知ったのですが Hyprland の作者は 2021 年に 17 歳だったらしいので、現在は 23 歳っぽいです。若い。

  2. アーカイブの経緯はこの辺を見るに事情があるようです。