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

Темы

Темы относятся к терминальному интерфейсу: их выбор лежит в cli.json, а не в opencode.json.

В TUI: Ctrl+P → Open settings → Theme; быстрее — /themes. То же задаётся в глобальном cli.json:

~/.config/zubrcode/cli.json
{
"theme": {
"name": "tokyonight",
"mode": "system"
}
}
Значение Поведение
system следовать светлому или тёмному режиму терминала
dark всегда тёмная тема
light всегда светлая тема

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

Встроенных тем больше двух десятков — catppuccin, dracula, github, gruvbox, kanagawa, nord, rosepine, solarized, tokyonight, zenburn и другие; полный список — в /themes. Тема system появляется, когда ZubrCode умеет читать палитру вашего терминала, и берёт цвета из его переднего плана, фона и ANSI-палитры.

Файл темы кладётся в глобальный каталог тем или в проектный:

Область Каталог
Глобально ~/.config/zubrcode/themes/
Проект .opencode/themes/

Читаются только .json; имя файла без расширения становится именем темы (ocean.json → тема ocean). Тема, лежащая ближе к текущей папке, перекрывает глобальную или родительскую с тем же именем. После добавления файла перезапустите ZubrCode и выберите тему в /themes.

Тема описывает общее дерево токенов base и хотя бы одну палитру light или dark. Режимы наследуются только от base этого же файла. Фрагмент:

themes/ocean.json
{
"base": {
"text": {
"base": "#16324f",
"muted": "$hue.neutral.400"
},
"background": {
"base": "transparent"
}
},
"light": {
"hue": {}
},
"dark": {
"hue": {},
"text": { "base": "#d8f3ff" }
}
}

Цвет — hex (3, 4, 6 или 8 цифр), transparent или ссылка $…; ссылки на оттенки — в форме $hue.<имя>.<шаг>.

Переопределение псевдонима оттенка меняет целую семью цветов:

Вид Значения
Базовые gray, red, orange, yellow, green, cyan, blue, purple
Псевдонимы accent, interactive, neutral
Шаги 100…900

Шаги идут по контрасту режима: в светлой теме 100 — тёмный, 900 — светлый; в тёмной наоборот. categorical задаёт упорядоченные оттенки для агентов и других повторяющихся элементов.

Группы base: text (базовый, приглушённый, действия, формы, обратная связь), background, border, scrollbar, diff (добавленное, удалённое, контекст, подсветка, номера строк), syntax (подсветка кода) и markdown. Состояния кнопок и полей — $hovered, $focused, $pressed, $selected, $disabled.

Панели, диалоги и меню берут глубину из background.raised; у диалогов есть контекстная поверхность @dialog с теми же группами токенов.