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

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

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

пакеты

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

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

Пример:

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

env

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

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

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

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

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

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

Пример:

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

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

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

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

Активность запуска 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

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

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

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

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

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

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

Пример: true

services.postgres.package

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

Тип: пакет

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

Пример: pkgs.postgresql_15

services.postgres.extensions

Расширения 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

Идентификатор проекта, используемый для запуска эмулятора 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