|
## Introduction
NixOS is a Linux distribution built around Nix tool. I'll try to
explain quickly what Nix is but if you want more accurate explanations
I recommend visiting the project website. Nix is the package manager
of the system, Nix could be used on any Linux distribution on top of
the distribution package manager. NixOS is built from top to bottom
from Nix.
This makes NixOS a system entirely different than what one can expect
from a regular Linux/Unix system (with the exception of Guix sharing
the same idea with a different implementation). NixOS system
configuration is stateless, most of the system is in read-only and most
of paths you know doesn't exist. The directory /bin/sh only contains
"sh" which is a symlink.
The whole system configuration: fstab, packages, users, services,
crontab, firewall... is configured from a global configuration file
that defines the state of the system.
An example of my configuration file to enable graphical interface with
Mate as a desktop and a french keyboard layout.
```Code sample for nixos configuration file
services.xserver.enable = true;
services.xserver.layout = "fr";
services.xserver.libinput.enable = true;
services.xserver.displayManager.lightdm.enable = true;
services.xserver.desktopManager.mate.enable = true;
```
I could add the following lines into the configuration to add auto
login into my graphical session.
```Code sample for nixos configuration file
services.xserver.displayManager.autoLogin.enable = true;
services.xserver.displayManager.autoLogin.user = "solene";
```
## Pros
There are a lot of pros. The system is really easy to setup,
installing a system (for a reinstall or replicate an installation) is
very easy, you only need to get the configuration.nix file from the
other/previous system. Everything is very fast to setup, it's often
only a few lines to add to the configuration.
Every time the system is rebuilt from the configuration file, a new
grub entry is made so at boot you can choose on which environment you
want to boot. This make upgrades or tries very easy to rollback and
safe.
Documentation! The NixOS documentation is very nice and is part of the
code. There is a special man page "configuration.nix" in the system
that contains all variables you can define, what values to expect, what
is the default and what it's doing. You can literally search for
"steam", "mediawiki" or "luks" to get information to configure your
system.
|
|
Builds are reproducible, I don't consider it a huge advantage but it's
nice to have it. This allow to challenge a package mirror by building
packages locally and verifying they provide the exact same package on
the mirror.
It has a lot of packages. I think the NixOS team is pretty happy to
share their statistics because, if I got it right, Nixpkgs is the
biggest and up to date repository alive.
|
|
## Cons
When you download a pre compiled Linux program that isn't statically
built, it's a huge pain to make it work on NixOS. The binary will
expect some paths to exist at usual places but they won't exist on
NixOS. There are some tricks to get them work but it's not always
easy. If the program you want isn't in the packages, it may not be
easy to use it. Flatpak can help to get some programs if they are not
in the packages though.
|
|
It takes disk space, some libraries can exist at the same time with
small compilation differences. A program can exist with different
version at the same time because of previous builds still available for
boot in grub, if you forget to clean them it takes a lot of memory.
The whole system (especially for graphical environments) may not feel
as polished as more mainstream distributions putting a lot of efforts
into branding and customization. NixOS will only install everything
and you will have a quite raw environment that you will have to
configure. It's not a real cons but in comparison to other desktop
oriented distributions, NixOS may not look as good out of the box.
## Conclusion
NixOS is an awesome piece of software. It works very well and I never
had any reliability issue with it. Some services like xrdp are usually
quite complex to setup but it worked out of the box here for me.
I see it as a huge Lego© box with which you can automate the building
of the super system you want, given you have the schematics of its
parts. Once you need a block you don't have in your recipes list, you
will have a hard time.
I really classify it into its own category, in comparison to Linux/BSD
distributions and Windows, there is the NixOS / Guix category with
those stateless systems for which the configuration is their code. |