Why I'm Ditching Nix Home Manager And What I'm Using Instead


Why I'm Ditching Nix Home Manager
And What I'm Using Instead

This issue is brought to you by:

Ready to Take Your Testing to the Next Level?


Don’t let complex testing slow you down! With Squish, you can automate your entire UI testing process across multiple platforms, ensuring both speed and accuracy. 

For the longest time, my dotfiles felt like a junk drawer: essential, but keeping them in order is a constant battle.

Like many developers, I've been through the evolution of dotfiles management systems, from a basic git repo to more sophisticated tools like Nix Home Manager.

But sometimes (or, more precisely - almost always), simpler is better (this should be a t shirt).

One British researcher noted on his post "Using GNU Stow to manage your dotfiles":

GNU Stow is a symlink farm manager which takes distinct packages of software and/or data located in separate directories on the filesystem, and makes them appear to be installed in the same place.

This post was written back in 2012 (!) and was one of the resources, leading me to my stow flow 🎶.

This straightforward approach has stood the test of time, even as more complex solutions have emerged, like Nix Home Manager, and the popular open source Chezmoi. Each with its own set of features and functionalities, appealing to a slightly different audience.

Here's what I've learned

While Nix Home Manager offers powerful features like system reproducibility and declarative configuration, it comes with significant drawbacks.

Every configuration change requires a complete system resync. Now, mind you, if this would be a 100ms operation we wouldn't be here in the first place. But much like I recently discovered I can "burn" my keyboard's layout changes instantly without waiting like I'm used to with my Moonlander, having to wait long seconds for every simple dotfiles change can be frustrating, especially when testing out new plugins and setups.

Not only that, the tool takes ownership of your dotfiles, making them inaccessible to other processes without special permissions. For many developers, including myself, this creates more friction than function.

One example that drove me nuts was Neovim's Lazy inability to change its own lockfile due to home manager taking over it. I mean, a lockfile! Quite literally a dynamic file that's sole function is keeping up to date and being managed by its creator...

One sunny Satureday, with yet another wait for a neovim's config change, followed by a lockfile error blocked due to permissions, I've had enough. Home manager is out.

The solution?

Going back to basics with GNU Stow. It's lightweight, doesn't lock you into an ecosystem, and most importantly, keeps you in control of your files.

Setting it up is straightforward: create a .stowrc file pointing to your ~/.config directory, configure file ignores, and run a single command to manage your symlinks.

No constant resyncing, no permission issues, and no complexity overhead.

This experience has taught me that sometimes the most sophisticated solution isn't the best one.

While Nix Home Manager is powerful, the simplicity and flexibility of tools like Stow often prove more practical for day-to-day use. Your dotfiles should work for you, not the other way around.

One more tip

Do you have something in your setup that hinders your work instead of supporting it?
Maybe a file sync system of some sort, a home manager of your own, perhaps a plugin you're used to but is actually taking long seconds to load and if you're honest with yourself, isn't doing the best service. I suggest this set of questions:

  • Is it supporting my workflow?
  • Is it only here because I'm used to it?
  • Does its features outweigh its flaws?

In my scenario, it was no, yes, no. Leading me to an easy decision, and back to my flow, and I'm not looking back.

Thanks for reading!

See ya next week.

What Squish offers:

  • ✅ Increase test coverage and efficiency
  • ✅ Trusted by leading companies worldwide 
  • ✅ Full CI/CD compatibility for seamless integration
  • ✅ Free up your team's time for higher-value tasks

ESPRESSO FRIDAYS

Every once in a while I send hand picked things I've learned. Kind of like your filter to the tech internet. No spam, I promise!

Read more from ESPRESSO FRIDAYS

Stop Using Elasticsearch. Use Postgres Instead This issue is brought to you by: Postgres for sensor and machine data Factories, wells, grids, and fleets run on live machine data. Tiger Data keeps it performant and scalable in one Postgres. Get started with Text Search on TigerData→ Do you still need Elasticsearch? I wanted to test that properly, so I put Postgres in Docker, loaded it with thousands of support tickets, and checked how far the same BM25 relevance search used by dedicated search...

Somehow, Atuin Just Got EVEN Better This issue is brought to you by: Give your AI agents memory Learn how Oracle Agent Memory handles persistent context with custom extraction, hybrid search, filtering, and more control over what your agents remember. Read the developer guide → There aren't many terminal utilities I'd take with me anywhere. But if I had to pick just one, Atuin may very well be it. I've been using it for a few years now, and somehow the magic turtle keeps getting better. It...

You’ve Never Seen a Shell Like Xonsh This issue is brought to you by: Redis Iris: Your agents should be getting smarter Unreliable agents fail in production. Redis Iris is a unified, real-time context engine that delivers fresh, relevant context so agents perform at scale. Try for FREE Tell me if this sounds familiar:You start with a quick shell script. Then one step gets annoying, so you call Python. Then Python needs to shell out again. Then you’re parsing strings, juggling quoting, and...