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

Темы

Выберите встроенную тему или определите свою собственную.

С помощью opencode вы можете выбрать одну из нескольких встроенных тем, использовать тему, которая адаптируется к теме вашего терминала, или определить свою собственную тему.

По умолчанию opencode использует нашу собственную тему opencode.


Требования к терминалу

Чтобы темы корректно отображались в полной цветовой палитре, ваш терминал должен поддерживать truecolor (24-битный цвет). Большинство современных терминалов поддерживают это по умолчанию, но вам может потребоваться включить его:

  • Проверьте поддержку: запустите echo $COLORTERM — должен появиться truecolor или 24bit.
  • Включить truecolor: установите переменную среды COLORTERM=truecolor в профиле shell.
  • Совместимость терминала: убедитесь, что ваш эмулятор терминала поддерживает 24-битный цвет (большинство современных терминалов, таких как iTerm2, Alacritty, Kitty, Windows Terminal и последние версии GNOME Terminal, поддерживают).

Без поддержки truecolor темы могут отображаться с пониженной точностью цветопередачи или вернуться к ближайшему приближению к 256 цветам.


Встроенные темы

opencode поставляется с несколькими встроенными темами.

ИмяОписание
systemAdapts to your terminal’s background color
tokyonightBased on the tokyonight theme
everforestBased on the Everforest theme
ayuBased on the Ayu dark theme
catppuccinBased on the Catppuccin theme
catppuccin-macchiatoBased on the Catppuccin theme
gruvboxBased on the Gruvbox theme
kanagawaBased on the Kanagawa theme
nordBased on the Nord theme
matrixHacker-style green on black theme
one-darkBased on the Atom One Dark theme

И более того, мы постоянно добавляем новые темы.


Системная тема

Тема system автоматически адаптируется к цветовой схеме вашего терминала. В отличие от традиционных тем, использующих фиксированные цвета, тема system:

  • Создает шкалу серого: создает пользовательскую шкалу серого на основе цвета фона вашего терминала, обеспечивая оптимальный контраст.
  • Использует цвета ANSI: использует стандартные цвета ANSI (0–15) для подсветки синтаксиса и элементов пользовательского интерфейса, которые соответствуют цветовой палитре вашего терминала.
  • Сохраняет настройки терминала по умолчанию: использует none для цветов текста и фона, чтобы сохранить естественный вид вашего терминала.

Системная тема предназначена для пользователей, которые:

  • Хотите, чтобы opencode соответствовал внешнему виду их терминала
  • Используйте пользовательские цветовые схемы терминала
  • Предпочитайте единообразный вид для всех терминальных приложений.

Использование темы

Вы можете выбрать тему, вызвав выбор темы с помощью команды /theme. Или вы можете указать это в файле config.

opencode.json
{
"$schema": "https://opencode.ai/config.json",
"theme": "tokyonight"
}

Пользовательские темы

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


Иерархия

Темы загружаются из нескольких каталогов в следующем порядке: более поздние каталоги переопределяют предыдущие:

  1. Встроенные темы – они встроены в двоичный файл.
  2. Каталог конфигурации пользователя – определяется в ~/.config/opencode/themes/*.json или $XDG_CONFIG_HOME/opencode/themes/*.json.
  3. Корневой каталог проекта – определено в <project-root>/.opencode/themes/*.json.
  4. Текущий рабочий каталог – определено в ./.opencode/themes/*.json.

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


Создание темы

Чтобы создать собственную тему, создайте файл JSON в одном из каталогов темы.

Для общепользовательских тем:

Окно терминала
mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json

И для тем, специфичных для проекта.

Окно терминала
mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json

Формат JSON

В темах используется гибкий формат JSON с поддержкой:

  • Шестнадцатеричные цвета: "#ffffff"
  • Цвета ANSI: 3 (0–255).
  • Ссылки на цвета: "primary" или пользовательские определения.
  • Темный/светлый варианты: {"dark": "#000", "light": "#fff"}
  • Нет цвета: "none" — используется цвет терминала по умолчанию или прозрачный.

Определения цвета

Раздел defs является необязательным и позволяет вам определять повторно используемые цвета, на которые можно ссылаться в теме.


Настройки терминала по умолчанию

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

  • "text": "none" — использует цвет переднего плана терминала по умолчанию.
  • "background": "none" — использует цвет фона терминала по умолчанию.

Пример

Вот пример пользовательской темы:

my-theme.json
{
"$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"
}
}
}