Files
taninux/docs/eww-collaboration.md
karim 10b88a67bc Initial commit — TANINUX (camel): management app + distro packaging
- 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>
2026-06-18 20:18:30 +02:00

7.3 KiB
Raw Permalink Blame History

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.jsonaccent_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 watcheww 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.shtaninux-gtk

panel.json-Schema (v1, alles live, kein Reload):

{
  "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 2464 · dock.hide_delay: 0.25.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 barbar.modules (Toggles), bar.clock_format.
  • Dockdock.autohide, dock.icon_size (Slider 2464), 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.