Referência do dev.nix

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:

  1. 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
      ];
    }
    
  2. 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