varakh.de

History - Journey to NixOS Part I

This post is part of #nixjourney series.

For over two decades, I’ve been an avid GNU/Linux user (“Yes, I’m that old” 🩕).

My first encounter with Linux happened in my teens. Fueled by curiosity about alternative tech, I sought options beyond Windows, the only OS I knew back then. This was the era of screeching modems and dial-up internet connections.

It started with Ubuntu 04.10 (“Warty Warthog”). The experience was… rough. Hardware support was spotty, key features didn’t work, and I quickly abandoned it. Yet something stuck: the terminal’s raw power and Linux’s different aesthetic intrigued me, even as basic functionality failed.

Two years later, I tried again. What a difference! Out-of-the-box hardware support, GNOME2’s polished interface, and stability made it a viable Windows replacement for my aging machine, except for gaming. Linux gaming then was a nightmare, so I kept a dual-boot setup.

Ubuntu became my daily driver for years, though I remained a surface-level user. When everything worked, I was content. When it broke, often due to my reckless config file experiments, I struggled to fix it. My limited understanding of Linux fundamentals turned minor issues into multi-day research projects. I was totally fine being an average user, but tinkering with it was fun, just my lack of knowledge was not. Quickly, those early struggles became lessons: understanding fundamentals and its architecture. When time went by, I became more experienced and I noticed that I needed more. I needed a more bare bones experience where I am forced to learn and deal with everything on my own, a system from scratch.

I did a little bit of distro hopping, but ultimately ended up with Arch Linux. The learning curve was very steep coming from the clicky Ubuntu experience. I spent days, weeks, and months reading its (fantastic!) wiki. It felt like a huge achievement when I got my first installation working (and many more would follow). I also noticed that my knowledge got a huge bump. Everything felt familiar, I was getting way better at how internals work, why I initially was right that apt with its PPAs is super inconvenient compared to pacman. I enjoyed every little bit of my new knowledge and the experience I had. Among these, the beauty of AUR, the freedom to have an unbloated system nobody preinstalls software I don’t want. That’s how digital freedom feels. I was finally there where I wanted to be. Very quickly I became a super user. Tiling window manager, command-line first. It was also super convenient to code (what I already did for a couple of years). I enjoyed it so much that Arch Linux has been my main driver for over 15 years, even maintaining some AUR packages myself.

Over the last three years of my Arch experience, a strange feeling haunted me though. Confident, that I knew already a lot, as I’ve also managed some servers and more than just one personal device running Arch, I still had that feeling: This cannot be the end of my GNU/Linux journey. I always enjoyed new tech. I was curious about alternatives and out of sheer curiosity and by pure accident for further acceleration and evolvment, I stumbled upon something called NixOS as it tackled one of my main pain points when I was managing multiple devices.

Arch is great for bleeding-edge software, but keeping configurations consistent across my growing amount of devices like laptops, servers, and arm-powered computers quickly became a headache and time consuming. I needed a tool or OS which actually requires less time. More automation, more configuration sharing, and a convenient way to bootstrap a fresh machine in a matter of minutes (reproducible). With my personal discovery of NixOS through IRC (“yep, still old” 🩖), it seemed like a perfect match as other config management tools didn’t align well with me personally. I had an “alien” feeling when looking at puppet, ansible, or alike. I was seeking a piece of software which feels “native”, embedded into the concepts of an OS and not an addition which works around some quirks.

Moving from Arch Linux to NixOS: Simplifying Multi-Device Maintenance

After years of managing multiple devices with Arch Linux, I switched to NixOS and it has been a game changer. NixOS uses declarative configuration, meaning you define your entire system setup in configuration files (configuration.nix). This lets you:

With NixOS, provisioning a new machine is as simple as cloning your config repo and running nixos-rebuild switch --flake .\#target. You can maintain:

This approach eliminates configuration drift and turns system maintenance into a version-controlled, repeatable process.

Nix’s functional language took some getting used to, but the benefits, safe testing, managing multiple software versions, and automating updates-are worth it. If you manage more than a couple of Linux devices, NixOS’s declarative model saves time and headaches. It’s not just a distro, it’s a new way to manage systems reliably and at scale.

Next up in the #nixjourney series: exploring my setup where I manage around 9 devices leveraging Nix flakes.

#linux #nix #nixjourney #operations