Riferimento dev.nix

Questa pagina include i dettagli sullo schema del file di configurazione dell'ambiente di lavoro, che deve sempre trovarsi in .idx/dev.nix.

Per scoprire di più sul linguaggio Nix, consulta il tutorial ufficiale sul linguaggio Nix.

packages

Pacchetti da installare nell'ambiente.

Puoi utilizzare l'argomento pkgs per selezionare i pacchetti da installare, ad esempio pkgs.python3. Tieni presente che i contenuti di pkgs dipendono dall'opzione channel del canale selezionata.

Esempio:

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

Puoi cercare i pacchetti disponibili qui: stable-23.11 o unstable.

Tipo:elenco dei pacchetti

Predefinito: [ ]

canale

Il canale nixpkgs da utilizzare.

Questo canale definisce i contenuti dell'argomento pkgs.

Tipo:uno tra "stable-23.05", "stable-23.11", "stable-24.05", "stable-24.11", "unstable"

Predefinito: "stable-23.11"

env

Variabili di ambiente impostate all'interno dell'ambiente di sviluppo.

Questi valori vengono propagati a tutte le shell e al server di anteprima. Le variabili di ambiente possono essere particolarmente utili se la tua applicazione richiede un insieme specifico di variabili.

Il valore di ogni variabile può essere una stringa o un elenco di stringhe. Il secondo viene concatenato, intervallato da due punti.

PATH deve essere un elenco, in quanto viene sempre esteso e mai sostituito completamente.

Esempio:

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

Tipo:insieme di attributi di ((elenco di stringhe) o qualsiasi cosa)

Predefinito: { }

idx.extensions

Estensioni di codice che vuoi installare nel tuo workspace IDX.

Questo è un elenco di ID estensione completi, ad esempio ${publisherId}.${extensionId}.

Puoi trovare un elenco delle estensioni disponibili nel registro Open VSX e inserirle nel file dev.nix tramite ${publisherId}.${extensionId}.

Tipo:elenco di (stringa o percorso non vuoto)

Predefinito: [ ]

idx.previews.enable

Imposta questo valore su true per attivare le anteprime IDX.

Questa funzionalità consente di eseguire e ricaricare automaticamente le app durante lo sviluppo.

Tipo: booleano

Predefinito: true

Esempio: true

idx.previews.previews

Visualizza l'anteprima delle configurazioni.

Definisci i comandi eseguiti da IDX nel tuo ambiente di sviluppo.

Esempio:

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

Tipo:insieme di attributi di (sottomodulo)

Predefinito: { }

idx.previews.previews.<name>.activity

Android Launch Activity

Tipo: stringa

Predefinito: ""

idx.previews.previews.<name>.command

Comando da eseguire

Tipo: elenco di stringhe

Predefinito: [ ]

idx.previews.previews.<name>.cwd

Directory di lavoro

Tipo: stringa

Predefinito: ""

idx.previews.previews.<name>.env

Variabili di ambiente da impostare.

Tipo: set di attributi di stringa

Predefinito: { }

idx.previews.previews.<name>.manager

Gestore

Tipo:uno tra "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Comandi da eseguire quando il workspace viene creato e aperto per la prima volta.

Può essere utile per configurare l'ambiente di sviluppo. Ad esempio, qui stiamo specificando npm install da eseguire:

{pkgs, ...}: {
  idx.workspace.onCreate = {
    npm-install = "npm install";
    # files to open when the workspace is first opened.
    default.openFiles = [ "src/index.ts" ];
  };
}

Type: insieme di attributi di (path o string o ({ openFiles = [ string ];}))

Predefinito: { }

idx.workspace.onStart

Comandi da eseguire ogni volta che viene aperto lo spazio di lavoro.

Può essere utile per avviare i watcher di build. Ad esempio, qui specifichiamo due comandi da eseguire:

{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" ];
  };
}

Type: insieme di attributi di (path o string o ({ openFiles = [ string ];}))

Predefinito: { }

importazioni

Puoi estendere il file dev.nix con un file importato.

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

Esistono diversi motivi per cui potresti voler importare un file .nix personalizzato in dev.nix:

  1. Il file dev.nix è grande e vuoi modularizzarlo per migliorare la manutenibilità.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Vuoi configurare opzioni specifiche per il tuo ambiente locale e aggiungere il file all'elenco .gitignore.

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

Tipo:elenco del percorso

Predefinito: [ ]

servizi

Servizi comuni da attivare all'apertura dello spazio di lavoro.

Ad esempio, per attivare Postgres e utilizzare l'estensione pgvector, aggiungi quanto segue a dev.nix:

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

Le sezioni seguenti elencano tutti i servizi supportati e le relative opzioni configurabili.

services.docker.enable

Se abilitare Docker senza privilegi di root.

Tipo: booleano

Predefinito: false

Esempio: true

services.mongodb.enable

Se abilitare il server MongoDB.

Tipo: booleano

Predefinito: false

Esempio: true

services.mongodb.package

Pacchetto MongoDB da utilizzare.

Tipo:pacchetto

Predefinito: <derivation mongodb-6.0.11>

services.mongodb.port

Configura la porta su cui Mongod sarà in ascolto.

Per impostazione predefinita, TCP è disabilitato e Mongod è in ascolto solo su /tmp/mongodb/mongodb.sock.

Per connetterti, utilizza la stringa di connessione mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Tipo:numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinito: 0

services.mysql.enable

Se abilitare il server MySQL.

Il server viene inizializzato con una root utente senza password. Per creare utenti aggiuntivi e database, utilizza mysql -u root.

Tipo: booleano

Predefinito: false

Esempio: true

services.mysql.package

Pacchetto MySQL da utilizzare.

Tipo:pacchetto

Predefinito: pkgs.mysql

Esempio: pkgs.mysql80

services.postgres.enable

Indica se abilitare il server PostgreSQL.

Tipo: booleano

Predefinito: false

Esempio: true

services.postgres.enableTcp

Se abilitare Postgres all'ascolto su TCP.

Tipo: booleano

Predefinito: true

Esempio: true

services.postgres.package

Pacchetto PostgreSQL da utilizzare.

Tipo:pacchetto

Predefinito: pkgs.postgresql

Esempio: pkgs.postgresql_15

services.postgres.extensions

Estensioni Postgres da installare.

Type:elenco di (uno tra "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")

Predefinito: [ ]

Esempio: [ "pgvector" "postgis" ];

services.pubsub.enable

Se abilitare l'emulatore Google Pub/Sub.

Ulteriore documentazione sull'utilizzo dell'emulatore è disponibile qui: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Tipo: booleano

Predefinito: false

Esempio: true

services.pubsub.port

Configura la porta su cui Pub/Sub sarà in ascolto.

Tipo:numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinito: 8085

services.pubsub.project-id

ID progetto da utilizzare per eseguire l'emulatore Pub/Sub. Questo progetto è solo per i test, non deve esistere e viene utilizzato solo localmente.

Tipo:stringa corrispondente al pattern [a-z][a-z0-9-]{5,29}

Predefinito: "idx-pubsub-emulator"

services.redis.enable

Se abilitare il server Redis.

Tipo: booleano

Predefinito: false

Esempio: true

services.redis.port

Configura la porta su cui Redis sarà in ascolto.

Per impostazione predefinita, TCP è disabilitato e Redis è in ascolto solo su /tmp/redis/redis.sock.

Tipo:numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinito: 0

services.spanner.enable

Se abilitare l'emulatore Google Cloud Spanner.

Tipo: booleano

Predefinito: false

Esempio: true

services.spanner.fault-injection

Se attivare l'inserimento casuale di errori nelle transazioni.

Tipo: booleano

Predefinito: false

Esempio: true

services.spanner.grpc-port

La porta TCP a cui deve essere associato l'emulatore.

Tipo:numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinito: 9010

services.spanner.rest-port

La porta su cui vengono pubblicate le richieste REST

Tipo:numero intero senza segno a 16 bit; compreso tra 0 e 65535 (entrambi inclusi)

Predefinito: 9020