pkgsWoher die Pakete kommen – und wie du das richtige findest und referenzierst.
pkgs wirklich ist (ein riesiges Attribute-Set), wie du Pakete
suchst und wie du sie referenzierst – die letzte Zutat vor Flakes & mkShell.
Nixpkgs ist ein Git-Repo voller Paket-Definitionen. Wird es ausgewertet,
entsteht daraus ein gigantisches Attribute-Set – per Konvention pkgs
genannt. Jedes Paket ist ein Attribut darin:
pkgs.git
pkgs.ripgrep
pkgs.python3
pkgs.nodejs_22
pkgs.go
Das ist exakt der Attribut-Zugriff mit Punkt aus Lektion 3 – nur auf einem sehr großen Set.
Es gibt auch geschachtelte Gruppen, z. B. pkgs.python3Packages.requests.
pkgs im nix repl erkunden$ nix repl
nix-repl> :lf nixpkgs # lädt das nixpkgs-Flake; pkgs etc. verfügbar
nix-repl> legacyPackages.x86_64-linux.ripgrep
«derivation /nix/store/…-ripgrep-14.1.0.drv»
nix-repl> legacyPackages.x86_64-linux.ripgrep.version
"14.1.0"
Jedes Paket ist eine Derivation (Lektion 1) mit Metadaten wie
.version, .meta.description und dem Ergebnis-Pfad im Store.
Drei Wege, das richtige Attribut zu finden – vom bequemsten zum mächtigsten:
nix search nixpkgs begriff – dasselbe auf der Kommandozeile.nix repl + Tab-Completion auf pkgs. – zum Stöbern.$ nix search nixpkgs ripgrep
# * legacyPackages.x86_64-linux.ripgrep (14.1.0)
# A utility that combines the usability of The Silver Searcher…
pkgs.ripgrep liefert den Befehl rg. Such immer nach dem Attributnamen –
den brauchst du in der Dev-Shell, nicht den Befehlsnamen.
pkgs.lib: die Werkzeugkiste
Neben Paketen enthält pkgs auch pkgs.lib – Hilfsfunktionen, die du in
Dev-Shells oft brauchst, etwa um plattformabhängig Pakete anzuhängen:
# nur unter Linux zusätzlich inotify-tools mitnehmen
packages = [ pkgs.git ]
++ pkgs.lib.optionals pkgs.stdenv.isLinux [ pkgs.inotify-tools ];
flake.nix und bauen die erste echte
Dev-Shell.
vscode, einige Treiber) sind „unfree" und werden ohne
allowUnfree in der Nixpkgs-Konfiguration abgelehnt. Die Fehlermeldung sagt dir das klar.
nodejs_20, nodejs_22,
python311, python312. So bestimmst du grob die Major-Version direkt im Namen.
Nicht spicken – Abrufen aus dem Gedächtnis ist genau die Übung, die hängen bleibt.
Was ist pkgs aus Sicht der Nix-Sprache?
Nixpkgs wird zu einem riesigen Attribute-Set ausgewertet; pkgs.git ist nur ein
Attributzugriff darauf. Genau das Set-Wissen aus Lektion 3.
Wo findest du am schnellsten den richtigen Attributnamen?
search.nixos.org (oder nix search) zeigt den exakten Attributnamen, der oft
vom Befehlsnamen abweicht (ripgrep → rg). Raten führt in die Irre.
Wie legst du fest, welche Version ein Paket hat?
Die Version steckt im Stand von Nixpkgs. Festnageln tust du sie über Lock-Files (Lektion 8) – nicht über ein Feld am Paket und nicht über „immer neueste Version".
Ziel: Drei Pakete für die toolbox-Shell finden und ihre Versionen prüfen.
search.nixos.org nach jq, fd und go.nix search nixpkgs fd die Version auf der CLI anzeigen.fd bereitstellt.Tipp: Auf der Suchseite steht „Provided programs" – dort siehst du die echten Befehle.
# Attributnamen: jq, fd, go (hier gleich dem Befehl, oft aber nicht)
$ nix search nixpkgs fd
# * legacyPackages.x86_64-linux.fd (10.x)
# A simple, fast and user-friendly alternative to find
# Bereitgestellter Befehl: fd
Diese drei Attributnamen wandern gleich in deine erste mkShell-Paketliste.
flake.nix: inputs/outputs)