Hi everyone!
I saw that NixOS is getting popularity recently. I really have no idea why and how this OS works. Can you guys help me understanding all of this ?
Thanks !
deleted by creator
Here’s the straightforward version of why I use it:
-
The entire state of your operating system is defined in a config file, and changes are made by changing the config file. This makes it super easy to reproduce your exact system many times and to know where all the many different configuration elements that describe your system are located.
-
Updates are applied atomically, so you don’t have to worry about interrupting the update process and if it fails, the previous state of your system is still bootable. By default every time you change something, you get another option in the boot menu to roll back to.
-
Making container-like sub systems is super easy when you’re familiar with nix, so you can have as many different enclaves as you like for different software versions, development environments, desktop setups, whatever without taking a performance hit. Old versions of stuff are very accessible without breaking your new stuff.
-
The package manager has a lot of software and accessing nonfree stuff is straightforward. Guix looks rad, but nix ended up being the more practical compromise for my usecase. I didn’t want to have to package a heap of software the moment I made the switch.
This very much. I used to have lots of unchecked config and state files everywhere on Arch. Now everything is checked in and wiped on boot so if something breaks after a reboot i know what broke.
Like how the opengl rendering did due to nixpkgs version differences
-
It’s in no way “everyone”, just a vocal minority.
I use
ArchNixOS BTW.
I used NixOS for a couple of years. My experience is like this:
- It is a rolling release (mostly)
- You write a declarative configuration for your system, e.g., my config will say I want Neovim with certain plugins, and I can also include my Neovim configuration
- It is stable, and when it breaks it is easy to go back
- Packages are mostly bleeding edge
Note that there’s both the rolling unstable channel and a bi-annual stable release channel.
The configuration stuff seems great. I guess it reduce the struggle of porting a full config from one pc to another right ?
You can even define configurations for different systems/hosts/users from a single place. I’ev atomized my config and I can reuse lots of parts for my different machines. Also my user config is nearly identical (except hardware specific things).
Yes absolutely. It is really great. It is also a source of frustration, e.g., missing configuration options, non-obvious options and so on. Overall it works well.
Important to note that NixOS has both a rolling release and point release version.
Are you still using it and happy with it? I’ve been increasingly using single purpose dev VMs in a server, and a declarative configuration system would make the process of spinning them up faster and more robust. My current shell script system is clunky, and I’ve been looking at Ansible.
Not using it anymore. Although I’m thinking about going back to it. The NixOS learning curve is a bit more steep than most other distros.
What are you using instead?
I keep seeing trends with Linux distribution like teenager looking for new fashion.
I think it’s mostly the very young Linux user who hope from one distribution to the another over and over whereas many just stick with what they got : Ubuntu, Debian, mint, maybe fedora.
NixOS is certainly interesting tho.
Atleast NixOS isnt one of the countless Arch based distros emerged since pandemic
I daily drive GNU Guix instead, and I would strongly recommend any emacs and/or lisp enthusiasts interested in the benefits of functional, reproducible, declarative, and hackable system management to give it a try!
Do you run the gnu guix distro or just use the package manager? Because iirc it uses only free software, even for drivers. So I imagine it is not that easy to find compatible hardware.
I run the complete system. It’s true that the standard iso comes with the linux-libre kernel and the standard channel (think repo) contains only free software. However there is the nonguix channel which comes with the full linux kernel, and all the proprietary drivers you could ask for.
Nonguix offer an iso with the full kernel too in case you have a proprietary wifi card and don’t have ethernet for the initial setup. The nonguix README I think is pretty clear, but Systemcrafters also made an excellent guide for doing this.
My wifi card unfortunately requires proprietary drivers and I have personally never had an issue with guix + nonguix for all my software needs, proprietary and otherwise.
Hope that helps profligate!
Does it actually require proprietary drivers or just proprietary firmware? I don’t know of any wifi cards that actually require proprietary drivers on Linux.
everyone
Now that’s what I’d call a stretch…
Indeed, why would I switch, already have been running NixOS for 10+ years.
I’ll edit. That was clearly a stretch
NixOS is a fully declarative and reproducable system.
What this means is that you can create a single
configuration.nix
, which includes all of your applications, settings, aliases, environment variables, user account + groups, etc., and copy that over to another NixOS machine (including different architectures) and runnixos-rebuild boot
to completely reproduce the system on that other machine.The nix package manager is also really good at telling you if the configuration will break anything, where, and how, and refuses to apply until the issue is fixed.
Also every time you use
nixos-rebuild
, it creates a new generation of your NixOS install meaning if something ends up breaking, you can reboot into the old system.So for example, I can theoretically have the exact same configuration across my desktop, laptop, phone, server, etc., minus the automatically generated
hardware-configuration.nix
, which is specific to the hardware.Also Nix supports package overlays, which means that you can modify an existing package while the maintainer still keeps it up to date.
Oh boy my two cents time!
I love the concept of NixOS. A fully declarative , reproduceable system from a single config repo! Sounds theoretically like it would be my kind of thing.
Sure, theoretically, I could have a fully reproduceable system. The time spent declaring that fully reproduceable system though… I remember the first time I was trying to get my usual disk setup of, a luks encrypted btrfs partition with multi-factor enabled decryption/authentication.
On a normal install it would take like a day at worse to install your distro. My first attempt with NixOS took me almost 4 days of screwing around in configs. 2 of those days were probably cumulatively spent waiting for the config option list of the nixos manual to search for text. And the number of redundant config options which all do the same thing! Or, are supposed to all do the same thing but in actuality, only one of them does the thing they are supposed to.
I really want to love NixOS but it always ends up feeling like an exercise in my patience and time to do even the simplest of things. As such I find myself asking the question of, am I going to spend so much time reinstalling my distro that it’s ever worth this initial investment?
Anyways, rant over. I actually have been debating switching back over for another try again myself I just have some very frustrating memories of my first attempts with the distro.
Interesting, my first install of NixOS was done in a few hours and included a feature that I had not used in my previous Arch install, namely secure boot. It proved to be no issue whatsoever.
I do agree though that you’re looking of lost without search.nixos.org, and documentation is lacking. E.g. did you know that enabling Plasma sets your main font to Noto, regardless if you’re actually using Plasma or just have it as an option in your display manager? Or when to enable a program or service rather than adding it to your system packages? Or that if you install plain obs and some plugins, the plugins won’t actually work?
I do understand why this is the way it is and I do think it’s the better approach. But it’s not perfect.
On the other hand, my system works very well in daily usage.
I switched around one and a half years ago. I must say, there are some hurdles to using NixOS. Mainly I dislike that it always takes around 20 times the effort to start and project. You make up for the initial time investment, because you end up with a far more stable setup, but still it does take some willpower to get things started.
Glancing over the website, I thought it’s an immutable OS, like Fedora Silverblue. I could imagine that it might be cool to use with Ansible and stuff. But for an average user? I can’t really see the advantages in respect to the work you have to put in.
It is an immutable distro, altough it isn’t image-based like Fedora’s rpm-ostree.
NixOS basically replaces Ansible because the Nix package manager achieves the same goals already (configuration, deployment, …).
But I agree, the work necessary to put into this non-standard distro makes it hard to recommend for a casual user.
I’ve been using it for over a year and love it. A config file for your entire system, and built in rollbacks anytime something goes wrong. One language to configure everything, although in practice that doesn’t always work. But I love it.
Some others have started why it works, here is some how. Nixos completely disregards the fhs. Packages don’t install to anywhere standard, every package and configuration change gets it’s on directory in /nix/store but through smart use of tracking everything there, it symlinks all those files to proper places and sets up the environment for them to know where libraries are.
This is then also why you don’t need sudo privileges to install things. Your profile has an environment that is aware of your users packages and configurations, the system itself isn’t effected because everything is symlinked.
Then because every update means new directories in /nix/store you can role back to your last configuration because plasma broke something or whatever.
However, it’s a LOT to learn. Best place I know of is https://piped.video/watch?v=AGVXJ-TIv3Y&t=0
This guy did a good job for me. Hope this helps!
I didn’t get it either, but this video does a pretty good job explaining why it’s different: https://www.youtube.com/watch?v=DMQWirkx5EY
I’m using Void Linux and see no reason to move over to NixOS. The concept seems cool though.
The nice thing about nix and guix is that they’re package managers, and so you get most of the benefits even if you’re using a different OS.
I’m currently transitioning from Doom Emacs to my own config that’s using guix. So far I’ve got a single manifest that contains all of the Emacs and Linux packages that are needed to run the config.
The guix part is really simple, but it allows me to reproduce my config on any Linux distro by cloning a repo and running a guix one liner. A different one liner can run it in a containerised environment. Also, I can roll back to any previous time I’ve updated something through that manifest, or pin a specific version of a package.
And that’s just scratching the surface of what you can do.
I have been using for years on servers. My lemmy instance is hosted on it.
Although for desktop I had too many issues back in 2019 so I ended up back to Arch Linux and then EndeavourOS
Would be fun to try again to use it on desktop
I think I will give it a try on a server first, I don’t have a playbook or script for a reproducible set up (yet), so I may as well use Nix to see if it’s worth the hype
I actually installed it after reading this and I have to say it’s pretty fucking sweet.
Compiling your own stuff is a bit unintuitive but overall I love it