|
| 1 | +# Erweiterungen |
| 2 | + |
| 3 | +Erweiterungen sind eigenständige Binardateien, die in den xfetch-Lebenszyklus auf Konfigurationsebene eingreifen. Anders als Plugins (die Infozeilen bereitstellen oder Logos animieren), empfangen Erweiterungen die vollständig aufgelöste Konfiguration uber stdin, modifizieren sie und geben eine modifizierte Version uber stdout zuruck. |
| 4 | + |
| 5 | +## Architektur |
| 6 | + |
| 7 | +``` |
| 8 | +xfetch core |
| 9 | + │ |
| 10 | + ├─ Ladt config.jsonc |
| 11 | + ├─ Fugt Thema zusammen (falls gesetzt) |
| 12 | + │ |
| 13 | + ├─ extension-1 (stdin/stdout JSON) ← modifiziert Konfiguration |
| 14 | + ├─ extension-2 (stdin/stdout JSON) ← modifiziert Konfiguration |
| 15 | + ├─ ... |
| 16 | + │ |
| 17 | + └─ Rendert finale Konfiguration |
| 18 | +``` |
| 19 | + |
| 20 | +Erweiterungen werden **nach der Themenzusammenfuhrung, in Deklarationsreihenfolge** ausgefuhrt. Jede Erweiterung erhalt die vom vorherigen Schritt produzierte Konfiguration, sodass sie verkettet werden konnen. |
| 21 | + |
| 22 | +## Installation |
| 23 | + |
| 24 | +Erweiterungen werden in `~/.config/xfetch/extensions/` installiert: |
| 25 | + |
| 26 | +```bash |
| 27 | +cp xfetch-extension-<name> ~/.config/xfetch/extensions/ |
| 28 | +``` |
| 29 | + |
| 30 | +Oder per CLI: |
| 31 | + |
| 32 | +```bash |
| 33 | +xfetch extension install ./pfad/zum/binar |
| 34 | +xfetch extension list |
| 35 | +xfetch extension remove <name> |
| 36 | +``` |
| 37 | + |
| 38 | +Erweiterungsbinardateien folgen der Namenskonvention `xfetch-extension-<name>` (`.exe` unter Windows). |
| 39 | + |
| 40 | +## Konfiguration |
| 41 | + |
| 42 | +Fugen Sie Erweiterungen uber das Feld `config_providers` zu Ihrer Konfiguration hinzu: |
| 43 | + |
| 44 | +```jsonc |
| 45 | +{ |
| 46 | + "config_providers": [ |
| 47 | + { |
| 48 | + "extension": "layout-override", |
| 49 | + "args": { |
| 50 | + "layout": "tree" |
| 51 | + } |
| 52 | + }, |
| 53 | + { |
| 54 | + "extension": "config-roulette", |
| 55 | + "args": { |
| 56 | + "routes": "~/.config/xfetch/routes.json", |
| 57 | + "strategy": "daily" |
| 58 | + } |
| 59 | + } |
| 60 | + ] |
| 61 | +} |
| 62 | +``` |
| 63 | + |
| 64 | +| Feld | Typ | Beschreibung | |
| 65 | +|-------|------|-------------| |
| 66 | +| `extension` | `string` | Erweiterungsname (Binardatei: `xfetch-extension-<name>`) | |
| 67 | +| `args` | `object` oder `null` | Beliebige JSON-Argumente, die an die Erweiterung ubergeben werden | |
| 68 | + |
| 69 | +## Protokoll |
| 70 | + |
| 71 | +Erweiterungen kommunizieren uber stdin/stdout mit dem JSON-Protokoll, das in `xfetch-extension-api` definiert ist. |
| 72 | + |
| 73 | +### Anfrage (stdin) |
| 74 | + |
| 75 | +```json |
| 76 | +{ |
| 77 | + "version": 1, |
| 78 | + "kind": "config_provider", |
| 79 | + "config": { |
| 80 | + "layout": "section", |
| 81 | + "modules": ["os", "kernel", "uptime"], |
| 82 | + "colors": { "os": "Cyan" } |
| 83 | + }, |
| 84 | + "args": { |
| 85 | + "layout": "tree" |
| 86 | + } |
| 87 | +} |
| 88 | +``` |
| 89 | + |
| 90 | +Das Feld `config` enthalt die vollstandig aufgeloste xfetch-Konfiguration nach Zusammenfuhrung von Standardwerten, Konfigurationsdatei und ggf. Thema. |
| 91 | + |
| 92 | +### Antwort (stdout) |
| 93 | + |
| 94 | +```json |
| 95 | +{ |
| 96 | + "config": { |
| 97 | + "layout": "tree", |
| 98 | + "modules": ["os", "kernel", "uptime"], |
| 99 | + "colors": { "os": "Cyan" } |
| 100 | + } |
| 101 | +} |
| 102 | +``` |
| 103 | + |
| 104 | +Die Erweiterung gibt die gesamte modifizierte Konfiguration zuruck. Unveranderte Felder sollten unverandert erhalten bleiben. |
| 105 | + |
| 106 | +### Fehlerbehandlung |
| 107 | + |
| 108 | +Fehler sollten auf stderr ausgegeben werden. Der Prozess sollte mit einem Status ungleich null beendet werden. xfetch uberspringt die Erweiterung und fahrt mit der aktuellen Konfiguration fort, wenn ein Fehler auftritt. |
| 109 | + |
| 110 | +## Verfugbare Erweiterungen |
| 111 | + |
| 112 | +| Erweiterung | Beschreibung | |
| 113 | +|-----------|-------------| |
| 114 | +| [config-roulette](extensions/config-roulette.md) | Wahlt eine zufallige (oder tagliche) Konfiguration aus einer Liste von Pfaden | |
| 115 | +| [layout-override](extensions/layout-override.md) | Uberschreibt das Layout und/oder die Module beim Laden der Konfiguration | |
| 116 | + |
| 117 | +## Verzeichnisse |
| 118 | + |
| 119 | +| Plattform | Erweiterungspfad | |
| 120 | +|----------|----------------| |
| 121 | +| Linux | `~/.config/xfetch/extensions/` | |
| 122 | +| macOS | `~/Library/Application Support/xfetch/extensions/` | |
| 123 | +| Windows | `%APPDATA%\xfetch\extensions\` | |
| 124 | + |
| 125 | +## Eigene Erweiterungen schreiben |
| 126 | + |
| 127 | +Erweiterungen mussen: |
| 128 | + |
| 129 | +1. Ein `ConfigProviderRequest` JSON-Objekt von stdin lesen |
| 130 | +2. Das `config`-Feld nach Bedarf modifizieren |
| 131 | +3. Ein `ConfigProviderResponse` JSON-Objekt auf stdout schreiben |
| 132 | +4. Mit Status 0 bei Erfolg, ungleich null bei Fehler beenden |
| 133 | + |
| 134 | +Verwenden Sie das `xfetch-extension-api` Crate von `github.com/xfetch-cli/api` fur typsichere Anfrage-/Antwortbehandlung in Rust. |
| 135 | + |
| 136 | +Das gemeinsame API-Crate ist verfugbar unter: [github.com/xfetch-cli/api](https://github.com/xfetch-cli/api) |
0 commit comments