7 ms·
NixOS is awful except for everything else out there. The learning curve is... steep. The documentation sucks. You have to learn a new OS because a lot of your p
by jm4 3y ago
NixOS is awful except for everything else out there. The learning curve is... steep. The documentation sucks. You have to learn a new OS because a lot of your prior Linux knowledge no longer applies.
But, man, it's so slick when you get it working. It's so easy to understand your system and how it's set up. There's no weird stuff changing between updates that you don't know about. You don't have to merge new configurations. It's so easy to try something new without changing your system. Rollbacks are awesome. It's easy to move your config to a new machine or keep multiple machines in sync. My machines were constantly getting out of sync as far as packages, versions, config, etc. and it was a headache to maintain them all the way I like. Not anymore. It's so easy to maintain working NixOS systems. I have the same packages, users, and config on my machines without having to think about it. I have automatic updates going where I get a new system when I reboot. It basically works like an appliance I don't have to think about except it's set up the way I want it instead of how someone else decided it should work.
There are so many nice things about NixOS, but it sucks. It's the worst thing out there except for everything else. I hate it and I feel like I can't go back either. I would love a NixOS-like system with a better language, documentation on par with Arch, and the reliability of Debian.
- SuperSandro2000 3y agoPrior Linux knowledge still applies and is required, it is just managed differently. Another language won't change much. Debian reliability is outside of core packages a myth and Debian has no way to properly migrate configuration. Every major update is a wild rollercoaster ride were things might break in the middle.
- textread 3y ago> Another language won't change much. Why do you think Guix+Guile isnt a substantial positive change?
- kaba0 3y agoWhy do you think it is? The problem with Nix is not the language, it is mostly the ad hoc, grown over time “standard library” for packaging programs. It is just hard to know what that magic buildXPackage function does, or sometimes even where it is. You basically have to grep through the nixpkgs repo to find these things. The language is very small and is a great fit for its domain.
- FireInsight 3y agoI use uBlue https://universal-blue.org/ https://universal-blue.org/ with a custom image. It's basically Fedora Silverblue & co, except I can declare my default packages and Flatpaks and stuff in a YML file and then just rebase to the custom image that was built. I use Nix home-manager for configuring my shell and GTK, and plan to do as much with it as possible. It's genuinely one of the most stable feeling Linux systems I've run, especially with the Nvidia drivers being built in the cloud and my computer just getting the latest version automatically. Being Fedora, it's very up-to-date and uses new technologies like Wayland and Pipewire out of the box.
- pkulak 3y agoOnce Nix can install without disabling selinix, it could be holy grail territory. I personally moved from UBlue to NixOS because I was a bit bored of running my whole life in Distrobox, and didn’t like being so dependent on GitHub. NixOS gives me everything I liked from Silverblue with the flexibility of something like Arch. Plus, Home Manager is amazing. The big downside of container-based images is that you can never touch your home directory. Now instead of Silverblue plus Chezmoi plus like 7 Bash scripts and a Distrobox, it’s all just one Nix config.
- jamespwilliams 3y agoI agree that NixOS (and Nix) is difficult to learn and the documentation is generally poor, which I realise is what you’re getting at in your comment, But I do think we should keep in mind what an incredible project NixOS is. NixOS isn’t just some other Linux distro, repeating pretty much what every distro has done for 40 years. It’s a complete rethink of how a Linux distribution and package manager should work, from first principles, in a way that I don’t think has ever been done before. That’s an incredibly bold thing to do. That alone, as a research project, would be an impressive achievement. But it hasn’t just ended up as some researcher’s PhD thesis. It works in the real world, and it’s built a large community despite its learning curve. So despite the terrible docs and UX, I have trouble agreeing that it “sucks”!
- Joker_vD 3y agoIt would probably function way smoother if it didn't have to be built on top of Linux. But then nobody would use it, of course.
- vacuity 3y agoThe dystopian future of OS dev: Linux, Linux, Linux I get that backwards compatibility is really important, but still. Gotta be POSIX compatible at least or else next to no one is going to use it as a daily driver. For example: > Coming up with a custom shell language was fun, but ultimately does not solve any real problems for us. > Having a POSIX compliant shell would allow us to, well, run POSIX shell scripts. (This currently requires installing a 3rd party shell.) https://github.com/SerenityOS/serenity/issues/6847 https://github.com/SerenityOS/serenity/issues/6847 Where's some variety? I hope to get into the field myself eventually, so maybe I should take it upon myself to create interesting things that might be useful.
- jm4 3y agoOh, I agree. It's why I put up with NixOS. I love what I can accomplish with it. It's a tool for making your own distro. It basically makes the impossible possible. What I'd like to see now is to make the difficult things easy.
- Joker_vD 3y agoI can now see why someone's quipped that the promise of NixOS is that "it will change everything but mutate nothing".
- unshavedyak 3y agoI'm currently trying (and failing, lol) to switch to Nickel Nix. Nix OS/Pkgs is just amazing, but i'm near being entirely done with Nix Lang. Lazy + Dynamic is just a recipe for an awful developer experience. As far as i can tell no one (thus far) has been able to explain a reasonable and concrete way to tell what any given variable is within a Nix source file. `nix repl` works decently for some cases, but many not - since it seems to mostly help you inspect the output of a Nix expression. So hypothetically it could work, but for any given variable you'd have to recreate the entire value/function/etc stack that produced that value in that state. All around after ~16 months i think i'm finally done with Nix. It's Nickel or the highway for me. Not that i even love Nickel that much, but it's the bare bones of what Nix should have been in my view. Not sure if it's a hot take or not.. but it feels like you can have Lazy or Dynamic, but never both. The DX is terrible with both.
- anon291 3y agoWhat the nix language needs is support for first-class breakpoint instructions. That is, I ought to be able to do something along the lines of `let x = break (...)` The semantics here is that, when x is evaluated (i.e., forced into WHNF), I get placed into a debugger where I can examine the context and either (1) choose to return a new value for `x` or (2) let it fall through and let `x` take on the value of `(...)`. The main issue with nix is debuggability
- aliasxneo 3y agoYes, anyone who has spent any serious amount of time maintaining Nix code has felt this pain. I also have come to dislike the Nix language, but it was the daily debugging that eventually drove me away. In my case, it was for production systems, and there's nothing more agonizing then having to debug a Nix stack trace on a deadline.
- unshavedyak 3y agoAgreed, though i prefer types to solve this - but i imagine what you suggest would even benefit a typed language like Nickel. Really would be a useful inspection tool. Nix is just a massive blob of difficult to debug code. Really awful experience for me.
- MuffinFlavored 3y ago> You have to learn a new OS because a lot of your prior Linux knowledge no longer applies. This is what confused me the most. Nix (CLI tools / language syntax) NixOS (A Linux distro that has CLI tools, but also some CLI tools that are only available on this distro and not others, aka "nix" doesn't really work on Debian) Flakes vs "configuration" I just wanted to like "terraform apply" a system configuration on my Debian install. People are obsessed with Nix because you can manage your config for their local system Ok... Ansible has existed for 12 years? And you can use it on Debian/don't need a full OS/distro from the ground up (NixOS) But people will come out of the woodworks to tell you how you don't understand, you're wrong, you're missing the point, Nix is the greatest.
- whateveracct 3y agoAnsible does not even begin to accomplish what Nix does.
- MuffinFlavored 3y agoI’d be curious to learn more if you could share please
- whateveracct 3y agoWhat Ansible does is just one part of the Nix picture. Nix brings a lot more: - Language agnostic software packaging - Package manager - Ephemeral dev environments - A purely functional config language (it has lambdas - you can build abstractions) - Closures - Nix knows every single dependency your system needs down to git revisions - Binary caching. Everything is built from source, but you can safely download binaries that are known to be built from the exact same deps you need. - Ergonomic cross-compilation - NixOS modules allow for composable, modular system config. For instance, my home computers all import a shared scanner.nix file that sets up scanner drivers and installs scanner software. Sharing config across machines is so easy with Nix. - Rollbacks - you can edit your system (even swapping out gfx drivers or the kernel) and if it doesn't work, trivially rollback. As in you can restart your computer and choose to boot into the previous config. - Easily modify _any_ dependency. You can apply patches, point at a fork, or just tweak its packaging. - I am surely forgetting stuff! It does a lot.
- fsflover 3y ago> NixOS is awful except for everything else out there. Except Qubes OS that allows using original GNU/Linux distributions virtualized with a convenient interface.
- processunknown 3y agoI don’t associate convenience and QubesOS. Maybe convenient security, but thats about it.
- fsflover 3y agoSecurity is just one feature of Qubes OS. Another one is convenient separation of contexts. Works well for me: you do not see VMs but colorful windows with simple exchange of clipboard and files whenever needed. I am curious, what is inconvenient in it for you?
- kaba0 3y agoAnd what exactly do you run as those distributions? They will have all the same problems. That’s the same idea that Docker has — containers don’t solve packaging, they only push the problem down a layer.
- fsflover 3y agoWhich the same problems? For example I do not worry that something can be broken, because I have, e.g., automatic system snapshots and dedicated VMs for testing. I run Fedora and Debian, but you can run many other distros: https://www.qubes-os.org/doc/#operating-system-guides https://www.qubes-os.org/doc/#operating-system-guides. > they only push the problem down a layer This is an interesting interpretation. For me Qubes fully solves, e.g., both the problems of system stability and flexibility.
- __MatrixMan__ 3y agoI have enjoyed using Qubes in the past, it's definitely a cool feeling having everything controllable via an abstraction that its author probably wasn't designing for. Feels powerful. But at the end of the day, those VM images, and any snapshots made, are opaque blobs of bits. Whatever shape they're in, you have nowhere to look to determine why they are the way they are--no recipe for recreating that state and sharing it with others (unless you want to share it ALL with others, and then only with others on the same architecture). You've got a lot of control, but only over these chunks of whatever happened to be there at that time. You're sort of trapped in one dimension. You can use snapshots to move backwards and forwards in time, but if the following paths don't lead to the same system state in some subtle way you're not going to know about the difference: path one: > add foo | add bar | remove foo path two: > add bar
- SkyMarshal 3y ago> with a better language, documentation on par with Arch, and the reliability of Debian. I grok the first two, but what do you mean about the reliability of Debian?
- eternityforest 3y agoNixOS looks like just about the only sane option besides containerizing everything like Snaps and flatpacks, which seems to also suck. I used to love Linux, about 10 years ago, but it seems to be stagnating. Stuff basically never breaks on Android, so it's clear you can totally make a computer that actually works. But even mint occasionally has random fussy problems, and so much of the internals are built around manual admin. I mean, debian packages can randomly decide they need to ask a question during setup! Plus Nix seems to have modern packages. Other linuxes have a huge repo, but a lot of it is nonsense, unmaintained, or obsolete, or something only of interest to unix fans. With nix ever fairly obscure stuff that normally needs a ppa seems to be there.