devenv - Cheatsheet Ambienti di Sviluppo Nix Dichiarativi
devenv (di Cachix) costruisce ambienti di sviluppo veloci, dichiarativi, riproducibili e componibili utilizzando Nix direttamente. A differenza di strumenti che nascondono Nix dietro JSON, devenv abbraccia il linguaggio Nix per la sua configurazione, che ti dà più potenza e flessibilità: linguaggi, pacchetti, servizi (database, cache), processi di lunga durata, script, variabili di ambiente e pre-commit/hook git — tutto definito in uno devenv.nix. È la scelta quando vuoi la piena capacità di Nix con un livello amichevole per lo sviluppatore dotato di batteria.
Installazione
| Metodo | Comando |
|---|
| Requisito | Nix con flake abilitati |
| Installa | nix profile install nixpkgs#devenv (o tramite le istruzioni di Cachix) |
| Cachix | consigliato per il caching binario veloce |
| Verifica | devenv version |
Iniziare
| Comando | Descrizione |
|---|
devenv init | Scaffolding devenv.nix + devenv.yaml |
devenv shell | Entra nell”ambiente |
devenv up | Avvia processi/servizi definiti |
devenv test | Esegui test/controlli configurati |
devenv update | Aggiorna gli input (fissa versioni più recenti) |
devenv gc | Garbage-collect ambienti vecchi |
La Configurazione (devenv.nix)
{ pkgs, ... }:
{
# Pacchetti disponibili nella shell
packages = [ pkgs.git pkgs.jq ];
# Linguaggi (toolchain gestite)
languages.javascript.enable = true;
languages.python = {
enable = true;
version = "3.12";
};
# Servizi
services.postgres.enable = true;
services.redis.enable = true;
# Variabili env
env.APP_ENV = "development";
# Script
scripts.hello.exec = "echo hello from devenv";
# Processi di lunga durata
processes.web.exec = "npm run dev";
# Hook git (pre-commit)
pre-commit.hooks = {
prettier.enable = true;
ruff.enable = true;
};
}
Blocchi di Costruzione Principali
| Blocco | Scopo |
|---|
packages | Pacchetti Nix arbitrari nella shell |
languages.* | Supporto linguaggi di prima classe (node, python, go, rust, …) |
services.* | Database/cache (postgres, redis, mysql, mongodb, …) |
processes.* | Comandi di lunga durata gestiti da devenv up |
scripts.* | Comandi denominati eseguibili nella shell |
env.* | Variabili di ambiente |
pre-commit.hooks.* | Integrazioni di pre-commit git |
Servizi e Processi
| Comando | Descrizione |
|---|
devenv up | Avvia tutti i processes e i services |
devenv up -d | Avvia in background |
devenv processes down | Arresta i processi |
services.postgres.enable = true; | Aggiungi un Postgres gestito |
services.postgres.initialDatabases | Seed database all”avvio |
Hook Git (pre-commit)
devenv integra gli hook pre-commit in modo dichiarativo — abilita un hook e si esegue su commit.
| Esempio di hook | Esegue |
|---|
prettier.enable | Formatta JS/TS/ecc. |
ruff.enable | Lint Python |
nixpkgs-fmt.enable | Formato Nix |
shellcheck.enable | Lint script shell |
CI & Contenitori
| Usa | Come |
|---|
| CI | devenv test / devenv shell -- <cmd> per env identici |
| Contenitori | devenv container build produce immagini OCI |
| direnv | .envrc con use devenv entra auto su cd |
| Flakes | Componibile con l”ecosistema flake Nix più ampio |
Flussi di Lavoro Comuni
# Env full-stack riprodotto: linguaggio + database + processo
devenv init
# modifica devenv.nix: abilita python, services.postgres, processes.web
devenv shell # strumenti disponibili
devenv up # postgres + processo web in esecuzione
# Costruisci un contenitore dalla stessa definizione
devenv container build web
devenv vs Devbox vs Nix raw
| Aspetto | devenv | Devbox | Nix (raw) |
|---|
| Configurazione | Linguaggio Nix | JSON | Linguaggio Nix |
| Potenza | Alta (Nix completo) | Media | Massima |
| Servizi/processi | Built-in, ricco | Servizi di base | DIY |
| Curva di apprendimento | Moderata (Nix) | Delicata | Ripida |
| Migliore per | Env dichiarativi potenti | Env riproducibili facili | Controllo totale |
Se la sintassi Nix è una barriera, Devbox offre un”alternativa basata su JSON sulla stessa base; vedi Nix per la base.
Risorse