Pular para o conteúdo

devenv - Cheatsheet de Ambientes de Desenvolvedor Declarativo Nix

devenv - Cheatsheet de Ambientes de Desenvolvedor Declarativo Nix

devenv (por Cachix) constrói ambientes de desenvolvedor rápidos, declarativos, reproduzíveis e compostos usando Nix diretamente. Ao contrário de ferramentas que escondem Nix atrás de JSON, devenv abraça a linguagem Nix para seu config, o que oferece mais poder e flexibilidade: idiomas, pacotes, serviços (bancos de dados, caches), processos de longa duração, scripts, variáveis de ambiente e hooks pré-commit/git — tudo definido em um único devenv.nix. É a escolha quando você deseja capacidade Nix completa com uma camada amigável aos desenvolvedores com bateria incluída.

Instalação

MétodoComando
RequirementNix com flakes ativados
Installnix profile install nixpkgs#devenv (ou via instruções Cachix)
Cachixrecomendado para cache binário rápido
Verifydevenv version

Começando

ComandoDescrição
devenv initAndaime devenv.nix + devenv.yaml
devenv shellInsira o ambiente
devenv upInicie processos/serviços definidos
devenv testExecute testes/verificações configurados
devenv updateAtualize entradas (fixe versões mais recentes)
devenv gcColeta de lixo de ambientes antigos

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

Blocos de Construção-Chave

BlocoPropósito
packagesPacotes Nix arbitrários no shell
languages.*Suporte de linguagem de primeira classe (node, python, go, rust, …)
services.*Bancos de dados/caches (postgres, redis, mysql, mongodb, …)
processes.*Comandos de longa duração gerenciados por devenv up
scripts.*Comandos nomeados executáveis no shell
env.*Variáveis de ambiente
pre-commit.hooks.*Integrações de pré-commit git

Serviços & Processos

ComandoDescrição
devenv upInicie todos os processes e services
devenv up -dInicie em segundo plano
devenv processes downPare processos
services.postgres.enable = true;Adicione um Postgres gerenciado
services.postgres.initialDatabasesSemear bancos de dados no início

Git Hooks (pre-commit)

devenv integra hooks pré-commit declarativamente — ative um hook e ele executa no commit.

Exemplo de HookExecuta
prettier.enableFormate JS/TS/etc.
ruff.enableLint Python
nixpkgs-fmt.enableFormato Nix
shellcheck.enableLint shell scripts

CI & Contêineres

UsoComo
CIdevenv test / devenv shell -- <cmd> para envs idênticos
Containersdevenv container build produz imagens OCI
direnv.envrc com use devenv auto-entra em cd
FlakesComposável com o ecossistema flake Nix mais amplo

Fluxos de Trabalho Comuns

# 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 Raw

AspectodevenvDevboxNix (raw)
ConfigLinguagem NixJSONLinguagem Nix
PowerAlto (Nix completo)MédioMais alto
Services/processesIntegrado, ricoServiços básicosDIY
Learning curveModerado (Nix)GentilÍngreme
Best forEnvs declarativos poderososEnvs reproduzíveis fáceisControle total

Se a sintaxe Nix for uma barreira, Devbox oferece uma alternativa baseada em JSON sobre a mesma fundação; veja Nix para o base.

Recursos