WSL2 で NixOS を使えるようにした

と言う話です。

いったい何をどうした話なのか

私は普段使いの PC 環境を Windows 10 Pro に戻した時から、

  • Ubuntu 20.04 with nixpkgs on WSL2

と言う環境を Linux 環境として使っていました。

ただやっぱり WSL2 でも NixOS を使えんかなと言う事で、 NixOS on WSL2 と言う感じのキーワードで検索とかした結果、 実際にはちょっとだけ工夫すれば出来る、と言う事が分かったので、 今回の話はその辺りを実際にやってみた、と言う話です。

NixOS を WSL2 で使う

まず必要になるモノはこの辺りです:

  • nixpkgs が使える Linux 環境
  • GitHub の NixOS Distribution on WSL2 と言うリポジトリの中身
  • wsl コマンドが使える Windows 10 環境

で、実際のインストール作業の流れはこんな感じです:

  1. 上記リポジトリのスクリプトと nixpkgs 使って rootfs.tar.gz を作成
  2. 次に rootfs.tar.gz を Windows 環境にコピー
  3. そして wsl --import NixOS %userprofile%/NixOS /path/to/rootfs.tar.gz --version 2 を実行
  4. 最初の NixOS 環境の起動時に /nix/var/nix/profiles/system/activate を実行
  5. そしてコンテナ下にある NixOS を使う感じで NixOS が WSL2 上で使えます

あと/etc/nixos/configuration.nix を書く際は NixOS Container 使う感じの設定が必要だったり、 あるいは systemd を動かすための hack を組込まないとそもそも動かせない、とか、 NixOS を WSL2 で使うための独自の設定も必要、などなど注意点はいくつか有りますが、 そこさえクリアすれば NixOS は WSL2 で動くので、

Windows 10 Pro を使いつつ NixOS on WSL2 も使いたい!

と言う要求は達成されることとなります、やったぜ!

実際やってみた感想

うん、普通に動くぞ……! コレ……!

と言うのが第一印象です。

ただ、

GUI Application を VcXsrv と言う Windows 向け Xorg 実装を使って NixOS on WSL2 で動かす

と言う事をした時に一つハマったことがあって、上記でリンクした、

Elyhaka/NixOS-WSL: NixOS Distribution on WSL2

NixOS Distribution on WSL2. Contribute to Elyhaka/NixOS-WSL developmen...

と言うリポジトリのスクリプトを使って作れる rootfs.tar.gzでは、 NixOS の最小構成でシステムが構成されるため、 /etc/nixos/configuration.nix において、

environment.noXLibs = false;

と言う設定が無いとそもそも Xorg を使う GUI Application がインストールが出来ません。

また他にも実用上害は無いですが、 NixOS on WSL2 では systemd を使うために nsenter を使うと言う hack も用いているため、 sudo su - で root に成れなかったりもします。

あとは Windows 側で Terminal Emulator を用意するのはツラいので、 NixOS on WSL2 に mlterm をインストールして shell script 経由で mlterm を起動できる様にした、とか、 あるいは Vim8 から Neovim に乗り換えて dark-powered なプラグインを使う様にした、とか色々やってたりしますが、 その辺りはまた機会が有れば触れたいとは思ってはいます。はい。

以上

なんか久しぶりにブログを書いた気がしますが、まあ最近はそんな事をしていた、と言う話でした。はい。