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

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

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

пакеты

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

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

Пример:

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

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

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

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

канал

Канал 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.extensions

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

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

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

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

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

idx.previews.enable

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

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

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

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

Пример: true

idx.previews.previews

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

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

Пример:

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

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

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

idx.previews.previews.<name>.activity

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

Тип: строка

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

idx.previews.previews.<name>.command

Команда для выполнения

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

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

idx.previews.previews.<name>.cwd

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

Тип: строка

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

idx.previews.previews.<name>.env

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

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

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

idx.previews.previews.<name>.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

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

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

{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
    

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

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

услуги

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

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

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

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

services.docker.enable

Включить ли Docker без прав root.

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

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

Пример: true

services.mongodb.enable

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

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

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

Пример: true

services.mongodb.package

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

Тип: пакет

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

services.mongodb.port

Настраивает порт, на котором 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.package

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

Тип: пакет

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

Пример: pkgs.mysql80

services.postgres.enable

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

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

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

Пример: true

services.postgres.enableTcp

Включить ли PostgreSQL прослушивание TCP-соединения.

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

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

Пример: true

services.postgres.package

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

Тип: пакет

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

Пример: pkgs.postgresql_15

services.postgres.extensions

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

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

сервисы.pubsub.port

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

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

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

services.pubsub.project-id

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

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

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

services.redis.enable

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

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

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

Пример: true

services.redis.port

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

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

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

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

services.spanner.enable

Включить ли эмулятор Google Cloud Spanner.

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

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

Пример: true

services.spanner.fault-injection

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

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

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

Пример: true

services.spanner.grpc-port

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

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

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

services.spanner.rest-port

Порт, через который обрабатываются REST-запросы.

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

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