dev.nix-Referenz

Auf dieser Seite finden Sie Details zum Schema für die Konfigurationsdatei Ihrer Arbeitsbereichsumgebung, die sich immer unter .idx/dev.nix befinden sollte.

Weitere Informationen zur Nix-Sprache finden Sie im offiziellen Nix-Sprachtutorial.

packages

Pakete, die in der Umgebung installiert werden sollen.

Mit dem Argument pkgs können Sie die zu installierenden Pakete auswählen, z. B. pkgs.python3. Der Inhalt von pkgs hängt von der ausgewählten channel-Kanaloption ab.

Beispiel:

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

Hier können Sie nach verfügbaren Paketen suchen: stable-23.11 oder unstable.

Typ:Liste der Pakete

Standard:[ ]

Kanal

Zu verwendender nixpkgs-Channel.

Dieser Channel definiert den Inhalt des pkgs-Arguments.

Typ: einer der folgenden Werte: „stable-23.05“, „stable-23.11“, „stable-24.05“, „stable-24.11“, „unstable“

Standard:"stable-23.11"

env

Umgebungsvariablen, die in der Entwicklungsumgebung festgelegt sind.

Diese werden an alle Ihre Shells und den Vorschauserver weitergegeben. Umgebungsvariablen können besonders nützlich sein, wenn Ihre Anwendung eine bestimmte Gruppe von Variablen erfordert.

Der Wert jeder Variablen kann entweder ein String oder eine Liste von Strings sein. Letztere werden mit Doppelpunkten verkettet.

PATH muss eine Liste sein, da sie immer erweitert und nie vollständig ersetzt wird.

Beispiel:

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

Typ:Attributgruppe von ((Liste von String) oder beliebig)

Standard:{ }

idx.extensions

Code-Erweiterungen, die Sie in Ihrem IDX-Arbeitsbereich installieren möchten.

Dies ist eine Liste vollständig qualifizierter Erweiterungs-IDs, z. B. ${publisherId}.${extensionId}.

Eine Liste der verfügbaren Erweiterungen finden Sie in der Open VSX Registry. Geben Sie sie in Ihrer dev.nix-Datei mit ${publisherId}.${extensionId} ein.

Typ:Liste mit (nicht leeren) Strings oder Pfaden

Standard:[ ]

idx.previews.enable

Legen Sie für dieses Feld true fest, um IDX-Vorschauen zu aktivieren.

Mit dieser Funktion können Sie Ihre Apps während der Entwicklung automatisch ausführen und neu laden.

Typ: Boolesch

Standard:true

Beispiel: true

idx.previews.previews

Konfigurationen in der Vorschau ansehen

Definieren Sie die Befehle, die IDX in Ihrer Entwicklungsumgebung ausführt.

Beispiel:

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

Typ:Attributgruppe von (Untermodul)

Standard:{ }

idx.previews.previews.<name>.activity

Android Launch Activity

Typ: String

Standard:""

idx.previews.previews.<name>.command

Auszuführender Befehl

Typ:Liste von Strings

Standard:[ ]

idx.previews.previews.<name>.cwd

Arbeitsverzeichnis

Typ: String

Standard:""

idx.previews.previews.<name>.env

Umgebungsvariablen festzulegen.

Typ:Attributsatz vom Typ „String“

Standard:{ }

idx.previews.previews.<name>.manager

Manager

Typ: „web“, „flutter“, „android“ oder „gradle“

idx.workspace.onCreate

Befehle, die ausgeführt werden sollen, wenn der Arbeitsbereich zum ersten Mal erstellt und geöffnet wird.

Das kann beim Einrichten der Entwicklungsumgebung hilfreich sein. Hier geben wir beispielsweise an, dass npm install ausgeführt werden soll:

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

Typ:Attributsatz von (Pfad oder String oder ({ openFiles = [ String ];}))

Standard:{ }

idx.workspace.onStart

Befehle, die ausgeführt werden, wenn der Arbeitsbereich geöffnet wird.

Das kann nützlich sein, um Build-Watcher zu starten. Hier werden beispielsweise zwei auszuführende Befehle angegeben:

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

Typ:Attributsatz von (Pfad oder String oder ({ openFiles = [ String ];}))

Standard:{ }

imports

Sie können Ihre dev.nix-Datei mit einer importierten Datei erweitern.

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

Es gibt mehrere Gründe, warum Sie eine benutzerdefinierte .nix-Datei in dev.nix importieren möchten:

  1. Ihre dev.nix-Datei ist groß und Sie möchten sie modularisieren, um die Wartbarkeit zu verbessern.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Sie möchten Optionen konfigurieren, die für Ihre lokale Umgebung spezifisch sind, und die Datei Ihrer .gitignore-Liste hinzufügen.

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

Typ:Liste mit Pfaden

Standard:[ ]

Dienste

Häufig verwendete Dienste, die beim Öffnen des Arbeitsbereichs aktiviert werden.

Wenn Sie beispielsweise Postgres aktivieren und die pgvector-Erweiterung verwenden möchten, fügen Sie dev.nix Folgendes hinzu:

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

In den folgenden Abschnitten werden alle unterstützten Dienste und ihre konfigurierbaren Optionen aufgeführt.

services.docker.enable

Gibt an, ob Rootless Docker aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.mongodb.enable

Gibt an, ob der MongoDB-Server aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.mongodb.package

Zu verwendendes MongoDB-Paket.

Typ:Paket

Standard:<derivation mongodb-6.0.11>

services.mongodb.port

Konfiguriert den Port, den Mongod überwacht.

Standardmäßig ist TCP deaktiviert und Mongod überwacht nur /tmp/mongodb/mongodb.sock.

Verwenden Sie zum Herstellen einer Verbindung den Verbindungsstring mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Typ:Vorzeichenlose 16-Bit-Ganzzahl; zwischen 0 und 65.535 (beide einschließlich)

Standard:0

services.mysql.enable

Gibt an, ob der MySQL-Server aktiviert werden soll.

Der Server wird mit einem passwortlosen Root-Nutzer initialisiert. Verwenden Sie mysql -u root, um zusätzliche Nutzer und Datenbanken zu erstellen.

Typ: Boolesch

Standard:false

Beispiel: true

services.mysql.package

Zu verwendendes MySQL-Paket.

Typ:Paket

Standard:pkgs.mysql

Beispiel: pkgs.mysql80

services.postgres.enable

Gibt an, ob der PostgreSQL-Server aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.postgres.enableTcp

Gibt an, ob Postgres auf TCP-Verbindungen warten soll.

Typ: Boolesch

Standard:true

Beispiel: true

services.postgres.package

Das zu verwendende PostgreSQL-Paket.

Typ:Paket

Standard:pkgs.postgresql

Beispiel: pkgs.postgresql_15

services.postgres.extensions

Zu installierende Postgres-Erweiterungen.

Typ: Liste mit einem der folgenden Werte: „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“

Standard:[ ]

Beispiel: [ "pgvector" "postgis" ];

services.pubsub.enable

Gibt an, ob der Google Pub/Sub-Emulator aktiviert werden soll.

Weitere Informationen zur Verwendung des Emulators finden Sie unter https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Typ: Boolesch

Standard:false

Beispiel: true

services.pubsub.port

Konfiguriert den Port, an dem Pub/Sub auf eingehende Nachrichten wartet.

Typ:Vorzeichenlose 16-Bit-Ganzzahl; zwischen 0 und 65.535 (beide einschließlich)

Standard:8085

services.pubsub.project-id

Die Projekt-ID, die zum Ausführen des Pub/Sub-Emulators verwendet werden soll. Dieses Projekt dient nur zu Testzwecken. Es muss nicht vorhanden sein und wird nur lokal verwendet.

Typ:String, der dem Muster [a-z][a-z0-9-]{5,29} entspricht

Standard:"idx-pubsub-emulator"

services.redis.enable

Gibt an, ob der Redis-Server aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.redis.port

Konfiguriert den Port, den Redis überwacht.

Standardmäßig ist TCP deaktiviert und Redis überwacht nur /tmp/redis/redis.sock.

Typ:Vorzeichenlose 16-Bit-Ganzzahl; zwischen 0 und 65.535 (beide einschließlich)

Standard:0

services.spanner.enable

Gibt an, ob der Google Cloud Spanner-Emulator aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.spanner.fault-injection

Gibt an, ob zufällige Fehlereinschleusung in Transaktionen aktiviert werden soll.

Typ: Boolesch

Standard:false

Beispiel: true

services.spanner.grpc-port

Der TCP-Port, an den der Emulator gebunden werden soll.

Typ:Vorzeichenlose 16-Bit-Ganzzahl; zwischen 0 und 65.535 (beide einschließlich)

Standard:9010

services.spanner.rest-port

Der Port, über den REST-Anfragen bereitgestellt werden

Typ:Vorzeichenlose 16-Bit-Ganzzahl; zwischen 0 und 65.535 (beide einschließlich)

Standard:9020