Руководство по работе с файлами dev.nix

На этой странице приведены сведения о схеме файла конфигурации среды вашего рабочего пространства, который всегда должен располагаться по адресу .idx/dev.nix .

Чтобы узнать больше о языке Nix, ознакомьтесь с официальным руководством по языку Nix .

пакеты

Пакеты для установки в среде.

Вы можете использовать аргумент pkgs для выбора пакетов для установки, например pkgs.python3 . Обратите внимание, что содержимое pkgs зависит от выбранного channel channel option.

Пример:

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

Вы можете найти доступные пакеты здесь: stable-23.11 или stable .

Тип: список пакетов

По умолчанию: [ ]

канал

Канал nixpkgs для использования.

Этот канал определяет содержимое аргумента pkgs .

Тип: один из "stable-23.05", "stable-23.11", "stable-24.05", "stable-24.11", "unstable"

По умолчанию: "stable-23.11"

окружающая среда

Переменные среды, которые задаются внутри среды разработчика.

Они распространяются на все ваши оболочки и сервер предварительного просмотра. Переменные среды могут быть особенно полезны, если ваше приложение требует определенного набора переменных.

Значение каждой переменной может быть либо строкой, либо списком строк. Последний объединяется, перемежаясь символами двоеточия.

PATH должен быть списком, так как он всегда расширяется и никогда не заменяется полностью.

Пример:

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

Тип: набор атрибутов ((список строк) или что-либо еще)

По умолчанию: { }

idx.расширения

Расширения кода, которые вы хотите установить в своем рабочем пространстве IDX.

Это список полностью квалифицированных идентификаторов расширений, например ${publisherId}.${extensionId} .

Список доступных расширений можно найти в реестре Open VSX и ввести их в файл dev.nix с помощью ${publisherId}.${extensionId} .

Тип: список (непустая строка или путь)

По умолчанию: [ ]

idx.previews.enable

Установите значение true , чтобы включить предварительный просмотр IDX.

Эта функция позволяет автоматически запускать и перезагружать приложения по мере их разработки.

Тип: логический

По умолчанию: true

Пример: true

idx.превью.превью

Предварительный просмотр конфигураций.

Определите команды, которые IDX выполняет в вашей среде разработки.

Пример:

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

Тип: набор атрибутов (подмодуль)

По умолчанию: { }

idx.previews.previews.<имя>.активность

Активность запуска Android

Тип: строка

По умолчанию: ""

idx.previews.previews.<имя>.команда

Команда к исполнению

Тип: список строк

По умолчанию: [ ]

idx.previews.previews.<имя>.cwd

Рабочий каталог

Тип: строка

По умолчанию: ""

idx.previews.previews.<имя>.env

Переменные среды для установки.

Тип: набор атрибутов строки

По умолчанию: { }

idx.previews.previews.<имя>.manager

Менеджер

Тип: один из "web", "flutter", "android", "gradle"

idx.workspace.onCreate

Команды, выполняемые при создании и первом открытии рабочего пространства.

Это может быть полезно для настройки среды разработки. Например, здесь мы указываем npm install для запуска:

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

Тип: набор атрибутов (путь или строка или ({ openFiles = [ string ];}))

По умолчанию: { }

idx.workspace.onStart

Команды, выполняемые при каждом открытии рабочего пространства.

Это может быть полезно для запуска наблюдателей за сборкой. Например, здесь мы указываем 2 команды для запуска:

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

Тип: набор атрибутов (путь или строка или ({ openFiles = [ string ];}))

По умолчанию: { }

импорт

Вы можете расширить свой файл dev.nix с помощью импортированного файла.

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

Существует несколько причин, по которым вам может потребоваться импортировать пользовательский файл .nix в dev.nix :

  1. Ваш файл dev.nix большой, и вы хотите разбить его на модули, чтобы улучшить удобство обслуживания.

    { pkgs, ... }: {
      channel = "stable-24.11";
      # ...
      imports = [
        ./env-cfg.nix
        ./preview-config.nix
      ];
    }
    
  2. Вы хотите настроить параметры, специфичные для вашей локальной среды, и добавить файл в список .gitignore .

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

Тип: список путей

По умолчанию: [ ]

услуги

Общие службы, включаемые при открытии рабочего пространства.

Например, чтобы включить Postgres и использовать расширение pgvector , добавьте в dev.nix следующее:

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

В следующих разделах перечислены все поддерживаемые службы и их настраиваемые параметры.

services.docker.enable

Следует ли включать Rootless Docker.

Тип: логический

По умолчанию: false

Пример: true

services.mongodb.enable

Включать ли сервер MongoDB.

Тип: логический

По умолчанию: false

Пример: true

services.mongodb.пакет

Пакет MongoDB для использования.

Тип: пакет

По умолчанию: <derivation mongodb-6.0.11>

services.mongodb.порт

Настраивает порт, который будет прослушивать Mongod.

По умолчанию протокол TCP отключен, и Mongod прослушивает только /tmp/mongodb/mongodb.sock.

Для подключения используйте строку подключения mongodb://%2Ftmp%2Fmongodb%2Fmongodb.sock .

Тип: 16-битное целое число без знака; от 0 до 65535 (включительно)

По умолчанию: 0

services.mysql.enable

Включать ли сервер MySQL.

Сервер инициализируется с пользователем root без пароля. Поэтому для создания дополнительных пользователей и создания баз данных используйте mysql -u root .

Тип: логический

По умолчанию: false

Пример: true

services.mysql.пакет

Пакет MySQL для использования.

Тип: пакет

По умолчанию: pkgs.mysql

Пример: pkgs.mysql80

услуги.postgres.enable

Включать ли сервер PostgreSQL.

Тип: логический

По умолчанию: false

Пример: true

services.postgres.enableTcp

Следует ли разрешить Postgres прослушивать TCP.

Тип: логический

По умолчанию: true

Пример: true

услуги.postgres.пакет

Пакет PostgreSQL для использования.

Тип: пакет

По умолчанию: pkgs.postgresql

Пример: pkgs.postgresql_15

службы.postgres.расширения

Расширения Postgres для установки.

Тип: список (один из "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")

По умолчанию: [ ]

Пример: [ "pgvector" "postgis" ];

services.pubsub.enable

Включать ли эмулятор Google Pub/Sub.

Дополнительную документацию по использованию эмулятора можно найти здесь: https://cloud.google.com/pubsub/docs/emulator#using_the_emulator .

Тип: логический

По умолчанию: false

Пример: true

services.pubsub.port

Настраивает порт, который будет прослушивать Pub/Sub.

Тип: 16-битное целое число без знака; от 0 до 65535 (включительно)

По умолчанию: 8085

services.pubsub.project-id

ID проекта для запуска эмулятора Pub/Sub. Этот проект предназначен только для тестирования, он не обязательно должен существовать и используется только локально.

Тип: строка, соответствующая шаблону [az][a-z0-9-]{5,29}

По умолчанию: "idx-pubsub-emulator"

услуги.redis.enable

Включать ли сервер Redis.

Тип: логический

По умолчанию: false

Пример: true

услуги.redis.port

Настраивает порт, который будет прослушивать Redis.

По умолчанию протокол TCP отключен, а Redis прослушивает только /tmp/redis/redis.sock.

Тип: 16-битное целое число без знака; от 0 до 65535 (включительно)

По умолчанию: 0

услуги.гаечный.включить

Следует ли включать эмулятор Google Cloud Spanner.

Тип: логический

По умолчанию: false

Пример: true

services.spanner.fault-injection

Следует ли включать случайное внедрение ошибок в транзакции.

Тип: логический

По умолчанию: false

Пример: true

services.spanner.grpc-порт

TCP-порт, к которому следует привязать эмулятор.

Тип: 16-битное целое число без знака; от 0 до 65535 (включительно)

По умолчанию: 9010

services.spanner.rest-port

Порт, на котором обслуживаются REST-запросы

Тип: 16-битное целое число без знака; от 0 до 65535 (включительно)

По умолчанию: 9020