Title: NixOS review: pros and cons | |
Author: Solène | |
Date: 22 January 2021 | |
Tags: nixos linux | |
Description: | |
Hello, in this article I would like to share my thoughts about the | |
NixOS Linux distribution. I've been using it daily for more than six | |
months as my main workstation at work and on some computer at home too. | |
I also made modest contributions to the git repository. | |
NixOS official website | |
## 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. | |
All the documentation | |
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. | |
Search for a package | |
## 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. | |
Running binaries | |
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. |