Zum Inhalt springen

Themes

Wahlen Sie ein integriertes Theme oder definieren Sie Ihr eigenes.

Mit OpenCode konnen Sie aus mehreren integrierten Themen wahlen, ein Theme verwenden, das sich an Ihr Terminal-Theme anpasst, oder Ihr eigenes benutzerdefiniertes Theme definieren.

Standardmafig verwendet OpenCode unser eigenes opencode-Theme.


Terminal-Anforderungen

Damit Themes mit ihrer gesamten Farbpalette korrekt angezeigt werden, muss Ihr Terminal Truecolor (24-Bit-Farbe) unterstutzen. Die meisten modernen Terminals unterstutzen dies standardmafig, aber Sie mussen es moglicherweise aktivieren:

  • Unterstutzung prufen: Fuhren Sie echo $COLORTERM aus - es sollte truecolor oder 24bit ausgeben
  • Truecolor aktivieren: Setzen Sie die Umgebungsvariable COLORTERM=truecolor in Ihrem Shell-Profil
  • Terminal-Kompatibilitat: Stellen Sie sicher, dass Ihr Terminal-Emulator 24-Bit-Farbe unterstutzt (die meisten modernen Terminals wie iTerm2, Alacritty, Kitty, Windows Terminal und neuere Versionen von GNOME Terminal tun dies)

Ohne Truecolor-Unterstutzung konnen Themes mit reduzierter Farbgenauigkeit angezeigt werden oder auf den nachsten 256-Farben-Wert zuruckfallen.


Integrierte Themes

OpenCode wird mit mehreren integrierten Themes geliefert.

NameBeschreibung
systemPasst sich an die Hintergrundfarbe Ihres Terminals an
tokyonightBasierend auf dem Tokyonight-Theme
everforestBasierend auf dem Everforest-Theme
ayuBasierend auf dem Ayu Dark-Theme
catppuccinBasierend auf dem Catppuccin-Theme
catppuccin-macchiatoBasierend auf dem Catppuccin-Theme
gruvboxBasierend auf dem Gruvbox-Theme
kanagawaBasierend auf dem Kanagawa-Theme
nordBasierend auf dem Nord-Theme
matrixHacker-stiliges Grun auf Schwarz Theme
one-darkBasierend auf dem Atom One Dark-Theme

Und mehr, wir fuhren standig neue Themes hinzu.


System-Theme

Das system-Theme ist darauf ausgelegt, sich automatisch an das Farbschema Ihres Terminals anzupassen. Im Gegensatz zu traditionellen Themes, die feste Farben verwenden, passt das system-Theme an:

  • Erstellt Graustufen: Erstellt eine benutzerdefinierte Graustufe basierend auf der Hintergrundfarbe Ihres Terminals und sorgt so fur optimalen Kontrast.
  • Verwendet ANSI-Farben: Nutzt Standard-ANSI-Farben (0-15) fur Syntaxhervorhebung und UI-Elemente, die Ihr Terminal-Farbschema respektieren.
  • Behaltt Terminal-Standards bei: Verwendet none fur Text- und Hintergrundfarben, um das native Aussehen Ihres Terminals zu erhalten.

Das System-Theme ist fur Benutzer, die:

  • Möchten, dass OpenCode dem Aussehen ihres Terminals entspricht
  • Benutzerdefinierte Terminal-Farbschemata verwenden
  • Ein konsistentes Look uber alle Terminal-Anwendungen bevorzugen

Verwendung eines Themes

Sie konnen ein Theme auswahlen, indem Sie die Theme-Auswahl mit dem Befehl /theme aufzurufen. Oder Sie konnen es in Ihrer Konfiguration angeben.

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

Benutzerdefinierte Themes

OpenCode unterstutzt ein flexibles JSON-basiertes Theme-System, das es Benutzern erleichtert, Themes zu erstellen und anzupassen.


Hierarchie

Themes werden aus mehreren Verzeichnissen in der folgenden Reihenfolge geladen, wobei spater Verzeichnisse fruhere uberschreiben:

  1. Integrierte Themes - Diese sind in der Binardatei eingebettet
  2. Benutzerkonfigurationsverzeichnis - Definiert in ~/.config/opencode/themes/*.json oder $XDG_CONFIG_HOME/opencode/themes/*.json
  3. Projektstammverzeichnis - Definiert in <projektstamm>/.opencode/themes/*.json
  4. Aktuelles Arbeitsverzeichnis - Definiert in ./.opencode/themes/*.json

Wenn mehrere Verzeichnisse ein Theme mit demselben Namen enthalten, wird das Theme aus dem Verzeichnis mit hoherer Prioritat verwendet.


Theme erstellen

Um ein benutzerdefiniertes Theme zu erstellen, erstellen Sie eine JSON-Datei in einem der Theme-Verzeichnisse.

Fur benutzerweite Themes:

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

Und fur projektspezifische Themes.

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

JSON-Format

Themes verwenden ein flexibles JSON-Format mit Unterstutzung fur:

  • Hex-Farben: "#ffffff"
  • ANSI-Farben: 3 (0-255)
  • Farbreferenzen: "primary" oder benutzerdefinierte Definitionen
  • Dunkel/Hell-Varianten: {"dark": "#000", "light": "#fff"}
  • Keine Farbe: "none" - Verwendet die Standardfarbe des Terminals oder transparent

Farbfinitionen

Der Abschnitt defs ist optional und er erlaubt es Ihnen, wiederverwendbare Farben zu definieren, die im Theme referenziert werden konnen.


Terminal-Standards

Der spezielle Wert "none" kann fur jede Farbe verwendet werden, um die Standardfarbe des Terminals zu erben. Dies ist besonders nutzlich fur die Erstellung von Themes, die nahtlos mit dem Farbschema Ihres Terminals verschmelzen:

  • "text": "none" - Verwendet die Standard-Vordergrundfarbe des Terminals
  • "background": "none" - Verwendet die Standard-Hintergrundfarbe des Terminals

Beispiel

Hier ist ein Beispiel fur ein benutzerdefiniertes 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"
}
}
}