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 di canale selezionatachannel.

Esempio:

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

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

Tipo: elenco del pacchetto

Valore predefinito: [ ]

canale

Il canale nixpkgs da utilizzare.

Questo canale definisce i contenuti dell'argomento pkgs.

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

Valore predefinito: "stable-23.11"

env

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

Questi 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 altro elemento)

Valore predefinito: { }

idx.extensions

Estensioni di codice da installare nello spazio di lavoro IDX.

Si tratta di un elenco di ID estensione completi, ad esempio${publisherId}.${extensionId}.

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

Tipo: elenco di (stringa o percorso non vuoto)

Valore 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

Valore 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)

Valore predefinito: { }

idx.previews.previews.<name>.activity

Attività di lancio di Android

Tipo: stringa

Valore predefinito: ""

idx.previews.previews.<name>.command

Comando da eseguire

Tipo: elenco di stringhe

Valore predefinito: [ ]

idx.previews.previews.<name>.cwd

Directory di lavoro

Tipo: stringa

Valore predefinito: ""

idx.previews.previews.<name>.env

Variabili di ambiente da impostare.

Tipo: insieme di attributi di stringa

Valore predefinito: { }

idx.previews.previews.<name>.manager

Gestore

Tipo: uno dei valori "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Comandi da eseguire quando lo spazio di lavoro viene creato e aperto per la prima volta.

Ciò può essere utile per configurare l'ambiente di sviluppo. Ad esempio, qui abbiamo specificato 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" ];
  };
}

Tipo: insieme di attributi di (percorso o stringa o ({ openFiles = [ string ];}))

Valore predefinito: { }

idx.workspace.onStart

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

Questa opzione può essere utile per avviare gli osservatori delle 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" ];
  };
}

Tipo: insieme di attributi di (percorso o stringa o ({ openFiles = [ string ];}))

Valore 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 è di grandi dimensioni e vuoi modularizzarlo per migliorarne 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 di percorsi

Valore predefinito: [ ]

servizi

Servizi comuni da attivare quando si apre lo 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 attivare Docker senza root.

Tipo: booleano

Valore predefinito: false

Esempio: true

services.mongodb.enable

Se abilitare il server MongoDB.

Tipo: booleano

Valore predefinito: false

Esempio: true

services.mongodb.package

Il pacchetto MongoDB da utilizzare.

Tipo: pacchetto

Valore predefinito: <derivation mongodb-6.0.11>

services.mongodb.port

Configura la porta su cui Mongod è in ascolto.

Per impostazione predefinita, il protocollo TCP è disabilitato e Mongod ascolta 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)

Valore predefinito: 0

services.mysql.enable

Se abilitare il server MySQL.

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

Tipo: booleano

Valore predefinito: false

Esempio: true

services.mysql.package

Il pacchetto MySQL da utilizzare.

Tipo: pacchetto

Valore predefinito: pkgs.mysql

Esempio: pkgs.mysql80

services.postgres.enable

Indica se attivare il server PostgreSQL.

Tipo: booleano

Valore predefinito: false

Esempio: true

services.postgres.enableTcp

Indica se attivare l'ascolto di Postgres su TCP.

Tipo: booleano

Valore predefinito: true

Esempio: true

services.postgres.package

Il pacchetto PostgreSQL da utilizzare.

Tipo: pacchetto

Valore predefinito: pkgs.postgresql

Esempio: pkgs.postgresql_15

services.postgres.extensions

Estensioni Postgres da installare.

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

Valore predefinito: [ ]

Esempio: [ "pgvector" "postgis" ];

services.pubsub.enable

Se abilitare l'emulatore Google Pub/Sub.

Puoi trovare ulteriore documentazione sull'utilizzo dell'emulatore qui: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Tipo: booleano

Valore predefinito: false

Esempio: true

services.pubsub.port

Configura la porta su cui Pub/Sub rimane in ascolto.

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

Valore 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}

Valore predefinito: "idx-pubsub-emulator"

services.redis.enable

Se abilitare il server Redis.

Tipo: booleano

Valore predefinito: false

Esempio: true

services.redis.port

Configura la porta su cui Redis sarà in ascolto.

Per impostazione predefinita, il protocollo TCP è disabilitato e Redis ascolta solo su /tmp/redis/redis.sock.

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

Valore predefinito: 0

services.spanner.enable

Indica se abilitare l'emulatore Google Cloud Spanner.

Tipo: booleano

Valore predefinito: false

Esempio: true

services.spanner.fault-injection

Se attivare l'iniezione di errori casuali nelle transazioni.

Tipo: booleano

Valore 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)

Valore predefinito: 9010

services.spanner.rest-port

La porta su cui vengono inviate le richieste REST

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

Valore predefinito: 9020