Referencia de dev.nix

En esta página, se incluyen detalles sobre el esquema del archivo de configuración del entorno de trabajo, que siempre debe ubicarse en .idx/dev.nix.

Para obtener información sobre el lenguaje Nix, consulta el instructivo oficial del lenguaje Nix.

paquetes

Son los paquetes que se instalarán en el entorno.

Puedes usar el argumento pkgs para seleccionar los paquetes que se instalarán, 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.

Tipo: Es una lista de paquetes.

Predeterminado: [ ]

canal

El canal de nixpkgs que se usará.

Este canal define el contenido del argumento pkgs.

Tipo: Uno de los siguientes: "stable-23.05", "stable-23.11", "stable-24.05", "stable-24.11" o "unstable"

Predeterminado: "stable-23.11"

env

Son variables de entorno que se establecen dentro del entorno de desarrollador.

Se propagan a todas 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.

El valor de cada variable puede ser una cadena o una lista de cadenas. El último se concatena, intercalado con caracteres de dos puntos.

PATH debe ser una lista, ya que siempre se extiende y nunca se reemplaza por completo.

Ejemplo:

{pkgs, ...}: {
  env = {
    HELLO = "world";
    # append an entry to PATH
    PATH = ["/some/path/bin"];
  };
}

Tipo: Conjunto de atributos de ((lista de cadenas) o cualquier cosa)

Predeterminado: { }

idx.extensions

Extensiones de código que deseas instalar en tu espacio de trabajo de IDX.

Esta es una lista de IDs de extensión completamente calificados, por ejemplo, ${publisherId}.${extensionId}.

Puedes encontrar una lista de las extensiones disponibles en el Open VSX Registry y, luego, ingresarlas en tu archivo dev.nix con ${publisherId}.${extensionId}.

Tipo: Lista de (cadena o ruta de acceso no vacía)

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 tus apps automáticamente mientras las desarrollas.

Tipo: booleano

Predeterminado: true

Ejemplo: true

idx.previews.previews

Obtener una vista previa de las configuraciones

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

Ejemplo:

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

Tipo: conjunto de atributos de (submódulo)

Predeterminado: { }

idx.previews.previews.<name>.activity

Actividad de inicio de Android

Tipo: Cadena

Predeterminado: ""

idx.previews.previews.<name>.command

Comando para ejecutar

Tipo: Lista de cadenas

Predeterminado: [ ]

idx.previews.previews.<name>.cwd

Directorio de trabajo

Tipo: Cadena

Predeterminado: ""

idx.previews.previews.<name>.env

Son las variables de entorno que se deben establecer.

Tipo: Conjunto de atributos de cadena

Predeterminado: { }

idx.previews.previews.<name>.manager

Administrador

Tipo: Uno de "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Son comandos para ejecutar cuando se crea y abre el espacio de trabajo por primera vez.

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

{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 (ruta de acceso, cadena o ({ openFiles = [ string ];}))

Predeterminado: { }

idx.workspace.onStart

Son comandos para ejecutar cada vez que se abre el lugar de trabajo.

Esto puede ser útil para iniciar observadores de compilación. Por ejemplo, aquí especificamos 2 comandos para ejecutar:

{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 (ruta de acceso, cadena o ({ openFiles = [ string ];}))

Predeterminado: { }

imports

Puedes extender tu archivo dev.nix con un archivo importado.

# dev.nix
{ pkgs, ... }: {
  imports = [
    ./some-file.nix
  ];
  # ...
}
# some-file.nix
{ pkgs, ... }: {
  packages = [
    pkgs.python3
  ];
  # ...
}

Existen varios motivos por los que podrías querer importar un archivo .nix personalizado en dev.nix:

  1. Tu archivo dev.nix es grande y quieres modularizarlo para mejorar la manutenibilidad.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Quieres configurar opciones específicas de tu entorno local y agregar el archivo a tu lista .gitignore.

    # dev.nix
    { pkgs, lib, ... }: {
      # ...
    
      imports = lib.optionals (builtins.pathExists ./dev.local.nix ) [ ./dev.local.nix ];
    }
    
    #.gitignore
    .idx/dev.local.nix
    

Tipo: Es una lista de rutas de acceso.

Predeterminado: [ ]

servicios

Son servicios comunes que se habilitan cuando se abre el lugar de trabajo.

Por ejemplo, para habilitar Postgres y usar la extensión pgvector, agrega lo siguiente a dev.nix:

    services.postgres = {
      extensions = ["pgvector"];
      enable = true;
    };

En las siguientes secciones, se enumeran todos los servicios compatibles y sus opciones configurables.

services.docker.enable

Indica si se debe habilitar Rootless Docker.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.mongodb.enable

Indica si se debe habilitar el servidor de MongoDB.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.mongodb.package

Es el paquete de MongoDB que se usará.

Tipo: paquete

Predeterminado: <derivation mongodb-6.0.11>

services.mongodb.port

Configura el puerto en el que Mongod escuchará.

De forma predeterminada, el TCP está inhabilitado y Mongod solo escucha en /tmp/mongodb/mongodb.sock.

Para conectarte, usa la cadena de conexión mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Tipo: Número entero sin signo de 16 bits, entre 0 y 65,535 inclusive

Predeterminado: 0

services.mysql.enable

Indica si se debe habilitar el servidor MySQL.

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

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.mysql.package

Es el paquete de MySQL que se usará.

Tipo: paquete

Predeterminado: pkgs.mysql

Ejemplo: pkgs.mysql80

services.postgres.enable

Indica si se debe habilitar el servidor de PostgreSQL.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.postgres.enableTcp

Indica si se debe habilitar Postgres para que escuche en TCP.

Tipo: booleano

Predeterminado: true

Ejemplo: true

services.postgres.package

Es el paquete de PostgreSQL que se usará.

Tipo: paquete

Predeterminado: pkgs.postgresql

Ejemplo: pkgs.postgresql_15

services.postgres.extensions

Extensiones de Postgres para instalar.

Tipo: Es una lista de uno de los siguientes elementos: “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”.

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

Predeterminado: false

Ejemplo: true

services.pubsub.port

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

Tipo: Número entero sin signo de 16 bits, entre 0 y 65,535 inclusive

Predeterminado: 8085

services.pubsub.project-id

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 forma local.

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

Predeterminado: "idx-pubsub-emulator"

services.redis.enable

Indica si se debe habilitar el servidor de Redis.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.redis.port

Configura el puerto en el que Redis escuchará.

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

Tipo: Número entero sin signo de 16 bits, entre 0 y 65,535 inclusive

Predeterminado: 0

services.spanner.enable

Indica si se debe habilitar el emulador de Google Cloud Spanner.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.spanner.fault-injection

Indica si se debe habilitar la inserción de fallas aleatorias en las transacciones.

Tipo: booleano

Predeterminado: false

Ejemplo: true

services.spanner.grpc-port

Es el puerto TCP al que se debe vincular el emulador.

Tipo: Número entero sin signo de 16 bits, entre 0 y 65,535 inclusive

Predeterminado: 9010

services.spanner.rest-port

El puerto en el que se entregan las solicitudes REST

Tipo: Número entero sin signo de 16 bits, entre 0 y 65,535 inclusive

Predeterminado: 9020