+1. I personally have always wanted to write down my thoughts on NixOS in a long-ish form post.
But it’s just really hard to articulate. NixOS is such a step above any other distro that it becomes hard to convey exactly why this is the case. It is also because so many pieces work together in tandem - both above and below the covers so to speak - to make this the case.
There is really only one talk I have found that somewhat captures this, What Nix Can Do (and Can’t) by Matthew Croughan: https://youtu.be/6Le0IbPRzOE. Keep in mind that it’s a rapid fire-style talk with a ton of breadth, so it is natural to feel overwhelmed while watching if new to Nix :)
Also, here is a random dump of features that I have found both valuable and very difficult to achieve on other distros:
* Config rollback in bootloader to undo mistakes without needing to boot from recovery media
* Flake lockfiles to pin all config and packages
* Config layering: base config that applies to all machines, per-machine overrides, etc
* NixOS module system, very useful to conditionally enable functionality (e.g. subset of machines run Syncthing)
* Rebuild a host over SSH by copying over packages via nixos-rebuild
* Image builders i.e. Packer-lite (now in nixpkgs)
* Build a live CD/USB custom installer to quickly boot from with your own packages, user, dotfiles, etc
* NixOS integration testing framework (extremely powerful), makes package and config stability better under the hood in nixpkgs
* Build and run your config as a QEMU VM
* nixos-anywhere to convert a running Linux machine into NixOS, very useful for VPS/cloud machines
* Out of the box support for cross compilation and static linking via pkgsCross and pkgsStatic
* Stylix for centralized theming config across apps
* Natively build a Docker image from your package using dockerTools
But it’s just really hard to articulate. NixOS is such a step above any other distro that it becomes hard to convey exactly why this is the case. It is also because so many pieces work together in tandem - both above and below the covers so to speak - to make this the case.
There is really only one talk I have found that somewhat captures this, What Nix Can Do (and Can’t) by Matthew Croughan: https://youtu.be/6Le0IbPRzOE. Keep in mind that it’s a rapid fire-style talk with a ton of breadth, so it is natural to feel overwhelmed while watching if new to Nix :)
Also, here is a random dump of features that I have found both valuable and very difficult to achieve on other distros:
* Config rollback in bootloader to undo mistakes without needing to boot from recovery media
* Flake lockfiles to pin all config and packages
* Config layering: base config that applies to all machines, per-machine overrides, etc
* NixOS module system, very useful to conditionally enable functionality (e.g. subset of machines run Syncthing)
* Rebuild a host over SSH by copying over packages via nixos-rebuild
* Image builders i.e. Packer-lite (now in nixpkgs)
* Build a live CD/USB custom installer to quickly boot from with your own packages, user, dotfiles, etc
* NixOS integration testing framework (extremely powerful), makes package and config stability better under the hood in nixpkgs
* Build and run your config as a QEMU VM
* nixos-anywhere to convert a running Linux machine into NixOS, very useful for VPS/cloud machines
* Out of the box support for cross compilation and static linking via pkgsCross and pkgsStatic
* Stylix for centralized theming config across apps
* Natively build a Docker image from your package using dockerTools