ノートPCの Windows を飛ばして NixOS+Niri に移行した

NixOS + home-manager の再現性にセットアップを救われた
NixOS の設定は以前 MacBook に NixOS をセットアップしたものを流用したため、 セットアップ自体は 10 分で終わった。 これこそ NixOS の素晴らしいところだ。
セットアップを簡単にする方法として dotfiles の install.sh は有名だが、それでは現在の環境を再現できるとは限らない。
ユーザーがパッケージをインストールした後に install.sh を書き忘れていたり、パッケージ同士での依存関係が保たれなかったりする。
あとシェルスクリプトが好きじゃない
筆者は dotfiles で NixOS の configuration.nix の管理や home-manager の設定を配置している。NixOS の本当に基本的な設定さえ済ませれば、これを clone してワンコマンドで自分の環境が構築できる。
Niri のウィンドウ体験が快適
まずはデモを見ていただこう。
タイル型ウィンドウマネージャを使いこんだことがないというのもあるが、それを考慮しても Niri は特に快適だと思う。 それは、Niri が新しいウィンドウを開く時に既存のウィンドウを決してリサイズしないという性質にある。
筆者は以前少しだけ Hyprland を使っていたことがあるが、使いにくいと感じた。 Hyprland では新しいウィンドウを立ち上げるたびに既存のウィンドウが押し込められて小さくなるため、 ウィンドウが増えるほど各ウィンドウの表示サイズが小さくなってしまう。 そうしてウィンドウが見にくくなると、やむなくウィンドウを他のワークスペースに移動させるという運用をしていた。 これでは、ワークスペースをタスクの境界ではなく、仮想モニターとして扱うことになってしまう。
対して、Niri では各ワークスペース内に無限のウィンドウが水平方向に配置され、 物理画面には、そのワークスペース内のある領域で切り取ったような形で表示される。 ウィンドウが新しく立ち上がる際には、既存のウィンドウをリサイズすることなく、フォーカスしているウィンドウの横に出現する。 実際に文字をタイプしたり、操作をしたいときはそのウィンドウにフォーカスを移動させる。 1 つのワークスペース内で 1 つの仕事を完結させられるのだ。
14 インチラップトップだと画面領域が限られるので、2, 3 枚程度に抑えなければならないが、 よく行き来するアプリの数はその程度だし、これ以上増えてもそもそも画面領域的に見えない。 ラップトップの狭い画面領域においては特に、Niri のウィンドウ体験は最高だった。
OS 標準の使わないショートカットにキーを奪われない
NixOS+Niri だけでなく、Linux 全体の話だ。 ショートカットを自分で決めたい身からするとこれが嬉しい。 Super+HJKL をウィンドウ操作、Space+HJKL をアローキーに割り当てると大変快適になる。
// niri の設定ファイル
binds {
Mod+H { focus-column-left; }
Mod+J { focus-window-or-workspace-down; }
Mod+K { focus-window-or-workspace-up; }
Mod+L { focus-column-right; }
}
{
services.keyd = {
enable = true;
keyboards.default.settings = {
main.space = "overload(navigation, space)";
navigation = {
h = "left";
j = "down";
k = "up";
l = "right";
};
};
};
}
副次的に良くなったこと
ThinkPad のクリックが急に効かなくなる問題がなくなった。 以前は Windows でミドルボタンとスクロールを同居させるアプリを導入していたのだが、それが悪さをしていたのだろうと思われる ( Lenovo がなぜ Windows にそのドライバを実装しないのか甚だ疑問であるが)。 Niri では標準でミドルボタンとスクロールが同居する設定になっていたので、この問題は解決した。
アプリのインストールがめんどくさい & サポートがされていない
Windows や MacOS で平然と使えるアプリがそのままだと使えない。 NixOS + Niri の構成に限った話ではなく、Linux や Nix パッケージマネージャ、Wayland コンポジタ全体における課題だ。
もちろん解決策はある。 サードパーティの wrapper を使ったり書いたり(Coding Agent に書かせたり)、エミュレータによって使えることは多い。 たとえば筆者は ChatGPT Desktop for Mac の Linux 向け wrapper を導入している*1。 LLM によってこのような状況に対処するのはかなり楽になった。
しかし、アプリの発行者が Linux 版を用意してくれるなら、それが一番良い。 でも商業アプリの場合 Windows や MacOS と同レベルのサポートはコスト的に難しいという問題があろうかと思われるので、、、 Linux が普及してこの辺も良くなってくれれば嬉しい。
*1 2026 年 8 月 13 日時点で ChatGPT desktop for Linux がリリースされている。https://learn.chatgpt.com/docs/linux/linux-app