Personalizar o espaço de trabalho do IDX

O objetivo do Project IDX é ser o mais útil possível para os desenvolvedores. A IDX faz isso oferecendo aos desenvolvedores a liberdade e a flexibilidade de instalar as ferramentas certas para qualquer projeto no espaço de trabalho e personalizar configurações para que os espaços de trabalho funcionem para eles.

Nix + IDX

O IDX usa o Nix para definir a configuração do ambiente para cada espaço de trabalho. O Nix é um gerenciador de pacotes puramente funcional e atribui identificadores exclusivos a cada dependência, o que significa que seu ambiente pode conter várias versões da mesma dependência perfeitamente. Ele também é reproduzível e declarativo. No contexto do IDX, isso significa que é possível compartilhar seu arquivo de configuração Nix em vários espaços de trabalho para carregar a mesma configuração de ambiente.

O IDX define o ambiente de visualização e as configurações do pacote do espaço de trabalho diretamente do repositório do código com o arquivo .idx/dev.nix. Os atributos e as bibliotecas de pacotes que podem ser definidos nesse arquivo seguem a sintaxe do conjunto de atributos do Nix (link em inglês).

O exemplo a seguir mostra uma configuração básica de ambiente que permite visualizações:

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Atributos Nix e bibliotecas de pacotes

pacotes

Pacotes a serem instalados no ambiente.

Você pode usar o argumento pkgs para selecionar pacotes a serem instalados, por exemplo, pkgs.python3. Observe que o conteúdo de pkgs depende da opção de canal channel selecionada.

Exemplo:

{pkgs, ...}: {
  channel = "stable-23.11";
  packages = [pkgs.vim];
}

Você pode pesquisar os pacotes disponíveis aqui: stable-23.11 ou instable.

Tipo:lista de pacotes

Padrão:[ ]

canal

o canal nixpkgs será usado.

Esse canal define o conteúdo do argumento pkgs.

Tipo:um entre "stable-23.05", "stable-23.11", "unstable"

Padrão:"stable-23.11"

env

Variáveis de ambiente definidas no ambiente do desenvolvedor.

Eles são propagados para todos os shells e para o servidor de visualização. As variáveis de ambiente podem ser especialmente úteis se o aplicativo exigir um conjunto específico de variáveis.

Exemplo:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Tipo:conjunto de atributos de qualquer coisa

Padrão:{ }

idx.extensions

Extensões de código que você quer instalar no espaço de trabalho do IDX.

Esta é 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 até ${publisherId}.${extensionId}.

Tipo:lista de (string ou caminho não vazio)

Padrão:[ ]

idx.previews.enable

Defina como true para ativar as visualizações do IDX.

Esse recurso oferece uma maneira de executar e recarregar seus apps automaticamente à medida que eles são desenvolvidos.

Tipo: booleano

Padrão:true

Exemplo: true.

idx.previews.previews

Visualizar configurações.

Defina os comandos que o IDX executa no seu ambiente de desenvolvedor.

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>.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: "Web", "flutter"

idx.workspace.onCreate

Comandos a serem executados quando o espaço de trabalho é criado e aberto pela primeira vez.

Isso pode ser útil para configurar o ambiente de desenvolvimento. Por exemplo, aqui estamos especificando a npm install para ser executada:

{pkgs, ...}: {
  idx.workspace.
    npm-install = "npm install";
  };
}

Tipo:conjunto de atributos de (caminho ou 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 compilação. Por exemplo, aqui estamos especificando dois comandos para executar:

{pkgs, ...}: {
  idx.workspace.
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Tipo:conjunto de atributos de (caminho ou string)

Padrão:{ }

services.docker.enable

Define se o Docker sem raiz será ativado.

Tipo: booleano

Padrão:false

Exemplo: true.

services.mysql.enable

Define se o servidor MySQL será ativado.

O servidor é inicializado com uma raiz de usuário sem senha. Portanto, para criar mais usuários e bancos de dados, use mysql -u root. .

Tipo: booleano

Padrão:false

Exemplo: true.

services.mysql.package

o pacote do 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.package

o pacote do PostgreSQL a ser usado.

Tipo: pacote

Padrão:pkgs.postgresql

Exemplo: pkgs.postgresql_15.

services.postgres.extensions

Extensões do Postgres a serem instaladas.

type: list of (one de "age", "apache_datasketches", "cstore_fdw", "hypopg", "jsonb_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pg_cron", "pg_ed25519", "pg_embedh", "pg_hintmsql")

Padrão:[ ]

Exemplo: [ "pgvector" "postgis" ];.

services.pubsub.enable

Define se o emulador do Google Pub/Sub será ativado.

Para mais documentação sobre como usar o emulador, acesse: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Tipo: booleano

Padrão:false

Exemplo: true.

services.pubsub.port

Configura a porta em que o Pub/Sub vai detectar.

Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (ambos inclusos)

Padrão:8085

serviços.pubsub.ID do projeto

ID do projeto a ser usado para executar o emulador do Pub/Sub. Este projeto é apenas para testes. Ele não precisa existir e é usado apenas localmente.

Tipo:string correspondente 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

Configura a porta que o Redis detectará.

Por padrão, o TCP está desativado e o Redis detecta apenas o /tmp/redis/redis.sock.

Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (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 em transações será ativada.

Tipo: booleano

Padrão:false

Exemplo: true.

services.spanner.grpc-port

A porta TCP a que o emulador precisa estar vinculado.

Tipo: número inteiro não assinado de 16 bits, entre 0 e 65.535 (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 65.535 (ambos inclusos)

Padrão:9020