Referensi dev.nix

Halaman ini menyertakan detail tentang skema untuk file konfigurasi lingkungan ruang kerja Anda, yang harus selalu berada di .idx/dev.nix.

Untuk mempelajari bahasa Nix, lihat tutorial bahasa resmi Nix.

packages

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: [ ]

channel

Saluran nixpkgs yang akan digunakan.

Saluran ini menentukan konten argumen pkgs.

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

Default: "stable-23.11"

env

Variabel lingkungan yang ditetapkan di dalam lingkungan developer.

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

Nilai setiap variabel dapat berupa string atau daftar string. Daftar string digabungkan, diselingi dengan karakter titik dua.

PATH harus berupa daftar, karena selalu diperluas dan tidak pernah diganti sepenuhnya.

Contoh:

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

Jenis: kumpulan atribut ((daftar string) atau apa pun)

Default: { }

idx.extensions

Ekstensi kode yang ingin Anda instal di ruang kerja IDX.

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 dalam file dev.nix dengan ${publisherId}.${extensionId}.

Jenis: daftar (jalur atau string yang tidak kosong)

Default: [ ]

idx.previews.enable

Tetapkan ke true untuk mengaktifkan Pratinjau IDX.

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

Jenis: boolean

Default: true

Contoh: true

idx.previews.previews

Konfigurasi pratinjau.

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>.activity

Aktivitas Peluncuran Android

Jenis: string

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

Pengelola

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

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 yang akan dijalankan:

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

Jenis: kumpulan atribut (jalur atau string atau ({ openFiles = [ string ];}))

Default: { }

idx.workspace.onStart

Perintah yang akan dijalankan setiap kali ruang kerja dibuka.

Hal ini dapat berguna untuk memulai build watcher. Misalnya, di sini kita menentukan 2 perintah yang akan dijalankan:

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

Jenis: kumpulan atribut (jalur atau string atau ({ openFiles = [ string ];}))

Default: { }

imports

Anda dapat memperluas file dev.nix dengan file yang diimpor.

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

Ada beberapa alasan Anda mungkin ingin mengimpor file .nix kustom di dev.nix:

  1. File dev.nix Anda berukuran besar dan Anda ingin memodularisasinya untuk meningkatkan kemudahan pemeliharaan.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Anda ingin mengonfigurasi opsi khusus untuk lingkungan lokal dan menambahkan file ke daftar .gitignore Anda.

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

Jenis: daftar jalur

Default: [ ]

services

Layanan umum yang akan diaktifkan saat ruang kerja dibuka.

Misalnya, untuk mengaktifkan Postgres dan menggunakan ekstensi pgvector, tambahkan kode berikut ke dev.nix:

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

Bagian berikut mencantumkan semua layanan yang didukung dan opsi yang dapat dikonfigurasi.

services.docker.enable

Apakah akan mengaktifkan Docker tanpa root atau tidak.

Jenis: boolean

Default: false

Contoh: true

services.mongodb.enable

Apakah akan mengaktifkan server MongoDB atau tidak.

Jenis: boolean

Default: false

Contoh: true

services.mongodb.package

Paket MongoDB yang akan digunakan.

Jenis: paket

Default: <derivation mongodb-6.0.11>

services.mongodb.port

Mengonfigurasi port yang akan diproses Mongod.

Secara default, tcp dinonaktifkan dan Mongod hanya memproses /tmp/mongodb/mongodb.sock.

Untuk terhubung, gunakan string koneksi mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

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

Default: 0

services.mysql.enable

Apakah akan mengaktifkan server MySQL atau tidak.

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 atau tidak.

Jenis: boolean

Default: false

Contoh: true

services.postgres.enableTcp

Apakah akan mengaktifkan Postgres untuk memproses TCP atau tidak.

Jenis: boolean

Default: true

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.

Jenis: daftar (salah satu dari "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")

Default: [ ]

Contoh: [ "pgvector" "postgis" ];

services.pubsub.enable

Apakah akan mengaktifkan emulator Google Pub/Sub atau tidak.

Dokumentasi selengkapnya tentang cara menggunakan 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 (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 atau tidak.

Jenis: boolean

Default: false

Contoh: true

services.redis.port

Mengonfigurasi port yang akan diproses Redis.

Secara default, tcp dinonaktifkan dan redis hanya memproses di /tmp/redis/redis.sock.

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

Default: 0

services.spanner.enable

Apakah akan mengaktifkan Emulator Google Cloud Spanner atau tidak.

Jenis: boolean

Default: false

Contoh: true

services.spanner.fault-injection

Apakah akan mengaktifkan injeksi kesalahan acak ke dalam transaksi.

Jenis: boolean

Default: false

Contoh: true

services.spanner.grpc-port

Port TCP yang harus diikat oleh emulator.

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

Default: 9010

services.spanner.rest-port

Port tempat permintaan REST disajikan

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

Default: 9020