Брендирование проекта
Сделайте так, чтобы dwe выглядел как ваш проект. Настройте ASCII-шапку, которая встречает разработчиков при первом запуске, подберите палитру под фирменный стиль вашей команды и оформите дашборд dwe info так, чтобы каждый URL, hostname и доступ, нужные новичку, были на расстоянии одной команды.
Всю эту настройку покрывают два файла: workspace/styles.yml отвечает за визуальный стиль (шапка + цвета + сепаратор), а workspace/info.yml — за содержимое дашборда. Оба необязательны — DWE поставляет разумные значения по умолчанию — и оба загружаются независимо от слоёного проектного конфига.
Разделы
Заголовок раздела «Разделы»- Выбор шапки
- Цветовая палитра
- Символ сепаратора
- Наполнение info-дашборда
- Типы элементов, к которым вы будете обращаться
- Условная видимость
- Замечание про иконки и emoji
Выбор шапки
Заголовок раздела «Выбор шапки»workspace/styles.yml управляет фирменной шапкой, которую рендерят dwe (без аргументов) и dwe info. Строка с фирменным знаком ({▪} DWE · <project> · <version>) рендерится всегда; всё остальное накладывается поверх неё.
header: lines: - "Welcome to" - "DWE Laravel" font: doom tagline: "Local dev, container-orchestrated."header.linesрендерится как ASCII-арт через FIGlet. Две короткие строки обычно смотрятся лучше одной длинной — на узких ширинах баннерные шрифты переносятся криво.header.fontпринимает стандартные имена FIGlet-шрифтов:doom,banner,big,block,slantи похожие. По умолчанию —standard.header.tagline— одна приглушённая строка под фирменной строкой. Опустите её, если хотите более компактную шапку.
ASCII-блок всегда красится токеном accent — отдельного header.color нет. Поменяете accent — перекрасится и шапка.
Полную схему см. в styles.yml reference — header.
Цветовая палитра
Заголовок раздела «Цветовая палитра»DWE использует семь семантических цветовых токенов. Любая часть интерфейса — таблицы, секции статуса, браузер команд, вывод --help — красится из этой палитры.
| Токен | Что красит |
|---|---|
accent | Фирменную строку, ASCII-шапку, заголовки секций, рамки в фокусе, заголовки таблиц, активную пагинацию |
success | Состояния OK / running / enabled, успешные уведомления |
warning | Диагностику-предупреждения, состояния partial / degraded |
danger | Диагностику-ошибки, уведомления о неудачах |
muted | Счётчики, сепараторы, приглушённые строки, символы дерева, описания в справке |
border | Рамки панелей и таблиц по умолчанию (вне фокуса) |
text | Основной текст — оставьте пустым, чтобы цвет переднего плана выбрал сам терминал |
Переопределяйте любое подмножество. Токены, которые вы опустите (или оставите пустыми), возьмут встроенные значения по умолчанию, разные для светлого и тёмного фона:
colors: accent: "#A78BFA" # пурпурный бренд success: "#10B981" # зелёный с уклоном в teal muted: "#94A3B8"Пара вещей, которые стоит знать сразу:
- Только hex-строки. Голые ANSI 256-коды или названия цветов не принимаются.
- Одно переопределение применяется в обоих режимах. Отдельных под-веток
light:/dark:нет — выбирайте hex, который читается на обоих фонах, или полагайтесь на встроенные значения для светлой и тёмной темы. - Фон терминала определяется один раз при старте. Поменять
workspace/styles.ymlи перезапуститьdwe— это и есть поддерживаемый способ сменить тему; запущенный процесс не перечитывает её на лету.
Для монохромного вида задайте accent и success в одном тоновом ряду, а контраст пусть дают muted / border.
Полный справочник токенов и встроенных значений по умолчанию см. в styles.yml reference — colors и Light / dark resolution.
Символ сепаратора
Заголовок раздела «Символ сепаратора»Ключ separator: контролирует символ между лейблом и значением в строках определений (Project — laravel):
separator: "·"Распространённые альтернативы: "—" (длинное тире, по умолчанию), "·" (точка по центру), ":" (двоеточие — лаконично, но воспринимается как разрыв между заголовком и значением). Выбрали один раз — и забыли.
Наполнение info-дашборда
Заголовок раздела «Наполнение info-дашборда»workspace/info.yml объявляет, что показывает dwe info: секции, элементы, условные строки, шаблонные выражения. Загружается отдельно от трёхслойного конфига и не мерджится между слоями — на проект приходится ровно один info.yml.
Минимальная форма:
sections: - id: <section-id> title: "Optional Section Title" items: - type: <item-type> # ... поля элемента
footer: trueСекции рендерятся в порядке объявления. Необязательный footer: true добавляет под последней секцией закрывающую строку в стиле заголовка таблицы.
Если workspace/info.yml отсутствует, DWE рендерит встроенный вариант по умолчанию с секцией URLs (генерируется автоматически из хостов и портов сервисов) и секцией Hosts (строки /etc/hosts, которые разработчику нужно добавить). Многим проектам этого достаточно, чтобы обходиться без правки info.yml.
Полную схему см. в info.yml reference.
Типы элементов, к которым вы будете обращаться
Заголовок раздела «Типы элементов, к которым вы будете обращаться»Семь типов покрывают всё, что рендерит дашборд:
| Тип | Рендерится как | Обязательные поля |
|---|---|---|
definition | строка Label — Value с необязательной иконкой | name, value |
info | текстовая строка в цвете info | text |
warning | текстовая строка в цвете warning | text |
auto-urls | URL-ы сервисов, генерируемые автоматически из service.yml | — |
auto-hosts | hostname-ы, генерируемые автоматически из service.yml | — |
subgroup | контейнер с необязательным заголовком и вложенными элементами | items |
separator | пустая строка-разделитель | — |
Два типа auto-* — сердце живого, поддерживаемого info.yml: вместо того чтобы хардкодить каждый URL и host, нацельте их на ваши определения сервисов и дайте DWE пройтись по ним. Новый сервис → новая строка, автоматически.
Рабочий пример, объединяющий распространённые типы:
sections: - id: project items: - type: subgroup title: DWE hide_on_empty: false items: - type: definition name: Project value: "{{ .Project.FullName }}" - type: definition name: State value: "{{ .State }}" when: "{{ .State }}"
- id: urls title: URLs items: - type: auto-urls include: [app, tool] hide: [varnish] port_via: nginx
- id: hosts title: Hosts items: - type: warning text: "Add these to your /etc/hosts:" - type: auto-hosts include: [app, tool, infra]
footer: trueСправочник полей по каждому элементу см. в info.yml — item types.
Условная видимость
Заголовок раздела «Условная видимость»Каждый элемент принимает when: — выражение Go-шаблона. Элементы с ложным результатом отбрасываются из вывода; секции и subgroup-ы могут автоматически скрываться, когда пусты, через hide_on_empty:.
- type: definition name: SPX value: "{{ .Runtime.SPX.Path }}" when: "{{ .Runtime.SPX.Path }}" # только когда SPX сконфигурирован
- type: definition name: Adminer value: '{{ appURL ((index .Services "adminer").Host "web") ((index .Services "main").Port "http") .Runtime.UseHTTPS }}' when: '{{ (index .Services "adminer").Enabled }}' # только когда сервис включёнТри распространённых грабли:
- Всегда заключайте шаблонные выражения в кавычки. Иначе YAML распарсит
{{ ... }}как flow-маппинг. - Доступ к полю сервиса идёт через синтаксис Go
text/template—(index .Services "main").Host "web", со скобками вокругindex. .Project,.Services,.Runtimeи.Stateдоступны на верхнем уровне. Собственные ключи лежат под.Raw(доступ черезindex .Raw "vars" "greeting"); для свободных значений предпочитайте блокvars:.
Полный набор доступных в шаблоне данных и сигнатуру хелпера appURL см. в info.yml — template expressions.
Замечание про иконки и emoji
Заголовок раздела «Замечание про иконки и emoji»Элементы definition поддерживают поле icon:, которое добавляет глиф перед значением. Используйте его умеренно — щепотка иконок делает дашборд читаемее, а сплошная стена иконок превращается в шум.
Единственное техническое правило: предпочитайте кодпоинты с Emoji_Presentation=Yes (например, 📦, 🐳, 💾). Кодпоинты с текстовым представлением по умолчанию вроде 🛢 (U+1F6E2), 🗄 (U+1F5C4) и ⚙ (U+2699) при рендеринге отбрасываются, чтобы колонки таблиц оставались выровненными, — измерения ширины в терминале расходятся между разными сочетаниями шрифта и терминала. dwe validate отметит такой кодпоинт, когда вы его добавите.
Полное пояснение с разбором по символам — в icon field — emoji caveat.
См. также
Заголовок раздела «См. также»- styles.yml reference — полная схема, цветовые токены, выбор светлой/тёмной темы
- info.yml reference — полная схема, типы элементов, шаблонные выражения
- services/fields reference — icon field — безопасность emoji
- shared-ide-and-agent-config — общие template-паки тем же способом, что и брендинг