diff options
author | Freya Murphy <freya@freyacat.org> | 2025-02-25 14:58:48 -0500 |
---|---|---|
committer | Freya Murphy <freya@freyacat.org> | 2025-02-25 14:58:48 -0500 |
commit | ac17edeec3303a102338124dc80f64538595ef6a (patch) | |
tree | 9e041012b12b535cc11a117f2c49f1eadcd7045a /src/assets/blog/2025-02-24.md | |
parent | refactor _views folder (diff) | |
download | website-ac17edeec3303a102338124dc80f64538595ef6a.tar.gz website-ac17edeec3303a102338124dc80f64538595ef6a.tar.bz2 website-ac17edeec3303a102338124dc80f64538595ef6a.zip |
add new projects, xssbook, and blog post
Diffstat (limited to 'src/assets/blog/2025-02-24.md')
-rw-r--r-- | src/assets/blog/2025-02-24.md | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/src/assets/blog/2025-02-24.md b/src/assets/blog/2025-02-24.md new file mode 100644 index 0000000..4946faa --- /dev/null +++ b/src/assets/blog/2025-02-24.md @@ -0,0 +1,157 @@ +--- +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. |