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 Renting SaaS. Build Your Own Cloud. This issue is brought to you by: Security, Performance, Simplicity. Pick Three. Twingate delivers an identity-based access for users, services, and AI agents that deploys in minutes, scales to every resource, and finally lets you retire your VPN. Try Twingate - it's FREE! -> Why pay cloud companies when you can just… not? I’ve recently started running my own services at home, because.. honestly? I’m tired of paying cloud providers for things I can run...

This Tool Replaced 7 CLIs (and killed my opensource) This issue is brought to you by: Depot: Build faster. Waste less time. Accelerate your Docker image builds and GitHub Actions workflows. Easily integrate with your existing CI provider and dev workflows to save hours of build time. Get started for free -> I’ve been in the terminal for 12 years. I don’t get surprised often. Then I found Television, and I was wrong about it before I even opened it. The friction of endless pipes ||| There’s a...

My Opencode Workflow As A Senior Engineer This issue is brought to you by: Descope: Drag & Drop Your Auth Your engineers are building at warp speed, so why should auth be left behind? Descope provides no / low code workflows that decouple auth, access control, and user management from your app’s codebase so your teams can focus on the core product. Signup and Get Started Now Everyone's trying to replace themselves. I'm just trying to ship faster. 11 months ago, Dario Amodei said "AI would be...