Dokumentacja dev.nix

Na tej stronie znajdziesz szczegółowe informacje o schemacie pliku konfiguracyjnego środowiska obszaru roboczego, który zawsze powinien znajdować się w lokalizacji .idx/dev.nix.

Więcej informacji o języku Nix znajdziesz w oficjalnym samouczku dotyczącym tego języka.

paczki,

Pakiety do zainstalowania w środowisku.

Za pomocą argumentu pkgs możesz wybrać pakiety do zainstalowania, np.pkgs.python3. Pamiętaj, że zawartość elementu pkgs zależy od wybranej opcji kanału channel.

Przykład:

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

Dostępne pakiety możesz wyszukać tutaj: stable-23.11 lub unstable.

Typ: lista pakietów

Domyślnie: [ ]

kanał

kanał nixpkgs, którego chcesz użyć.

Ten kanał określa zawartość argumentu pkgs.

Typ: jedna z wartości „stable-23.05”, „stable-23.11”, „stable-24.05”, „stable-24.11”, „unstable”.

Domyślnie: "stable-23.11"

env

Zmienne środowiskowe ustawione w środowisku deweloperskim.

Są one propagowane do wszystkich Twoich powłok i serwera podglądu. Zmienne środowiskowe mogą być szczególnie przydatne, jeśli aplikacja wymaga określonego zestawu zmiennych.

Wartością każdej zmiennej może być ciąg znaków lub lista ciągów znaków. Ten drugi jest łączony z dwukropkami.

PATH musi być listą, ponieważ jest zawsze rozszerzana, a nigdy całkowicie zastępowana.

Przykład:

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

Typ: zbiór atrybutów ((lista ciągów znaków) lub dowolny)

Domyślnie: { }

idx.extensions

rozszerzenia kodu, które chcesz zainstalować w obszarze roboczym IDX.

Jest to lista w pełni kwalifikowanych identyfikatorów rozszerzeń, np.${publisherId}.${extensionId}.

Listę dostępnych rozszerzeń znajdziesz w rejestrze Open VSX. Możesz je wpisać w pliku dev.nix, używając ${publisherId}.${extensionId}.

Typ: lista (niepusty ciąg znaków lub ścieżka)

Domyślnie: [ ]

idx.previews.enable

Ustaw tę opcję na true, aby włączyć podglądy IDX.

Ta funkcja umożliwia automatyczne uruchamianie i ponowne wczytywanie aplikacji podczas ich tworzenia.

Typ: wartość logiczna

Domyślnie: true

Przykład: true

idx.previews.previews

Wyświetl podgląd konfiguracji.

Określ polecenia, które IDX wykonuje w środowisku programistycznym.

Przykład:

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

Typ: zestaw atrybutów (podmoduł)

Domyślnie: { }

idx.previews.previews.<name>.activity

Aktywność uruchamiania Androida

Typ: ciąg znaków

Domyślnie: ""

idx.previews.previews.<name>.command

Polecenie do wykonania

Typ: lista ciągów znaków

Domyślnie: [ ]

idx.previews.previews.<name>.cwd

Katalog roboczy

Typ: ciąg znaków

Domyślnie: ""

idx.previews.previews.<name>.env

Zmienne środowiskowe do ustawienia.

Typ: zestaw atrybutów ciągu znaków

Domyślnie: { }

idx.previews.previews.<name>.manager

Menedżer

Typ: jeden z tych ciągów znaków: „web”, „flutter”, „android”, „gradle”

idx.workspace.onCreate

Polecenia do wykonania, gdy obszar roboczy zostanie utworzony i otwarty po raz pierwszy.

Może to być przydatne podczas konfigurowania środowiska programistycznego. Na przykład tutaj określamy npm install, aby uruchomić:

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

Typ: zbiór atrybutów (ścieżka lub ciąg znaków lub ({ openFiles = [ string ];}))

Domyślnie: { }

idx.workspace.onStart

Polecenia do wykonania po otwarciu obszaru roboczego.

Może to być przydatne do uruchamiania obserwatorów kompilacji. Na przykład tutaj określamy 2 polecenia do uruchomienia:

{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: zbiór atrybutów (ścieżka lub ciąg znaków lub ({ openFiles = [ string ];}))

Domyślnie: { }

import

Możesz rozszerzyć plik dev.nix o zaimportowany plik.

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

Istnieje wiele powodów, dla których możesz chcieć zaimportować niestandardowy plik .nixdev.nix:

  1. Plik dev.nix jest duży i chcesz go podzielić na moduły, aby ułatwić jego utrzymanie.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Chcesz skonfigurować opcje specyficzne dla środowiska lokalnego i dodać plik do listy .gitignore.

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

Typ: lista ścieżek

Domyślnie: [ ]

usługi

Typowe usługi, które należy włączyć po otwarciu przestrzeni roboczej.

Aby na przykład włączyć Postgres i używać rozszerzenia pgvector, dodaj do pliku dev.nix te wiersze:

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

W kolejnych sekcjach znajdziesz listę wszystkich obsługiwanych usług i ich konfigurowalnych opcji.

services.docker.enable

Czy włączyć Dockera bez uprawnień roota.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.mongodb.enable

Określa, czy serwer MongoDB ma być włączony.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.mongodb.package

Pakiet MongoDB do użycia.

Typ: pakiet

Domyślnie: <derivation mongodb-6.0.11>

services.mongodb.port

Konfiguruje port, na którym będzie nasłuchiwać usługa Mongod.

Domyślnie protokół TCP jest wyłączony, a usługa Mongod nasłuchuje tylko w gnieździe /tmp/mongodb/mongodb.sock.

Aby się połączyć, użyj ciągu połączenia mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Typ: 16-bitowa liczba całkowita bez znaku z zakresu od 0 do 65 535 (włącznie)

Domyślnie: 0

services.mysql.enable

Określa, czy serwer MySQL ma być włączony.

Serwer jest inicjowany z użytkownikiem root bez hasła. Aby utworzyć dodatkowych użytkowników i bazy danych, użyj polecenia mysql -u root.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.mysql.package

Pakiet MySQL do użycia.

Typ: pakiet

Domyślnie: pkgs.mysql

Przykład: pkgs.mysql80

services.postgres.enable

Czy włączyć serwer PostgreSQL.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.postgres.enableTcp

Czy włączyć nasłuchiwanie TCP przez Postgres.

Typ: wartość logiczna

Domyślnie: true

Przykład: true

services.postgres.package

Pakiet PostgreSQL do użycia.

Typ: pakiet

Domyślnie: pkgs.postgresql

Przykład: pkgs.postgresql_15

services.postgres.extensions

Rozszerzenia Postgres do zainstalowania.

Typ: lista (jedna z wartości: „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”)

Domyślnie: [ ]

Przykład: [ "pgvector" "postgis" ];

services.pubsub.enable

Określa, czy włączyć emulator Google Pub/Sub.

Więcej informacji o korzystaniu z emulatora znajdziesz tutaj: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.pubsub.port

Konfiguruje port, na którym nasłuchuje Pub/Sub.

Typ: 16-bitowa liczba całkowita bez znaku z zakresu od 0 do 65 535 (włącznie)

Domyślnie: 8085

services.pubsub.project-id

Identyfikator projektu, który ma być używany do uruchamiania emulatora Pub/Sub. Ten projekt służy tylko do testowania. Nie musi istnieć i jest używany tylko lokalnie.

Typ: ciąg znaków pasujący do wzorca [a-z][a-z0-9-]{5,29}

Domyślnie: "idx-pubsub-emulator"

services.redis.enable

Czy włączyć serwer Redis.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.redis.port

Konfiguruje port, na którym będzie nasłuchiwać Redis.

Domyślnie protokół TCP jest wyłączony, a serwer Redis nasłuchuje tylko w pliku /tmp/redis/redis.sock.

Typ: 16-bitowa liczba całkowita bez znaku z zakresu od 0 do 65 535 (włącznie)

Domyślnie: 0

services.spanner.enable

Określa, czy włączyć emulator Google Cloud Spanner.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.spanner.fault-injection

Czy włączyć losowe wstrzykiwanie błędów do transakcji.

Typ: wartość logiczna

Domyślnie: false

Przykład: true

services.spanner.grpc-port

Port TCP, do którego powinien być powiązany emulator.

Typ: 16-bitowa liczba całkowita bez znaku z zakresu od 0 do 65 535 (włącznie)

Domyślnie: 9010

services.spanner.rest-port

Port, na którym obsługiwane są żądania REST

Typ: 16-bitowa liczba całkowita bez znaku z zakresu od 0 do 65 535 (włącznie)

Domyślnie: 9020