- Veröffentlichungsdatum
nix Flakes für die Entwicklung
- Autoren
- Name
- Thomas Waldecker
Nix Flakes sind noch besser geeignet als nix-shell, aber auch etwas komplizierter.
Sie sind jetzt meine Lösung für Entwicklungsumgebungen.

Es funktioniert sehr gut unter Windows in WSL und auch in MacOS.
Hier ist ein Beispiel-Flake für ein nodejs und yarn Projekt:
{
description = "nix nodejs development flake";
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
outputs = { self, nixpkgs }:
let
supportedSystems = [ "x86_64-linux" "aarch64-linux" "x86_64-darwin" "aarch64-darwin" ];
forEachSupportedSystem = f: nixpkgs.lib.genAttrs supportedSystems (system: f {
pkgs = import nixpkgs { inherit system; };
});
in
{
devShells = forEachSupportedSystem ({ pkgs }: {
default = pkgs.mkShell {
packages = with pkgs; [
nodejs_22
yarn-berry
];
};
});
};
}
Man startet es mit
nix develop -c $SHELL
Damit bleibt man in seiner Shell (z.B. zsh) und hat von nun an die benötigten Tools verfügbar.
Es ist meiner Meinung nach aktuell die beste Methode um die benötigten Abhängigkeiten und Tools für verschiedene Projekte zu verwalten.
Hier noch einmal die High-Level Anforderungen:
- Effizienz Die Umgebung sollte schnell gestartet werden können, damit Entwickler effizient arbeiten können.
- Reproduzierbarkeit Die Umgebung sollte immer wieder identisch und reproduzierbar sein.
- Unabhängigkeit Die Umgebung sollte unabhängig von der Hardware oder Softwarekonfiguration des Hostsystems sein.
- Geschwindigkeit Die Abhängigkeiten sollten so schnell wie möglich geladen werden.
Vergleich zu Docker / Podman und Kubernetes (kind, Minikube):
- Die Tools sind auch in der lokalen Shell verfügbar, z.B. TypeScript, was dann auch von VS Code benutzt werden kann.
- Es läuft unter Windows mit WSL, nativem Linux und MacOS, man braucht nur den nix Paketmanager zu installieren.
- Man hat ein einfaches Setup zur Entwicklung ohne gekapselte Container mit allen benötigten Tools, es ist eher vergleichbar damit die Tools lokal zu installieren (z.B. mit
apt-get
) jedoch ohne sein System mit Projektabhängigkeiten zu verändern. - Man kann mit
nix
auch z.b.podman
undkind
als Abhängigkeiten installieren um dann Container zu testen. - Es wird keine Container-Runtime standardmäßig auf dem Sytem installiert, welche immer im Hintergrund läuft.
- Keine Lizenzkosten für Docker Desktop.
Falls Sie Ihre Entwicklungsumgebung auch vereinfachen wollen, oder eine Demo wünschen, kontaktieren Sie mich gerne.