# waydock — plan ## Goal En modern, resurssnål och genomkonfigurerbar dock för Wayfire på brasse-linux01 — transparent med hint av `#222222`, i stil med KDE Plasma 6/Ubuntu-dockan. Ersätter på sikt sfwbar-dockan i Wayfire-DE. Allt konfigureras via en JSON-fil som kan redigeras för hand eller via inbyggt settings-GUI, med live-uppdatering åt båda hållen. ## Stack - **Rust** (stabil, rustup) — en singel-binär, LTO-optimerad release - **GTK4 + gtk4-layer-shell** — rendering, CSS-theming, popovers/menyer - **wayland-client + wayland-protocols-wlr** — egen Wayland-anslutning mot `zwlr_foreign_toplevel_manager_v1` (fönsterlista, aktivera, minimera, maximera, stäng, flytta-mellan-outputs-kontext) - **gio** (ingår i GTK-stacken) — `.desktop`-uppslag, ikoner, applansering - Övriga crates: `serde`/`serde_json` (config), `notify` (filewatcher), `log` + `simplelog` (loggning) - **Wayfire IPC** (egen liten klient över unix-socket) — scale/expo-toggle och fönstergeometri för intelligent dodge - Mål-OS/arch: **linux-x64** (denna dator). Ingen Pi5-deploy. ## Deploy target Pattern A (binär), med lokalt släppbygge: - **CI (Gitea Actions, x64-runnern `linux-amd64` på brasse-linux01):** `cargo check` + `clippy` + `test` vid push till master. Bara x86_64 — ingen arm-build (Pi5-runnern rör aldrig det här repot). - **Släpp:** `./release.sh vX.Y.Z` taggar och pushar; release-workflowet på byggnoden bygger x64-binären och laddar upp till Gitea-släppsidan + uppdaterar rullande `latest`. `install.sh` ger en-rads-install. ## Config `~/.config/waydock/config.json` (XDG). Genereras med defaults om den saknas. Filewatcher → alla ändringar appliceras live. Settings-GUI:t skriver samma fil. Schema dokumenteras i `doc/usage.md`. ## Milestones 1. **M0 Scaffold** — repo, docs, CI, VS Code-tasks, release-flöde *(klar)* (M1–M7 klara 2026-08-30 — v0.1.0 släppt: binär 1,6 MB, en-raders-install verifierad, repot publikt. Kvar: M8.) 2. **M1 Panelskelett** — layer-shell-fönster per skärm; position (top/bottom/left/right), centrering, marginal, layer, exclusive zone; CSS-pipeline från config (bakgrund/opacity/radie/skugga/kant); default-config-generering; loggning 3. **M2 Fönsterspårning** — foreign-toplevel-klient; app_id → ikon/namn; körande appar med gruppering, indikatorprickar, urgency-puls, tooltips; klick = fokus/minimera, skroll = växla fönster, mittklick konfigurerbart 4. **M3 Pins & per skärm** — pinnade appar (start via gio); unika pins per output; `only_this_output`-filter; visa skrivbord-knapp; översikt-knapp (scale) 5. **M4 Menyer** — konfigurerbar högerklicksmeny per app (minimera, maximera, flytta till skärm-submeny, pin/unpin, stäng); tomyta-meny (inställningar, ladda om, avsluta) 6. **M5 Settings-GUI** — GTK4-fönster som redigerar hela JSON-configen live (färger, transparens, skuggor, accent, storlek, beteende, pins, menyval, hotspots) 7. **M6 Autohide & hotspots** — autohide med animation + hot edge-väckning; intelligent dodge via Wayfire IPC-geometri (fallback: alltid-dölj); hot corners/edges med exec- eller IPC-actions 8. **M7 Polish & släpp** — profilering (mål: 0 % CPU i vila, < 70 MB RAM), release v0.1.0, wiki-docs 9. **M8 Wayfire-DE-integration** — ersätt `autostart/11-dock.sh` (sfwbar) med waydock, pensionera sfwbar-configen ## Roadmap / expansions (överenskomna) - Autohide + dodge-animering (M6) - Fönsterindikatorer + urgency-puls (M2) - Scroll- och mittklicksåtgärder (M2) - Wayfire IPC-integration för hotspots/översikt/dodge (M3/M6) ## Open questions - Äkta fönsterminiatyrer i grupp-popup är **inte möjliga** — Wayfire exponerar inte `ext_foreign_toplevel_image_capture_source_v1`. Om protokollet dyker upp i senare Wayfire kan miniatyrer läggas till. - Dodge-precision beror på Wayfire IPC:ns view-geometri i 0.11-git — verifieras i M6.