summaryrefslogtreecommitdiff
path: root/src/assets/blog/2025-02-24.md
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-02-25 14:58:48 -0500
committerFreya Murphy <freya@freyacat.org>2025-02-25 14:58:48 -0500
commitac17edeec3303a102338124dc80f64538595ef6a (patch)
tree9e041012b12b535cc11a117f2c49f1eadcd7045a /src/assets/blog/2025-02-24.md
parentrefactor _views folder (diff)
downloadwebsite-ac17edeec3303a102338124dc80f64538595ef6a.tar.gz
website-ac17edeec3303a102338124dc80f64538595ef6a.tar.bz2
website-ac17edeec3303a102338124dc80f64538595ef6a.zip
add new projects, xssbook, and blog post
Diffstat (limited to '')
-rw-r--r--src/assets/blog/2025-02-24.md157
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.