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éthode | Commande |
|---|
| Exigence | Nix avec flakes activé |
| Installer | nix profile install nixpkgs#devenv (ou via instructions Cachix) |
| Cachix | recommandé pour la mise en cache binaire rapide |
| Vérifier | devenv version |
Démarrage
| Commande | Description |
|---|
devenv init | Scaffolder devenv.nix + devenv.yaml |
devenv shell | Entrer dans l’environnement |
devenv up | Démarrer les processus/services définis |
devenv test | Exécuter les tests/vérifications configurés |
devenv update | Mettre à jour les inputs (épingler les versions plus récentes) |
devenv gc | Garbage-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
| Bloc | Objectif |
|---|
packages | Packages 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
| Commande | Description |
|---|
devenv up | Démarrer tous les processes et services |
devenv up -d | Démarrer en arrière-plan |
devenv processes down | Arrêter les processus |
services.postgres.enable = true; | Ajouter un Postgres gérée |
services.postgres.initialDatabases | Ensemencer 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 hook | S’exécute |
|---|
prettier.enable | Formater JS/TS/etc. |
ruff.enable | Linter Python |
nixpkgs-fmt.enable | Formater Nix |
shellcheck.enable | Linter des scripts shell |
CI & Conteneurs
| Utilisation | Comment |
|---|
| CI | devenv test / devenv shell -- <cmd> pour les envs identiques |
| Conteneurs | devenv container build produit des images OCI |
| direnv | .envrc avec use devenv auto-entre sur cd |
| Flakes | Composable 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
| Aspect | devenv | Devbox | Nix (brut) |
|---|
| Config | Langage Nix | JSON | Langage Nix |
| Puissance | Élevée (Nix complet) | Moyen | Maximale |
| Services/processus | Intégré, riche | Services basiques | DIY |
| Courbe d’apprentissage | Modérée (Nix) | Douce | Raide |
| Meilleur pour | Envs déclaratifs puissants | Envs reproductibles faciles | Contrô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