--- title: Темы description: Выберите встроенную тему или определите свою собственную. --- С помощью OpenCode вы можете выбрать одну из нескольких встроенных тем, использовать тему, которая адаптируется к теме вашего терминала, или определить свою собственную тему. По умолчанию OpenCode использует нашу собственную тему `opencode`. --- ## Требования к терминалу Чтобы темы корректно отображались в полной цветовой палитре, ваш терминал должен поддерживать **truecolor** (24-битный цвет). Большинство современных терминалов поддерживают это по умолчанию, но вам может потребоваться включить его: - **Проверьте поддержку**: запустите `echo $COLORTERM` — должен появиться `truecolor` или `24bit`. - **Включить truecolor**: установите переменную среды `COLORTERM=truecolor` в профиле оболочки. - **Совместимость терминала**: убедитесь, что ваш эмулятор терминала поддерживает 24-битный цвет (большинство современных терминалов, таких как iTerm2, Alacritty, Kitty, Windows Terminal и последние версии терминала GNOME, поддерживают). Без поддержки truecolor темы могут отображаться с пониженной точностью цветопередачи или вернуться к ближайшему приближению к 256 цветам. --- ## Встроенные темы OpenCode поставляется с несколькими встроенными темами. | Имя | Описание | | ---------------------- | ---------------------------------------------------------------------------- | | ХХ0ГГ | Адаптируется к цвету фона вашего терминала | | ХХ0ГГ | На основе темы [Tokyonight](https://github.com/folke/tokyonight.nvim) | | ХХ0ГГ | На основе темы [Everforest](https://github.com/sainnhe/everforest) | | ХХ0ГГ | На основе темной темы Ayu](https://github.com/ayu-theme). | | ХХ0ГГ | На основе темы [Catppuccin](https://github.com/catppuccin) | | ХХ0ГГ | На основе темы [Catppuccin](https://github.com/catppuccin) | | ХХ0ГГ | На основе темы [Gruvbox](https://github.com/morhetz/gruvbox) | | ХХ0ГГ | На основе темы [Kanagawa](https://github.com/rebelot/kanagawa.nvim) | | ХХ0ГГ | На основе [темы Nord](https://github.com/nordtheme/nord) | | ХХ0ГГ | Зеленый цвет в хакерском стиле на черной теме | | ХХ0ГГ | На основе темной темы Atom One](https://github.com/Th3Whit3Wolf/one-nvim). | И более того, мы постоянно добавляем новые темы. --- ## Системная тема Тема `system` автоматически адаптируется к цветовой схеме вашего терминала. В отличие от традиционных тем, использующих фиксированные цвета, тема _system_: - **Создает шкалу серого**: создает пользовательскую шкалу серого на основе цвета фона вашего терминала, обеспечивая оптимальный контраст. - **Использует цвета ANSI**: использует стандартные цвета ANSI (0–15) для подсветки синтаксиса и элементов пользовательского интерфейса, которые соответствуют цветовой палитре вашего терминала. - **Сохраняет настройки терминала по умолчанию**: использует `none` для цветов текста и фона, чтобы сохранить естественный вид вашего терминала. Системная тема предназначена для пользователей, которые: - Хотите, чтобы OpenCode соответствовал внешнему виду их терминала - Используйте пользовательские цветовые схемы терминала - Предпочитайте единообразный вид для всех терминальных приложений. --- ## Использование темы Вы можете выбрать тему, вызвав выбор темы с помощью команды `/theme`. Или вы можете указать это в файле [config](/docs/config). ```json title="opencode.json" {3} { "$schema": "https://opencode.ai/config.json", "theme": "tokyonight" } ``` --- ## Пользовательские темы OpenCode поддерживает гибкую систему тем на основе JSON, которая позволяет пользователям легко создавать и настраивать темы. --- ### Иерархия Темы загружаются из нескольких каталогов в следующем порядке: более поздние каталоги переопределяют предыдущие: 1. **Встроенные темы** – они встроены в двоичный файл. 2. **Каталог конфигурации пользователя** – определяется в `~/.config/opencode/themes/*.json` или `$XDG_CONFIG_HOME/opencode/themes/*.json`. 3. **Корневой каталог проекта** – определено в `/.opencode/themes/*.json`. 4. **Текущий рабочий каталог** – определено в `./.opencode/themes/*.json`. Если несколько каталогов содержат тему с одинаковым именем, будет использоваться тема из каталога с более высоким приоритетом. --- ### Создание темы Чтобы создать собственную тему, создайте файл JSON в одном из каталогов темы. Для общепользовательских тем: ```bash no-frame mkdir -p ~/.config/opencode/themes vim ~/.config/opencode/themes/my-theme.json ``` И для тем, специфичных для проекта. ```bash no-frame 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"` — использует цвет фона терминала по умолчанию. --- ### Пример Вот пример пользовательской темы: ```json title="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" } } } ```