devenv - Declarative Nix Developer Environments Cheatsheet
devenv (von Cachix) erstellt schnelle, deklarative, reproduzierbare und zusammensetzbare Entwicklungsumgebungen direkt mit Nix. Anders als Tools, die Nix hinter JSON verbergen, akzeptiert devenv die Nix-Sprache für seine Konfiguration, was dir mehr Kraft und Flexibilität gibt: Sprachen, Pakete, Services (Datenbanken, Caches), lange laufende Prozesse, Skripte, Umgebungsvariablen und Pre-Commit/Git Hooks — alles in einer devenv.nix definiert. Es ist die Wahl, wenn du volle Nix-Fähigkeit mit einer batteriegestützten, entwicklerfreundlichen Schicht möchtest.
Installation
| Method | Command |
|---|
| Requirement | Nix with Flakes Enabled |
| Install | nix profile install nixpkgs#devenv (oder über Cachix-Anweisungen) |
| Cachix | recommended for fast binary caching |
| Verify | devenv version |
Getting Started
| Command | Beschreibung |
|---|
devenv init | Scaffold devenv.nix + devenv.yaml |
devenv shell | Betrete die Umgebung |
devenv up | Starte definierte Prozesse/Services |
devenv test | Führe konfigurierte Tests/Checks aus |
devenv update | Aktualisiere Inputs (pin neuere Versionen) |
devenv gc | Garbage-Collect alte Umgebungen |
The Config (devenv.nix)
{ pkgs, ... }:
{
# Packages available in the shell
packages = [ pkgs.git pkgs.jq ];
# Languages (managed toolchains)
languages.javascript.enable = true;
languages.python = {
enable = true;
version = "3.12";
};
# Services
services.postgres.enable = true;
services.redis.enable = true;
# Env vars
env.APP_ENV = "development";
# Scripts
scripts.hello.exec = "echo hello from devenv";
# Long-running processes
processes.web.exec = "npm run dev";
# Git hooks (pre-commit)
pre-commit.hooks = {
prettier.enable = true;
ruff.enable = true;
};
}
Key Building Blocks
| Block | Zweck |
|---|
packages | Beliebige Nix-Pakete in der Shell |
languages.* | First-Class-Sprachunterstützung (node, python, go, rust, …) |
services.* | Datenbanken/Caches (postgres, redis, mysql, mongodb, …) |
processes.* | Lange laufende Befehle verwaltet von devenv up |
scripts.* | Benannte Befehle ausführbar in der Shell |
env.* | Umgebungsvariablen |
pre-commit.hooks.* | Git Pre-Commit-Integrationen |
Services & Processes
| Command | Beschreibung |
|---|
devenv up | Starte alle processes und services |
devenv up -d | Starte im Hintergrund |
devenv processes down | Stoppe Prozesse |
services.postgres.enable = true; | Füge eine verwaltete Postgres hinzu |
services.postgres.initialDatabases | Seed Datenbanken auf Start |
Git Hooks (pre-commit)
devenv integriert Pre-Commit Hooks deklarativ — aktiviere einen Hook und er läuft auf Commit.
| Hook example | Läuft |
|---|
prettier.enable | Format JS/TS/usw. |
ruff.enable | Lint Python |
nixpkgs-fmt.enable | Format Nix |
shellcheck.enable | Lint Shell Scripts |
CI & Containers
| Use | How |
|---|
| CI | devenv test / devenv shell -- <cmd> für identische Umgebungen |
| Containers | devenv container build produziert OCI Images |
| direnv | .envrc mit use devenv Auto-Enter auf cd |
| Flakes | Zusammensetzbar mit dem breiteren Nix Flakes Ökosystem |
Common Workflows
# Reproducible full-stack env: language + database + process
devenv init
# edit devenv.nix: enable python, services.postgres, processes.web
devenv shell # tools available
devenv up # postgres + web process running
# Build a container from the same definition
devenv container build web
devenv vs Devbox vs raw Nix
| Aspect | devenv | Devbox | Nix (raw) |
|---|
| Config | Nix language | JSON | Nix language |
| Power | Hoch (Full Nix) | Mittel | Höchst |
| Services/processes | Built-in, Rich | Basic Services | DIY |
| Learning curve | Moderate (Nix) | Gentle | Steep |
| Best for | Kraftvolle Deklarative Umgebungen | Leicht Reproduzierbare Umgebungen | Totale Kontrolle |
Wenn Nix-Syntax ein Hindernis ist, bietet Devbox eine JSON-basierte Alternative über die gleiche Grundlage; sehe Nix für die Basis.
Resources