Nix Developer Shells · Workshop Referenz

Glossar & Begriffe

Das Nachschlagewerk des Kurses. Begriffe und Befehle, auf die sich alle Lektionen beziehen. Zum Ausdrucken gemacht.

Verbindlich: Diese Begriffe werden in jeder Lektion einheitlich verwendet. Wenn ein Wort hier definiert ist, meint es überall im Kurs genau das.

Grundbegriffe

Nix
Doppeldeutig: (1) der Package-Manager & Build-Tool, (2) die Sprache, in der man Pakete und Umgebungen beschreibt. Im Kurs sagen wir „Nix (Tool)" bzw. „Nix-Sprache", wenn es darauf ankommt.
Nixpkgs
Die riesige Sammlung von Paket-Definitionen (ein Git-Repo). Beim Auswerten entsteht daraus das Attribute-Set pkgs, aus dem du Pakete wie pkgs.git ziehst.
Derivation
Die formale, reproduzierbare Bau-Anweisung für genau ein Ergebnis (ein Paket, ein Skript, eine Shell-Umgebung). Eine Nix-Datei wird zu Derivations ausgewertet; Nix realisiert (baut) sie dann in den Store.
Nix Store
Das schreibgeschützte Verzeichnis /nix/store. Jedes Bau-Ergebnis liegt unter einem Pfad, dessen Hash sich aus allen Inputs ergibt – darum sind zwei identische Inputs garantiert dasselbe Ergebnis. Quelle der Reproduzierbarkeit.
Reproduzierbar / deklarativ
Deklarativ: du beschreibst das gewünschte Ergebnis, nicht die Schritte dahin. Reproduzierbar: dieselbe Beschreibung ergibt auf jeder Maschine bit-genau dieselbe Umgebung.
Attribute-Set
Nix' Kern-Datenstruktur: eine Sammlung von name = wert;-Paaren in { … }. Wie ein JSON-Objekt – aber Werte dürfen Funktionen sein.
Flake
Ein Verzeichnis mit einer flake.nix (definiert inputs & outputs) und einer flake.lock. Standardisierter, gepinnter Einstiegspunkt für reproduzierbare Builds & Dev-Shells.
flake.lock
Die automatisch erzeugte Lock-Datei, die jeden input auf einen exakten Commit/Hash festnagelt. Commit it. Sie macht „funktioniert bei mir" zu „funktioniert überall".
Dev-Shell
Eine deklarativ beschriebene Entwicklungs­umgebung (Tools, Libraries, Umgebungs­variablen), gebaut mit pkgs.mkShell und betreten mit nix develop (bzw. nix-shell beim klassischen Weg).
mkShell
Die Funktion aus Nixpkgs, die eine Dev-Shell-Derivation erzeugt. Nimmt u. a. packages, nativeBuildInputs, inputsFrom und einen shellHook entgegen.
Overlay
Eine Funktion, die pkgs erweitert oder verändert – z. B. um ein eigenes Paket oder eine gepatchte Version hinzuzufügen, ohne Nixpkgs zu forken.

Wichtige Befehle

BefehlWozu
nix shell nixpkgs#gitEin Paket ad hoc in eine temporäre Shell holen.
nix run nixpkgs#helloEin Paket einmalig ausführen, ohne es zu installieren.
nix developDie Dev-Shell aus devShells.default betreten.
nix buildEin packages.*-Output bauen; Ergebnis als ./result.
nix flake initEine flake.nix aus einer Vorlage anlegen.
nix flake showAlle Outputs eines Flakes auflisten.
nix flake updateAlle Inputs in flake.lock aktualisieren.
nix flake metadataInputs & gepinnte Revisionen anzeigen.
nix replInteraktiv Nix-Ausdrücke auswerten (zum Lernen Gold wert).
nix search nixpkgs xNach Paketen suchen.
Merksatz Auswerten = die Nix-Sprache zu einer Derivation rechnen. Realisieren/Bauen = die Derivation ins /nix/store materialisieren. Fehler in der Sprache passieren beim Auswerten; Fehler im Build beim Realisieren.

← Zur Kursübersicht · Nix-Sprache: Spickzettel →