Перейти к содержимому

Пользовательский конфиг

Пользовательские настройки DWE лежат вне любого проекта — в плоском файле формата key = value. Они читаются при каждом запуске dwe независимо от текущей директории и никогда не коммитятся в git.

Этот файл хранит то, что по своей природе персонально: предпочитаемый язык, тему mermaid-диаграмм для TUI dwe docs, условия для desktop-уведомлений и переопределения абсолютных путей к внешним бинарникам (docker, git, dwe, shell, mmdc). Ничему из перечисленного не место в проектных workspace.yml, defaults.yml или local.yml — те описывают форму проекта, а не локальное состояние машины разработчика.

Два файла читаются в таком порядке приоритета (от низкого к высокому), потом env-переменные поверх:

  1. Глобальный пользовательский конфиг в ~/.config/dwe/config на каждой ОС (Linux, macOS, Windows). Один путь везде — никаких platform-native локаций, никакого XDG-фолбэка. Отсутствие файла трактуется как пустой. Если DWE когда-либо пишет этот файл, права — 0600.

  2. Переопределение для конкретного проекта в <project>/.dwe/config. Директория .dwe/ уже gitignored DWE’ом; этот файл нужен, чтобы разработчик мог зафиксировать переопределения для одного проекта, не трогая глобальный файл. Отсутствие файла трактуется как пустой.

  3. Переменные окружения перекрывают оба файла.

Ошибка парсинга в любом из файлов выводится как warning (уведомления для этого запуска отключаются, локаль и тема падают на дефолты). Сама операция никогда не блокируется кривым пользовательским конфигом.

Плоские строки key = value:

  • Полнострочные комментарии с # — inline # это parse error (символ # после пробела/таба внутри значения отвергается; голый # без предшествующего пробела допустим — например, для якорей в URL).
  • Пустые строки игнорируются.
  • Ключи — строчные буквы, цифры и подчёркивания. Ключи с точкой отвергаются — пишите notify_telegram_token, а не notify.telegram.token.
  • Булевы значения: 1 / true / yes — правда; 0 / false / no — ложь.
  • Списки: через запятую, пробелы вокруг элементов обрезаются.
  • Неизвестные ключи дают warning, а не ошибку.

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

КлючДефолтГде используется
binary_dockerdockerкаждый вызов Docker / Compose
binary_gitgitgit-зависимые операции (рендер git-хуков, status-пробы)
binary_dwedweсамоупоминания, выводимые DWE’ом (tip-строки, сгенерированные wrapper-скрипты)
binary_shellshshell, используемый для вычисления when: и встроенных скриптов
binary_mmdcmmdcрендер mermaid-диаграмм в TUI dwe docs

Паттерн binary_<name> = <абсолютный путь> также подхватывается runtime-линтерами — любой бинарник, который ищет env/runtime-чек (shellcheck, yamllint и т.д.), переопределяется этим же способом.

Примечание: предикаты when: в шагах deploy и в условиях намеренно используют жёстко зафиксированный sh ради переносимости и игнорируют binary_shell. Переопределение применяется ко всем остальным shell-вызовам.

Пустые пути отвергаются на этапе парсинга. Отсутствующие файлы / неисполняемые пути выводятся как диагностики dwe validate (severity error) с подсказкой, указывающей на запись с переопределением.

binary_docker = /opt/homebrew/bin/docker
binary_git = /usr/local/bin/git
binary_mmdc = /Users/me/.npm-global/bin/mmdc
КлючТипДефолтНазначение
languagestringunset → $LANGenПредпочитаемая локаль для переведённых строк

Двухбуквенный код языка (en, ru, de, …). Управляет разрешением локали для user-команд, UI-строк и dwe docs. Полную лестницу разрешения и правила фолбэка по неймспейсам см. в Локализация (i18n).

КлючТипДефолтНазначение
mermaid_themeenumautoТема для рендеринга mermaid-диаграмм в TUI dwe docs

Допустимые значения: auto (следовать фону терминала), dark, light. Пустая строка также резолвится в auto. Любое другое значение — ошибка парсинга.

Ключи, относящиеся к уведомлениям (notify_enabled, notify_run_enabled, notify_deploy_enabled, notify_commands_enabled, notify_channels), находятся в этом же файле. Подробно — вместе с матрицей условий, детектом non-interactive и backend’ами уведомлений на каждой ОС — описаны в Уведомления.

Каждому типизированному ключу соответствует DWE_<UPPER_SNAKE>, перекрывающий значение из файлов:

Env-переменнаяПерекрывает
DWE_LANGUAGElanguage
DWE_MERMAID_THEMEmermaid_theme
DWE_NOTIFY_ENABLEDnotify_enabled
DWE_NOTIFY_RUN_ENABLEDnotify_run_enabled
DWE_NOTIFY_DEPLOY_ENABLEDnotify_deploy_enabled
DWE_NOTIFY_COMMANDS_ENABLEDnotify_commands_enabled
DWE_NOTIFY_CHANNELSnotify_channels

У переопределений бинарей env-аналога нет — задавайте их в файле конфига.

embedded defaults
→ глобальный ~/.config/dwe/config
→ per-project <project>/.dwe/config
→ переменные окружения

Поздние слои перекрывают предыдущие. Карты мержатся по ключам; ключи-списки (notify_channels) заменяются целиком.

# ~/.config/dwe/config — один путь на всех ОС
# Локаль и TUI
language = ru
mermaid_theme = dark
# Переопределения бинарей
binary_docker = /opt/homebrew/bin/docker
binary_mmdc = /Users/me/.npm-global/bin/mmdc
# Уведомления: громко на deploy, тихо на inner-loop run
notify_enabled = true
notify_deploy_enabled = true
notify_run_enabled = false
notify_commands_enabled = true
notify_channels = native

Per-project файл, фиксирующий только одну настройку иначе:

# <project>/.dwe/config
notify_run_enabled = false