Because Nix (the package manager) & Nixpkgs (the Nix packages collection) can both be installed on any (most?) Linux distributions, they can be used to install NixOS in various creative ways. You can, for instance:
You'll need <literal>nixos-generate-config</literal> and <literal>nixos-install</literal> and we'll throw in some man pages and <literal>nixos-enter</literal> just in case you want to chroot into your NixOS partition. They are installed by default on NixOS, but you don't have NixOS yet..
The following 5 steps are only for installing NixOS to another partition. For installing NixOS in place using <literal>NIXOS_LUSTRATE</literal>, skip ahead.
At this point it is time to prepare your target partition. Please refer to the partitioning, file-system creation, and mounting steps of <xreflinkend="sec-installation"/>
Consider setting up the NixOS bootloader to give you the ability to boot on your existing Linux partition. For instance, if you're using GRUB and your existing distribution is running Ubuntu, you may want to add something like this to your <literal>configuration.nix</literal>:
If you do not wish to keep the Nix package manager installed either, run something like <literal>sudo rm -rv ~/.nix-* /nix</literal> and remove the line that the Nix installer added to your <literal>~/.profile</literal>.
Note that this will place the generated configuration files in <literal>/etc/nixos</literal>. You'll probably want to edit the configuration files. Refer to the <literal>nixos-generate-config</literal> step in <xref
linkend="sec-installation" /> for more information.
You'll likely want to set a root password for your first boot using the configuration files because you won't have a chance to enter a password until after you reboot. You can initalize the root password to an empty one with this line: (and of course don't forget to set one once you've rebooted or to lock the account with <literal>sudo passwd -l root</literal> if you use <literal>sudo</literal>)
<literal>/etc/NIXOS_LUSTRATE</literal> tells the NixOS bootup scripts to move <emphasis>everything</emphasis> that's in the root partition to <literal>/old-root</literal>. This will move your existing distribution out of the way in the very early stages of the NixOS bootup. There are exceptions (we do need to keep NixOS there after all), so the NixOS lustrate process will not touch:
Support for <literal>NIXOS_LUSTRATE</literal> was added in NixOS 16.09. The act of "lustrating" refers to the wiping of the existing distribution. Creating <literal>/etc/NIXOS_LUSTRATE</literal> can also be used on NixOS to remove all mutable files from your root partition (anything that's not in <literal>/nix</literal> or <literal>/boot</literal> gets "lustrated" on the next boot.
Finally, move the <literal>/boot</literal> directory of your current distribution out of the way (the lustrate process will take care of the rest once you reboot, but this one must be moved out now because NixOS needs to install its own boot files:
Once you complete this step, your current distribution will no longer be bootable! If you didn't get all the NixOS configuration right, especially those settings pertaining to boot loading and root partition, NixOS may not be bootable either. Have a USB rescue device ready in case this happens.
It's also worth noting that this whole process can be automated. This is especially useful for Cloud VMs, where provider do not provide NixOS. For instance, <link
xlink:href="https://github.com/elitak/nixos-infect">nixos-infect</link> uses the lustrate process to convert Digital Ocean droplets to NixOS from other distributions automatically.