Ir al contenido

devenv - Entornos de desarrollador Nix declarativos

devenv - Entornos de desarrollador Nix declarativos

devenv (de Cachix) construye entornos de desarrollador rápidos, declarativos, reproducibles y componibles usando Nix directamente. A diferencia de herramientas que ocultan Nix detrás de JSON, devenv abraza el lenguaje Nix para su configuración, lo que te da más poder y flexibilidad: lenguajes, paquetes, servicios (bases de datos, cachés), procesos de larga duración, scripts, variables de entorno y pre-commit/git hooks — todo definido en un único devenv.nix. Es la opción cuando quieres capacidad Nix completa con una capa amigable al desarrollador lista para usar.

Instalación

MétodoComando
RequerimientoNix con flakes habilitados
Instalarnix profile install nixpkgs#devenv (o a través de instrucciones de Cachix)
Cachixrecomendado para almacenamiento en caché binario rápido
Verificardevenv version

Primeros pasos

ComandoDescripción
devenv initEstructura devenv.nix + devenv.yaml
devenv shellIngresa en el entorno
devenv upInicia procesos/servicios definidos
devenv testEjecuta pruebas/controles configurados
devenv updateActualiza entradas (fija versiones más nuevas)
devenv gcRecolecta basura de viejos entornos

La configuración (devenv.nix)

{ pkgs, ... }:
{
  # Paquetes disponibles en el shell
  packages = [ pkgs.git pkgs.jq ];

  # Lenguajes (cadenas de herramientas gestionadas)
  languages.javascript.enable = true;
  languages.python = {
    enable = true;
    version = "3.12";
  };

  # Servicios
  services.postgres.enable = true;
  services.redis.enable = true;

  # Variables de env
  env.APP_ENV = "development";

  # Scripts
  scripts.hello.exec = "echo hello from devenv";

  # Procesos de larga duración
  processes.web.exec = "npm run dev";

  # Git hooks (pre-commit)
  pre-commit.hooks = {
    prettier.enable = true;
    ruff.enable = true;
  };
}

Bloques de construcción clave

BloquePropósito
packagesPaquetes Nix arbitrarios en el shell
languages.*Soporte de lenguaje de primera clase (node, python, go, rust, …)
services.*Bases de datos/cachés (postgres, redis, mysql, mongodb, …)
processes.*Comandos de larga duración gestionados por devenv up
scripts.*Comandos nombrados ejecutables en el shell
env.*Variables de entorno
pre-commit.hooks.*Integraciones de pre-commit de git

Servicios y procesos

ComandoDescripción
devenv upInicia todos los processes y services
devenv up -dInicia en segundo plano
devenv processes downDetiene procesos
services.postgres.enable = true;Agrega un Postgres gestionado
services.postgres.initialDatabasesSiembra bases de datos al iniciar

Git Hooks (pre-commit)

devenv integra git hooks de pre-commit de manera declarativa — habilita un hook y se ejecuta en la confirmación.

Ejemplo de hookSe ejecuta
prettier.enableFormatea JS/TS/etc.
ruff.enableLinta Python
nixpkgs-fmt.enableFormatea Nix
shellcheck.enableLinta scripts de shell

CI y contenedores

UsarCómo
CIdevenv test / devenv shell -- <cmd> para envs idénticos
Contenedoresdevenv container build produce imágenes OCI
direnv.envrc con use devenv auto-ingresa al cd
FlakesComponible con el ecosistema flake de Nix más amplio

Flujos de trabajo comunes

# Env reproducible de stack completo: lenguaje + base de datos + proceso
devenv init
# edita devenv.nix: habilita python, services.postgres, processes.web
devenv shell        # herramientas disponibles
devenv up           # postgres + proceso web corriendo

# Construye un contenedor de la misma definición
devenv container build web

devenv vs Devbox vs Nix crudo

AspectodevenvDevboxNix (crudo)
ConfiguraciónLenguaje NixJSONLenguaje Nix
PoderAlto (Nix completo)MedioMáximo
Servicios/procesosIncorporado, ricoServicios básicosDIY
Curva de aprendizajeModerada (Nix)SuaveEmpinada
Mejor paraEnvs declarativos poderososEnvs reproducibles fácilesControl total

Si la sintaxis Nix es una barrera, Devbox ofrece una alternativa basada en JSON sobre la misma base; ver Nix para la base.

Recursos