Sesuaikan ruang kerja IDX Anda

Tujuan Project IDX adalah untuk memberikan manfaat sebanyak mungkin kepada pengembang. Salah satu cara IDX melakukannya adalah memberi developer kebebasan dan fleksibilitas untuk menginstal alat yang tepat untuk project tertentu di ruang kerja mereka dan menyesuaikan setelan agar ruang kerja mereka berfungsi untuk mereka.

Nix + IDX

IDX menggunakan Nix untuk menentukan konfigurasi lingkungan untuk setiap ruang kerja. Nix adalah pengelola paket yang sepenuhnya berfungsi dan menetapkan ID unik ke setiap dependensi, yang pada akhirnya berarti lingkungan Anda dapat berisi beberapa versi dependensi yang sama secara lancar. Model ini juga dapat direproduksi dan deklaratif. Dalam konteks IDX, ini berarti Anda dapat membagikan file konfigurasi Nix ke seluruh ruang kerja untuk memuat konfigurasi lingkungan yang sama.

IDX menentukan lingkungan pratinjau dan konfigurasi paket ruang kerja secara langsung dari repositori kode dengan file .idx/dev.nix. Library paket dan atribut yang dapat Anda tentukan dalam file ini mengikuti sintaksis kumpulan atribut Nix.

Contoh berikut menunjukkan konfigurasi lingkungan dasar yang mengaktifkan pratinjau:

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

Atribut dan library paket Nix

paket

Paket yang akan diinstal di lingkungan.

Anda dapat menggunakan argumen pkgs untuk memilih paket yang akan diinstal, misalnya pkgs.python3. Perhatikan bahwa konten pkgs bergantung pada opsi saluran channel yang dipilih.

Contoh:

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

Anda dapat menelusuri paket yang tersedia di sini: stable-23.11 atau unstable.

Jenis: daftar paket

Default: [ ]

saluran

saluran nixpkgs.

Saluran ini menentukan konten argumen pkgs.

Jenis: salah satu dari "stable-23.05", "stable-23.11", "unstable"

Default: "stable-23.11"

env

Variabel lingkungan yang ditetapkan di dalam lingkungan developer.

Keduanya akan disebarkan ke semua shell Anda dan server pratinjau. Variabel lingkungan dapat sangat berguna jika aplikasi Anda memerlukan kumpulan variabel tertentu.

Contoh:

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

Jenis: kumpulan atribut apa pun

Default: { }

idx.extensions

Ekstensi kode yang ingin Anda instal di ruang kerja IDX Anda.

Ini adalah daftar ID ekstensi yang sepenuhnya memenuhi syarat, misalnya ${publisherId}.${extensionId}.

Anda dapat menemukan daftar ekstensi yang tersedia di Open VSX Registry dan memasukkannya ke dalam file dev.nix paling lambat ${publisherId}.${extensionId}.

Jenis: daftar (string atau jalur yang tidak kosong)

Default: [ ]

idx.previews.enable

Tetapkan string ini ke true untuk mengaktifkan Pratinjau IDX.

Fitur ini menyediakan cara untuk menjalankan dan memuat ulang aplikasi Anda secara otomatis saat Anda mengembangkannya.

Jenis: boolean

Default: true

Contoh: true

idx.previews.previews

Pratinjau konfigurasi.

Tentukan perintah yang dijalankan IDX di lingkungan developer Anda.

Contoh:

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

Jenis: kumpulan atribut (submodul)

Default: { }

idx.previews.previews.<name>.command

Perintah yang akan dijalankan

Jenis: daftar string

Default: [ ]

idx.previews.previews.<name>.cwd

Direktori yang berfungsi

Jenis: string

Default: ""

idx.previews.previews.<name>.env

Variabel lingkungan yang akan ditetapkan.

Jenis: kumpulan atribut string

Default: { }

idx.previews.previews.<name>.manager

Manajer

Jenis: salah satu dari "web", "flutter"

idx.workspace.onCreate

Perintah yang akan dijalankan saat ruang kerja dibuat dan dibuka untuk pertama kalinya.

Hal ini dapat berguna untuk menyiapkan lingkungan pengembangan. Misalnya, di sini kita menentukan npm install untuk dijalankan:

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

Jenis: kumpulan atribut (jalur atau string)

Default: { }

idx.workspace.onStart

Perintah yang akan dijalankan setiap kali ruang kerja dibuka.

Hal ini dapat berguna untuk mulai membangun watcher. Misalnya, di sini kita menentukan 2 perintah untuk dijalankan:

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

Jenis: kumpulan atribut (jalur atau string)

Default: { }

services.docker.enable

Apakah akan mengaktifkan Docker Rootless.

Jenis: boolean

Default: false

Contoh: true

services.mysql.enable

Apakah akan mengaktifkan server MySQL.

Server diinisialisasi dengan root pengguna tanpa sandi. Jadi, untuk membuat pengguna tambahan dan membuat database, gunakan mysql -u root. .

Jenis: boolean

Default: false

Contoh: true

services.mysql.package

paket MySQL yang akan digunakan.

Jenis: paket

Default: pkgs.mysql

Contoh: pkgs.mysql80

services.postgres.enable

Apakah akan mengaktifkan server PostgreSQL.

Jenis: boolean

Default: false

Contoh: true

services.postgres.package

paket PostgreSQL yang akan digunakan.

Jenis: paket

Default: pkgs.postgresql

Contoh: pkgs.postgresql_15

services.postgres.extensions

Ekstensi Postgres yang akan diinstal.

type: daftar (salah satu dari "pg_pkg_zip", "apache_datasketches", "cstore_fdw", "hypopg","jsonb_deep_sum", "periods", "pg_auto_failover", "pg_bigm", "pg_cron", "pg_ed25519", "pg_embedding", "pg_hint_planll",

Default: [ ]

Contoh: [ "pgvector" "postgis" ];

services.pubsub.enable

Apakah akan mengaktifkan emulator Google Pub/Sub.

Dokumentasi selengkapnya tentang penggunaan emulator dapat ditemukan di sini: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Jenis: boolean

Default: false

Contoh: true

services.pubsub.port

Mengonfigurasi port yang akan diproses Pub/Sub.

Jenis: Bilangan bulat tanpa tanda tangan 16 bit; antara 0 dan 65535 (keduanya inklusif)

Default: 8085

services.pubsub.project-id

Project ID yang akan digunakan untuk menjalankan emulator Pub/Sub. Project ini hanya untuk pengujian, tidak harus ada, dan hanya digunakan secara lokal.

Jenis: string yang cocok dengan pola [a-z][a-z0-9-]{5,29}

Default: "idx-pubsub-emulator"

services.redis.enable

Apakah akan mengaktifkan server Redis.

Jenis: boolean

Default: false

Contoh: true

services.redis.port

Mengonfigurasi port yang akan diproses Redis.

Secara {i>default<i}, {i>tcp<i} dinonaktifkan dan redis hanya mendengarkan di /tmp/redis/redis.sock.

Jenis: Bilangan bulat tanpa tanda tangan 16 bit; antara 0 dan 65535 (keduanya inklusif)

Default: 0

services.spanner.enable

Apakah akan mengaktifkan Emulator Google Cloud Spanner.

Jenis: boolean

Default: false

Contoh: true

services.spanner.fault-injection

Apakah akan mengaktifkan injeksi kesalahan acak ke dalam transasi.

Jenis: boolean

Default: false

Contoh: true

services.spanner.grpc-port

Port TCP tempat emulator harus diikat.

Jenis: Bilangan bulat tanpa tanda tangan 16 bit; antara 0 dan 65535 (keduanya inklusif)

Default: 9010

services.spanner.rest-port

Port tempat permintaan REST dilayani

Jenis: Bilangan bulat tanpa tanda tangan 16 bit; antara 0 dan 65535 (keduanya inklusif)

Default: 9020