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ść tagu pkgs
zależy od wybranej opcji kanału w 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
Domyślnie:
[ ]
kanał
kanału nixpkgs.
Ten kanał definiuje zawartość argumentu pkgs
.
Typ: „stable-23.05”, „stable-23.11”, „unstable”.
Domyślnie:
"stable-23.11"
env
Zmienne środowiskowe ustawiane w środowisku programistycznym.
Są one przekazywane do wszystkich powłok i na serwerze podglądu. Zmienne środowiskowe są szczególnie przydatne, gdy aplikacja wymaga określonego zestawu zmiennych.
Przykład:
{pkgs, ...}: {
env = {
HELLO = "world";
};
}
Typ: dowolny zestaw atrybutów
Domyślnie:
{ }
idx.extensions
Rozszerzenia kodu, które chcesz zainstalować w obszarze roboczym IDX.
To jest lista w pełni kwalifikowanych 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)
Domyślnie:
[ ]
idx.previews.enable
Aby włączyć podgląd IDX, ustaw wartość true
.
Ta funkcja umożliwia automatyczne uruchamianie i ponowne uruchamianie aplikacji podczas ich tworzenia.
Typ: wartość logiczna
Domyślnie:
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)
Domyślnie:
{ }
idx.previews.previews.*.command
Polecenie do wykonania
Typ: lista ciągu tekstowego
Domyślnie:
[ ]
idx.previews.previews.*.cwd
Katalog roboczy
Typ: ciąg
Domyślnie:
""
idx.previews.previews.*.env
Zmienne środowiskowe do ustawienia.
Typ: zestaw atrybutów ciągu znaków
Domyślnie:
{ }
idx.previews.previews.*.manager
Menedżer
Typ: jeden z web
, 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 określamy, który element npm install
ma być uruchamiany:
{pkgs, ...}: {
idx.workspace.onCreate = {
npm-install = "npm install";
};
}
Typ: zestaw atrybutów (ścieżka lub ciąg znaków)
Domyślnie:
{ }
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.onStart = {
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)
Domyślnie:
{ }
services.docker.enable
Określa, czy włączyć dockera bez roota.
Typ: wartość logiczna
Domyślnie:
false
Przykład:
true