Przejdź do głównej zawartości

Themes

Wybierz wbudowany motyw lub zdefiniuj własny.

Dzięki opencode możesz wybrać jeden z kilku wbudowanych motywów, użyć motywu, który dostosowuje się do motywu terminala lub zdefiniować własny, niestandardowy motyw.

Domyślnie opencode używa naszego własnego motywu opencode.


Terminal requirements

Aby motywy wyświetlały się poprawnie z pełną paletą kolorów, Twój terminal musi obsługiwać truecolor (kolor 24-bitowy). Większość nowoczesnych terminali domyślnie obsługuje tę opcję, ale może być konieczne jej włączenie:

  • Sprawdź wsparcie: Uruchom echo $COLORTERM - powinno wypisać truecolor lub 24bit
  • Włącz truecolor: Ustaw zmienną środowiskową COLORTERM=truecolor w swoim profilu shell
  • Zgodność terminala: Upewnij się, że emulator terminala obsługuje 24-bitowy kolor (większość nowoczesnych terminali, takich jak iTerm2, Alacritty, Kitty, Windows Terminal i najnowsze wersje terminala GNOME tak)

Bez obsługi Truecolor motywy mogą pojawiać się ze zmniejszoną dokładnością kolorów lub wracać do najbliższego przybliżenia 256 kolorów.


Wbudowane motywy

opencode ma kilka wbudowanych motywów.

NameDescription
systemDopasowuje się do koloru tła terminala
tokyonightNa podstawie motywu tokyonight
everforestNa podstawie motywu Everforest
ayuNa podstawie ciemnego motywu Ayu
catppuccinNa podstawie motywu Catppuccin
catppuccin-macchiatoNa podstawie motywu Catppuccin
gruvboxNa podstawie motywu Gruvbox
kanagawaNa podstawie motywu Kanagawa
nordNa podstawie motywu Nord
matrixHacker-style green on black theme
one-darkNa podstawie ciemnego motywu Atom One

Co więcej, stale dodajemy nowe motywy.


System theme

Motyw system został zaprojektowany tak, aby automatycznie dostosowywał się do schematu kolorów terminala. W przeciwieństwie do tradycyjnych motywów, które używają stałych kolorów, motyw system:

  • Generuje skalę szarości: Tworzy niestandardową skalę szarości w oparciu o kolor tła terminala, zapewniając optymalny kontrast.
  • Używa kolorów ANSI: Wykorzystuje standardowe kolory ANSI (0-15) do podświetlania składni i elementów interfejsu użytkownika, które odpowiadają palecie kolorów terminala.
  • Zachowuje ustawienia domyślne terminala: Używa none dla kolorów tekstu i tła, aby zachować natywny wygląd terminala.

Motyw systemu przeznaczony jest dla użytkowników, którzy:

  • Want opencode to match their terminal’s appearance
  • Użyj niestandardowych schematów kolorów terminali
  • Prefer a consistent look across all terminal applications

Using a theme

Możesz wybrać motyw, wywołując opcję wyboru motywu za pomocą polecenia /theme. Możesz też określić to w config.

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

Custom themes

opencode obsługuje elastyczny system motywów oparty na JSON, który pozwala użytkownikom łatwo tworzyć i dostosowywać motywy.


Hierarchy

Motywy są ładowane z wielu katalogów w następującej kolejności, przy czym późniejsze katalogi zastępują wcześniejsze:

  1. Wbudowane motywy – są osadzone w formacie binarnym
  2. User config directory - Defined in ~/.config/opencode/themes/*.json or $XDG_CONFIG_HOME/opencode/themes/*.json
  3. Katalog główny projektu - Zdefiniowany w <project-root>/.opencode/themes/*.json
  4. Current working directory - Defined in ./.opencode/themes/*.json

Jeśli wiele katalogów zawiera motyw o tej samej nazwie, zostanie użyty motyw z katalogu o wyższym priorytecie.


Creating a theme

Aby utworzyć niestandardowy motyw, utwórz plik JSON w jednym z katalogów motywów.

W przypadku motywów dla całego użytkownika:

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

Oraz dla tematów specyficznych dla projektu.

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

JSON format

Motywy korzystają z elastycznego formatu JSON z obsługą:

  • Hex colors: "#ffffff"
  • ANSI colors: 3 (0-255)
  • Color references: "primary" or custom definitions
  • Dark/light variants: {"dark": "#000", "light": "#fff"}
  • Brak koloru: "none" - Używa domyślnego koloru terminala lub przezroczystości

Color definitions

Sekcja defs jest opcjonalna i pozwala zdefiniować kolory wielokrotnego użytku, do których można się odwoływać w motywie.


Terminal defaults

Wartość specjalna "none" może zostać użyta dla dowolnego koloru, aby przejąć domyślny kolor terminala. Jest to szczególnie przydatne do tworzenia motywów, które płynnie komponują się ze schematem kolorów terminala:

  • "text": "none" - Używa domyślnego koloru pierwszego planu terminala
  • "background": "none" - Używa domyślnego koloru tła terminala

Przykład

Here’s an example of a custom theme:

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"
}
}
}