I recently tried switching from Arch to NixOS and the experience I had can best be described as apalling. I have not had a new user experience this bad since my first dip into Ubuntu dependency hell back in 2016. I'd like to preface this by saying I've been a Linux user in one form or another for almost half my life at this point, and in that time this may well be the most I've struggled to get things to work.
Apparently they have this thing called home-manager which looks pretty cool. I'd like to give that a shot. Apparently I have to enable a new Nix channel before I can install it. I'm guessing that's the equivalent of a PPA? Well, alright. nix-channel --add ..., nix-channel --update (oh, so it waits until now to tell me I typo'd the URL. Alright), and now to run the installation command and... couldn't find home-manager? Huh?? I just installed it. I google the error message and apparently you have to reboot after adding a new nix-channel and doing nix-channel --update before it will actually take effect, and the home-manager guide didn't tell me that. Ah well, at least it works now.
I didn't want to wait for KDE and its 6 morbillion dependencies to download, so I opted for Weston. It wasn't a thing in configuration.nix (programs.weston.enable=true; threw an error and there was no page for it on the NixOS wiki), but it was available in nix-env (side note: why does nix-env -i take upwards of 30 seconds just to locate a package?), so I installed it, tried to run it, and promptly got an inscrutable "Permission denied" error with one Google result that had gone unresolved. Oh well, that's alright, I guess that's not supported just yet -- I'll install Sway instead. Great, now I have a GUI and all I need is a browser. nix-env -i firefox gave me the firefox-beta binary which displayed the crash reporter before even opening a browser window. Okay, note to self: always use configuration.nix. One programs.firefox.enable=true; and one nixos-rebuild switch later, I'm off to the races. Browser is up and running. Success! Now I'd like to install a Rust development environment so I can get back to work. According to NixOS wiki, I can copy paste this incantation into a shell.nix file and have rustup in there. Cool. After resolving a few minor hangups regarding compiler version, manually telling rustc where the linker is, and telling nix-shell that I also need cmake (which was thankfully pretty easy), I'm met with a "missing pkg-config file for openssl" error that I have absolutely no idea how to begin to resolve.
I'm trying to stick with it, I really am -- I love the idea that I can just copy my entire configuration to a brand new install by copying one file and the contents of my home directory and have it be effectively the same machine -- but I'm really struggling here. Surely people wouldn't rave about NixOS as much as they do if it was really this bad? What am I doing wrong?
Also unrelated but am I correct in assuming that I cannot install KDE without also installing the X server?
I made a similar switch half a year ago and thankfully for me it was relatively painless. Some stuff got significantly harder to set up (e.g. getting a nice rust development environment, getting ROCm to work with some torch-based project), but once all that is done I have complete or near-complete setup instructions on how to do it again, so I am hoping the trade-off here will be worth it in the future (or I will drop nixos and move to something else if I get bored, time will tell).
For the beginners, I recommend to go with the flakes setup right from the start, here is a nice guide that you can use as a reference: https://nixos-and-flakes.thiscute.world. I followed it through for the initial setup and I don't remember having to think about channels, at least initially: I picked the most recent stable one right at the start and only updated it to another - the unstable one - later on when I wanted to get some fresh kernel version. The upgrade was pretty painless, as the channel is just the root input of the flake: change that one line, nixos-rebuild switch and it's done. With flakes I occasionally run nix flake update (+ rebuild) to get newer versions of packages (as the flake will be locked to the state of the channel at the time you install/update). If anything (well, most) of the things go wrong, just go back to the previous build while you figure out what's causing issues (much better than the Arch experience of something going wrong after the update - better read Arch news regularly 🙃).
Besides updating my configuration to add/remove packages and doing the same for development environments (btw, for getting compile time dependencies into nix-shell, you need to add them to buildInputs of the shell: https://nixos.wiki/wiki/FAQ/I_installed_a_library_but_my_compiler_is_not_finding_it._Why%3F ), I only ever use nix profile install nixpkgs#<package> if I want to just run some app without adding it permanently. After these 6 months of use, I have found out I am getting much less software/package cruft building up in my system. If I stop using something (especially a big think like a DE), I can just remove it from the configuration, rebuild and that's it. With Arch, I probably even forgot about half of the things I installed there over the years.
ahhh i remember being a bored teenager spending his life customizing his desktop too...
Nowadays I just want a working system where I can get things done, haven't touched my desktop environment settings in a while and certainly don't use things like cubes or wobbly windows anymore.
I disagree. In a business environment it is actually really good, or at least was pre-Azure. I dislike that they are trying to push people to Azure instead of on-prem.
For home use it's been pretty poor since Windows 8 and seems to be turning to shit since Windows 11.
Windows 11 did one good for me though. It's been enough to push me to properly give Linux a try again. Proton has been a major step forward as gaming has been the main reason I never stuck. I'm currently spending more time in Arch (btw) than Windows.
Microsoft has always been good at catering to businesses and hooking them on windows+office+etc.
But there has always been better alternatives around, OS/2 was so much better than windows 3.x, and WordPerfect was better than word. I'm sure there are countless other examples.
It's interesting how the open source model and enshittification have pulled both OSes in opposite directions. I used to look forward to the newest version of Windows because it had cool useful stuff.
I'd just like to interject for a moment. What you're referring to as BSD, is in fact, FreeBSD/NetBSD/OpenBSD, or as I've recently taken to calling it, BSD-based operating systems. BSD is not an operating system unto itself, but rather another free component of a fully functioning BSD-based system made useful by the BSD kernel, libc, and other essential components of a complete OS.
Many computer users run a modified version of the BSD system every day, without realizing it. Through a peculiar turn of events, the version of BSD which is widely used today is often called "FreeBSD," and many of its users are not aware that it is basically the BSD system, developed by the FreeBSD Project.
There really is a BSD, and these people are using it, but it is just a part of the system they use. BSD is the kernel: the program in the system that allocates the machine's resources to the other programs that you run. The kernel is an essential part of an operating system, but useless by itself; it can only function in the context of a complete operating system. BSD is normally used in combination with the GNU operating system: the whole system is basically GNU with BSD added, or GNU/BSD. All the so-called "BSD" distributions are really distributions of GNU/BSD!