Posted on February 15, 2026

NixOS

While writing this blog post, I’m fully on NixOS, having migrated all my configuration files and projects I think. It hasn’t been without its challenges, compiling my blog with Stack was a bit of a nightmare. A quintillion errors popped up: mismatched Haskell compiler versions, encoding issues, you name it. After a couple of hours of tinkering and research, I finally stumbled upon a solution: using a nix-shell to pin a specific version of GHC.

Back to the topic

NixOS has been on my radar for quite some time now. About 10 months ago, I decided to dive into it, experimenting with the unique approach it offers to Linux distributions, but unfortunately, it didn’t quite stick. Whether it was the steep learning curve or just the timing, I ended up moving away from it. Recently the Youtube algorithm seemed to do its job and suggested me some Nix videos of vimjoyer, a creator whose content reignited my interest of NixOS.

So after a careful check that I have backed up all my important files and configurations, I did the risky dd command to put the NixOS installer on my USB. At first i went for the graphical installer since installing an OS makes life easier when I can see how I am creating my partitions. But this did not work. It would not boot into the GUI installer. So back to the dd command. Now i have downloaded the minimal installer. Once again put it on the USB and tried again. Now it did work, but i had to manually create partitions, after repartitioning my drive 3 times I got it working. A fresh NixOS installation.

The configuration

This is where NixOS really shines and where it can also overwhelm you.

Since I had already experimented with NixOS about 10 months ago, I still had an old configuration lying around. Instead of blindly reusing it, I decided to treat it as a reference and strip it down to the absolute minimum. No mysterious options I didn’t understand.

I started with a tiny configuration.nix:

That’s it.

Rebuilding Intentionally

This time I didn’t just “Install a package”. I asked myself is this a system configuration? or should it live in home manager. This shift changed my perspective, I started treating it like what it actually is: a declarative system configuration.

My system is not longer configured. It is defined.

Home manager

Home Manager is a system for managing a user environment using Nix. It allows you to declaratively configure your user applications and manage your dotfiles. Since I didn’t want everything rewritten in Nix styled configuration my Neovim config, for example I decided to keep things pragmatic. While tools like NixVim exist to help with this, they introduce another layer of abstraction. Although you can configure everything in pure Nix, these tools don’t always handle inline Lua configuration elegantly. Instead, I opted to symlink my existing dotfiles. This approach sacrifices some of the “pure Nix” philosophy, but it maintains simplicity and lets me keep my familiar configuration files without fighting the tooling.

Scripts

Before the switch to NixOS i tried Omarchy for a bit. The thing i enjoyed the most is the volume of bash scripts they have to configure the system. For my system I want it to be personalized to my likings and not have some pre-configured, opinionated system. So i did what every developer should do, yoink the things I like about it and use it in my own system. For example the menu option of omarchy is very nice. But it still missed some functionality like have a direct browser search that supports !bangs.

What is next

My configuration is not yet my ideal system, but the weekend is over. So I will continue working on it later. For those who are interested you can find my configuration and dotfiles here.