Темы
Выберите встроенную тему или определите свою собственную.
С помощью opencode вы можете выбрать одну из нескольких встроенных тем, использовать тему, которая адаптируется к теме вашего терминала, или определить свою собственную тему.
По умолчанию opencode использует нашу собственную тему opencode.
Требования к терминалу
Чтобы темы корректно отображались в полной цветовой палитре, ваш терминал должен поддерживать truecolor (24-битный цвет). Большинство современных терминалов поддерживают это по умолчанию, но вам может потребоваться включить его:
- Проверьте поддержку: запустите
echo $COLORTERM— должен появитьсяtruecolorили24bit. - Включить truecolor: установите переменную среды
COLORTERM=truecolorв профиле shell. - Совместимость терминала: убедитесь, что ваш эмулятор терминала поддерживает 24-битный цвет (большинство современных терминалов, таких как iTerm2, Alacritty, Kitty, Windows Terminal и последние версии GNOME Terminal, поддерживают).
Без поддержки truecolor темы могут отображаться с пониженной точностью цветопередачи или вернуться к ближайшему приближению к 256 цветам.
Встроенные темы
opencode поставляется с несколькими встроенными темами.
| Имя | Описание |
|---|---|
system | Adapts to your terminal’s background color |
tokyonight | Based on the tokyonight theme |
everforest | Based on the Everforest theme |
ayu | Based on the Ayu dark theme |
catppuccin | Based on the Catppuccin theme |
catppuccin-macchiato | Based on the Catppuccin theme |
gruvbox | Based on the Gruvbox theme |
kanagawa | Based on the Kanagawa theme |
nord | Based on the Nord theme |
matrix | Hacker-style green on black theme |
one-dark | Based on the Atom One Dark theme |
И более того, мы постоянно добавляем новые темы.
Системная тема
Тема system автоматически адаптируется к цветовой схеме вашего терминала. В отличие от традиционных тем, использующих фиксированные цвета, тема system:
- Создает шкалу серого: создает пользовательскую шкалу серого на основе цвета фона вашего терминала, обеспечивая оптимальный контраст.
- Использует цвета ANSI: использует стандартные цвета ANSI (0–15) для подсветки синтаксиса и элементов пользовательского интерфейса, которые соответствуют цветовой палитре вашего терминала.
- Сохраняет настройки терминала по умолчанию: использует
noneдля цветов текста и фона, чтобы сохранить естественный вид вашего терминала.
Системная тема предназначена для пользователей, которые:
- Хотите, чтобы opencode соответствовал внешнему виду их терминала
- Используйте пользовательские цветовые схемы терминала
- Предпочитайте единообразный вид для всех терминальных приложений.
Использование темы
Вы можете выбрать тему, вызвав выбор темы с помощью команды /theme. Или вы можете указать это в файле config.
{ "$schema": "https://opencode.ai/config.json", "theme": "tokyonight"}Пользовательские темы
opencode поддерживает гибкую систему тем на основе JSON, которая позволяет пользователям легко создавать и настраивать темы.
Иерархия
Темы загружаются из нескольких каталогов в следующем порядке: более поздние каталоги переопределяют предыдущие:
- Встроенные темы – они встроены в двоичный файл.
- Каталог конфигурации пользователя – определяется в
~/.config/opencode/themes/*.jsonили$XDG_CONFIG_HOME/opencode/themes/*.json. - Корневой каталог проекта – определено в
<project-root>/.opencode/themes/*.json. - Текущий рабочий каталог – определено в
./.opencode/themes/*.json.
Если несколько каталогов содержат тему с одинаковым именем, будет использоваться тема из каталога с более высоким приоритетом.
Создание темы
Чтобы создать собственную тему, создайте файл JSON в одном из каталогов темы.
Для общепользовательских тем:
mkdir -p ~/.config/opencode/themesvim ~/.config/opencode/themes/my-theme.jsonИ для тем, специфичных для проекта.
mkdir -p .opencode/themesvim .opencode/themes/my-theme.jsonФормат JSON
В темах используется гибкий формат JSON с поддержкой:
- Шестнадцатеричные цвета:
"#ffffff" - Цвета ANSI:
3(0–255). - Ссылки на цвета:
"primary"или пользовательские определения. - Темный/светлый варианты:
{"dark": "#000", "light": "#fff"} - Нет цвета:
"none"— используется цвет терминала по умолчанию или прозрачный.
Определения цвета
Раздел defs является необязательным и позволяет вам определять повторно используемые цвета, на которые можно ссылаться в теме.
Настройки терминала по умолчанию
Специальное значение "none" можно использовать для любого цвета, чтобы наследовать цвет терминала по умолчанию. Это особенно полезно для создания тем, которые органично сочетаются с цветовой схемой вашего терминала:
"text": "none"— использует цвет переднего плана терминала по умолчанию."background": "none"— использует цвет фона терминала по умолчанию.
Пример
Вот пример пользовательской темы:
{ "$schema": "https://opencode.ai/theme.json", "defs": { "nord0": "#2E3440", "nord1": "#3B4252", "nord2": "#434C5E", "nord3": "#4C566A", "nord4": "#D8DEE9", "nord5": "#E5E9F0", "nord6": "#ECEFF4", "nord7": "#8FBCBB", "nord8": "#88C0D0", "nord9": "#81A1C1", "nord10": "#5E81AC", "nord11": "#BF616A", "nord12": "#D08770", "nord13": "#EBCB8B", "nord14": "#A3BE8C", "nord15": "#B48EAD" }, "theme": { "primary": { "dark": "nord8", "light": "nord10" }, "secondary": { "dark": "nord9", "light": "nord9" }, "accent": { "dark": "nord7", "light": "nord7" }, "error": { "dark": "nord11", "light": "nord11" }, "warning": { "dark": "nord12", "light": "nord12" }, "success": { "dark": "nord14", "light": "nord14" }, "info": { "dark": "nord8", "light": "nord10" }, "text": { "dark": "nord4", "light": "nord0" }, "textMuted": { "dark": "nord3", "light": "nord1" }, "background": { "dark": "nord0", "light": "nord6" }, "backgroundPanel": { "dark": "nord1", "light": "nord5" }, "backgroundElement": { "dark": "nord1", "light": "nord4" }, "border": { "dark": "nord2", "light": "nord3" }, "borderActive": { "dark": "nord3", "light": "nord2" }, "borderSubtle": { "dark": "nord2", "light": "nord3" }, "diffAdded": { "dark": "nord14", "light": "nord14" }, "diffRemoved": { "dark": "nord11", "light": "nord11" }, "diffContext": { "dark": "nord3", "light": "nord3" }, "diffHunkHeader": { "dark": "nord3", "light": "nord3" }, "diffHighlightAdded": { "dark": "nord14", "light": "nord14" }, "diffHighlightRemoved": { "dark": "nord11", "light": "nord11" }, "diffAddedBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffRemovedBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffContextBg": { "dark": "nord1", "light": "nord5" }, "diffLineNumber": { "dark": "nord2", "light": "nord4" }, "diffAddedLineNumberBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "diffRemovedLineNumberBg": { "dark": "#3B4252", "light": "#E5E9F0" }, "markdownText": { "dark": "nord4", "light": "nord0" }, "markdownHeading": { "dark": "nord8", "light": "nord10" }, "markdownLink": { "dark": "nord9", "light": "nord9" }, "markdownLinkText": { "dark": "nord7", "light": "nord7" }, "markdownCode": { "dark": "nord14", "light": "nord14" }, "markdownBlockQuote": { "dark": "nord3", "light": "nord3" }, "markdownEmph": { "dark": "nord12", "light": "nord12" }, "markdownStrong": { "dark": "nord13", "light": "nord13" }, "markdownHorizontalRule": { "dark": "nord3", "light": "nord3" }, "markdownListItem": { "dark": "nord8", "light": "nord10" }, "markdownListEnumeration": { "dark": "nord7", "light": "nord7" }, "markdownImage": { "dark": "nord9", "light": "nord9" }, "markdownImageText": { "dark": "nord7", "light": "nord7" }, "markdownCodeBlock": { "dark": "nord4", "light": "nord0" }, "syntaxComment": { "dark": "nord3", "light": "nord3" }, "syntaxKeyword": { "dark": "nord9", "light": "nord9" }, "syntaxFunction": { "dark": "nord8", "light": "nord8" }, "syntaxVariable": { "dark": "nord7", "light": "nord7" }, "syntaxString": { "dark": "nord14", "light": "nord14" }, "syntaxNumber": { "dark": "nord15", "light": "nord15" }, "syntaxType": { "dark": "nord7", "light": "nord7" }, "syntaxOperator": { "dark": "nord9", "light": "nord9" }, "syntaxPunctuation": { "dark": "nord4", "light": "nord0" } }}