diff options
| author | srdusr <[email protected]> | 2025-09-14 23:04:00 +0200 |
|---|---|---|
| committer | srdusr <[email protected]> | 2025-09-14 23:04:00 +0200 |
| commit | b46dfa56504f62ecf969914dfed106bf587c4c4a (patch) | |
| tree | aaeb47404ad0f5771198ac84ae1fb5afe34d1a99 /docs/FEATURE_GAP.md | |
| parent | b219797e2143ea84cf527fbf48afb22cc35fe9a5 (diff) | |
| download | srdwm-b46dfa56504f62ecf969914dfed106bf587c4c4a.tar.gz srdwm-b46dfa56504f62ecf969914dfed106bf587c4c4a.zip | |
Docs: master TODO/DEFAULTS/status updates, feature-gap survey, lockfile
docs/TODO.md is this shift's single consolidated pending-work list (see
its own header for why it exists alongside PANEL_SUPPORT_TODO.md/
SESSION_HANDOFF.md rather than replacing them) - every commit in this
batch has its own dated entry there with the full root-cause/
verification narrative. docs/DEFAULTS.md corrected against the real
config engine and extended for every new general.* key this shift added
(aspect_ratio rule action, phone_mode). docs/FEATURE_GAP.md is a new
survey against niri/Hyprland/sway, requested directly. docs/
IMPLEMENTATION_STATUS.md and docs/PRIOR_ART.md updated to match.
Cargo.lock reflects the new resvg/usvg/tiny-skia dependencies (real
icon-theme SVG rendering).
Diffstat (limited to 'docs/FEATURE_GAP.md')
| -rw-r--r-- | docs/FEATURE_GAP.md | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/docs/FEATURE_GAP.md b/docs/FEATURE_GAP.md new file mode 100644 index 0000000..4db87e2 --- /dev/null +++ b/docs/FEATURE_GAP.md @@ -0,0 +1,123 @@ +# Feature gap survey: srdwm vs. comparable Wayland compositors + +Requested directly: compare srdwm against similar projects and note what +else is worth having. Compared against niri (cloned at +`~/reference-wms/niri`, smithay-based like `crates/wayland`, the closest +architectural sibling per `docs/PRIOR_ART.md`) plus general knowledge of +Hyprland and sway, since neither is cloned locally. srdwm is dynamic/ +floating-first with opt-in tiling (`crates/core/src/layout.rs`), not +tiling-first - comparisons below are scoped to what a daily-driver desktop +user would actually notice, not "does it tile as well as sway." + +## Already comparable + +Confirmed by reading the actual code, not by trusting `docs/TODO.md`'s own +claims: + +- **Session lock** (`ext-session-lock-v1`) - full implementation + (`crates/wayland/src/lock.rs`), verified live with a purpose-written + protocol test client, not just against a real locker binary. +- **Tiling** - a real dwm/i3-style master-stack layout + (`crates/core/src/layout.rs`), opt-in per srdwm's dynamic-first design, + not the only layout. +- **Global menu / app menu export** - `com.canonical.AppMenu.Registrar` + and dbusmenu (`crates/platform/src/appmenu_registrar.rs`, + `crates/wayland/src/appmenu.rs`). Neither niri nor sway ship this at all; + it is a GNOME-HUD/Unity-era convention most compositors dropped. +- **Right-click desktop/icon context menus** - real, compositor-owned + floating UI (`crates/wayland/src/desktop_menu.rs`, + `crates/wayland/src/context_menu.rs`). niri and sway have no desktop + icons at all; this is closer to what Hyprland users get from a separate + panel, but srdwm draws it itself. +- **Gamma control** (`wlr-gamma-control-unstable-v1`, night-light/redshift- + style color temperature) - `crates/wayland/src/gamma_control.rs`. Same + protocol niri implements. +- **Idle handling** (`ext-idle-notify-v1`, `zwp-idle-inhibit-manager-v1`) + - `crates/wayland/src/protocols/idle.rs`, `crates/wayland/src/ + output_power.rs`. Screen-dim/DPMS-on-idle and an app's ability to + suppress it (a video call staying awake) both work. +- **Layer-shell** (bars, docks, launchers, notifications) - full, with + exclusive-zone handling on fractionally-scaled outputs (a genuinely hard + case niri and sway both get right too, and srdwm has now independently + fixed the same class of bug on its own scale-below-1.0 feature). +- **Output management** (`wlr-output-management-unstable-v1`) - real, + plus srdwm's own layout persistence (`crates/wayland/src/ + monitor_layout.rs`) that neither waits on nor depends on a panel to + restore monitor position/enabled-state across a restart. +- **XWayland** - full, with WM_TRANSIENT_FOR-based dialog detection, + clipboard bridging, and EWMH. + +## Genuine gaps, ranked by how much a daily user would notice + +1. **No screen-sharing / video-call screen capture.** `grep -rn pipewire` + and `grep -rn portal` across `crates/wayland/src` return nothing. niri + ships real PipeWire-backed screencasting (`src/screencasting/ + pw_utils.rs`) so `xdg-desktop-portal-wlr`/`-gnome` can hand a window or + output to Zoom, Discord, Google Meet, OBS, etc. srdwm has + `zwlr_screencopy_manager_v1` (one-shot capture, what `grim` uses) but + nothing a portal can wire to for a *live* video stream. This is the + single most likely thing a daily user hits and can't work around -- + worth scoping as real work, not a one-line addition (needs a PipeWire + dependency and an `xdg-desktop-portal` backend, or at minimum wiring an + existing generic wlr backend against srdwm's own screencopy). +2. **No `zwlr_virtual_pointer_manager_v1`.** Already flagged in `docs/ + TODO.md`'s own protocol-gaps section: `ydotool` and any UI-automation + tool that wants precise synthetic clicks has no real protocol path here + (`zwp_virtual_keyboard_manager_v1` exists; the pointer half doesn't). + niri implements this (`src/protocols/virtual_pointer.rs`). Directly + relevant to this project's own testing methodology, independent of + whether any real user-facing app needs it. +3. **No `ext-workspace-v1`.** srdwm's workspaces are real and queryable + (`srd workspaces`), but only through its own bespoke IPC - a + third-party panel/switcher that speaks the standardized + `ext-workspace-v1` protocol (what niri and sway both also implement + for exactly this reason) has nothing to bind to. Low-impact today only + because AGS is a first-party shell built against `srd`'s own IPC + directly; would matter the moment someone wants to run a generic + workspace-switcher widget unmodified. +4. **No touchscreen support (`wl_touch`).** Zero matches for + `TouchHandler`/touch-slot handling anywhere in `crates/wayland/src`. + Both niri and sway support it. Not clearly a gap worth closing blind -- + see `docs/TODO.md`'s own "decide scope first" note on this: a + touchscreen on a device with no on-screen keyboard/gesture layer is a + different, larger product decision than just wiring the protocol. +5. **No accessibility tree (AccessKit or similar).** niri ships a real + `a11y.rs` exposing window/workspace state to assistive tech via + AccessKit. Nothing comparable exists in srdwm. Niche for this specific + user's own daily-driver use case, but worth naming since sway has had + growing accessibility interest too. +6. **No live/animated wallpaper support in the compositor itself.** Not + actually a gap versus niri or sway - neither of them render wallpapers + either; that is `swaybg`/`swww`/`mpvpaper`-style external clients' + job, and srdwm already has exactly that split (`awww`, a swww fork, + launched from `~/.config/srd/autostart.sh`, with the compositor just + compositing whatever that client draws via layer-shell). If "live + wallpapers" means something *animated* rather than just a static image, + that is an `awww`/wallpaper-daemon feature request, not a compositor + one - worth confirming with whoever owns that tool before treating it + as an srdwm gap at all. + +## Deliberately out of scope / not real gaps + +- **Multi-GPU.** Documented and accepted (`docs/IMPLEMENTATION_STATUS.md`): + only the primary GPU's connectors are driven, a GPU appearing/ + disappearing is logged and ignored. Neither a laptop-daily-driver nor + this machine's real hardware needs it. +- **A native GUI settings app.** Never existed even as working code in + the legacy C++ project; Lua config plus `srd` CLI covers the same + ground niri's own KDL config file does, and neither niri nor sway ship + a GUI settings app either - this would be an srdwm-specific addition, + not catching up to a peer. +- **Hardware DRM cursor plane / direct scanout / VRR / HDR.** Real, + ranked gaps against niri and Hyprland specifically (both do real + GPU compositing with these), but already tracked in `docs/TODO.md`'s + own "Render pipeline - researched, ranked, not started" section as + large, sequenced architectural work, not something this survey adds + anything new to. +- **"Different monitor modes combined in one," phone-monitor/VM special + workspace, optional AGS/srdwm phone mode.** None of niri, sway, or + Hyprland have anything resembling these - they are not features to + catch up on from a peer project, they are net-new product ideas + specific to this user's own workflow. Out of scope for a feature-parity + survey; each needs its own real design pass (see `docs/TODO.md`/the + night's parked questions for what's still undecided about them). |