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. 
       
 (HTM) 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.
       
 (HTM) 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.
       
 (HTM) 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.
       
 (HTM) 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.