- 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>
9.1 KiB
eww ↔ TANINUX — Integrations-Vertrag (Handover)
Zweck: Ab jetzt werden die eww-Bar (~/eww, symlinked nach ~/.config/eww)
und die TANINUX-Settings-App zusammen gedacht. Dieses Dokument ist der
Vertrag: was über welche Datei fließt, wer was besitzt, und was man beim Ändern
der einen Seite auf der anderen beachten muss.
Gegenstück: docs/eww-accent-integration.md (der ursprüngliche Accent-Handoff
TANINUX → eww). Dieses Dokument hier ist die vollständige, gelebte Sicht.
TL;DR — die Schnittstellen
| # | Thema | Quelle der Wahrheit (TANINUX schreibt) | eww liest / reagiert via |
|---|---|---|---|
| 1 | Akzentfarbe | ~/.local/share/taninux/gui.json → accent_hex |
~/eww/scripts/accent.sh watch → setzt $accent-dim in eww.scss, eww reload |
| 2 | Hell/Dunkel | gsettings org.gnome.desktop.interface color-scheme |
~/eww/scripts/colorscheme.sh get (defpoll 2 s) → .light-Klasse an den Panels |
| 3 | Compositor | (unabhängig erkannt — keine Datei) | ~/eww/scripts/wm.sh erkennt hyprland/sway selbst |
| 4 | Settings öffnen | (App ist das Ziel) | eww Control-Center-Zahnrad → ~/eww/scripts/settings.sh → taninux-gtk |
Kurz: Akzent läuft über die JSON, Hell/Dunkel über gsettings, Compositor erkennt jede Seite selbst. Diese drei Achsen müssen konsistent bleiben.
1. Akzentfarbe — gui.json → eww
- TANINUX schreibt bei jeder Akzent-Änderung
~/.local/share/taninux/gui.json, Feldaccent_hex(fertiger Hex, z. B.#8f8aac). Schema sieheeww-accent-integration.md. - eww hat einen Watcher
scripts/accent.sh watch(gestartet aus~/eww/launch.sh), dergui.jsonalle 2 s auf mtime-Änderung pollt und bei Änderung:accent_hexliest (Fallback#8f8aac, wenn Datei/Feld fehlt/ungültig),- damit nur die eine Zeile
$accent-dim:in~/eww/eww.scssneu schreibt, eww reloadauslöst.
- In der SCSS leiten sich alle Akzent-Werte aus
$accent-dimab:$accent-dim: #8f8aac; // = accent_hex (von accent.sh verwaltet) $accent: lighten($accent-dim, 8%); $accent-08: rgba($accent, 0.08); $accent-14: rgba($accent, 0.14); $accent-22: rgba($accent, 0.22); - Verifiziert: Akzent in der App auf z. B.
take/grün stellen → Bar/Panels/ Dock tinten innerhalb ~2 s nach.
Wenn TANINUX hier etwas ändert: Solange accent_hex ein #rrggbb bleibt,
muss eww nichts angepasst werden. Neue Akzent-Keys (über die 5 Fuji-Töne
hinaus) brauchen nur einen gültigen Hex — eww ist farbagnostisch.
2. Hell/Dunkel — gsettings (NICHT die JSON)
Klare Abgrenzung: Hell/Dunkel läuft global über
gsettings org.gnome.desktop.interface color-scheme (prefer-dark /
prefer-light / default). Das color_scheme-Feld in gui.json ist für eww
nur informativ und wird ignoriert.
- TANINUX setzt beim Umschalten die gsettings-Keys (
gui/desktop.py,gsettings set …). Das ist der globale Standard und greift für alle GTK-Apps. - eww pollt
scripts/colorscheme.sh get(defpoll, 2 s) →light/darkund hängt eine.light-Klasse an alle Panels/Dock (Bar bleibt immer dunkel). Hell = „Shibui"-Weiß-Palette ineww.scss($bg-l,$fg-l, …). - Wichtig (Lesson learned): Ein
gsettings monitor-Deflisten stirbt in eww's Spawn-Umgebung — deshalb defpoll, nicht monitor. Und: eindeflisten→defpoll-Wechsel braucht einen vollen eww-Neustart (launch.sh), eineww reloadreicht nicht.
Vertrag: Damit eww dem App-Umschalter folgt, muss TANINUX die gsettings
tatsächlich setzen (nicht nur gui.json.color_scheme). Tut es das nicht,
bleibt eww auf dem alten Modus — das ist dann ein TANINUX-Bug, kein eww-Bug.
(Beobachtet: einmal stand gui.json=light, aber gsettings=prefer-dark →
eww blieb korrekterweise dunkel.)
3. Compositor-Erkennung — beide Seiten, unabhängig
Beide Apps müssen auf Hyprland UND Sway/SwayFX laufen. Es gibt keine geteilte Datei dafür — jede Seite erkennt selbst:
-
TANINUX: eigene Compositor-Erkennung (von dir gebaut).
-
eww:
~/eww/scripts/wm.sh— eine sourcebare Abstraktion. Erkennt über$HYPRLAND_INSTANCE_SIGNATURE/$SWAYSOCK/pgrepund setzt$WM. Bietet einheitliche Funktionen, die alle eww-Scripts nutzen:Funktion Hyprland Sway / SwayFX wm_clientshyprctl clients -jswaymsg -t get_treewm_focus <id>hl.dsp.focus({window="address:…"})[con_id=…] focuswm_goto_ws/cyclehl.dsp.focus({workspace=…})workspace number …wm_cursor_yhyprctl cursorpos(kein Cursor-IPC → Menü zentriert) wm_outputshyprctl monitorsswaymsg -t get_outputswm_lock/wm_exithyprlock/hl.dsp.exit()swaylock -f/swaymsg exitwm_blur_layerhyprctl keyword layerrule blur,…SwayFX layer_effects … blur enableGenutzt von:
dock.sh,power.sh,ws.sh,workspaces.sh,launch.sh.Hyprland-Eigenheit: Dispatch läuft auf diesem Setup über die Lua-API (
hyprctl dispatch "hl.dsp.…()"), nicht über die klassische Textsyntax.hl.dsp.focusspringt automatisch auf den Workspace des Fensters.
Konsistenz-Regel: Wenn TANINUX seine Compositor-Erkennung ändert (neue
Compositor, andere Detektion), sollte wm.sh dieselbe Logik spiegeln, damit
beide Apps nie auseinanderlaufen. Idealerweise teilt man sich später eine
Detektionsquelle — aktuell bewusst getrennt (keine harte Kopplung).
4. eww startet die Settings-App
Das Zahnrad oben rechts im Control Center öffnet die TANINUX-GUI:
~/eww/scripts/settings.sh → cd ~/projects/taninux && setsid -f env PYTHONPATH=src /usr/bin/python -m taninux.gui.
- System-Python, nicht das venv — das venv hat kein
gi/PyGObject (Systempaket). Entry point lautpyproject.toml:taninux-gtk = taninux.gui.app:main. - Single-Instance über die GTK-App-ID
ch.gabrielevarano.Taninux→ zweiter Klick fokussiert nur.
Wenn TANINUX die Startweise ändert (z. B. richtig installiertes
taninux-gtk mit gi im venv, oder ein .desktop/Binary auf dem PATH):
scripts/settings.sh entsprechend anpassen — am besten auf taninux-gtk,
sobald es ohne PYTHONPATH=src-Hack läuft.
Datei- & Besitz-Karte
| Pfad | Besitzer | Rolle |
|---|---|---|
~/.local/share/taninux/gui.json |
TANINUX | Akzent (accent_hex) — eww liest |
gsettings …interface color-scheme |
TANINUX | Hell/Dunkel global — eww liest |
~/.config/gtk-4.0/libadwaita.css |
TANINUX | GTK-App-Akzent — nicht für eww, nicht anfassen |
~/eww/** (yuck, scss, scripts) |
eww | Bar/Panels/Dock — TANINUX fasst das nie an |
~/eww/scripts/wm.sh |
eww | Compositor-Abstraktion |
~/eww/scripts/accent.sh |
eww | gui.json → $accent-dim |
~/eww/scripts/colorscheme.sh |
eww | gsettings → light/dark |
~/eww/scripts/settings.sh |
eww | startet TANINUX-GUI |
Goldene Regel: TANINUX schreibt nie in ~/eww/**; eww schreibt nie
in TANINUX-Dateien (außer es liest gui.json und startet die GUI). Die
SCSS-Verdrahtung gehört eww, die Settings-Logik gehört TANINUX.
Checkliste beim Ändern
TANINUX-Seite ändert Akzent-Format? → nur prüfen, dass accent_hex ein
#rrggbb bleibt. Sonst nichts.
TANINUX-Seite ändert Hell/Dunkel-Mechanik? → muss weiterhin gsettings color-scheme setzen. eww hängt daran.
Neuer Compositor unterstützt? → wm.sh um einen $WM-Zweig erweitern
(dieselben Funktionen implementieren). Sonst läuft die Bar dort nicht.
Settings-Startweg ändert sich? → ~/eww/scripts/settings.sh anpassen.
Status (Stand dieser Übergabe)
- ✅ Akzent live aus
gui.json(getestet: ume/violet ↔ take/green). - ✅ Hell/Dunkel live aus gsettings (Shibui-Hell-Palette, Bar bleibt dunkel).
- ✅ Compositor-Abstraktion
wm.sh— auf Hyprland verifiziert; Sway-Zweige implementiert (final unter Sway noch gegenzutesten). - ✅ Settings-Zahnrad startet
taninux-gtk(System-Python). - ⚠️ Für Sway fehlen noch
swaylock+swayidle(Pakete installieren). - ⚠️ SwayFX-Blur fürs Dock:
wm_blur_layerversuchtlayer_effectslive; zuverlässiger ist die Regel in der SwayFX-Config (layer_effects "gtk-layer-shell" blur enable).