Skip to content

Release: multi-state trigger profiles with analog wheel, NixOS notify-only updates#27

Merged
LordVicky merged 26 commits into
mainfrom
dev
Jul 16, 2026
Merged

Release: multi-state trigger profiles with analog wheel, NixOS notify-only updates#27
LordVicky merged 26 commits into
mainfrom
dev

Conversation

@LordVicky

@LordVicky LordVicky commented Jul 16, 2026

Copy link
Copy Markdown
Owner

What's new

Everything since v1.8.0. #23 and #24 reached main earlier (via the #24 dev→main merge); this PR delivers #25 and #26 — listed together here as the full release changelog.

Game Profile tab: per-game hub (#23)

  • New default landing page: Nvidia-App-style cover grid where every tile is a trigger profile; "Now Playing" hero with live status chips; Add Game tile with running-process detection; art-less tiles get a deterministic gradient + monogram.
  • Per-game hub with a Game Settings / Global Settings scope toggle — the existing full tabs (Audio, Haptics, Trigger Lab, Lighting, Remapping) edit the game's own snapshot, with a scope banner while the hub is open.
  • GameSettingsCoordinator auto-switches settings with game detection (single watcher), persists a crash-safe restore point, and restores global selections on exit.
  • SteamGridDB cover art with the user's own API key, cached per profile; HTTPS-only, size-capped.

Trigger modifiers, installer, and kernel coverage (#24)

  • Hold escalation (hardware-verified): multiple trigger-held-over modifiers on one trigger now escalate — each runs its own timer and the longest satisfied hold wins; non-hold conditions keep first-match priority.
  • Installer applies BlueZ disable-input (vds needs raw HID ownership); NixOS gets services.opends5.disableBluetoothInputPlugin.
  • Kernel-variant headers resolved per distro: CachyOS variants, XanMod, Liquorix, Nobara fsync, openSUSE flavors; dead LLVM=1 path removed.
  • Game Path editor on game profiles for manual process-name matches; About shows the app version.

NixOS notification-only updates (#25)

  • The updater notifies on NixOS but never self-replaces the AppImage or rebuilds drivers; declarative flake update workflow documented.
  • Nix CI evaluates and builds vds, vds-module, opends5; optional Cachix publishing; opt-in local release endpoint for updater UI testing.

Multi-state trigger profiles (#26)

  • States: a game profile holds up to 12 named per-weapon/per-vehicle trigger feels; switching is inferred from controller input, with a menu guard and manual re-anchors.
  • Analog wheel: mirrors stick-driven weapon wheels — hold the wheel button, point the left stick, release to commit. Radial configurator with live stick preview, threshold dead zone, rotation offset, and per-slot widths for unequal wheels.
  • Sentence switch rules: "When I press [CR + →] → switch to Micer", bound by pressing the real controller button (hold a second button for a chord).
  • State position ≡ wheel sector: one number, two synced views; clicking a wheel slice focuses that state in the editor. Live state chips live in the Now Playing hero.
  • Validator stays byte-synced with OpenDS5-Profiles (sync-validator --check in CI); the library already serves multi-state profiles — MOUSE: P.I. For Hire ships as the first verified 12-state wheel profile (OpenDS5-Profiles Make companion window freely resizable with persisted bounds #7/Trigger profiles UI polish + engine startup recognition fixes #8).

Docs

  • README in-app screenshots (11 pages), multi-state wiki guide + design specs, Discord link, Prerequisites wiki page.

Testing

682 companion tests green, typecheck clean, AppImage/flake/validator-sync CI passing; hold escalation, wheel, and capture rules hardware-validated on a DualSense.

Version bumped to 1.8.1; tagging v1.8.1 after merge publishes the release.

LordVicky and others added 26 commits July 15, 2026 21:37
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017N92BmQvFrnpfRwepiUcVH
Profiles may now declare named states (each a full per-trigger effect
set) plus switching rules that map controller button presses to state
changes, with a menu guard and manual selection as the drift correction
path. The evdev reader learns create/options/ps and the d-pad hat axes
so rules can bind to them. EngineStatus carries the active state name
and a new bridge:selectTriggerProfileState IPC selects states from the
renderer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017N92BmQvFrnpfRwepiUcVH
The editor gains a states strip (add/rename/duplicate/remove, per-state
effect editing with live preview), a State Switching group for rules,
menu guard, and default state, and the page heading shows clickable
state chips for the active profile as the manual re-sync path. The
README's 'one feel per game' limitation is rewritten to describe
inferred state switching honestly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017N92BmQvFrnpfRwepiUcVH
The session's GitHub access cannot push to the wiki repo (403), so the
page lives here ready to publish to the wiki.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017N92BmQvFrnpfRwepiUcVH
- Make the automatic updater notification-only on NixOS (new 'notify' phase)
- Skip AppImage replacement and controller-driver rebuilds on NixOS
- Allow NixOS package installs without an APPIMAGE path
- Add declarative flake-based NixOS module (opends5 package, vds group socket access, disableBluetoothInputPlugin)
- Document the flake-based NixOS installation and update workflow
- Extend Nix CI to build vds, vds-module, and opends5; optional Cachix publishing
- Add opt-in local release endpoint override for updater UI testing
Multi-state trigger profiles: analog stick wheel, sentence rules, position/sector sync
@LordVicky
LordVicky merged commit 8fc9ce8 into main Jul 16, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants