98 lines
3.1 KiB
ReStructuredText
98 lines
3.1 KiB
ReStructuredText
============
|
|
NixOS on WSL
|
|
============
|
|
|
|
A minimal root filesystem for running NixOS on WSL. It can be used with
|
|
DistroLauncher_ as ``install.tar.gz`` or as input to ``wsl --import --version
|
|
2``.
|
|
|
|
|
|
Quick start
|
|
===========
|
|
|
|
First, `download the latest release's system tarball
|
|
<https://github.com/Trundle/NixOS-WSL/releases/latest/download/nixos-system-x86_64-linux.tar.gz>`_.
|
|
|
|
Then open up a Terminal, PowerShell or Command Prompt and run::
|
|
|
|
wsl --import NixOS .\NixOS\ nixos-wsl-x86_64-linux.tar.gz --version 2
|
|
|
|
This sets up a new WSL distribution ``NixOS`` that is installed under
|
|
``.\NixOS``. ``nixos-wsl-x86_64-linux.tar.gz`` is the path to the file you
|
|
downloaded earlier. You might need to change this path or change to the download
|
|
directory first.
|
|
|
|
You can now run NixOS::
|
|
|
|
wsl -d NixOS
|
|
|
|
You will be dropped into a very primitive ``sh`` shell. From here you need to
|
|
run this once::
|
|
|
|
/nix/var/nix/profiles/system/activate
|
|
|
|
A few warnings about locales will pop up. You can safely ignore them.
|
|
|
|
Exit and restart WSL and you should be greeted with a much fancier bash prompt
|
|
inside your fresh NixOS.
|
|
|
|
If you want to make NixOS your default distribution, you can do so via ``wsl -s
|
|
NixOS``.
|
|
|
|
|
|
systemd support
|
|
===============
|
|
|
|
WSL comes with its own (non-substitutable) init system while NixOS uses systemd.
|
|
Simply starting systemd later on does not work out of the box, because systemd
|
|
as system instance refuses to start if it is not PID 1. This unfortunate
|
|
combination is resolved in two ways:
|
|
|
|
* the user's default shell is replaced by a wrapper script that acts is init
|
|
system and then drops to the actual shell
|
|
* systemd is started in its own PID namespace; therefore, it is PID 1. The shell
|
|
wrapper (see above) enters the systemd namespace before dropping to the shell.
|
|
|
|
|
|
Build your own system tarball
|
|
=============================
|
|
|
|
This requires access to a system that already has Nix installed. Please refer to
|
|
the `Nix installation guide <https://nixos.org/guides/install-nix.html>`_ if
|
|
that's not the case.
|
|
|
|
If you have a flakes-enabled Nix, you can use the following command to build your
|
|
own tarball instead of relying on a prebuilt one::
|
|
|
|
nix build github:Trundle/NixOS-WSL#nixosConfigurations.mysystem.config.system.build.tarball
|
|
|
|
Or, if you want to build with local changes, run inside your checkout::
|
|
|
|
nix build .#nixosConfigurations.mysystem.config.system.build.tarball
|
|
|
|
Without a flakes-enabled Nix, you can build a tarball using::
|
|
|
|
nix-build -A nixosConfigurations.mysystem.config.system.build.tarball
|
|
|
|
The resulting mini rootfs can then be found under
|
|
``./result/tarball/nixos-wsl-x86_64-linux.tar.gz``.
|
|
|
|
|
|
License
|
|
=======
|
|
|
|
Apache License, Version 2.0. See ``LICENSE`` or
|
|
http://www.apache.org/licenses/LICENSE-2.0.html for details.
|
|
|
|
|
|
Further links
|
|
=============
|
|
|
|
* DistroLauncher_
|
|
* `A quick way into a systemd "bottle" for WSL <https://github.com/arkane-systems/genie>`_
|
|
* `NixOS in Windows Store for Windows Subsystem for Linux <https://github.com/NixOS/nixpkgs/issues/30391>`_
|
|
* `wsl2-hacks <https://github.com/shayne/wsl2-hacks>`_
|
|
|
|
|
|
.. _DistroLauncher: https://github.com/microsoft/WSL-DistroLauncher
|