h-terao.dev
Open palette Ctrl+K

NixOS on WSL の始め方

Sep 8, 2026 / NixOS, WSL

ここ 1 ヶ月ほど、仕事で使用している PC の OS を NixOS にしています。Nix にはこれまで何度かチャレンジしてきたのですが、コーディングエージェントによって設定変更がかなり簡単になったこと、過去チャレンジしてきたときに少しずつ蓄積してきた Tips や自分なりの設定方法のおかげでかなり快適な作業環境を構築することができています。

こういった経緯もあり、趣味の開発兼ゲーミング PC にも Nix を導入したいと考えました。ただし、ゲーミング PC をわざわざ Windows から NixOS に切り替える必要性も感じないため、NixOS on WSL をセットアップすることにしました。

NixOS on WSL のセットアップを進めていると、WSL 由来のトラブルや躓きやすそうなポイントがいくつかあることが分かりました。そこで、将来の自分や NixOS on WSL を始めたい方に向けて、実際に私がどういう手順でどのような設定をしたら上手くいったかを記事としてまとめてみました。

Note

NixOS に慣れている人も NixOS-WSL のドキュメント 、特に How-To 関連のページは一読しておくことをおすすめします

前提

  • Windows 11
  • WSL を有効化済

NixOS on WSL

NixOS の導入

まず、nix-community/NixOS-WSL のリリースページから最新の nixos.wsl ファイルをダウンロードします。このポストでは v2605.7.2 をダウンロードしました。

ダウンロードした nixos.wsl をダブルクリックすると自動的に NixOS が WSL 上で使えるようにインストールや設定などおこなってくれます。インストールが完了したら、Windows Terminal や PowerShell などから NixOS を起動しましょう。すると、以下のようなメッセージが表示されます。

Terminal window
Welcome to your new NixOS-WSL system!
Please run `sudo nix-channel --update` and `sudo nixos-rebuild switch` now, to ensure you're running the latest NixOS and NixOS-WSL versions.
If you run into issues, please report them on our Github page at https://github.com/nix-community/NixOS-WSL or come talk to us on Matrix at #wsl:nixos.org.
❄️ Enjoy NixOS-WSL! ❄️
Note: this message will disappear after you rebuild your system. If you want to see it again, run `nixos-wsl-welcome`.

メッセージに従い、以下のコマンドを実行して NixOS を更新します。

Terminal window
sudo nix-channel --update
sudo nixos-rebuild switch
Note

私の環境だと sudo nixos-rebuild switch がエラーを出力して失敗しました。同じ現象に悩んでいる場合、本記事の最後のセクション「NixOS on WSL でハマったポイント」を確認してみてください。

ユーザー名とホスト名の変更

ユーザー名やホスト名を変更したい場合、/etc/nixos/configuration.nix をエディタで編集する必要があります。私は vi よりも nano 派なので、以下のコマンドを実行しました。

Terminal window
sudo nano /etc/nixos/configuration.nix

ユーザー名とホスト名はそれぞれ以下のプロパティが対応しています。

  • ユーザー名:wsl.defaultUser
  • ホスト名:wsl.wslConf.network.hostname

例えば、ユーザー名を h-terao、ホスト名を quetzal に設定する場合は configuration.nix を以下のように編集します。(wsl.wslConf.network.hostname は初期状態だと記載されていないプロパティなので追記しています)

{ config, lib, pkgs, ... }:
{
imports = [
<nixos-wsl/modules>
];
wsl.enable = true;
wsl.defaultUser = "h-terao"; # ユーザー名
wsl.wslConf.network.hostname = "quetzal"; # ホスト名
system.stateVersion = "26.05";
}

設定を反映します。switch を使うとうまく設定できないようなので、必ず boot を実行します。

Terminal window
sudo nixos-rebuild boot

Powershell を開き、以下のコマンドを順番に実行していきます。

Terminal window
wsl -t NixOS
wsl -d NixOS --user root exit
wsl -t NixOS

再度 NixOS を起動し、[h-terao@quetzal:~]$ のように表示されていれば OK です。

Nix Flakes

Flakes の導入

Nix Flakes を NixOS 上で使用できるように有効化します。

/etc/nixos/configuration.nix をエディタで開き、nix.settings.experimental-features = [ "nix-command" "flakes" ]; という行を追記します。後はセットアップに必要なパッケージもついでに入れておくと良いでしょう(下の例では git と gh を追加)

{ config, lib, pkgs, ... }:
{
imports = [
<nixos-wsl/modules>
];
# ↓の 2 行を追記する
nix.settings.experimental-features = [ "nix-command" "flakes" ];
environment.systemPackages = with pkgs; [ git gh ];
wsl.enable = true;
wsl.defaultUser = "h-terao";
wsl.wslConf.network.hostname = "quetzal";
system.stateVersion = "26.05";
}

保存後、再度 sudo nixos-rebuild switch を実行すれば Nix Flakes と追加したパッケージが利用できるようになります

設定ファイルの作成

まだ既存の Flake ファイルとの統合がうまく固まっていないため、後日覚えていれば追記したいと思います。ドキュメントの How to configure NixOS-WSL with flakes を見ておけば、おおよその雰囲気は分かると思います。

NixOS on WSL でハマったポイント

最後に、NixOS on WSL をセットアップしている中でハマったポイントをまとめておきます。

nixos-rebuild 時にエラーが出力される場合の対処法

私の環境の場合、初回 sudo nixos-rebuild switch 実行時に以下のようなエラーが出力され、コマンドが失敗していました。

Terminal window
building the system configuration...
Checking switch inhibitors... done
activating the configuration...
setting up /run/booted-system...
setting up /bin...
setting up /sbin...
setting up /etc...
setting up /sbin/init shim...
reloading user units for nixos...
Error: Failed to open dbus connection
Caused by:
Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
warning: user activation for nixos failed
restarting sysinit-reactivation.target
the following new units were started: sysinit-reactivation.target, systemd-tmpfiles-resetup.service
Command 'systemd-run -E LOCALE_ARCHIVE -E NIXOS_INSTALL_BOOTLOADER -E NIXOS_NO_CHECK --collect --no-ask-password --pipe --quiet --service-type=exec --unit=nixos-rebuild-switch-to-configuration /nix/store/jfj8z6r4r3mdmw7kpl3niflnsx4sbvnm-nixos-system-nixos-26.05.8954.a5cc6f2c37bf/bin/switch-to-configuration switch' returned non-zero exit status 4.

ChatGPT に調査してもらったところ、既に microsoft/WSL の #41492 で報告されている問題が影響しているようです。過去にも 似たような問題 があり、一度修正されたものの WSL 2.9 で再発しているみたいです。

エラーの原因は user@1000.service が起動に失敗していることで、リスタートしてやることで対処可能です。具体的には、以下のコマンドを実行してから sudo nixos-rebuild switch を実行します。

Terminal window
sudo systemctl restart user@1000.service

ただ、このままだと NixOS を起動するたびに毎回 user@1000.service を再開する必要があるため非常に面倒です。そこで、 configuration.nix に以下の行を追記して使用しています。

# h-terao は wsl.defaultUser と同じ値
users.users.h-terao.linger = true;

設定反映後、WSL を再起動してから systemctl status user@1000.service を実行し、表示内容に以下の内容から始まる行が含まれていれば OK です。

Active: active (running)

起動時 wsl: Failed to … から始まる警告が表示される

NixOS を起動した際、以下のような警告が表示されることがあります。

Terminal window
wsl: Failed to start the systemd user session for 'h-terao'. See journalctl for more details.

こちらのイシュー で報告されているように、他の WSL ディストリビューションを起動した状態で NixOS を起動すると起きてしまうようです。軽く触るくらいであれば実害はほとんどないとは思うのですが、頭の片隅にでも置いておくとよいかもしれません。

hardware-configuration.nix が存在しない

通常の NixOS であれば、/etc/nixos/ に configuration.nix とともに hardware-configuration.nix が格納されています。このファイルにはその端末のハードウェア構成をもとに自動生成された初期設定が記載されているのですが、NixOS on WSL の場合はそもそも WSL 上で仮想的に動作するためなのか hardware-configuration.nix が生成されません。

通常の NixOS をそのままの状態で使用している場合は気になりませんが、Nix Flakes で設定を管理している人が初めて NixOS on WSL を使う場合は困惑するかもしれないので一応メモしておきます。

Last Updated: Sep 8, 2026