What's Changed
- Linux/niri shortcuts now call a shun-owned resident D-Bus API directly instead of starting an AppImage and initializing GTK for every keypress.
- Added the public session interface
com.yukimemi.shun.Control1withShow,Toggle, andHotkey(string)methods. This does not call the single-instance plugin's private API. - Standard D-Bus activation starts a missing resident with the bootstrap-only
--residentmode, so the queued API method is the only requested action. - Accepted Linux operations share a FIFO. Errors after attempted delivery are never implicitly replayed through GUI startup.
- Preserve registered native X11 app targets/modes until
/reload, including in-flight behavior and current overrides. - Synchronize startup UI notifications with explicit frontend readiness rather than a fixed startup delay; deferred UI handling never re-shows a hidden native window.
- Keep niri synchronization opt-in and default-off. It updates only the existing dedicated include file, with staged validation and symlink/permission safeguards.
- Synchronize all release version metadata, including npm and Rust lockfile root entries.
Platform behavior
niri = true has no effect on Windows or macOS. The niri synchronization and D-Bus control modules are Linux-only; native Windows/macOS shortcut registration remains enabled. On Linux, niri file synchronization additionally requires a niri session.
Upgrading an existing niri setup
Keep the existing top-level include "shun-binds.kdl" in niri's config. With top-level niri = true in shun's config, launching the updated binary or running /reload regenerates the dedicated file with direct public-API calls. No begin/end markers or main-config rewrite are needed.
The generated path requires busctl and a user session D-Bus. When opted in, shun installs its own activation descriptor under the user data directory's dbus-1/services/. The first request after shun exits still pays the normal backend startup cost; subsequent requests do not start another GUI.
niri = false stops synchronization without deleting existing user files or bindings.
Verification and limits
- magi review and targeted follow-up completed with no blocking findings. Evaluated nonblocking notes and rationale are recorded in PR #314.
- Formatting, clippy, 235 Rust tests, 156 frontend tests, and locked dependency checks passed. Three environment-dependent regressions were explicitly run and passed.
- Real native-Wayland/private-session verification covered warm API calls, early CLI without a usable client display, error/no-replay behavior, bootstrap-only no-action behavior, one configured action per accepted request, cold activation, target-window reuse, and cold Show/Toggle rendering.
- The originally reported intermittent physical-key duplicate-app symptom was not reproduced, so this release does not claim a proven root cause for that symptom.
Full changes: v5.6.3...v5.6.4
Implementation: #314
Release preparation: #315