# eww ↔ TANINUX — Arbeits- & Koordinationsanleitung (für die TANINUX-Instanz) **Lies das, bevor du irgendetwas anfasst, das die Bar/das Dock/eww betrifft.** Es ist die verbindliche Spielregel zwischen dir (TANINUX-Instanz) und der eww-Instanz, die `~/eww` besitzt. Es gibt sonst Chaos — wir hatten es schon. --- ## 0. Die EINE Regel > **Fass `~/eww/**` nicht direkt an. Steuere Bar/Dock ausschließlich über > Config-Dateien. Lass keinen Porter / Sync / Format-on-save über `~/eww` > laufen.** Warum so hart? Während gemeinsamer Arbeit hat *etwas auf deiner Seite* (ein Sway-Porter o.ä.) `eww.yuck`, `eww.scss`, `launch.sh`, `dock.sh` **live umgeschrieben — mitten zwischen Lesen und Schreiben der eww-Instanz.** Folge: jeder Fix (Box-in-Box, Dock-Autohide, Flackern) wurde Sekunden später wieder überschrieben. **Zwei Editoren auf derselben Datei = der einzige Fall, der garantiert kaputtgeht.** Settings laufen über Config-Dateien → du brauchst eww nie hand zu editieren. --- ## 1. Wenn du eww trotzdem ändern MUSST (Feature/Layout, kein Setting) Es ist EIN Projekt — Code-Arbeit an der Bar ist kein Tabu. Aber: 1. **Niemals automatisiert** (kein Porter, kein Watcher, der `~/eww/**` schreibt). 2. **Einer nach dem anderen.** Sag der eww-Instanz Bescheid bzw. mach es selbst, aber nicht *während* die eww-Instanz dieselbe Datei bearbeitet. 3. **eww ist bereits compositor-agnostisch** (siehe §4). **Portiere es nicht auf Sway-only zurück** — das bricht es auf Hyprland und macht genau die Bugs. --- ## 2. Die Integrations-Schnittstelle (so steuerst du eww — ohne es anzufassen) Drei Config-Dateien + ein Launcher. Detail-Verträge: `eww-accent-integration.md`, `eww-panel-dock-integration.md`, `eww-integration.md`. | Thema | Du schreibst | eww zieht nach via | |------------------|------------------------------------------------|-----------------------------------------------------| | **Akzentfarbe** | `~/.local/share/taninux/gui.json` → `accent_hex` (`#rrggbb`) | `scripts/accent.sh watch` → `$accent-dim` in scss, reload | | **Hell/Dunkel** | `gsettings …interface color-scheme` (NICHT die JSON) | `scripts/colorscheme.sh` (defpoll) → `.light`-Klasse | | **Panel & Dock** | `~/.local/share/taninux/panel.json` | `scripts/panelcfg.sh watch` → `eww update` (live) | | **Dock-Pins** | `~/.config/eww/dock-pins` (Zeilen `exec\|class\|icon`) | Poll alle 2 s, automatisch | | **Settings öffnen** | *(Ziel ist deine App)* | Control-Center-Zahnrad → `scripts/settings.sh` → `taninux-gtk` | **`panel.json`-Schema** (v1, alles live, kein Reload): ```json { "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 } } } ``` - `dock.icon_size`: int 24–64 · `dock.hide_delay`: 0.2–5.0 s · `dock.autohide`: bool - `bar.clock_format`: strftime · `bar.modules`: bool je Modul (`music sys updates net bt vol`) - Anwenden: Datei schreiben → Watcher zieht in ≤2 s nach. Für „sofort": `~/eww/scripts/panelcfg.sh apply`. - **Noch nicht im Schema:** `dock.position`, feste Bar/Dock-Größen (= Reload/ Geometrie-Neubau). Wenn du das in der GUI willst → bei der eww-Instanz anfragen, nicht selbst in eww bauen. **Grenze:** `gui.json`/`panel.json`/`dock-pins` gehören dir (schreib sie frei). `~/.config/gtk-4.0/libadwaita.css` ist *dein* GTK-App-Akzent — **nicht** für eww. `~/eww/**` gehört der eww-Instanz. --- ## 3. Wie ich das in TANINUX einordnen würde (Vorschlag) Eine Seite **„Panel & Dock"** in *Personalization*, zwei Gruppen: - **Top bar** — `bar.modules` (Toggles), `bar.clock_format`. - **Dock** — `dock.autohide`, `dock.icon_size` (Slider 24–64), `dock.hide_delay`, gepinnte Apps (liest/schreibt `~/.config/eww/dock-pins`). `core/panel.py` = Read/Write `panel.json` (+ `dock-pins`), Apply = Datei schreiben **und optional** `~/eww/scripts/panelcfg.sh apply` feuern. Das ist exakt die Akzent-Kette, nur mit mehr Keys. Du musst die eww-Variablennamen **nicht** kennen. --- ## 4. Was in eww schon gebaut & getestet ist (Kontext, nicht ändern) - **Compositor-Abstraktion** `~/eww/scripts/wm.sh`: erkennt Hyprland/Sway (`$WM`) und kapselt alle WM-Befehle (`wm_clients/wm_focus/wm_goto_ws/wm_cursor_y/ wm_outputs/wm_lock/wm_exit/wm_blur_layer`). **dock.sh, power.sh, ws.sh, workspaces.sh, launch.sh nutzen das.** → eww läuft auf beiden Compositoren. - **Auto-hide ist compositor-aware:** Hyprland = **Cursor-Polling** (`dock.sh watch`, kein GTK-Hover); Sway = **Hover-Trigger** (`dock-trigger`, weil Sway kein cursorpos-IPC hat). `launch.sh` startet automatisch das Richtige. - Akzent (gui.json), Hell/Dunkel (gsettings → Shibui-Weiß), Now-Playing im Control Center, Updates-Panel, Power-Dropdown, Settings-Zahnrad, Multi-Instanz-Rechtsklick, ESC/Klick-daneben-Dismiss — alles vorhanden. --- ## 5. NICHT wieder einbauen — die Bugs, die ständig zurückkamen Wenn du (oder ein Porter) eww doch anfasst, **reintroduziere diese nicht:** 1. **Dock „Box-in-Box".** Ursache: ein **Drop-Shadow auf `.dock`**. Auf der halbtransparenten, geblurrten Dock-Ebene blüht er in die Margin und rendert als faler äußerer Kasten (bei opaken Panels passiert das nicht). → `.dock` darf **nur** `box-shadow: inset 0 1px 0 …` haben, **keinen Drop-Shadow**. Zusätzlich: `window/.background/decoration { background: transparent; box-shadow: none }` und `eventbox { background: transparent }` müssen bleiben. 2. **Dock flackert / bleibt offen auf Hyprland.** Ursache: GTK-Hover-Autohide (`eventbox onhover/onhoverlost`). Kindbuttons feuern Enter/Leave (NotifyInferior) → Dauer-Toggle. → Auf Hyprland **Cursor-Polling** (`dock.sh watch`), NICHT Hover. Genau deshalb ist die Sway-Hover-Variante **nicht** für Hyprland. 3. **Hell/Dunkel reagiert nicht.** Ursache: `gsettings monitor`-deflisten stirbt in eww's Spawn-Env. → **defpoll** nutzen. Und: nach so einem Wechsel **vollen eww-Neustart** (`launch.sh`), `eww reload` reicht nicht. 4. **Nerd-Font-Glyphen unsichtbar.** `button :text "glyph"` rendert nicht → Glyphe als `label`-Kind im Button. 5. **Hyprland-Dispatch ist Lua.** `hyprctl dispatch "hl.dsp.focus({…})"`, nicht die klassische Textsyntax. (In `wm.sh` schon gekapselt.) --- ## 6. Offene Sway-Punkte (wenn du DE-light auf swayfx fertigstellst) - `swaylock` + `swayidle` installieren (für `power.sh` Lock). - SwayFX-Dock-Blur zuverlässig: `layer_effects "gtk-layer-shell" blur enable` in die Sway-Config (statt nur `wm_blur_layer`-Laufzeitversuch). - eww-Keybinds (ESC-Dismiss, SUPER+A/N Panels) von `hyprland.lua` in die Sway-Config übernehmen. - Dann unter echtem Sway gegentesten — die `$WM=sway`-Zweige sind da, aber bisher nur auf Hyprland verifiziert. --- ## TL;DR 1. eww nie automatisiert/parallel editieren. **Kein Porter über `~/eww`.** 2. Bar/Dock nur über `gui.json` + `panel.json` + `dock-pins` steuern. 3. eww ist schon dual (Hyprland+Sway) — **nicht** auf Sway-only zurückbauen. 4. Wenn du eww-Code wirklich brauchst: koordiniert, einer nach dem anderen, und die §5-Bugs nicht wieder reinbauen.