OpenCode 主题:内置配色方案与自定义 JSON 主题

OpenCode 提供十余种内置主题(tokyonight、catppuccin、gruvbox 等),还支持 system 自适应主题和完全自定义 JSON 主题。通过 /theme 命令快速切换,或在 tui.json 中写死主题名。自定义主题支持 hex、ANSI 色值和深色/浅色双模式。

OpenCode 内置多套配色方案,也支持通过 JSON 文件创建完全自定义的主题。默认使用 opencode 主题,可以随时切换。


终端颜色支持要求

主题要正确显示完整配色,终端需要支持 truecolor(24 位色)

  • 检测:运行 echo $COLORTERM,输出应为 truecolor24bit
  • 开启:在 shell 配置文件中添加 export COLORTERM=truecolor
  • 兼容终端:iTerm2、Alacritty、Kitty、Windows Terminal、新版 GNOME Terminal 均已支持

不支持 truecolor 的终端会降级到 256 色近似显示,颜色可能略有偏差。


内置主题列表

名称 说明
system 自动适配终端背景色
tokyonight 基于 Tokyonight 配色
everforest 基于 Everforest 配色
ayu 基于 Ayu 深色主题
catppuccin 基于 Catppuccin 配色
catppuccin-macchiato Catppuccin Macchiato 变体
gruvbox 基于 Gruvbox 配色
kanagawa 基于 Kanagawa 配色
nord 基于 Nord 配色
matrix 黑底绿字极客风
one-dark 基于 Atom One Dark

团队持续在增加新主题。


system 自适应主题

system 主题会根据你的终端配色方案自动调整,适合日常使用多种终端配色的开发者:

  • 根据终端背景色生成灰阶色板,确保最优对比度
  • 使用标准 ANSI 色(0-15)进行语法高亮
  • 文字和背景色使用 none,保持终端原生外观

适合人群:

  • 希望 OpenCode 跟终端整体风格统一的用户
  • 使用自定义终端配色方案的用户
  • 追求跨应用界面一致性的用户

切换主题

/theme 命令调出主题选择器,或在 tui.json 中直接指定:

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

自定义主题

OpenCode 支持 JSON 格式的自定义主题,可以为 diff 视图、Markdown 渲染、语法高亮等各个细节自定义颜色。

主题加载优先级

后面的目录优先级更高,会覆盖前面的同名主题:

  1. 内置主题(写入二进制)
  2. 用户配置目录:~/.config/opencode/themes/*.json
  3. 项目根目录:<project-root>/.opencode/themes/*.json
  4. 当前工作目录:./.opencode/themes/*.json

创建主题文件

用户级主题(所有项目生效):

mkdir -p ~/.config/opencode/themes
vim ~/.config/opencode/themes/my-theme.json

项目级主题(仅当前项目生效):

mkdir -p .opencode/themes
vim .opencode/themes/my-theme.json

JSON 格式说明

主题文件支持以下颜色格式:

  • 十六进制"#ffffff"
  • ANSI 色号3(范围 0-255)
  • 颜色引用"primary"defs 中自定义的名称
  • 深色/浅色双模式{"dark": "#000", "light": "#fff"}
  • 透明/终端默认"none"(继承终端前景/背景色)

完整示例(Nord 风格)

{
  "$schema": "https://opencode.ai/theme.json",
  "defs": {
    "nord0": "#2E3440",
    "nord1": "#3B4252",
    "nord4": "#D8DEE9",
    "nord8": "#88C0D0",
    "nord9": "#81A1C1",
    "nord11": "#BF616A",
    "nord14": "#A3BE8C"
  },
  "theme": {
    "primary": { "dark": "nord8", "light": "nord9" },
    "text": { "dark": "nord4", "light": "nord0" },
    "background": { "dark": "nord0", "light": "#ECEFF4" },
    "error": { "dark": "nord11", "light": "nord11" },
    "success": { "dark": "nord14", "light": "nord14" }
  }
}

defs 部分是可选的,用于定义可复用的颜色别名,让主题文件更易维护。


常见问题

Q: 切换主题后没有立即生效怎么办?

A: 确认终端支持 truecolor,并检查 tui.json 中主题名拼写是否正确。可以先用 /theme 命令选择,确认效果后再写入配置文件。

Q: 自定义主题只能影响当前项目吗?

A: 取决于你把主题文件放在哪里。放在 ~/.config/opencode/themes/ 的主题全局生效;放在 .opencode/themes/ 的主题只对当前项目生效。

Q: 内置主题太多了,有没有快速预览的方式?

A: 在 TUI 中运行 /theme 会显示主题列表,选择后立即预览,不满意可以继续切换,不需要修改配置文件。