Esta página contém detalhes sobre o esquema do arquivo de configuração do ambiente do espaço de trabalho, que precisa estar sempre localizado em .idx/dev.nix
.
Para saber mais sobre a linguagem Nix, consulte o tutorial oficial da linguagem Nix.
pacotes
Pacotes a serem instalados no ambiente.
É possível usar o argumento pkgs
para selecionar pacotes a serem instalados, por exemplo, pkgs.python3
. O conteúdo de pkgs
depende da opção de channel
(canal) selecionada.
Exemplo:
{pkgs, ...}: {
channel = "stable-23.11";
packages = [pkgs.vim];
}
Pesquise os pacotes disponíveis aqui: stable-23.11 ou unstable.
Tipo: lista de pacotes
Padrão: [ ]
canal
Canal nixpkgs a ser usado.
Esse canal define o conteúdo do argumento pkgs
.
Tipo: um destes: "stable-23.05", "stable-23.11", "stable-24.05", "stable-24.11", "unstable"
Padrão: "stable-23.11"
env
Variáveis de ambiente definidas no ambiente do desenvolvedor.
Elas são propagadas para todos os seus shells e o servidor de visualização. As variáveis de ambiente são especialmente úteis quando o aplicativo exige um conjunto específico de variáveis.
O valor de cada variável pode ser uma string ou uma lista de strings. O último é concatenado, intercalado com caracteres de dois pontos.
O PATH
precisa ser uma lista, já que ela é sempre estendida e nunca substituída completamente.
Exemplo:
{pkgs, ...}: {
env = {
HELLO = "world";
# append an entry to PATH
PATH = ["/some/path/bin"];
};
}
Tipo: conjunto de atributos de lista de strings ou qualquer coisa
Padrão: { }
idx.extensions
Extensões de código que você quer instalar no espaço de trabalho do IDX.
Essa é uma lista de IDs de extensão totalmente qualificados, por exemplo, ${publisherId}.${extensionId}
.
É possível encontrar uma lista de extensões disponíveis no Open VSX Registry e inseri-las no arquivo dev.nix
com ${publisherId}.${extensionId}
.
Tipo: lista de strings ou caminhos não vazios
Padrão: [ ]
idx.previews.enable
Defina como true
para ativar as visualizações do IDX.
Esse recurso permite executar e recarregar seus aplicativos automaticamente durante o desenvolvimento.
Tipo: booleano
Padrão: true
Exemplo: true
idx.previews.previews
Configurações da visualização.
Defina os comandos que o IDX executa no seu ambiente de desenvolvimento.
Exemplo:
{pkgs, ...}: {
idx.previews = {
enable = true;
previews = {
web = {
command = ["yes"];
cwd = "subfolder";
manager = "web";
env = {
HELLO = "world";
};
};
};
};
}
Tipo: conjunto de atributos de submódulo
Padrão: { }
idx.previews.previews.<name>.activity
Atividade de inicialização do Android
Tipo: string
Padrão: ""
idx.previews.previews.<name>.command
Comando a ser executado
Tipo: lista de strings
Padrão: [ ]
idx.previews.previews.<name>.cwd
Diretório de trabalho
Tipo: string
Padrão: ""
idx.previews.previews.<name>.env
Variáveis de ambiente a serem definidas.
Tipo: conjunto de atributos de string
Padrão: { }
idx.previews.previews.<name>.manager
Gerente
Tipo: um destes: "web", "flutter", "android", "gradle"
idx.workspace.onCreate
Comandos a serem executados quando o espaço de trabalho for criado e aberto pela primeira vez.
Isso pode ser útil para configurar o ambiente de desenvolvimento. Por exemplo, especificamos aqui npm install
para execução:
{pkgs, ...}: {
idx.workspace.onCreate = {
npm-install = "npm install";
# files to open when the workspace is first opened.
default.openFiles = [ "src/index.ts" ];
};
}
Tipo: conjunto de atributos de caminho ou string ou {openFiles = [ string ];}
Padrão: { }
idx.workspace.onStart
Comandos a serem executados sempre que o espaço de trabalho for aberto.
Isso pode ser útil para iniciar observadores de build. Por exemplo, especificamos aqui dois comandos para execução:
{pkgs, ...}: {
idx.workspace.onStart = {
npm-watch-fe = "npm run watch:frontend";
npm-watch-be = "npm run watch:backend";
# files to open when the workspace is (re)opened.
default.openFiles = [ "src/index.ts" ];
};
}
Tipo: conjunto de atributos de caminho ou string ou {openFiles = [ string ];}
Padrão: { }
imports
É possível estender seu arquivo dev.nix com um arquivo importado.
# dev.nix
{ pkgs, ... }: {
imports = [
./some-file.nix
];
# ...
}
# some-file.nix
{ pkgs, ... }: {
packages = [
pkgs.python3
];
# ...
}
Há vários motivos para importar um arquivo .nix
personalizado no dev.nix
:
Seu arquivo
dev.nix
é grande, e você quer modularizá-lo para melhorar a manutenção.{ pkgs, ... }: { channel = "stable-24.11"; # ... imports = [ ./env-cfg.nix ./preview-config.nix ]; }
Você quer configurar opções específicas do ambiente local e adicionar o arquivo à lista
.gitignore
.# dev.nix { pkgs, lib, ... }: { # ... imports = lib.optionals (builtins.pathExists ./dev.local.nix ) [ ./dev.local.nix ]; }
#.gitignore .idx/dev.local.nix
Tipo: lista de caminhos
Padrão: [ ]
serviços
Serviços comuns a serem ativados quando o espaço de trabalho for aberto.
Por exemplo, para ativar o Postgres e usar a extensão pgvector
, adicione os seguintes serviços ao dev.nix
:
services.postgres = {
extensions = ["pgvector"];
enable = true;
};
As próximas seções listam todos os serviços aceitos e respectivas opções configuráveis.
services.docker.enable
Define se o Docker sem raiz será ativado.
Tipo: booleano
Padrão: false
Exemplo: true
services.mongodb.enable
Define se o servidor MongoDB será ativado.
Tipo: booleano
Padrão: false
Exemplo: true
services.mongodb.package
Pacote do MongoDB a ser usado.
Tipo: pacote
Padrão: <derivation mongodb-6.0.11>
services.mongodb.port
Define a porta que o MongoDB ficará ouvindo.
Por padrão, o TCP está desativado, e o MondoDB só ouve /tmp/mongodb/mongodb.sock.
Para se conectar, use a string de conexão mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock
.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65535 (ambos inclusos)
Padrão: 0
services.mysql.enable
Define se o servidor MySQL será ativado.
O servidor é inicializado com uma raiz de usuário sem senha. Portanto, para criar outros usuários e bancos de dados, use mysql -u root
.
Tipo: booleano
Padrão: false
Exemplo: true
services.mysql.package
Pacote MySQL a ser usado.
Tipo: pacote
Padrão: pkgs.mysql
Exemplo: pkgs.mysql80
services.postgres.enable
Define se o servidor PostgreSQL será ativado.
Tipo: booleano
Padrão: false
Exemplo: true
services.postgres.enableTcp
Define se o Postgres ouvirá TCP.
Tipo: booleano
Padrão: true
Exemplo: true
services.postgres.package
Pacote do PostgreSQL a ser usado.
Tipo: pacote
Padrão: pkgs.postgresql
Exemplo: pkgs.postgresql_15
services.postgres.extensions
Extensões do Postgres a ser instaladas.
Tipo: lista de um destes: "age", "apache_datasketches", "cstore_fdw", "hypopg", "jsonb_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pg_cron", "pg_ed25519", "pg_embedding", "pg_hint_plan", "pg_hll", "pg_ivm", "pg_net", "pg_partman", "pg_rational", "pg_relusage", "pg_repack", "pg_safeupdate", "pg_similarity", "pg_topn", "pg_uuidv7", "pgaudit", "pgjwt", "pgroonga", "pgrouting", "pgsql-http", "pgtap", "pgvector", "plpgsql_check", "plr", "plv8", "postgis", "promscale_extension", "repmgr", "rum", "smlar", "tds_fdw", "temporal_tables", "timescaledb", "timescaledb-apache", "timescaledb_toolkit", "tsearch_extras", "tsja", "wal2json"
Padrão: [ ]
Exemplo: [ "pgvector" "postgis" ];
services.pubsub.enable
Define se o emulador do Google Pub/Sub será ativado.
Consulte mais documentação sobre como usar o emulador em: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator.
Tipo: booleano
Padrão: false
Exemplo: true
services.pubsub.port
Define a porta que o Pub/Sub ouvirá.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65535 (ambos inclusos)
Padrão: 8085
services.pubsub.project-id
ID do projeto a ser usado para executar o emulador do Pub/Sub. Esse projeto é apenas para testes. Ele não precisa existir e é usado apenas localmente.
Tipo: string que corresponde ao padrão [a-z][a-z0-9-]{5,29}
Padrão: "idx-pubsub-emulator"
services.redis.enable
Define se o servidor Redis será ativado.
Tipo: booleano
Padrão: false
Exemplo: true
services.redis.port
Define a porta que o Redis ouvirá.
Por padrão, o TCP está desativado, e o Redis só ouve /tmp/redis/redis.sock.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65535 (ambos inclusos)
Padrão: 0
services.spanner.enable
Define se o emulador do Google Cloud Spanner será ativado.
Tipo: booleano
Padrão: false
Exemplo: true
services.spanner.fault-injection
Define se a injeção de falhas aleatórias será ativada nas transações.
Tipo: booleano
Padrão: false
Exemplo: true
services.spanner.grpc-port
A porta TCP a que o emulador será vinculado.
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65535 (ambos inclusos)
Padrão: 9010
services.spanner.rest-port
A porta em que as solicitações REST são atendidas
Tipo: número inteiro não assinado de 16 bits, entre 0 e 65535 (ambos inclusos)
Padrão: 9020