Mein Distrohopping endet bei NixOS
Inhaltsverzeichnis
1. Intro
Ich teste Distributionen seit den frühen 2010ern. Ubuntu, Debian, Arch, Fedora, Manjaro – die Liste ist lang. Die letzten Monate war openSUSE Tumbleweed mein Daily Driver.
Aber ich bin neugierig. Ich will wissen, was es Neues gibt, und ob es besser als das ist, was ich gerade benutze. Und dieses Mal habe ich mich an NixOS erinnert, eine Distro die ich schon seit Jahren auf dem Schirm hatte, aber nie richtig getestet habe.
Und jetzt bin ich drin – und ehrlich gesagt: Ich sehe keinen Grund mehr zurückzugehen.
2. Warum wieder eine neue Distro?
Das klassische Paketmanagement wird langsam unzuverlässig. Auf Fedora oder openSUSE installierst du Pakete global, und irgendwann hat man den üblichen dependency hell: verschiedene Programme wollen verschiedene Versionen derselben Bibliothek, und dann knallt es.
Außerdem wollte ich endlich sehen, wie deklarative Systemkonfiguration funktioniert. Das klingt nach einem Buzzword, aber wenn man es verstanden hat, ist das wirklich praktisch.
3. Was ist an NixOS eigentlich anders?
Der größte Unterschied ist der deklarative Ansatz. Bei einer normalen Distro installierst du Pakete, änderst Config-Dateien, startest Dienste manuell – du gibst dem System eine Liste von Befehlen, die es nacheinander ausführen soll. Das ist imperativ: Du sagst dem System, wie es etwas tun soll.
Bei NixOS beschreibst du stattdessen den gewünschten Endzustand in einer oder mehreren Nix-Dateien. Du schreibst: “Ich will Node.js 22 installiert haben, ich will einen SSH-Daemon mit diesen Einstellungen, ich will diese Firewall-Regeln.” Das System nimmt deine Spezifikation und baut daraus das komplette OS. Wenn du später beschließt, dass du auch noch PostgreSQL brauchst, änderst du die Datei und baust neu – Nix berechnet automatisch, was sich geändert hat und aktualisiert nur das Notwendige.
Das hat einen großen Vorteil: Die Konfiguration ist versionierbar. Du kannst sie in Git legen, mit anderen teilen, auf mehreren Maschinen identische Setups erzeugen. Wenn etwas schiefgeht, weißt du genau, welche Änderung es verursacht hat – weil alles in Textdateien steht und kein versteckter State im System herumliegt.
Zusätzlich gibt es den Nix-Paketmanager, der Pakete in einen isolierten Store (/nix/store) installiert. Jedes Paket hat seine eigenen Abhängigkeiten und stört andere Programme nicht. Das ist ein riesiger Unterschied zu apt oder dnf.
4. Nix Dev Shells – mein Favoriten-Feature
Jetzt kommt das Feature, das mich wirklich überzeugt hat: Dev Shells.
Wenn du als Entwickler an mehreren Projekten arbeitest, hast du bestimmt schonmal dieses Problem gehabt: Projekt A braucht Node.js 18, Projekt B braucht Node.js 20, und für Projekt C brauchst du Python 3.11 mit bestimmten Paketen. Auf einer normalen Distro installierst du alles global oder baust dir komplizierte Virtualenvs auf.
Mit Nix Dev Shells löst sich das komplett von selbst. Für jedes Projekt legst du eine flake.nix Datei an, die beschreibt, welche Tools das Projekt braucht:
{
description = "Mein Webprojekt";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
};
outputs = { self, nixpkgs }:
let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.${system}.default = pkgs.mkShell {
packages = with pkgs; [
nodejs_22
pnpm
git
ripgrep
];
};
};
}
Dann navigierst du in den Projektordner und tippst nix develop. Nix baut dir eine Shell, in der genau die Tools verfügbar sind, die in der Flakedefinition stehen. Außerhalb dieser Shell hast du diese Tools nicht – keine globale Verschmutzung.
Und das Beste: Wenn dein Projekt klonen will, tippt er auch einfach nix develop und bekommt exakt dieselbe Umgebung wie du. Keine “funktioniert bei mir”-Probleme mehr.
5. Weitere Vorteile die mich überzeugen
Home-Manager: Das ist ein Tool, das deine Dotfiles und persönliche Konfiguration auch deklarativ verwaltet. Deine Editor-Konfig, dein Shell-Setup, deine Tastaturkürzel – alles in einer Datei definiert und versioniert. Wenn du auf einem neuen Rechner NixOS installierst, kopierst du einfach deine Home-Manager-Konfig rein und hast sofort deine komplette Arbeitsumgebung.
Nix Flakes: Das ist das moderne Paket- und Projektformat von Nix. Eine Flakedefinition (flake.nix) beschreibt alle Inputs – also welche Versionen von nixpkgs oder anderen Paketen du brauchst – und die Outputs, wie Dev Shells, Pakete oder sogar komplette Systemkonfigurationen. Die flake.lock Datei pinnt alle Abhängigkeiten auf exakte Versionen, sodass jeder, der dein Projekt klonen will, die identische Umgebung bekommt. Flakes sind jetzt der Standard für alles in der Nix-Welt.
Reproduzierbarkeit: Durch das Flake-System und den isolierten Paketstore ist jede Umgebung vollständig reproduzierbar. Wenn ich heute ein Projekt baue und morgen dasselbe mit derselben flake.lock wiederhole, bekomme ich exakt dieselbe Umgebung. Das ist für Testing und Deployment unglaublich hilfreich.
Rollbacks sind trivial: Wenn ein Update dein System kaputt macht (was bei NixOS seltener passiert als bei anderen Distros, aber trotzdem vorkommt), wählst du im Bootmenü den vorherigen Eintrag aus. Fertig. Kein Recovery-Modus, kein Live-Stick.
Kein “apt upgrade” mehr: Du aktualisierst dein System mit nixos-rebuild switch --upgrade, das auch alle deine Pakete aktualisiert. Wenn dir was nicht gefällt, rollst du zurück. Kein Risiko, dass ein Update dein laufendes System während der Arbeit stört.
6. Fazit
NixOS hat eine Lernkurve – das muss man ehrlich sagen. Das Nix-Paketmanagement und die deklarative Konfiguration sind gewöhnungsbedürftig, wenn man von traditionellen Distros kommt. Aber sobald man es verstanden hat, ist der Workflow unglaublich effizient.
Für Entwickler besonders: Die Dev Shells sind ein Gamechanger. Keine mehr stundenlangen Diskussionen über “welche Node-Version brauchen wir?” oder “warum funktioniert das auf meinem Rechner aber nicht auf deinem?”. Einfach die Flakedefinition teilen und fertig.
Ich bin gespannt, wie lange ich bei NixOS bleibe – aber zum ersten Mal seit Jahren habe ich das Gefühl, dass ich hier wirklich hängen bleiben könnte. Und wenn es doch mal wieder Zeit für was Neues ist: Mit Home-Manager kann ich meine komplette Konfiguration einfach auf die neue Distro mitnehmen.
Quellen: