Tài liệu tham khảo dev.nix

Trang này bao gồm thông tin chi tiết về giản đồ cho tệp cấu hình môi trường không gian làm việc của bạn. Tệp này phải luôn nằm ở .idx/dev.nix.

Để tìm hiểu về ngôn ngữ Nix, hãy xem hướng dẫn chính thức về ngôn ngữ Nix.

gói

Các gói cần cài đặt trong môi trường.

Bạn có thể dùng đối số pkgs để chọn các gói cần cài đặt, ví dụ: pkgs.python3. Xin lưu ý rằng nội dung của pkgs phụ thuộc vào lựa chọn kênh channel mà bạn chọn.

Ví dụ:

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

Bạn có thể tìm kiếm các gói có sẵn tại đây: stable-23.11 hoặc unstable.

Loại: danh sách gói

Mặc định: [ ]

kênh

Kênh nixpkgs cần sử dụng.

Kênh này xác định nội dung của đối số pkgs.

Loại: một trong các loại "stable-23.05", "stable-23.11", "stable-24.05", "stable-24.11", "unstable"

Mặc định: "stable-23.11"

env

Các biến môi trường được thiết lập trong môi trường phát triển.

Các thay đổi này sẽ được truyền đến tất cả các shell và máy chủ xem trước của bạn. Các biến môi trường có thể đặc biệt hữu ích nếu ứng dụng của bạn yêu cầu một tập hợp biến cụ thể.

Giá trị của mỗi biến có thể là một chuỗi hoặc một danh sách các chuỗi. Phần sau được nối với nhau, xen kẽ với các ký tự dấu hai chấm.

PATH phải là một danh sách, vì danh sách này luôn được mở rộng và không bao giờ được thay thế hoàn toàn.

Ví dụ:

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

Loại: tập hợp thuộc tính của ((danh sách chuỗi) hoặc bất kỳ nội dung nào)

Mặc định: { }

idx.extensions

Các tiện ích mã mà bạn muốn cài đặt trong không gian làm việc IDX.

Đây là danh sách mã nhận dạng tiện ích đủ điều kiện, ví dụ: ${publisherId}.${extensionId}.

Bạn có thể tìm thấy danh sách các tiện ích có sẵn trên Open VSX Registry và nhập các tiện ích đó vào tệp dev.nix bằng ${publisherId}.${extensionId}.

Loại: danh sách (chuỗi hoặc đường dẫn không trống)

Mặc định: [ ]

idx.previews.enable

Đặt giá trị này thành true để bật tính năng Xem trước IDX.

Tính năng này giúp bạn chạy và tải lại ứng dụng một cách tự động trong quá trình phát triển.

Loại: boolean

Mặc định: true

Ví dụ: true

idx.previews.previews

Xem trước cấu hình.

Xác định các lệnh mà IDX thực thi trong môi trường phát triển của bạn.

Ví dụ:

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

Loại: tập hợp thuộc tính của (mô-đun con)

Mặc định: { }

idx.previews.previews.<name>.activity

Hoạt động khởi chạy Android

Loại: chuỗi

Mặc định: ""

idx.previews.previews.<name>.command

Lệnh cần thực thi

Loại: danh sách chuỗi

Mặc định: [ ]

idx.previews.previews.<name>.cwd

Thư mục đang hoạt động

Loại: chuỗi

Mặc định: ""

idx.previews.previews.<name>.env

Các biến môi trường cần thiết lập.

Loại: tập hợp thuộc tính của chuỗi

Mặc định: { }

idx.previews.previews.<name>.manager

Người quản lý

Loại: một trong các loại "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Các lệnh sẽ thực thi khi không gian làm việc được tạo và mở lần đầu tiên.

Điều này có thể hữu ích khi thiết lập môi trường phát triển. Ví dụ: ở đây, chúng ta chỉ định npm install để chạy:

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

Loại: tập hợp thuộc tính của (đường dẫn hoặc chuỗi hoặc ({ openFiles = [ string ];}))

Mặc định: { }

idx.workspace.onStart

Các lệnh sẽ thực thi bất cứ khi nào không gian làm việc được mở.

Điều này có thể hữu ích khi bắt đầu trình theo dõi bản dựng. Ví dụ: ở đây, chúng ta chỉ định 2 lệnh để chạy:

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

Loại: tập hợp thuộc tính của (đường dẫn hoặc chuỗi hoặc ({ openFiles = [ string ];}))

Mặc định: { }

nhập khẩu

Bạn có thể mở rộng tệp dev.nix bằng một tệp đã nhập.

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

Có nhiều lý do khiến bạn muốn nhập tệp .nix tuỳ chỉnh trong dev.nix:

  1. Tệp dev.nix của bạn có kích thước lớn và bạn muốn chia thành các mô-đun để cải thiện khả năng duy trì.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Bạn muốn định cấu hình các lựa chọn dành riêng cho môi trường cục bộ và thêm tệp vào danh sách .gitignore.

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

Loại: danh sách đường dẫn

Mặc định: [ ]

dịch vụ

Các dịch vụ phổ biến cần bật khi không gian làm việc mở cửa.

Ví dụ: để bật Postgres và sử dụng tiện ích pgvector, hãy thêm nội dung sau vào dev.nix:

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

Các phần sau đây liệt kê tất cả các dịch vụ được hỗ trợ và các lựa chọn có thể định cấu hình của dịch vụ.

services.docker.enable

Có bật Docker không cần đặc quyền root hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.mongodb.enable

Có bật máy chủ MongoDB hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.mongodb.package

Gói MongoDB để sử dụng.

Loại: gói

Mặc định: <derivation mongodb-6.0.11>

services.mongodb.port

Định cấu hình cổng mà Mongod sẽ theo dõi.

Theo mặc định, tcp bị vô hiệu hoá và Mongod chỉ nghe trên /tmp/mongodb/mongodb.sock.

Để kết nối, hãy sử dụng chuỗi kết nối mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock.

Loại: Số nguyên 16 bit không dấu; từ 0 đến 65535 (cả hai đều được tính)

Mặc định: 0

services.mysql.enable

Chọn có bật máy chủ MySQL hay không.

Máy chủ được khởi tạo bằng một người dùng gốc không có mật khẩu. Vì vậy, để tạo thêm người dùng và tạo cơ sở dữ liệu, hãy sử dụng mysql -u root.

Loại: boolean

Mặc định: false

Ví dụ: true

services.mysql.package

Gói MySQL để sử dụng.

Loại: gói

Mặc định: pkgs.mysql

Ví dụ: pkgs.mysql80

services.postgres.enable

Có bật máy chủ PostgreSQL hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.postgres.enableTcp

Có bật Postgres để nghe trên TCP hay không.

Loại: boolean

Mặc định: true

Ví dụ: true

services.postgres.package

Gói PostgreSQL để sử dụng.

Loại: gói

Mặc định: pkgs.postgresql

Ví dụ: pkgs.postgresql_15

services.postgres.extensions

Các tiện ích Postgres cần cài đặt.

Loại: danh sách (một trong các loại "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")

Mặc định: [ ]

Ví dụ: [ "pgvector" "postgis" ];

services.pubsub.enable

Có bật trình mô phỏng Google Pub/Sub hay không.

Bạn có thể xem thêm tài liệu về cách sử dụng trình mô phỏng tại đây: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Loại: boolean

Mặc định: false

Ví dụ: true

services.pubsub.port

Định cấu hình cổng mà Pub/Sub sẽ lắng nghe.

Loại: Số nguyên 16 bit không dấu; từ 0 đến 65535 (cả hai đều được tính)

Mặc định: 8085

services.pubsub.project-id

Mã dự án dùng để chạy trình mô phỏng Pub/Sub. Dự án này chỉ dành cho mục đích kiểm thử, không cần phải tồn tại và chỉ được dùng cục bộ.

Loại: chuỗi khớp với mẫu [a-z][a-z0-9-]{5,29}

Mặc định: "idx-pubsub-emulator"

services.redis.enable

Có bật máy chủ Redis hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.redis.port

Định cấu hình cổng mà Redis sẽ theo dõi.

Theo mặc định, tcp bị vô hiệu hoá và redis chỉ nghe trên /tmp/redis/redis.sock.

Loại: Số nguyên 16 bit không dấu; từ 0 đến 65535 (cả hai đều được tính)

Mặc định: 0

services.spanner.enable

Có bật Trình mô phỏng Google Cloud Spanner hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.spanner.fault-injection

Có cho phép chèn lỗi ngẫu nhiên vào các giao dịch hay không.

Loại: boolean

Mặc định: false

Ví dụ: true

services.spanner.grpc-port

Cổng TCP mà trình mô phỏng sẽ được liên kết.

Loại: Số nguyên 16 bit không dấu; từ 0 đến 65535 (cả hai đều được tính)

Mặc định: 9010

services.spanner.rest-port

Cổng mà các yêu cầu REST được phân phát

Loại: Số nguyên 16 bit không dấu; từ 0 đến 65535 (cả hai đều được tính)

Mặc định: 9020