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étodo | Comando |
|---|
| Requirement | Nix com flakes ativados |
| Install | nix profile install nixpkgs#devenv (ou via instruções Cachix) |
| Cachix | recomendado para cache binário rápido |
| Verify | devenv version |
Começando
| Comando | Descrição |
|---|
devenv init | Andaime devenv.nix + devenv.yaml |
devenv shell | Insira o ambiente |
devenv up | Inicie processos/serviços definidos |
devenv test | Execute testes/verificações configurados |
devenv update | Atualize entradas (fixe versões mais recentes) |
devenv gc | Coleta 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
| Bloco | Propósito |
|---|
packages | Pacotes 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
| Comando | Descrição |
|---|
devenv up | Inicie todos os processes e services |
devenv up -d | Inicie em segundo plano |
devenv processes down | Pare processos |
services.postgres.enable = true; | Adicione um Postgres gerenciado |
services.postgres.initialDatabases | Semear 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 Hook | Executa |
|---|
prettier.enable | Formate JS/TS/etc. |
ruff.enable | Lint Python |
nixpkgs-fmt.enable | Formato Nix |
shellcheck.enable | Lint shell scripts |
CI & Contêineres
| Uso | Como |
|---|
| CI | devenv test / devenv shell -- <cmd> para envs idênticos |
| Containers | devenv container build produz imagens OCI |
| direnv | .envrc com use devenv auto-entra em cd |
| Flakes | Composá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
| Aspecto | devenv | Devbox | Nix (raw) |
|---|
| Config | Linguagem Nix | JSON | Linguagem Nix |
| Power | Alto (Nix completo) | Médio | Mais alto |
| Services/processes | Integrado, rico | Serviços básicos | DIY |
| Learning curve | Moderado (Nix) | Gentil | Íngreme |
| Best for | Envs declarativos poderosos | Envs reproduzíveis fáceis | Controle 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