When I wrote a blog series about setting up NixOS for Haskell development, I was deep within cabal hell trying to get different Haskell projects with differing dependencies to build and install reliably. NixOS, with it’s rapid path reconfiguration and
nix-shell environments saved the day. The cost, however, was the relatively minor headache of needing to understand
cabal2nix to automatically build packages from Hackage.
Since then, though, my development preferences have shifted. My language of choice (for the time being) is Purescript, a new and shifting language with new features added each compiler release. As such, being able to easily grab the newest compiler version without jumping through a lot of nix expression hoops is essential. Also, each of my purescript projects uses bower, so my projects are already self-contained within their own directories without needing to use
nix-shell. In that light, NixOS doesn’t have much to offer my development flow.
So I’m moving away from my NixOS VM for the time being and switching to Lubuntu. So far, I’m not missing NixOS. With only a handful of actual applications on my dev machine, dependency hell is less likely without needing to learn the arcane nix language. The help resources for Ubuntu distributions are also much more numerous than those for NixOS, so in many cases, problems can be solved fast. If I ever need better build isolation than current workflow requires, I might give it another shot.