Personaliza tu lugar de trabajo de IDX

El objetivo de Project IDX es ser lo más útil posible para los desarrolladores. Una forma en que IDX logra esto es darles a los desarrolladores la libertad y la flexibilidad de instalar las herramientas adecuadas para cualquier proyecto en su lugar de trabajo y personalizar la configuración de modo que sus lugares de trabajo funcionen para ellos.

Nix y IDX

IDX usa Nix para definir la configuración del entorno de cada lugar de trabajo. Nix es un administrador de paquetes puramente funcional y asigna identificadores únicos a cada dependencia, lo que, en última instancia, significa que tu entorno puede contener varias versiones de la misma dependencia, sin problemas. También es reproducible y declarativo. En el contexto de IDX, esto significa que puedes compartir tu archivo de configuración Nix en diferentes lugares de trabajo para cargar la misma configuración del entorno.

IDX define el entorno de vista previa y la configuración del paquete del lugar de trabajo directamente desde el repositorio de código con el archivo .idx/dev.nix. Los atributos y las bibliotecas de paquetes que puedes definir en este archivo siguen la sintaxis del conjunto de atributos de Ninja.

En el siguiente ejemplo, se muestra una configuración básica del entorno que habilita vistas previas:

{ 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 y bibliotecas de paquetes

paquetes

Paquetes para instalar en el entorno.

Puedes usar el argumento pkgs para seleccionar los paquetes que deseas instalar, por ejemplo, pkgs.python3. Ten en cuenta que el contenido de pkgs depende de la opción de canal channel seleccionada.

Ejemplo:

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

Puedes buscar paquetes disponibles aquí: stable-23.11 o unstable.

Type: lista de paquetes

Valor predeterminado: [ ]

canal

nixpkgs para usar.

Este canal define el contenido del argumento pkgs.

Tipo: uno de los siguientes: “stable-23.05”, “stable-23.11” o “unstable”

Valor predeterminado: "stable-23.11"

env

Variables de entorno que se establecen dentro del entorno de desarrollador.

Estos se propagan a todos tus shells y al servidor de vista previa. Las variables de entorno pueden ser especialmente útiles si tu aplicación requiere un conjunto específico de variables.

Ejemplo:

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

Type: Conjunto de atributos de todo

Valor predeterminado: { }

idx.extensions

Extensiones de código que quieres instalar en tu lugar de trabajo de IDX.

Esta es una lista de los IDs de extensiones completamente calificados, por ejemplo, ${publisherId}.${extensionId}.

Puedes encontrar una lista de extensiones disponibles en Abrir el registro de VSX y, luego, ingresarlas en el archivo dev.nix antes del ${publisherId}.${extensionId}.

Type: lista de (cadena o ruta de acceso no vacía)

Valor predeterminado: [ ]

idx.previews.enable

Configúralo como true para habilitar las vistas previas de IDX.

Esta función proporciona una forma de ejecutar y volver a cargar las apps automáticamente a medida que las desarrollas.

Tipo: Booleano

Valor predeterminado: true

Ejemplo: true.

idx.previews.previews

Configuración de vista previa.

Define los comandos que ejecuta IDX en tu entorno de desarrollador.

Ejemplo:

{pkgs, ...}: {
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = ["yes"];
        cwd = "subfolder";
        manager = "web";
        env = {
          HELLO = "world";
        };
      };
    };
  };
}

Type: Conjunto de atributos de (submódulo)

Valor predeterminado: { }

idx.previews.previews.<name>.command

Comando para ejecutar

Tipo: lista de strings

Valor predeterminado: [ ]

idx.previews.previews.<name>.cwd

Directorio de trabajo

Tipo: string

Valor predeterminado: ""

idx.previews.previews.<name>.env

Variables de entorno que se configurarán.

Tipo: Conjunto de atributos de string

Valor predeterminado: { }

idx.previews.previews.<name>.manager

Administrador

Tipo: Una de las siguientes opciones: “web” o “flutter”

idx.workspace.onCreate

Son los comandos que se ejecutan cuando se crea y se abre el lugar de trabajo por primera vez.

Esto puede ser útil para configurar el entorno de desarrollo. Por ejemplo, aquí especificamos que npm install se ejecutará:

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

Tipo: Conjunto de atributos (ruta o string)

Valor predeterminado: { }

idx.workspace.onStart

Son los comandos que se ejecutan cada vez que se abre el espacio de trabajo.

Esto puede ser útil para comenzar a crear observadores. Por ejemplo, aquí especificamos 2 comandos para ejecutar:

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

Tipo: Conjunto de atributos (ruta o string)

Valor predeterminado: { }

services.docker.enable

Indica si se debe habilitar Docker sin raíz.

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.mysql.enable

Si se habilita el servidor MySQL.

El servidor se inicializa con una raíz de usuario sin contraseña. Por lo tanto, para crear usuarios adicionales y bases de datos, usa mysql -u root. .

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.mysql.package

Paquete de MySQL que se usará.

Tipo: paquete

Valor predeterminado: pkgs.mysql

Ejemplo: pkgs.mysql80.

services.postgres.enable

Si se habilita el servidor PostgreSQL.

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.postgres.package

Paquete de PostgreSQL que se usará.

Tipo: paquete

Valor predeterminado: pkgs.postgresql

Ejemplo: pkgs.postgresql_15.

services.postgres.extensions

Extensiones de Postgres que se instalarán.

pgptime_sp contenido2pvpdp

Valor predeterminado: [ ]

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

services.pubsub.enable

Indica si se debe habilitar el emulador de Google Pub/Sub.

Puedes encontrar más documentación sobre el uso del emulador aquí: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.pubsub.port

Configura el puerto en el que Pub/Sub escuchará.

Tipo: Número entero de 16 bits sin firma; entre 0 y 65,535 (ambos inclusive)

Valor predeterminado: 8085

services.pubsub.id-del-proyecto

Es el ID del proyecto que se usará para ejecutar el emulador de Pub/Sub. Este proyecto es solo para pruebas, no tiene que existir y solo se usa de manera local.

Tipo: cadena que coincide con el patrón [a-z][a-z0-9-]{5,29}

Valor predeterminado: "idx-pubsub-emulator"

services.redis.enable

Si se habilita el servidor de Redis.

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.redis.port

Configura el puerto en el que Redis escuchará.

De forma predeterminada, tcp está inhabilitado y Redis solo escucha en /tmp/redis/redis.sock.

Tipo: Número entero de 16 bits sin firma; entre 0 y 65,535 (ambos inclusive)

Valor predeterminado: 0

services.spanner.enable

Establece si se habilita el emulador de Google Cloud Spanner.

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.spanner.fault-injection

Establece si se habilita la inserción de errores aleatorias en las transacciones.

Tipo: Booleano

Valor predeterminado: false

Ejemplo: true.

services.spanner.grpc-port

El puerto TCP al que se debe vincular el emulador.

Tipo: Número entero de 16 bits sin firma; entre 0 y 65,535 (ambos inclusive)

Valor predeterminado: 9010

Services.spanner.rest-port

El puerto en el que se entregan las solicitudes de REST

Tipo: Número entero de 16 bits sin firma; entre 0 y 65,535 (ambos inclusive)

Valor predeterminado: 9020