--- name: From Guix to NixOS date: 025-02-25T14:57:00-05:00 desc: I love GNU, but im tired of managing everything myself. --- I love GNU and all of the work they do, but If i have to work a full time job to use your software the way I want, its not feasible for me to use... ### GNU/Guix [Guix](https://guix.gnu.org) is a declarative linux distrobution developed by the GNU project. If you ever herd of glibc, coreutils, or GNU/Hurd, its that crowd. Guix's goal is to build declarative system that is fully libre: the primary goal of the GNU project and the free software foundation. This means running zero free software, no drm, no binary blobs, no strictly licensed code, and not even providing the option to the user to run proprietary software if they want. This is the GNU way. #### Declarative systems A declarative system is built and can be fully reproduced from a single configuration. On my old guix system, I had a set of multiple guile scheme files, guix's configuration language of choice, that specified the entire system. What packages were installed, the users of the system with what groups they have, the bootloader, init system and the services it runs, and everything else is all contaiend in those scheme files. For example, the following scheme defined the users that were on my systems. ```scheme (define freya-user-accounts (lambda (groups) (cons* (user-account (name "freya") (comment "Freya Murphy") (uid 1000) (group "users") (shell (file-append zsh "/bin/zsh")) (home-directory "/home/freya") (create-home-directory? #t) (supplementary-groups groups)) %base-user-accounts))) ``` Packages can be defined... ```scheme (define-public %freya-packages (append (specifications->packages (list ; video audio "mesa" "mesa-utils" ; terminal "alsa-utils" "vim" "neovim" ; .... and so on )))) ``` Guix also uses an inhouse init system called shepherd that defines services using guix configuration scheme files. Declarative systems are really cool. If I break something, I can easially fix it by rolling-back my system. I dont have to figure out what stuff in the system changed, and manually repair it. Since everything is defined by configuration, it be overwritten when I rebuild the system state. Another thing specific to guix I liked is that it uses guile as its configuration language. For these reasons and many more, I switched to guix over two years ago and stayed on it until recently. Recently I left guix, and this is why. ### The problems 1. The Guix package manager is really slow I have no gosh darn idea what the heck GNU was doing when they built guix, but their package manage is slooooow. Really slow. Snail slow. If I wanted to instantiate my configuration on a new system It could easially take one to two hours. HOURS. Also, the guix package manager doesnt do TLS correctly. I don't know what why, but it every so often, especially when installing an entire system, it will crash and loose any builds or downloads it was in the middle of processing. Since the guix package manager is slow, it then takes a moment to start back up. In conclusion, when instantiating a new system, I have to start the installer multiple times, which adds to the hassle and install time. 2. Very few packages The main issue with using software that is used by a very small community is you will run into things just not being supported. With guix, this is packages. Since guix does not expose binaries and shared libraries globally (this is just how declarative systems work) you cannot just download software and built it. With guix and other declarative systems, you have to package the software to get it to run at all. Due to this, I had to spend hours packaging software I wanted to use including, but not limited to, UEFI firmware for QEMU, Hyprland, my lock screen, clipboard, gtk themes, and modern versions of pipewire. Since I was packaging all this software myself, there were no official binary substitutes avaliable such that I didnt have to build all the software all the time. Instead I had to manage my own [build server](https://cuirass.freya.cat/). 3. No non-free software Do you need to use Discord because all your friends use it? Do you want drivers to run a functional computer? Well if you asked those to questions GNU, GNU would tell you to get better friends and get a better computer. I'm sorry but im just not going to do that. Unlike other distrobutions that hide non-free software behind a flag, GNU just doesnt support it. At all. Nada. There are people in the community that add support themselves in their own third-party repositories, but they can break. And even with those third-party repositories the software may still not be packaged. Even more If you want to package it yourself, guix's build system doesnt make it easy to package non free software. Guix does not provide the utilities to do it. There are third-party extensions to the build system that make it easier to package proprietary software, but its not official and provided by guix. 4. Documentation and Support The biggest issue I had with guix was their documentation and support, or the lack there of. In the standard GNU fassion, the support they offer is "read the fucking documentation" (RTFM). This is fine if the documentation is good. With guix its not. You would be lucky to find something in guix documented. You would be even luckier if the documentation was any good. With guix, the best place to figure how to use the system is IRC chat logs, mailing list archives, reading other peoples dotfiles, and reading the guix source code. ### NixOS (the solution) NixOS is another declarative system that is much older, more widly used, and better supported then GNU/Guix. Guix was even a hard-fork of Nix. The major two differences is that NixOS is configured using their inhouse nix language, which isnt great, and that NixOS uses systemd for their init system. Besides not being able to use lisp, and being forced to use systemd, there are many benifits to NixOS over Guix. Nix supports non-free software if you choose to use it. Nix has good documentation. Nix has packages for almost everything. And compared to guix, nix is really fast. So I switched. #### My experience Ive been on NixOS for a little over a month now, and I'm loving it much better. The nix language is kind weird, but I can live with it. I dont have to use third-party repositories just to get packages to get my system to boot. It takes minutes not hours to setup a system. Everything just works™. You can see my guix configuration [here](https://g.freya.cat/freya/dotfiles-guix) and my nix configuration [here](https://g.freya.cat/freya/dotfiles-nix). If you are trying to learn or switch to either system, you can use them as a good resource. You can also view the guix repository I created called [sakura](https://g.freya.cat/freya/sakura) when I had to package things. But if you need a recommendation to use either GUIX or NixOS, from someone who used Guix for two years, use Nix.