- app: GTK System Settings (tsettings) + Software Hub (thub) + TUI - distro/: camel.toml manifest + MANIFEST.md (Arch + [tanin] repo model) - packaging/: taninux, tanin-desktop (niri metapackage), tanin-greet, tanin-libadwaita, tanin-setup - docs/, data/, LICENSE (GPL-3.0-or-later) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
6.4 KiB
TANINUX → eww: Panel & Dock — Settings-Vertrag (Handover)
Für die TANINUX-Instanz, die die „Panel & Dock"-Seite baut. Analog zur
Akzent-Kette: TANINUX schreibt EINE Config-Datei, eww konsumiert sie. Die
eww-Seite (Variablen, :style/:visible, Watcher) ist bereits gebaut — du
brauchst nur die Datei zu schreiben.
Gegenstücke: eww-accent-integration.md (Akzent), eww-integration.md (Gesamtvertrag).
1. Wo die Werte liegen
Datei: ~/.local/share/taninux/panel.json
($XDG_DATA_HOME/taninux/panel.json, Fallback ~/.local/share/...) — JSON,
eine Datei, neben gui.json. Existiert mit Defaults; eww seedet sie zur Not.
{
"version": 1,
"dock": {
"autohide": true,
"icon_size": 42,
"hide_delay": 1.2
},
"bar": {
"clock_format": "%H:%M %A, %d.%m.%Y",
"modules": {
"music": true, "sys": true, "updates": true,
"net": true, "bt": true, "vol": true
}
}
}
2. Die Knöpfe (Keys, Typ, erlaubte Werte)
| Key | Typ | Werte / Range | Wirkung in eww | Live? |
|---|---|---|---|---|
dock.autohide |
bool | true / false |
false = Dock immer sichtbar; true = Hover-Trigger |
live |
dock.icon_size |
int | 24 – 64 (px) | Icon-Größe im Dock (:style min-width/height) |
live |
dock.hide_delay |
number | 0.2 – 5.0 (Sekunden) | Nachhall, bis das Dock nach Verlassen schließt | next-hide |
bar.clock_format |
string | strftime (z.B. %H:%M) |
Format der Uhr in der Bar-Mitte | ≤10 s |
bar.modules |
object | Keys: music sys updates net bt vol |
Welche Rechts-Module die Bar zeigt | live |
updates.include_aur |
bool | true/false (Default false) |
AUR im Update-Scope (Zähler+Liste). Opt-in, braucht paru | poll |
updates.include_aur(Top-Level-Sektionupdates): TANINUX-Hub macht AUR zum Opt-in (Default Repo+Flatpak).scripts/updates.shsoll diesen Key lesen und nur dannparu -Quamitzählen/-listen. JSON-Schema der Liste bleibt[{name, old, new}](gern +src). Beispiel-Lesen:inc=$(jq -r '.updates.include_aur // false' "$PANEL_JSON").bar.modulesist ein Objekt{ "<modul>": true/false }(nicht Liste) — fehlt ein Key, gilt er als sichtbar. Module:music(Now-Playing-Mini),sys(CPU/RAM),updates(Update-Zähler),net,bt,vol.- Clamping macht eww defensiv (icon_size 24–64, ungültiges → Default). Trotzdem bitte in der GUI validieren (Spin 24–64, Slider 0.2–5.0).
Noch nicht im v1 (bewusst): dock.position (left/bottom/right) und feste
Größen der Bar/Dock-Fenster. Die brauchen eww reload + Geometrie-Neubau
(Orientierungswechsel bei bottom). Sag Bescheid, wenn du das willst — dann
erweitere ich die eww-Seite und dieses Doc; bis dahin nicht in der GUI anbieten.
3. Wie man anwendet
Du schreibst panel.json — mehr nicht. eww zieht nach, auf zwei Wegen:
- Automatisch: ein Watcher (
scripts/panelcfg.sh watch, läuft auslaunch.sh) pollt die Datei alle 2 s und wendet Änderungen an. - Sofort (optional, empfohlen für „Apply"): nach dem Schreiben einmal
feuern — dann greift es ohne die 2-s-Latenz. (Best-effort, schadet nie.)
~/eww/scripts/panelcfg.sh apply
Kein eww reload nötig für die v1-Knöpfe. Intern macht panelcfg.sh:
eww update cfg-icon-size=… cfg-modules=…, schaltet Autohide imperativ, und
clock_format/hide_delay werden on-demand gelesen. (Du musst die
eww-Variablennamen nicht kennen — nur panel.json schreiben.)
4. Die Grenze — wer schreibt was
panel.jsongehört dir (TANINUX). Schreib es frei. eww liest es nur.- Gepinnte Dock-Apps liegen NICHT in
panel.json, sondern in~/.config/eww/dock-pins— eine simple Zeilen-Datei, Formatexec|class|icon:librewolf|librewolf|librewolf kitty|kitty|kitty code|Code|code-ossexec= Startbefehl,class= Fensterklasse (app_id/WM_CLASS),icon= Icon-Name (Papirus). eww spiegelt Änderungen automatisch (Poll alle 2 s).- Die Zeilen-REIHENFOLGE = die Dock-Reihenfolge. → Drag & Drop bitte hier
bauen: Die „Dock"-Gruppe zeigt die gepinnten Apps als ziehbare GTK-Liste;
beim Loslassen schreibst du
dock-pinsin der neuen Reihenfolge neu. eww sortiert das Dock in ≤2 s nach. Echtes DnD im eww-Dock selbst geht nicht (eww/GTK3 hat keine Drag-Primitiven) — deshalb gehört das in deine GTK-Seite. (eww bietet zusätzlich „Move up/Move down" im Dock-Rechtsklick als Schnell-Option — die schreibt dieselbe Datei.) - Du darfst diese Datei direkt lesen UND schreiben (z.B. die Pin-Liste in der GUI verwalten). eww mutiert sie auch selbst (Dock-Rechtsklick → Pin/Unpin). Zwei-Wege ist ok, weil das Format trivial und idempotent ist — schreib die ganze Datei neu, eww liest sie beim nächsten Poll.
- Falls du lieber Befehle feuerst statt zu schreiben:
~/eww/scripts/dock.sh pin <class>/unpin <class>.
~/eww/**(yuck/scss/andere scripts) ist eww-intern. Für Settings brauchst du das nie anzufassen — alles läuft überpanel.json+dock-pins.
Darfst du eww trotzdem direkt anfassen?
Ja — für Code/Feature-Arbeit an der Bar selbst (neue Widgets, Layout) ist es
EIN Projekt, kein Tabu. Einzige harte Regel: nie zwei Editoren gleichzeitig
auf derselben Datei (genau das hat beim Hyprland→Sway-Umbau Chaos gemacht).
Für Settings aber gilt: über panel.json gehen, nicht eww hand-editieren —
sonst ist jede GUI-Änderung ein yuck-Edit (brittle + Race-Gefahr).
Status (gebaut & getestet)
- ✅
panel.json(Default vorhanden) +scripts/panelcfg.sh(apply/watch/get). - ✅
dock.icon_sizelive (24–64, getestet 42↔56),bar.moduleslive,dock.autohideimperativ,bar.clock_formatviascripts/clock.sh,dock.hide_delayaus der JSON gelesen. - ✅ Watcher in
launch.sheingetragen. - ⏳
dock.position/Fenstergrößen = Reload-Thema, auf Anfrage.
Damit kannst du core/panel.py (Read/Write panel.json + optional dock-pins,
Apply = Datei schreiben + panelcfg.sh apply) und die GTK-Seite „Panel & Dock"
(Gruppen Top bar / Dock) direkt bauen.