Zum Inhalt springen

devenv - Declarative Nix Developer Environments Cheatsheet

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

MethodCommand
RequirementNix with Flakes Enabled
Installnix profile install nixpkgs#devenv (oder über Cachix-Anweisungen)
Cachixrecommended for fast binary caching
Verifydevenv version

Getting Started

CommandBeschreibung
devenv initScaffold devenv.nix + devenv.yaml
devenv shellBetrete die Umgebung
devenv upStarte definierte Prozesse/Services
devenv testFühre konfigurierte Tests/Checks aus
devenv updateAktualisiere Inputs (pin neuere Versionen)
devenv gcGarbage-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

BlockZweck
packagesBeliebige 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

CommandBeschreibung
devenv upStarte alle processes und services
devenv up -dStarte im Hintergrund
devenv processes downStoppe Prozesse
services.postgres.enable = true;Füge eine verwaltete Postgres hinzu
services.postgres.initialDatabasesSeed Datenbanken auf Start

Git Hooks (pre-commit)

devenv integriert Pre-Commit Hooks deklarativ — aktiviere einen Hook und er läuft auf Commit.

Hook exampleLäuft
prettier.enableFormat JS/TS/usw.
ruff.enableLint Python
nixpkgs-fmt.enableFormat Nix
shellcheck.enableLint Shell Scripts

CI & Containers

UseHow
CIdevenv test / devenv shell -- <cmd> für identische Umgebungen
Containersdevenv container build produziert OCI Images
direnv.envrc mit use devenv Auto-Enter auf cd
FlakesZusammensetzbar 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

AspectdevenvDevboxNix (raw)
ConfigNix languageJSONNix language
PowerHoch (Full Nix)MittelHöchst
Services/processesBuilt-in, RichBasic ServicesDIY
Learning curveModerate (Nix)GentleSteep
Best forKraftvolle Deklarative UmgebungenLeicht Reproduzierbare UmgebungenTotale Kontrolle

Wenn Nix-Syntax ein Hindernis ist, bietet Devbox eine JSON-basierte Alternative über die gleiche Grundlage; sehe Nix für die Basis.

Resources