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
|
|
Whenever you’re ready, here’s how I can help you:
|
|