Salta ai contenuti

devenv - Cheatsheet Ambienti di Sviluppo Nix Dichiarativi

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

MetodoComando
RequisitoNix con flake abilitati
Installanix profile install nixpkgs#devenv (o tramite le istruzioni di Cachix)
Cachixconsigliato per il caching binario veloce
Verificadevenv version

Iniziare

ComandoDescrizione
devenv initScaffolding devenv.nix + devenv.yaml
devenv shellEntra nell”ambiente
devenv upAvvia processi/servizi definiti
devenv testEsegui test/controlli configurati
devenv updateAggiorna gli input (fissa versioni più recenti)
devenv gcGarbage-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

BloccoScopo
packagesPacchetti 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

ComandoDescrizione
devenv upAvvia tutti i processes e i services
devenv up -dAvvia in background
devenv processes downArresta i processi
services.postgres.enable = true;Aggiungi un Postgres gestito
services.postgres.initialDatabasesSeed 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 hookEsegue
prettier.enableFormatta JS/TS/ecc.
ruff.enableLint Python
nixpkgs-fmt.enableFormato Nix
shellcheck.enableLint script shell

CI & Contenitori

UsaCome
CIdevenv test / devenv shell -- <cmd> per env identici
Contenitoridevenv container build produce immagini OCI
direnv.envrc con use devenv entra auto su cd
FlakesComponibile 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

AspettodevenvDevboxNix (raw)
ConfigurazioneLinguaggio NixJSONLinguaggio Nix
PotenzaAlta (Nix completo)MediaMassima
Servizi/processiBuilt-in, riccoServizi di baseDIY
Curva di apprendimentoModerata (Nix)DelicataRipida
Migliore perEnv dichiarativi potentiEnv riproducibili faciliControllo totale

Se la sintassi Nix è una barriera, Devbox offre un”alternativa basata su JSON sulla stessa base; vedi Nix per la base.

Risorse