Dostosowywanie obszaru roboczego IDX

Projekt IDX ma być jak najbardziej użyteczny dla programistów. Jednym ze sposobów realizacji tego zadania przez IDX jest zapewnienie im swobody i elastyczności w zakresie instalowania w obszarach roboczych odpowiednich narzędzi do poszczególnych projektów oraz dostosowywania ustawień do własnych potrzeb.

Nix + IDX

IDX używa Nix do definiowania konfiguracji środowiska dla każdego obszaru roboczego. Nix to w pełni funkcjonalny menedżer pakietów, który przypisuje unikalne identyfikatory do każdej zależności. Dzięki temu Twoje środowisko może bezproblemowo zawierać wiele wersji tej samej zależności. Są też powtarzalne i deklaratywne. W kontekście IDX oznacza to, że możesz udostępnić plik konfiguracji Nix innym obszarom roboczym, aby wczytać tę samą konfigurację środowiska.

IDX definiuje konfigurację środowiska podglądu i pakietów Workspace bezpośrednio z repozytorium kodu za pomocą pliku .idx/dev.nix. Atrybuty i biblioteki pakietów, które możesz zdefiniować w tym pliku, są zgodne ze składnią zestawu atrybutów Nix.

Ten przykład przedstawia podstawową konfigurację środowiska umożliwiającą włączenie podglądu:

{ pkgs, ... }: {

  # Which nixpkgs channel to use.
  channel = "stable-23.11"; # or "unstable"

  # Use https://search.nixos.org/packages to find packages
  packages = [
    pkgs.nodejs_18
  ];

  # Sets environment variables in the workspace
  env = {
    SOME_ENV_VAR = "hello";
  };

  # Search for the extensions you want on https://open-vsx.org/ and use "publisher.id"
  idx.extensions = [
    "angular.ng-template"
  ];

  # Enable previews and customize configuration
  idx.previews = {
    enable = true;
    previews = {
      web = {
        command = [
          "npm"
          "run"
          "start"
          "--"
          "--port"
          "$PORT"
          "--host"
          "0.0.0.0"
          "--disable-host-check"
        ];
        manager = "web";
      };
    };
  };
}

Atrybuty Nix i biblioteki pakietów

przesyłki

Pakiety do zainstalowania w środowisku.

Aby wybrać pakiety do zainstalowania, możesz użyć argumentu pkgs, 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 pakietu

Wartość domyślna: [ ]

kanał

kanału nixpkgs.

Ten kanał definiuje zawartość argumentu pkgs.

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

Wartość domyślna: "stable-23.11"

env

Zmienne środowiskowe ustawiane w środowisku programistycznym.

Są one przekazywane do wszystkich powłok i na serwerze podglądu. Zmienne środowiskowe mogą być szczególnie przydatne, gdy aplikacja wymaga określonego zestawu zmiennych.

Przykład:

{pkgs, ...}: {
  env = {
    HELLO = "world";
  };
}

Typ:dowolny zestaw atrybutów

Wartość domyślna: { }

idx.extensions

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

To lista pełnych i jednoznacznych identyfikatorów rozszerzeń, np. ${publisherId}.${extensionId}.

Listę dostępnych rozszerzeń znajdziesz w Open VSX Registry. Wpisz je w pliku dev.nix do ${publisherId}.${extensionId}.

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

Wartość domyślna: [ ]

idx.previews.enable

Aby włączyć podgląd IDX, ustaw wartość true.

Ta funkcja umożliwia automatyczne uruchamianie i ponowne uruchamianie aplikacji w trakcie ich tworzenia.

Typ: wartość logiczna

Wartość domyślna: true

Przykład: true

idx.previews.previews

Wyświetl podgląd konfiguracji.

Zdefiniuj polecenia wykonywane przez IDX 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 (moduł podrzędny)

Wartość domyślna: { }

idx.previews.previews.<name>.command

Polecenie do wykonania

Typ: lista ciągów tekstowych.

Wartość domyślna: [ ]

idx.previews.previews.<name>.cwd

Katalog roboczy

Typ: ciąg znaków

Wartość domyślna: ""

idx.previews.previews.<name>.env

Zmienne środowiskowe do ustawienia.

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

Wartość domyślna: { }

idx.previews.previews.<name>.manager

Menedżer

Typ: jeden z „internet”, „flutter”

idx.workspace.onCreate

Polecenia do wykonania przy tworzeniu i otwarciu obszaru roboczego po raz pierwszy.

Może się to przydać do skonfigurowania środowiska programistycznego. Na przykład tutaj określamy, który element npm install ma być uruchamiany:

{pkgs, ...}: {
  idx.workspace.
    npm-install = "npm install";
  };
}

Typ: zestaw atrybutów (ścieżka lub ciąg znaków).

Wartość domyślna: { }

idx.workspace.onStart

Polecenia do wykonywania po każdym otwarciu obszaru roboczego.

Może to być przydatne, aby rozpocząć zwiększanie liczby obserwujących. Na przykład określamy 2 polecenia do uruchomienia:

{pkgs, ...}: {
  idx.workspace.
    npm-watch-fe = "npm run watch:frontend";
    npm-watch-be = "npm run watch:backend";
  };
}

Typ: zestaw atrybutów (ścieżka lub ciąg znaków).

Wartość domyślna: { }

services.docker.enable

Określa, czy włączyć dockera bez roota.

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.mysql.enable

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

Serwer jest inicjowany od poziomu głównego użytkownika bez hasła. Aby więc utworzyć dodatkowych użytkowników i bazy danych, użyj mysql -u root. .

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.mysql.package

Pakiet MySQL, którego chcesz użyć.

Typ: pakiet

Wartość domyślna: pkgs.mysql

Przykład: pkgs.mysql80

services.postgres.enable

Określa, czy włączyć serwer PostgreSQL.

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.postgres.package

Pakiet PostgreSQL do użycia.

Typ: pakiet

Wartość domyślna: pkgs.postgresql

Przykład: pkgs.postgresql_15

services.postgres.extensions

Rozszerzenia Postgres do zainstalowania.

,"gphes,"list of","gpheglips","gphet pl","góry_pl&","góry3","góry_pl","góry37m", "apache_datasketches", "cstore_fdw", "hypopg", "periods_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pgtd_scale25519"

Wartość domyślna: [ ]

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

services.pubsub.enable

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

Więcej dokumentacji na temat używania emulatora znajdziesz tutaj: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.pubsub.port

Konfiguruje port, na którym będzie nasłuchiwać Pub/Sub.

Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)

Wartość domyślna: 8085

usługi.pubsub.identyfikator-projektu

Identyfikator projektu, którego chcesz używać do uruchamiania emulatora Pub/Sub. Ten projekt służy wyłącznie 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}

Wartość domyślna: "idx-pubsub-emulator"

services.redis.enable

Określa, czy włączyć serwer Redis.

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.redis.port

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

Domyślnie tcp jest wyłączony, a Redis nasłuchuje tylko w /tmp/redis/redis.sock.

Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)

Wartość domyślna: 0

services.spanner.enable

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

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.spanner.fault-injection

Określa, czy włączyć losowe wstrzykiwanie błędów do transakcji.

Typ: wartość logiczna

Wartość domyślna: false

Przykład: true

services.spanner.grpc-port

Port TCP, z którym powinien być powiązany emulator.

Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)

Wartość domyślna: 9010

services.spanner.rest-port

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

Typ: 16-bitowa nieoznaczona liczba całkowita; od 0 do 65 535 (włącznie)

Wartość domyślna: 9020