4.5 KiB
4.5 KiB
DeckShift — maintainer notes
Working notes for future development sessions. User-facing docs live in README.md.
Current state (2026-07-27)
- v0.1.15 released — commit
8ba6e72, tagged, pushed to both remotes (Forgejonosignal/deckshift+ GitHub28allday/deckshift; theforgejoremote pushes to both). - v0.1.14 was skipped: that label was used by a keybind-change commit
(
0844f02, Super+Shift+S → Super+Shift+G) that was reverted before release. - Dev/reference machine: Omarchy 4 desktop (AMD RX 9060 XT), install verified
with
./deckshift.sh --verify— all checks passed, including the two checks added in v0.1.15.
Omarchy 4 facts that shape this codebase
Discovered during the 2026-07-27 compatibility audit; verify against a live system before assuming they still hold.
- Hyprland runs on Omarchy's Lua config provider —
hyprctl systeminforeportsconfigProvider: lua. Every~/.config/hypr/*.conffile (bindings.conf, autostart.conf, windows.conf, ...) is completely ignored, even thoughhyprland.confstill containssource =lines for them. Proof method: a bind present only in bindings.conf does not appear inhyprctl binds -j. - User override files are Lua:
~/.config/hypr/bindings.lua,autostart.lua, etc., loaded after Omarchy's defaults. API (defined in~/.local/share/omarchy/default/hypr/helpers.lua):o.bind("SUPER + SHIFT + S", "Description", "command")hl.unbind("SUPER + SHIFT + S")— required before rebinding a combo the Omarchy defaults claim; duplicate Hyprland binds BOTH fire.o.launch_on_start("command")— exec-once equivalent (wraps the command witho.launch(), i.e. uwsm-app).
- Walker/elephant are gone:
omarchy-restart-walkerandelephantno longer exist (walkerbinary may linger as an orphan). The Quickshell-based omarchy-shell owns the app menu, notifications, and clipboard. The clipboard holder starts fresh with each Hyprland session, so the pre-4 stale-socket clipboard bug (v0.1.5/v0.1.6 fix) cannot recur — that code was removed.omarchy-restart-shellexists if a shell bounce is ever needed. - Still present and safe to depend on:
omarchy-pkg-add,omarchy-hw-nvidia-gsp/-without-gsp,omarchy-install-gaming-steam,uwsm-app, theTUI.floatfloating-window rule (default/hypr/apps/system.lua),xdg-terminal-exec.
Conventions
- Omarchy-only, not distro-portable — depend on
omarchy-*helpers freely; no non-Omarchy fallbacks. (Pre/post-Omarchy-4 version branching is fine and used for the bindings/autostart writers.) - Lua-first,
.conffallback: every Hyprland config write site checks for the.luaoverride file first, falls back to the legacy.conf, warns if neither exists. Keep new write sites consistent with this. - All config writes are idempotent (grep-before-append). Re-running
./deckshift.shon an existing install migrates.confwiring to.luaautomatically (the stale.conflines are left in place — they're dead files under Omarchy 4). - Release flow: bump
DECKSHIFT_VERSION, README header + changelog entry, commitvX.Y.Z — summary, annotated tag,git push forgejo master && git push forgejo vX.Y.Z(covers both remotes).
Testing checklist for future changes
bash -n deckshift.sh bin/deckshift-settings+shellcheck -S warningon both (pre-existing SC2155/SC1090 warnings are known noise)../deckshift.sh --verifyon the dev box.- After touching keybind/autostart wiring:
hyprctl reload+hyprctl configerrorsmust come back clean, and confirm viahyprctl binds -jthat the bind is actually live (don't trust file contents — that's exactly how the v0.1.15 bug hid). - Full round-trip (enter + return + screen-share + clipboard) when touching anything in switch-to-gaming / gaming-session-switch / portal recovery.
Open items / ideas
- Real hardware round-trip test of v0.1.15 portal recovery (enter Gaming Mode, return, confirm "Share desktop" works in Chromium) — wiring is verified, the end-to-end path hasn't been re-run since the change.
- SDDM
Relogin=truehas no backoff: a crash-looping gamescope session respawns several times per second until gamescope-session-plus's 5-strike short-session tracker recovers. Escape hatch from a tty:sudo /usr/local/bin/gaming-session-switch desktop && sudo systemctl restart sddm. Worth a proper fix someday. - The
--noninteractivemode sketched for NoSignal OS integration was never committed here; re-implement from scratch if needed.