feat(desktop): add XDG portals module for in-app screen sharing (task 0030) #22
Reference in New Issue
Block a user
Delete Branch "task-0030-desktop-portals"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task:
.claude/tasks/0030-desktop-portals.mdSummary
Adds
modules.desktop.portals, enabled by the desktop aggregator, that pins the XDG desktop portal routing explicitly so in-app screen sharing (video calls, browser share) and native file dialogs resolve to a fixed backend.ScreenCast,Screenshot,GlobalShortcuts(confirmed from itshyprland.portalfile) — route to Hyprland./etc/xdg/xdg-desktop-portal/portals.confwithdefault=gtkplus the three Hyprland routes; neogaia's toplevel builds green.Deviations
programs.hyprland→ nixpkgswayland-session.nix) already forces both portal backends (xdg-desktop-portal-hyprland+xdg-desktop-portal-gtk) intoxdg.portal.extraPortalsand enables portals. A backend only answers while its compositor runs, so those packages belong with the compositor and re-declaring them here would only duplicate. The genuinely-missing piece was the routing (xdg.portal.configwas empty), which this module supplies. In-app screen sharing therefore already worked as an implicit side-effect; the deliverable is making it a first-class, aggregator-enabled module.default = [ "gtk" ]with the three Hyprland interfaces routed explicitly, rather thandefault = [ "hyprland" "gtk" ]. This keeps appearance on GTK even if a future Hyprland portal starts implementingorg.freedesktop.impl.portal.Settings.Review
Risk
Overall: LOW
Standards & Spec findings
No unaddressed findings. Standards flagged an over-verbose file header and cross-file narration in the comments; both were fixed (header trimmed to one purpose line, one-sentence-per-line, bare absent-here pointer). Spec confirmed all four acceptance criteria met, and its durability note (appearance could shift off GTK) was addressed by the per-interface routing above.
— Claude