Aller au contenu

devenv - Environnements de développement Nix déclaratifs

devenv - Environnements de développement Nix déclaratifs

devenv (par Cachix) construit des environnements de développement déclaratifs, rapides, reproductibles et composables en utilisant Nix directement. Contrairement aux outils qui cachent Nix derrière JSON, devenv adopte le langage Nix pour sa config, ce qui vous donne plus de puissance et de flexibilité : langages, packages, services (bases de données, caches), processus longue durée, scripts, variables d’environnement et git hooks de pré-commit — tout défini dans un devenv.nix. C’est le choix quand vous voulez une capacité Nix complète avec une couche batteries-included et conviviale pour les développeurs.

Installation

MéthodeCommande
ExigenceNix avec flakes activé
Installernix profile install nixpkgs#devenv (ou via instructions Cachix)
Cachixrecommandé pour la mise en cache binaire rapide
Vérifierdevenv version

Démarrage

CommandeDescription
devenv initScaffolder devenv.nix + devenv.yaml
devenv shellEntrer dans l’environnement
devenv upDémarrer les processus/services définis
devenv testExécuter les tests/vérifications configurés
devenv updateMettre à jour les inputs (épingler les versions plus récentes)
devenv gcGarbage-collect les anciens environnements

La 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;
  };
}

Blocs de construction clés

BlocObjectif
packagesPackages Nix arbitraires dans le shell
languages.*Support du langage de première classe (node, python, go, rust, …)
services.*Bases de données/caches (postgres, redis, mysql, mongodb, …)
processes.*Commandes longue durée gérées par devenv up
scripts.*Commandes nommées exécutables dans le shell
env.*Variables d’environnement
pre-commit.hooks.*Intégrations Git pre-commit

Services et processus

CommandeDescription
devenv upDémarrer tous les processes et services
devenv up -dDémarrer en arrière-plan
devenv processes downArrêter les processus
services.postgres.enable = true;Ajouter un Postgres gérée
services.postgres.initialDatabasesEnsemencer les bases de données au démarrage

Git Hooks (pre-commit)

devenv intègre les git hooks de pré-commit de manière déclarative — activer un hook et il s’exécute au commit.

Exemple de hookS’exécute
prettier.enableFormater JS/TS/etc.
ruff.enableLinter Python
nixpkgs-fmt.enableFormater Nix
shellcheck.enableLinter des scripts shell

CI & Conteneurs

UtilisationComment
CIdevenv test / devenv shell -- <cmd> pour les envs identiques
Conteneursdevenv container build produit des images OCI
direnv.envrc avec use devenv auto-entre sur cd
FlakesComposable avec l’écosystème flake Nix plus large

Flux de travail courants

# 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 Nix brut

AspectdevenvDevboxNix (brut)
ConfigLangage NixJSONLangage Nix
PuissanceÉlevée (Nix complet)MoyenMaximale
Services/processusIntégré, richeServices basiquesDIY
Courbe d’apprentissageModérée (Nix)DouceRaide
Meilleur pourEnvs déclaratifs puissantsEnvs reproductibles facilesContrôle total

Si la syntaxe Nix est une barrière, Devbox offre une alternative basée JSON sur la même base ; voir Nix pour la base.

Ressources