DEV Community

Branden Hernandez
Branden Hernandez

Posted on

I Tried NixOS for a Week So You Don't Have To

Linux is something I've wanted to try for a long time. I've been looking for an alternative to Windows, especially now that Microsoft is integrating AI into everything. Don't get me wrong, I like AI but I don't need it embedded in every part of my system, especially my personal computer. So I started weighing my options and finally decided to give Linux a shot.

Everyone talks about the benefits of Linux, but what had always kept me away was the overwhelming number of distributions. There are so many to choose from, and none of them ever felt like the right fit. I wanted something that worked out of the box without too much setup. I wasn't interested in reinventing the wheel. I just wanted a reliable, customizable operating system that wouldn't fight me every time I needed something simple.

After some research, I landed on NixOS.

Why I Chose NixOS

The things that stood out to me were declarative configuration, reproducibility, atomic upgrades and rollbacks, system stability, and the Nix programming language. These features felt like the answer to everything I didn't like about traditional Linux distributions.
I decided to try it out for a week and see if it was something I could stick with long-term.

What I Liked

After a week, one thing became clear: when NixOS works, it really works. If I need to install something, I just search for it on nixpkgs, add one line to my configuration.nix, and apply the change. I don't have to worry about missing dependencies or messing up my system. If something fails, it simply doesn't install, and my system stays clean.

The declarative configuration is probably my favorite part. The Nix language feels like a mix between JSON and functional programming - it lets you describe exactly how you want your system to be. I can make deep customizations without editing dozens of config files scattered across my system. I just edit one file and rebuild.

Another underrated feature is reproducibility. If someone else has Nix installed, I can share my configuration and they'll get an exact replica of my system. That's huge. It's like sharing your entire dev setup with just one file.

What I Didn't Like

That said, there were definitely some pain points:

  1. You have to update everything through the config file. While it's great for system-level installs, having to declare simple apps like Google Chrome in the config file feels tedious. Yes, you can install things outside of Nix, but doing so breaks the beauty of reproducibility.

  2. Another layer of abstraction. Managing your system through config files sounds great in theory, but in practice it can get muddy. Sometimes I'm editing dotfiles, sometimes it's the configuration.nix, and sometimes it's service-specific files. It's hard to know where to make changes unless you dig deep.

  3. Flakes sound powerful, but are confusing. Flakes are a newer way to manage your Nix setup with better structure and pinning. In theory, you can use a flake.nix and flake.lock to lock in your config, dependencies, and dev environments. In practice, it's a bit of a headache to set up and adds even more abstraction. I can see the potential, but it's not beginner-friendly.

Final Thoughts
Overall, NixOS is a brilliant concept - and for the right kind of user, it's a dream. It's stable, customizable, and once set up, incredibly smooth to maintain. But for someone just getting started, it can feel like a lot. The learning curve is steep. If you're okay with writing config files and debugging strange issues from time to time, you'll love it.

After a week, I'm not ready to make NixOS my daily driver just yet. But I'm not giving up on it either. I see the potential, and with more time and tweaking, I could see myself fully transitioning.

If you're curious, try it in a VM or on a spare machine. You might be surprised how much you learn - not just about Linux, but about your own development workflow.

Top comments (0)