Skip to main content

my experience with nixos (so far)

·
Table of Contents

tl;dr: needing a hatchet and buying a chainsaw

There is no fucking reason for me to be running NixOS. I’m not looking to deploy the same configuration across multiple devices, I don’t need to set up disparate environments for software development, and I didn’t even use the Nix package manager before committing to this operating system. It probably would have been far easier for me to just listen to the nice people at Framework and run Fedora or Ubuntu instead of NixOS. But here I am.

Now that we’re on the same page: Here’s what daily driving NixOS for the last couple of weeks has been like for someone who expects very little from their operating system.

things i like
#

Being able to declaratively configure my system has been amazing. Want to change the host name? Switch between desktop environments or window managers? Install software? All you gotta do is edit that “configuration.nix” file, sudo nixos-rebuild switch, and voila!NixOS does whatever the fuck it does and then gives you exactly what you asked for. It’s like magic, but with thousands of symlinks instead of floating castles and fireballs.

NixOS will also keep track of these changes in atomic “generations” you can boot into when something goes wrong. I had to do this after I flirted with Gnome but ultimately decided to go home to $TILING_WINDOW_MANAGER. For some reason a TTY displaying “^@^@^@^@^@^@^@” showed up after I made that change. I couldn’t fix it, so I just shut everything down and booted into a previous generation, and everything worked exactly the way I expected it to.

When I’m not actively fucking it up, NixOS also has that “it just works” vibe going for it. I haven’t even added the Framework-specific hardware overlay and everything just kinda works out of the box, at least to the extent that any system without a full-fledged desktop environment can “just work,” which is an indictment of my apparent inability to take the easy way out rather than a problem inherent to NixOS.

things i don’t like
#

I am so fucking sick of having to sudo hx /etc/nixos/configuration.nix, enter my long-ass passphrase, add some utility to my list of installed packages, and then sudo nixos-rebuild switch just because I forgot to install the English dictionary for aspell when I installed the package itself. (For example.)

There are other ways to install packages on NixOS. They aren’t recommended, though, and they undermine the whole purpose of centralizing the management of your system in that “configuration.nix” file. I like having a list of the packages I’ve installed in an easy-to-access place; I don’t like having to perform the ritual described above every time I want to add something to, or remove something from, that list of packages. It’s obnoxious.

I’m also suspect of how goddamn magical NixOS can seem–and how difficult it seems to be to learn. Like, Ian Henry’s series “ How to Learn Nix” has been going for almost three years and has 49 entries at time of writing. That’s… a lot. There are so many other things I’d rather learn. How to cook. How to code. How to do a third thing that doesn’t start with the letter “C.”

things i’m not even using
#

Flakes. It seems like everyone likes ’em, and I’m aware they offer some advantages when it comes to configuring a truly reproducible system, but I just don’t want to bother with them. Every configuration I’ve seen that uses flakes has like a dozen-odd directories with a bunch of files (or, worse, sub-directories) that all cross-reference each other and oh my god please make it stop. My brain just can’t handle that shit.

Home Manager. I already have files in my .config directory. Why would I break out all of this configuration into a different system that I wouldn’t use anywhere but NixOS anyway? I can take my dotfiles from distro to distro–or, I hope, operating system to operating system–and have everything configured the way I want it. Even if I can use Home Manager on other systems, I won’t. (I do however reserve the right to start fucking around with Home Manager the next time I want to procrastinate instead of doing something productive.)

so what’s the plan?
#

Eventually I’ll move away from NixOS. I’m not entirely sure where I’ll end up. Alpine and OpenBSD both seem to offer a mix of what I like about the “configuration.nix” approach, at least when it comes to package management, but also have apk add or pkg_add available so I don’t have to do all that sudo nixos-argbarg-a-wingdong-boo just to set up, I dunno, ripgrep. They also seem much easier to reason about than Nix or NixOS.

I did attempt to switch to Alpine a few days ago. It went poorly. I ran into a GRUB bug that didn’t let me boot into the system, so I decided to give FreeBSD a shot. It wouldn’t install. Then I gave OpenBSD a shot, and it did successfully install, but I’m not interested in configuring some X-based tiling window manager when I know I’ll want to ditch it in favor of some Wayland compositor as soon as the operating system supports it.

So I reinstalled NixOS. (If I were a smart person, I would have backed up my “configuration.nix,” but I am not so I did not. Live and learn. Or at least the first one.) Everything just worked again! It’s nice, and I like it, even if I don’t understand it.

I still think Nix and NixOS are amazing tools, and I’m sure I could learn how they work if I wanted to spend the time on that, but I just… don’t. There are so many other things I would prefer to explore in the time I have to experiment with stuff. Like it says at the top: I need a hatchet; NixOS is a chainsaw. That’s great for someone who needs a chainsaw! I’m still going to be on the lookout for that hatchet, though.