There are many distros for people who don't want to care - Ubuntu, Mint, Elementary OS, MX Linux, etc. I don't see how NixOS not being one of them is NixOS's problem.
> "I believe that the core idea of NixOS is fundamentally opposed to the idea of what the average person wants in their desktop."
What an average person wants in their desktop is Windows - not Linux and certainly not some obscure independent distro. And this is still not a problem of that distro or Linux.
> is NixOS's problem. [...] And this is still not the distro's problem.
It seems like the author is talking to people who might consider using NixOS for desktops, not towards NixOS itself. Unless I missed something in the article, the author is not saying this is a NixOS problem, but a "I made the wrong choice for me" problem, and now they're sharing the experience of reaching that conclusion.
Don't get me wrong, I (like many) have a love-hate relationship with NixOS, where I use it for all my servers both remote and at home, but my desktop/laptops remain on Arch Linux because I too don't fit it fitting for desktop usage. But I wouldn't argue against people who want to/not want to use it for desktop use, cool that it works or not for them.
> What an average person wants in their desktop is Windows
I think based on the context, the author is talking about the average developer really, not the typical end-user. They do say "someone who wants to use a computer like a regular person to do regular work" which might confuse people, but they really are talking about developers, as you can tell by the rest of the article.
According to the latest Stack Overflow Developer Survey (https://survey.stackoverflow.co/2024/technology#most-popular..., which also is biased admittedly), it seems like for professional use, ~48% use Windows, ~32% macOS and 28% Ubuntu. ~17% also use WSL, which is basically Linux in Windows, so I guess you could say ~45% wants to (or at least, does) use Linux for work.
Seems not so clear cut as you seem to think it is.
> What an average person wants in their desktop is Windows - not Linux and certainly not some obscure independent distro. And this is still not a problem of that distro or Linux.
The average person doesn't even want Windows. They want to click a button and not be bothered with the implementation details.
That is why mobile/tablet is such a popular form of compute these days. People don't even have to learn the basics of interfacing with a file system most of the time. Want to look at pictures you've taken? You can be oblivious to the fact that your camera app puts picture files in a specific directory and embeds a date code in the file name, the photo viewer app takes care of that for you.
I want the power of Nixos and not caring. I would like this experience both for the desktop and the server.
I said this one time on hacker news and a nixos fan told me that people like me should basically fuck off from the community because they don’t want people like me.
I used nixos for about a year for work so I definitely see the benefits of this but this ass hole attitude just made me sick of it. Like why can’t I have both? Is it impossible to have both? It may not exist yet but there’s a need here that would benefit everyone if it were filled.
Needless to say that thanks to that person I now really just dislike the nixos community. Rude and no flexibility in changing. Inevitably some guy might respond to this to apologize on behalf of the community and I appreciate that… but at the same time I think most members of the community truly have this attitude of keeping things hard and challenging on nixos and they don’t want things to change at all.
In addition to this.
Everything the guy mentioned that makes nixos hard for desktop can apply to servers as well. It’s not as if everything magically gets better.
Nix is bad because the language is very limited and extremely hard to debug and the module system is fragile and obscure (just try to write a recursion-safe mkMerge and prove it won't magically drop some parts of your config because the values in the module system are always magic attrsets, not values), but, unfortunately, there is nothing better around.
Even updating once per year is still a battle. It avoids the constant breakages from using unstable, but the problem is even the mainline “stable” nixpkgs will break because there really isn’t a good integration story for all of these components. Case in point: I just spent an hour this week pointlessly updating my home manager config because home manager just decided that a breaking api change would go in. The nix people have designed the ecosystem in such a way that everyone’s bespoke configuration can break at any given point and there is not an easy way to integration test even every common scenario.
In other words, the old adage still rings true. The beauty of Nix is that you can do anything. The ugliness of nix is that you can do anything
Everything is a battle and nix battle is bit less hopeless than the imperative distro battle, but again, nix is bad but noone wants to build a better thingy.
I've seen countless attempts and I'm trying to make my own build system (not targeting linux distros though). The problem is extremely hard. Essentially you have to build a general purpose PL which is better (more introspectable/debuggable/extensible) than other GPPLs.
What's been driving me batshit is when nixos-rebuild decides it wants to build from source. I just burned an hour the other day trying to update, and getting stuck because Nix decided my little old laptop needed to compile node.js from source. Had to trial-and-error remove packages to figure out which one was transitively pulling in node.js.
It turned out to be ansible... which is a pure python tool. Beats me.
There's also some cases where it wants to build Android Studio from source. I've just removed it and now run it in a VM.
I'm sure I'm doing it wrong, and I'm sure nixos-rebuild has a reason to build things from source, and maybe I'm not RTFMing hard enough. But good god, I just need my system to update.
Less than a week ago I complained about nearly the exact same issue and received the typical “nixy” response “that’s what the cache is for”. Well, that’s excellent news, when the cache actually works as expected. I see this a lot with my flake.nix per repo configurations too. The flake.nix never changes, yet it inexplicably rebuilds packages sometimes
That's not an issue unless you stay on master or use config flags (there is just a handful of them, but they are imortant, eg cudaSupport=true can easily give you 5-6 hours of build time, rocmSupport can easily give you a couple of days)
I used Nix for two years on basically everything, and I would sum it up as: Nix makes hard things easy, and easy things hard. This post mirrors my own experience and I no longer recommend Nix for desktop use. I agree that it makes a wonderful server in many cases.
I'd say about 90% of the pain in NixOS comes from its non-FHS (Filesystem Hierarchy Standard) layout. But that's also a fundamental part of Nix/NixOS's design-it was built that way from the start.
For complex packages like Steam, it's both possible and recommended to use FHS-compatible containers on NixOS. Still, I've seen people say things like, "All I do is set up containers-why not just use Docker instead of NixOS?" The thing is, if you dig deeper, tools like Docker or Flatpak are actually less powerful than Nix when it comes to container management.
I've been toying with an idea: using filesystem access tracing to replace the current approach of using random hashes for isolation. This could allow an FHS-style layout while preserving many of the guarantees of the Nix model. It would dramatically improve compatibility out-of-the-box, enable capabilities that aren't possible today, and reduce network and disk usage-since files could be modified in-place instead of being remade or redownloaded.
It's on my backlog, though. Starting a new distro doesn't seem particularly rewarding at the moment.
I loved NixOS when I tried it, its value is real. But the problem as always is the cost you have to pay for that value.
In my case I was using Flutter for an app and when a new version was released the version supported by the current NixOS version was old. So I had to search for a flake that supported the new version but it was abandoned some versions ago. So finally I had to search for a how to create a flake so the latest version would work.
Cue some hours of work until I had it working.
Compare this to Ubuntu where I execute "flutter upgrade" and I have it working in a minute.
For my dev machine if I need some kind of reproducibility I have Docker at hand. It's a 100% perfect value solution for this? No, but the cost to pay is much lower than Nix.
I landed on "immutable distros by default for average users" as well. It is a more Windows/macOS like experience where it is much harder to mess up the system.
Flatpak guarantees everything will work in most cases, and for other cases there's AppImage. Just need to get most devs to distribute AppImages. BoxBuddy with distrobox will solve _all_ edge cases where someone says "X works with Y in Z on my machine" so you replicate their machine in distrobox.
I know this is trading program size with convenience, but that's what Windows and macOS does too. It is better to be on some immutable linux distro rather than Windows in my opinion. We don't have to force the average person who just wants their computer to work to install (extreme example) Gentoo or whatever.
NixOS has been my daily driver for gaming, code experiments and general productivity for about a year and a half now. I’ve been using desktop Linux in varying ways for 20+ years, and while there are certainly downsides/tradeoffs, I don’t see myself leaving NixOS anytime soon.
I’d been curious about it many times in the past, but found the learning curve to be prohibitive the first several times I tried it. I’m fairly convinced that many of the problems people experience stem from the poor documentation and over-enthusiastic community extolling the virtues of Flakes and Home Manager.
I understand their value and why people like using them, but for a beginner, those capabilities just layer complexity on top of something that already feels unfamiliar, and make it impossible to figure out which thing isn’t working when things go wrong. When I went to a very Vanilla NixOS configuration as a starting point, everything clicked and I was able to build up a solid desktop environment incrementally.
As a tinkerer, the killer feature for me is the ease of experimenting with packages/whole configurations and then reverting back to my known good config. Type `nix-shell -p <package>` and the package is ready for use, and totally gone when I exit the shell.
I don’t think need is the right way to describe my relationship with NixOS as a desktop. But decades of experience dealing with the aftermath of installing/experimenting/tweaking my environment in traditional distros sure makes me appreciate how much easier it can be.
> I believe that the core idea of NixOS is fundamentally opposed to the idea of what the average person wants in their desktop.
NixOS on the desktop isn’t targeted at the average person, or probably even the average Linux desktop user. If it’s causing more pain than it’s solving, it’s probably not the right choice. But I think that will be a very individual/personal calculation.
No, you don't need NixOS on the desktop, but for certain people--like me!--it sure is nice. For example, I have this preoccupation with remembering how I configured something. I'd developed note-taking systems to remember how I'd set something up for the inevitable reinstallation (say a new computer)? Now? Download a few text files from github, type a command, and 10 minutes later I'm back in business.
It was a tough road to get comfortable, though I tell people that's because NixOS should be treated like an entirely different OS rather than as a distribution. But now? It's great. It solves a real problem for me. I definitely don't think it's for everyone, but this post draws an overly general conclusion.
I once mistakenly broke NixOS (ignore the rumors, it's not unbreakable) and that gave me a reason to break free from the IAC bondage. In the short time I used NixOS it only led me to more rabbit holes inside the OS instead of managing the complexity I was promised it would.
I find the author's journey through various Linux distributions intriguing. The conclusion, “I don't want to care” about updates, setup, etc., resonates with me, especially reflecting on my younger self's quest for the “right” Linux distribution. My growing need for a stable and productive working environment aligns with this sentiment.
However, alongside the desire to “not care,” there's a strong curiosity to explore new operating systems, architectures, or philosophies. Recently, my inner child prevailed, leading me to purchase a second-hand notebook. I installed FreeBSD and configured Sway on it. Now, it sits among my other notebooks, at least one of which is set up by my inner adult for daily work.
I'm drawn towards nix because of home-manager and because it seems to be the only package manager and distribution of neovim plugins that does package signing and somewhat resilient to supply chain attacks.
I'm in a similar position to the author—running NixOS on a Framework 13 for about a year—and while I agree with some of their points I think I disagree with others.
> However, this means that your projects end up populated with Nix files, which is particularly annoying when you want to submit PRs to upstream projects
This is a legitimate gripe, but it does have a mitigation, which is to add those files to your global gitignore. The trade-off you make here is that you have to explicitly add the files to repos that actually do need them, but that's a one and done cost.
> I'm now responsible for configuring this entire system. I am also responsible for updating this system.
On the contrary, I have felt much less responsible for configuring and updating my whole system since switching to NixOS. Most of my system is just whatever the upstream channels are doing. My whole system config is maybe 300 lines long, and most of that is a list of the programs I want installed, which is something that I've always wished I could have on other distros but can't.
On other distros I have felt much more responsible for controlling my whole system because random crap would break all the time and I had to learn how it was configured. That has never happened to me on NixOS.
Also, containers are totally available on NixOS and I use them all the time. I've avoided flatpak so far not because it's not available but because I want to try to do things the NixOS way and I haven't felt the need to move away from fully declarative.
None of which is to say that NixOS is right for you or anyone in particular, but so far my experience has been that there is a very steep initial learning curve that you do get over. Maybe someday I'll give Fedora Bluefin a shot, but in the meantime I'm definitely not regretting leaving behind the traditional distro model.
Not arguing for Nix here, but couldn’t you use Distrobox on Nix to mitigate some of the author’s problems while still getting benefits from Nix for the basic install?
Note: I’m not a Nix user - primarily Fedora and Debian, though I’ve used Bluefin a lot and used to use PopOS as a gaming desktop. (Rarely have any time for gaming these days…)
Seconded. I have been using nixos for a few years. I don't use it for everything, but I like it for dev. It was weird at first, and there were one or two early blocking problems I had to solve before I could do work. Like how do I set gpg pin-entry, but I forget stuff like that and have to search for it on any platform. At least on nixos is all written down somewhere even if I'm too lazy to take notes.
The installer is super easy to use; full disk encryption is baked in if you want it, the default desktop is fine, and the overwhelming majority of my config is just the apps I want installed by default.
I love this because it makes my desktop or laptop totally commodified: if I break my laptop I can get another one out of the closet and:
-- install nixos in 10 minutes
-- copy a couple of stanzas out of my nix config file into the new system one
-- untar a backup /home/user
-- `nix rebuild switch`
-- drink a beer
No installing a bunch of dev environment stuff. No greping internet for 'gpg pin-entry' or 'how to install docker' because I had to write that into a config in the first place. Basically I like nixos because I'm a lazy fucker and it makes me front end load the work so I only have to do it once.
Also, these days if I have trouble writing a nix thing I can usually just vibecode my way out of the problem. ¯\_(ツ)_/¯
Coming from a background that utilizes tools like Terraform, Docker, and Ansible, I find myself wondering: is there a guide available on how to use NixOS, similar to Docker or Terraform, to build a virtual machine?
As someone using nix because I messed up my arch luks encryption because of single command on stackoverflow.....
I haven't really learned nix os language right now and I have only installed bare minimal software like a librewolf, prism launcher, kde, I used to be a hyprland user and I might switch back in some days.
The biggest advantage to me feels nix-shell which is cross platform
I installed obs-studio from nix-shell, built a video, then used another nix-shell for ffmpeg and converted video to mp4 and uploaded it to github.
This is my general use case of obs and I very rarely make recordings and so this idea that I can install/try out software without having to worry about anything while still having no xdg issues unlike flatpak is a godsend.
Did I mention I started using nix-shell for places I would've used docker, like stirling-pdf one off cases
Most of the software on my computer needs to be rarely accessed and I love the sanity that nix provides knowing that It won't make my update times faster/if-any unlike archlinux and dependency hell is a problem I truly despise.
I have looked for better alternatives, maybe spack comes to mind, but nix-shell is still crazy good. And I can also some day use a functional programming to make it even more automated.
Isn’t your primary benefit you’re looking for the same as what containers offer? If that is true, isn’t the only major benefit that nix is a little less sluggish?
FWIW the way we use nix where I work is quite a bit lighter touch than the setups being discussed here. There are kind of three tiers of Nix implementations
- I want Nix to manage my entire os (NixOS)
- I want Nix to manage my user shell and dotfiles (home manager)
- I want Nix to manage per repository shells (nix + direnv with a flake.nix in each repo, or an .envrc that pulls a shared flake and extends it)
We use the latter and find it to be a good mix of keeping nix configuration simple but also enabling per environment shells that are reproducible
For me it is yet another trend that I will gladly pass on.
At work it is all about Windows and macOS, with a mix of legacy server VMs, Kubernetes or serverless on the server, we increasingly rely less on classical UNIX or Windows server workloads.
At home, it is all about Windows and Android.
So unless it is unavoidable, I don't need it anywhere, it is another Gentoo, at least for me.
> If I work on a repo, all I have to do is enter my dev distrobox, SSH in from my IDE, and work within that environment - no devcontainer or flake.nix required.
With Ubuntu 24.04 and vagrant virtual machines, you could have even less hassle than with Bluefin.
> However, this means that your projects end up populated with Nix files, which is particularly annoying when you want to submit PRs to upstream projects
Do people really not selectively add files to their commits? Sometimes I don't even commit the whole of a file's changes, thanks to `git add -p`.
I understand why immutable systems make sense but the benefits they bring are overrated.
How often will you mess up your system so bad you won't be able to recover it?
I ran some sort of Arch for around 15 years and the times I needed to recover my system are few and far in between.
I ran nixos for a few years but I stopped when I started experimenting with AI. Dependencies were too out of date and running random small projects is riddled with extra pain, compared to other systems.
I also had problems during upgrades, caused by incompatible features and configurations. Instead of relying on the project documentation I had to rely on nix documentation. I have massive respect for nix maintainers (and I have even contributed) but maintaining any software for everyone is a monumental task. Distros maintainer have it hard enough.
Arch with AUR ended up being a simpler experience.
The author mentions Distrobox and Podman containers for managing dev envs as offerings from the Fedora Silverblue. No sure why this is an advantage, since you can use them on NixOS just as well. I'm using podman containers on NixOS for ML type dev with CUDA installed and have no issues or struggles.
Such a patronizing comment. Quips like this really hammer home the stories people recount about nix community. Get over yourself, your nice config manager is not the second coming of Jesus.
> "I don't want to care"
There are many distros for people who don't want to care - Ubuntu, Mint, Elementary OS, MX Linux, etc. I don't see how NixOS not being one of them is NixOS's problem.
> "I believe that the core idea of NixOS is fundamentally opposed to the idea of what the average person wants in their desktop."
What an average person wants in their desktop is Windows - not Linux and certainly not some obscure independent distro. And this is still not a problem of that distro or Linux.
> is NixOS's problem. [...] And this is still not the distro's problem.
It seems like the author is talking to people who might consider using NixOS for desktops, not towards NixOS itself. Unless I missed something in the article, the author is not saying this is a NixOS problem, but a "I made the wrong choice for me" problem, and now they're sharing the experience of reaching that conclusion.
Don't get me wrong, I (like many) have a love-hate relationship with NixOS, where I use it for all my servers both remote and at home, but my desktop/laptops remain on Arch Linux because I too don't fit it fitting for desktop usage. But I wouldn't argue against people who want to/not want to use it for desktop use, cool that it works or not for them.
> What an average person wants in their desktop is Windows
I think based on the context, the author is talking about the average developer really, not the typical end-user. They do say "someone who wants to use a computer like a regular person to do regular work" which might confuse people, but they really are talking about developers, as you can tell by the rest of the article.
> talking about the average developer really, not the typical end-user
Average developer wants Windows (with WSL) or Mac. Still not Linux. ¯\_(ツ)_/¯
Highly dependent on your local bubble, obviously.
According to the latest Stack Overflow Developer Survey (https://survey.stackoverflow.co/2024/technology#most-popular..., which also is biased admittedly), it seems like for professional use, ~48% use Windows, ~32% macOS and 28% Ubuntu. ~17% also use WSL, which is basically Linux in Windows, so I guess you could say ~45% wants to (or at least, does) use Linux for work.
Seems not so clear cut as you seem to think it is.
I use WSL without really using Linux, although technically I do use it.
With that I mean, the only reason I use WSL is for running containers locally.
All the regular software, outside projects that require container based deployments, is straight Windows software.
I would expect that survey to be biased towards more Windows users, if anything.
I'm surprised how small Fedora is relative to Ubuntu
And before WSL, it was all about VMWare Workstation, or Virtual Box, since hardware virtualization became a commodity.
I don't dual boot since around 2010.
> What an average person wants in their desktop is Windows - not Linux and certainly not some obscure independent distro. And this is still not a problem of that distro or Linux.
The average person doesn't even want Windows. They want to click a button and not be bothered with the implementation details.
That is why mobile/tablet is such a popular form of compute these days. People don't even have to learn the basics of interfacing with a file system most of the time. Want to look at pictures you've taken? You can be oblivious to the fact that your camera app puts picture files in a specific directory and embeds a date code in the file name, the photo viewer app takes care of that for you.
Just wait until LLM's and mcp matures; why tap tap tap your phone when you could just talk to Jarvis
Who is Jarvis?
I think it's a (fictional) AI assistant in Iron Man.
I’m not sure people care about their OS that much. I’ve watched companies change OSes and not miss a beat, and in many cases getting better:
* less service interruptions by using chromeOS over a cell carriers network instead of a failing internal network
* improved productivity from fewer OS configuration and update problems by switching to Macs
* Lower costs across the board due to better or less expensive hardware with Chrome and Mac
* Higher dev productivity in a small dev shop by requiring devs to use the exact same os they deploy code to (it forced the devs to learn)
I must have missed the part of the article where the author said it was NixOS’s problem.
If you want to use it as your desktop, nobody’s stopping you. They’re making the case why they think it’s unsuitable.
I want the power of Nixos and not caring. I would like this experience both for the desktop and the server.
I said this one time on hacker news and a nixos fan told me that people like me should basically fuck off from the community because they don’t want people like me.
I used nixos for about a year for work so I definitely see the benefits of this but this ass hole attitude just made me sick of it. Like why can’t I have both? Is it impossible to have both? It may not exist yet but there’s a need here that would benefit everyone if it were filled.
Needless to say that thanks to that person I now really just dislike the nixos community. Rude and no flexibility in changing. Inevitably some guy might respond to this to apologize on behalf of the community and I appreciate that… but at the same time I think most members of the community truly have this attitude of keeping things hard and challenging on nixos and they don’t want things to change at all.
In addition to this.
Everything the guy mentioned that makes nixos hard for desktop can apply to servers as well. It’s not as if everything magically gets better.
Yup. I'm doing arch on desktop and nix on headless servers.
Didn't have the energy to try to set up gaming & nvidia drivers & GUI on nix. If valve/steam is going for arch then I'll just go that way too
>"I don't want to care"
Update once per year.
> brew, distrobox, flatpak
You can have that stuff on Nix if you need it.
Nix is bad because the language is very limited and extremely hard to debug and the module system is fragile and obscure (just try to write a recursion-safe mkMerge and prove it won't magically drop some parts of your config because the values in the module system are always magic attrsets, not values), but, unfortunately, there is nothing better around.
Even updating once per year is still a battle. It avoids the constant breakages from using unstable, but the problem is even the mainline “stable” nixpkgs will break because there really isn’t a good integration story for all of these components. Case in point: I just spent an hour this week pointlessly updating my home manager config because home manager just decided that a breaking api change would go in. The nix people have designed the ecosystem in such a way that everyone’s bespoke configuration can break at any given point and there is not an easy way to integration test even every common scenario.
In other words, the old adage still rings true. The beauty of Nix is that you can do anything. The ugliness of nix is that you can do anything
> a battle
Everything is a battle and nix battle is bit less hopeless than the imperative distro battle, but again, nix is bad but noone wants to build a better thingy.
I've seen countless attempts and I'm trying to make my own build system (not targeting linux distros though). The problem is extremely hard. Essentially you have to build a general purpose PL which is better (more introspectable/debuggable/extensible) than other GPPLs.
What's been driving me batshit is when nixos-rebuild decides it wants to build from source. I just burned an hour the other day trying to update, and getting stuck because Nix decided my little old laptop needed to compile node.js from source. Had to trial-and-error remove packages to figure out which one was transitively pulling in node.js.
It turned out to be ansible... which is a pure python tool. Beats me.
There's also some cases where it wants to build Android Studio from source. I've just removed it and now run it in a VM.
I'm sure I'm doing it wrong, and I'm sure nixos-rebuild has a reason to build things from source, and maybe I'm not RTFMing hard enough. But good god, I just need my system to update.
Less than a week ago I complained about nearly the exact same issue and received the typical “nixy” response “that’s what the cache is for”. Well, that’s excellent news, when the cache actually works as expected. I see this a lot with my flake.nix per repo configurations too. The flake.nix never changes, yet it inexplicably rebuilds packages sometimes
> Had to trial-and-error remove packages
There are introspection tools for that.
> Build from source
That's not an issue unless you stay on master or use config flags (there is just a handful of them, but they are imortant, eg cudaSupport=true can easily give you 5-6 hours of build time, rocmSupport can easily give you a couple of days)
I used Nix for two years on basically everything, and I would sum it up as: Nix makes hard things easy, and easy things hard. This post mirrors my own experience and I no longer recommend Nix for desktop use. I agree that it makes a wonderful server in many cases.
I'd say about 90% of the pain in NixOS comes from its non-FHS (Filesystem Hierarchy Standard) layout. But that's also a fundamental part of Nix/NixOS's design-it was built that way from the start.
For complex packages like Steam, it's both possible and recommended to use FHS-compatible containers on NixOS. Still, I've seen people say things like, "All I do is set up containers-why not just use Docker instead of NixOS?" The thing is, if you dig deeper, tools like Docker or Flatpak are actually less powerful than Nix when it comes to container management.
I've been toying with an idea: using filesystem access tracing to replace the current approach of using random hashes for isolation. This could allow an FHS-style layout while preserving many of the guarantees of the Nix model. It would dramatically improve compatibility out-of-the-box, enable capabilities that aren't possible today, and reduce network and disk usage-since files could be modified in-place instead of being remade or redownloaded.
It's on my backlog, though. Starting a new distro doesn't seem particularly rewarding at the moment.
I loved NixOS when I tried it, its value is real. But the problem as always is the cost you have to pay for that value.
In my case I was using Flutter for an app and when a new version was released the version supported by the current NixOS version was old. So I had to search for a flake that supported the new version but it was abandoned some versions ago. So finally I had to search for a how to create a flake so the latest version would work.
Cue some hours of work until I had it working.
Compare this to Ubuntu where I execute "flutter upgrade" and I have it working in a minute.
For my dev machine if I need some kind of reproducibility I have Docker at hand. It's a 100% perfect value solution for this? No, but the cost to pay is much lower than Nix.
I landed on "immutable distros by default for average users" as well. It is a more Windows/macOS like experience where it is much harder to mess up the system.
Flatpak guarantees everything will work in most cases, and for other cases there's AppImage. Just need to get most devs to distribute AppImages. BoxBuddy with distrobox will solve _all_ edge cases where someone says "X works with Y in Z on my machine" so you replicate their machine in distrobox.
I know this is trading program size with convenience, but that's what Windows and macOS does too. It is better to be on some immutable linux distro rather than Windows in my opinion. We don't have to force the average person who just wants their computer to work to install (extreme example) Gentoo or whatever.
NixOS has been my daily driver for gaming, code experiments and general productivity for about a year and a half now. I’ve been using desktop Linux in varying ways for 20+ years, and while there are certainly downsides/tradeoffs, I don’t see myself leaving NixOS anytime soon.
I’d been curious about it many times in the past, but found the learning curve to be prohibitive the first several times I tried it. I’m fairly convinced that many of the problems people experience stem from the poor documentation and over-enthusiastic community extolling the virtues of Flakes and Home Manager.
I understand their value and why people like using them, but for a beginner, those capabilities just layer complexity on top of something that already feels unfamiliar, and make it impossible to figure out which thing isn’t working when things go wrong. When I went to a very Vanilla NixOS configuration as a starting point, everything clicked and I was able to build up a solid desktop environment incrementally.
As a tinkerer, the killer feature for me is the ease of experimenting with packages/whole configurations and then reverting back to my known good config. Type `nix-shell -p <package>` and the package is ready for use, and totally gone when I exit the shell.
I don’t think need is the right way to describe my relationship with NixOS as a desktop. But decades of experience dealing with the aftermath of installing/experimenting/tweaking my environment in traditional distros sure makes me appreciate how much easier it can be.
> I believe that the core idea of NixOS is fundamentally opposed to the idea of what the average person wants in their desktop.
NixOS on the desktop isn’t targeted at the average person, or probably even the average Linux desktop user. If it’s causing more pain than it’s solving, it’s probably not the right choice. But I think that will be a very individual/personal calculation.
> You do not need NixOS on the desktop
No, you don't need NixOS on the desktop, but for certain people--like me!--it sure is nice. For example, I have this preoccupation with remembering how I configured something. I'd developed note-taking systems to remember how I'd set something up for the inevitable reinstallation (say a new computer)? Now? Download a few text files from github, type a command, and 10 minutes later I'm back in business.
It was a tough road to get comfortable, though I tell people that's because NixOS should be treated like an entirely different OS rather than as a distribution. But now? It's great. It solves a real problem for me. I definitely don't think it's for everyone, but this post draws an overly general conclusion.
I once mistakenly broke NixOS (ignore the rumors, it's not unbreakable) and that gave me a reason to break free from the IAC bondage. In the short time I used NixOS it only led me to more rabbit holes inside the OS instead of managing the complexity I was promised it would.
I find the author's journey through various Linux distributions intriguing. The conclusion, “I don't want to care” about updates, setup, etc., resonates with me, especially reflecting on my younger self's quest for the “right” Linux distribution. My growing need for a stable and productive working environment aligns with this sentiment.
However, alongside the desire to “not care,” there's a strong curiosity to explore new operating systems, architectures, or philosophies. Recently, my inner child prevailed, leading me to purchase a second-hand notebook. I installed FreeBSD and configured Sway on it. Now, it sits among my other notebooks, at least one of which is set up by my inner adult for daily work.
I'm drawn towards nix because of home-manager and because it seems to be the only package manager and distribution of neovim plugins that does package signing and somewhat resilient to supply chain attacks.
I'm in a similar position to the author—running NixOS on a Framework 13 for about a year—and while I agree with some of their points I think I disagree with others.
> However, this means that your projects end up populated with Nix files, which is particularly annoying when you want to submit PRs to upstream projects
This is a legitimate gripe, but it does have a mitigation, which is to add those files to your global gitignore. The trade-off you make here is that you have to explicitly add the files to repos that actually do need them, but that's a one and done cost.
> I'm now responsible for configuring this entire system. I am also responsible for updating this system.
On the contrary, I have felt much less responsible for configuring and updating my whole system since switching to NixOS. Most of my system is just whatever the upstream channels are doing. My whole system config is maybe 300 lines long, and most of that is a list of the programs I want installed, which is something that I've always wished I could have on other distros but can't.
On other distros I have felt much more responsible for controlling my whole system because random crap would break all the time and I had to learn how it was configured. That has never happened to me on NixOS.
Also, containers are totally available on NixOS and I use them all the time. I've avoided flatpak so far not because it's not available but because I want to try to do things the NixOS way and I haven't felt the need to move away from fully declarative.
None of which is to say that NixOS is right for you or anyone in particular, but so far my experience has been that there is a very steep initial learning curve that you do get over. Maybe someday I'll give Fedora Bluefin a shot, but in the meantime I'm definitely not regretting leaving behind the traditional distro model.
Not arguing for Nix here, but couldn’t you use Distrobox on Nix to mitigate some of the author’s problems while still getting benefits from Nix for the basic install?
Note: I’m not a Nix user - primarily Fedora and Debian, though I’ve used Bluefin a lot and used to use PopOS as a gaming desktop. (Rarely have any time for gaming these days…)
Seconded. I have been using nixos for a few years. I don't use it for everything, but I like it for dev. It was weird at first, and there were one or two early blocking problems I had to solve before I could do work. Like how do I set gpg pin-entry, but I forget stuff like that and have to search for it on any platform. At least on nixos is all written down somewhere even if I'm too lazy to take notes.
The installer is super easy to use; full disk encryption is baked in if you want it, the default desktop is fine, and the overwhelming majority of my config is just the apps I want installed by default.
I love this because it makes my desktop or laptop totally commodified: if I break my laptop I can get another one out of the closet and:
-- install nixos in 10 minutes
-- copy a couple of stanzas out of my nix config file into the new system one
-- untar a backup /home/user
-- `nix rebuild switch`
-- drink a beer
No installing a bunch of dev environment stuff. No greping internet for 'gpg pin-entry' or 'how to install docker' because I had to write that into a config in the first place. Basically I like nixos because I'm a lazy fucker and it makes me front end load the work so I only have to do it once.
Also, these days if I have trouble writing a nix thing I can usually just vibecode my way out of the problem. ¯\_(ツ)_/¯
Coming from a background that utilizes tools like Terraform, Docker, and Ansible, I find myself wondering: is there a guide available on how to use NixOS, similar to Docker or Terraform, to build a virtual machine?
https://fzakaria.github.io/learn-nix-the-fun-way/1
As someone using nix because I messed up my arch luks encryption because of single command on stackoverflow.....
I haven't really learned nix os language right now and I have only installed bare minimal software like a librewolf, prism launcher, kde, I used to be a hyprland user and I might switch back in some days.
The biggest advantage to me feels nix-shell which is cross platform
I installed obs-studio from nix-shell, built a video, then used another nix-shell for ffmpeg and converted video to mp4 and uploaded it to github.
This is my general use case of obs and I very rarely make recordings and so this idea that I can install/try out software without having to worry about anything while still having no xdg issues unlike flatpak is a godsend.
Did I mention I started using nix-shell for places I would've used docker, like stirling-pdf one off cases
Most of the software on my computer needs to be rarely accessed and I love the sanity that nix provides knowing that It won't make my update times faster/if-any unlike archlinux and dependency hell is a problem I truly despise.
I have looked for better alternatives, maybe spack comes to mind, but nix-shell is still crazy good. And I can also some day use a functional programming to make it even more automated.
Isn’t your primary benefit you’re looking for the same as what containers offer? If that is true, isn’t the only major benefit that nix is a little less sluggish?
FWIW the way we use nix where I work is quite a bit lighter touch than the setups being discussed here. There are kind of three tiers of Nix implementations
- I want Nix to manage my entire os (NixOS)
- I want Nix to manage my user shell and dotfiles (home manager)
- I want Nix to manage per repository shells (nix + direnv with a flake.nix in each repo, or an .envrc that pulls a shared flake and extends it)
We use the latter and find it to be a good mix of keeping nix configuration simple but also enabling per environment shells that are reproducible
If Debian/Ubuntu just implemented a rollback feature into apt then I'd be happy.
Can't you do that with BTRFS snapshots? Just a quick search made me end up in Spiral Linux which is built on Debian and has it by default.
Of course, but I'm lazy and I have limited time etc. And I think it is the job of the package manager to keep track of things, not me.
For me it is yet another trend that I will gladly pass on.
At work it is all about Windows and macOS, with a mix of legacy server VMs, Kubernetes or serverless on the server, we increasingly rely less on classical UNIX or Windows server workloads.
At home, it is all about Windows and Android.
So unless it is unavoidable, I don't need it anywhere, it is another Gentoo, at least for me.
> "At home, it is all about Windows and Android."
Well, what software to use at home is your choice, unlike what software to use at work.
Indeed, and as mentioned, none of the scenarios have anything to do with NixOS in my case, and most likely never will.
Lost me at homebrew.
> If I work on a repo, all I have to do is enter my dev distrobox, SSH in from my IDE, and work within that environment - no devcontainer or flake.nix required.
With Ubuntu 24.04 and vagrant virtual machines, you could have even less hassle than with Bluefin.
> However, this means that your projects end up populated with Nix files, which is particularly annoying when you want to submit PRs to upstream projects
Do people really not selectively add files to their commits? Sometimes I don't even commit the whole of a file's changes, thanks to `git add -p`.
I understand why immutable systems make sense but the benefits they bring are overrated. How often will you mess up your system so bad you won't be able to recover it? I ran some sort of Arch for around 15 years and the times I needed to recover my system are few and far in between.
I ran nixos for a few years but I stopped when I started experimenting with AI. Dependencies were too out of date and running random small projects is riddled with extra pain, compared to other systems.
I also had problems during upgrades, caused by incompatible features and configurations. Instead of relying on the project documentation I had to rely on nix documentation. I have massive respect for nix maintainers (and I have even contributed) but maintaining any software for everyone is a monumental task. Distros maintainer have it hard enough.
Arch with AUR ended up being a simpler experience.
I just run pacman -Qe and yay -Qe, and dump those to some file somewhere.
And I run rsync on my home directory to my local file server.
That's really all I need to recover. But I don't think I have had to recover a system in a very, very long time.
The author mentions Distrobox and Podman containers for managing dev envs as offerings from the Fedora Silverblue. No sure why this is an advantage, since you can use them on NixOS just as well. I'm using podman containers on NixOS for ML type dev with CUDA installed and have no issues or struggles.
Some people want to stay in the Matrix and that's perfectly okay.
Such a patronizing comment. Quips like this really hammer home the stories people recount about nix community. Get over yourself, your nice config manager is not the second coming of Jesus.
[flagged]