Das Theme-System trennt das visuelle Erscheinungsbild (Farben, Icons, Layout) von der Modulkonfiguration, sodass du das Aussehen wechseln kannst, ohne deine Moduleinrichtung anzutasten.
Themes arbeiten auf der Konfigurationsebene, bevor eine Darstellung oder Plugin-Ausfuhrung erfolgt.
config.jsonc (theme: "berlin", modules: [...])
|
v
Lade Standardkonfiguration
|
v
Lade config.jsonc des Benutzers
|
v
Lade theme/<name>.jsonc
|
v
Zusammenfuhrung: defaults <- config.jsonc <- theme
|
v
Endgultige Konfiguration (vom Renderer verwendet)
Jede Ebene kann jedes visuelle Feld uberschreiben. Seit v0.2.0 hat das Theme die hochste Prioritat:
| Ebene | Quelle | Inhalt |
|---|---|---|
| 1. Standardwerte | Fest codiert in config.rs |
Standard-Icons, Farben, Layout |
| 2. Benutzerkonfiguration | config.jsonc |
modules, info_plugins, sowie Uberschreibungen fur jedes visuelle Feld |
| 3. Theme-Datei | themes/<name>.jsonc |
colors, layout, palette_style, logo_path, logo_color, logo_colors, header_icons, footer_text, show_colors |
Ein Feld in der Theme-Datei gewinnt immer gegenuber demselben Feld in config.jsonc oder den Standardwerten.
Die Zusammenfuhrung verwendet deep_merge(), das Schlussel fur Schlussel arbeitet:
- Objekte: werden rekursiv zusammengefuhrt — jeder Schlussel wird unabhangig aufgelost
- Strings, Zahlen, Booleans: der Overlay ersetzt die Basis
- Leere Strings: ein leerer String uberschreibt nicht einen nicht-leeren String (verhindert, dass Themes versehentlich Icons loschen)
- Leere Objekte
{}: keine Operation — vorhandene Schlussel bleiben erhalten
Hinweis zur Aktualisierung (v0.1.x → v0.2.0): In v0.1.x gewann
config.jsoncgegenuber dem Theme. Wenn du aktualisierst, kann deine vorhandene Konfiguration das Theme uberschreiben. Exportiere dein aktuelles Aussehen mitxfetch theme export my-look, setze"theme": "my-look"und entferne die visuellen Felder ausconfig.jsonc.
Eine Theme-Datei ist ein JSONC-Dokument, das nur visuelle Felder enthalt. Sie darf modules oder info_plugins nicht enthalten.
| Feld | Typ | Beschreibung |
|---|---|---|
layout |
string oder null |
Name des Layout-Stils |
colors |
object |
Modulspezifische Farbzuordnung |
palette_style |
string oder null |
Palettenanzeige: squares, circles, triangles, lines |
show_colors |
boolean |
Inline-ANSI-Farbindikatoren ein-/ausschalten |
logo_path |
string oder null |
Pfad zu einer Logo-Datei |
logo_color |
string oder null |
Farbe fur ASCII-Logos (Name, Hex oder RGB) |
logo_colors |
array oder null |
Farben pro Zeile fur ASCII-Logos (Zeile i verwendet logo_colors[i % len]) |
header_icons |
array oder null |
Header-Icons fur Pac-Man-Layout |
footer_text |
string oder null |
Footer-Text fur Pac-Man-Layout |
Themes enthalten keine icons — die Icon-Wahl ist Sache der Schriftart des Benutzers; der Kern fullt Icons aus den eingebauten Standards auf.
Wenn xfetch eine Konfiguration mit theme: "dracula" ladet, durchsucht der Resolver in dieser Reihenfolge:
- Direkter Pfad -- Wenn der Wert ein Dateipfad ist (enthalt
/oder beginnt mit~), wird er direkt geladen - Themes-Verzeichnis -- Suche nach
<name>.jsoncin~/.config/xfetch/themes/
Wenn das Theme nicht gefunden wird, wird die Konfiguration unverandert ohne das Theme geladen.
# Installierte Themes auflisten
xfetch theme list
# Ein Theme aktivieren (setzt das Feld "theme" in config.jsonc)
xfetch theme set nord
# Eine Theme-Datei entfernen
xfetch theme remove nord
# Aktuelle visuelle Konfiguration als Theme-Datei exportieren
xfetch theme export my-themexfetch theme export <name> erfasst den aktuellen Laufzeit-Status (nach der Zusammenfuhrung) und schreibt ihn nach ~/.config/xfetch/themes/<name>.jsonc. Dies ermoglicht es, dein Aussehen zu teilen, ohne deine Modulliste offenzulegen.
Die exportierte Datei enthalt nur:
layoutcolorspalette_styleheader_iconsfooter_textlogo_pathshow_colors
Das Theme-System ist vollstandig abwartskompatibel:
- Ohne
theme-Feld: Alles funktioniert genau wie zuvor. Die Konfigurationsdatei enthalt alle visuellen Felder direkt. - Vorhandene Konfigurationen: Konnen durch Exportieren migriert werden:
xfetch theme export current, danach setze"theme": "current"und entferne die visuellen Felder aus der Hauptkonfiguration. - Plugin-Konfigurationen: Plugin-Referenzen (
info_plugins) bleiben ausschlieblich inconfig.jsonc, niemals in Theme-Dateien.
~/.config/xfetch/
config.jsonc # Module, Plugins und optionale Theme-Referenz
themes/
dracula.jsonc # Theme-Dateien: Farben, Layout
nord.jsonc
catppuccin-mocha.jsonc
retro-pacman.jsonc
berlin.jsonc
tree-compact.jsonc
Das offizielle Theme-Repository befindet sich unter github.com/xfetch-cli/themes, registriert uber index.json mit Theme-Dateien unter colors/:
| Theme | Layout | Stil |
|---|---|---|
dracula |
section | Dunkle Magenta-, Rot- und Cyan-Palette |
nord |
section | Kuhle Blau- und Arktis-Cyan-Palette |
catppuccin-mocha |
section | Warme Mokka-Pastell-Palette |
retro-pacman |
pacman | Klassischer Pac-Man-Arcade-Stil mit Header-Icons und Footer-Text |
berlin |
default | Keine Farben und keine Icons: saubere Nur-Text-Ausgabe |
tree-compact |
tree | Hierarchisches Baum-Layout mit kuhlem Blau-Grun-Schema |
bogota |
bottom | Unteres Layout mit warmer Rot-, Magenta- und Wei-Palette |
helsinki |
line | Einzeiliges Layout mit Grun-, Blau- und Magenta-Akzentmischung |
lahabana |
section | Abschnitts-Layout mit Rot-, Magenta- und Wei-Palette |
london |
minimal | Minimale Graustufen-Palette (Wei und Grau) |
madrid |
default | Standard-Layout mit Rot-, Grun- und Blau-Trikolore-Palette |
miami |
section | Abschnitts-Layout mit Magenta-, Cyan- und Wei-Vaporwave-Palette |
oslo |
compact | Kompaktes Layout mit kuhler Blau-, Cyan- und Wei-Palette |
paris |
box | Box-Layout mit Rot-, Magenta- und Wei-Palette |
praha |
section | Abschnitts-Layout mit Rot- und Magenta-Palette, Dreiecks-Swatches |
tokio |
horizontal | Horizontales Layout mit Rot-, Wei- und Magenta-Palette |
x |
section | Abschnitts-Layout mit Cyan-, Magenta- und Wei-Akzenten |
Die Zusammenfuhrung verwendet serde_json::Value Deep-Merge vor der Deserialisierung:
- Parse
config.jsoncalsserde_json::Value - Deserialisiere zu
Config, um dastheme-Feld zu extrahieren - Wenn
themegesetzt ist, lade die Theme-Datei alsserde_json::Value - Erstelle ein leeres
Valueund fuhre in der Reihenfolge zusammen: defaults → config.jsonc → theme - Deserialisiere das zusammengefuhrte Ergebnis zu
Config
list_themes()-- Durchsucht~/.config/xfetch/themes/nach*.jsonc-Dateienset_active_theme()-- Liestconfig.jsonc, setzt dastheme-Feld, schreibt zuruckremove_theme()-- Loscht eine Theme-Datei aus dem Themes-Verzeichnisexport_current_theme()-- Erstellt eine JSONC-Datei aus den visuellen Feldern der aktuellen Config
{ "layout": "section", "show_colors": true, "palette_style": "circles", "colors": { "os": "Magenta", "cpu": "Red", "memory": "Yellow", "disk": "Cyan", "shell": "Green", "wm": "Blue" } }