Skip to content

feat: expose LunaFury controls and game profiles - #598

Merged
snekxs merged 2 commits into
OpenMouse-Project:mainfrom
sekiranunn:feat/lunafury-support
Oct 6, 2026
Merged

snekxs merged 2 commits into
OpenMouse-Project:mainfrom
sekiranunn:feat/lunafury-support

Conversation

@sekiranunn

Copy link
Copy Markdown
Contributor

Dependency and draft status

Depends on mouse-protocol #168.

This draft depends on the unreleased LunaFury APIs in @openmouse/protocol.
After the protocol changes are merged and published, the dependency and
lockfile will be updated and the standard CI checks rerun.

The current 0.23.0 release lacks the new APIs. This candidate leaves the
manifest and lockfile unchanged and includes no file or Git dependency,
preserving the existing approved-dependency CI policy.

Summary

  • Add Lightning Trigger, independent left/right latency, middle debounce,
    and wheel anti-mistouch to Buttons, and sensor angle to Processing.
    Controls use the existing cards, theme tokens, availability checks, and
    staged setters. Unread controls stay hidden, with generic debounce as a
    fallback.
  • Use LunaFury's official names for Competitive Mode (hyperMode), Tracking
    Mode (performanceMode), Angle Snap, Motion Sync, and Ripple Control.
    Other brands' labels and the underlying command mappings are unchanged.
  • Show Tracking Mode only when Competitive Mode is enabled, as the vendor
    UI does. Hiding it preserves its stored value; staged writes follow the
    mode dependency order.
  • Save, apply, and restore individual LunaFury fields in Games profiles.
    Successive game switches preserve the original values of each changed
    control, including valid zero values. Imported fields are validated, and
    controls unavailable on the device are ignored.
  • Add translations for all 11 existing locales. The supported-devices entries
    remain likely; LUNA33's hardware result is recorded below, while TYPE33
    remains unverified.

Hardware verification

I tested all implemented features on LUNA33 over both wired and 8K receiver
connections with firmware 0.0.26.0. TYPE33 has not been tested on hardware.

Verification

The candidate is based on OpenMouse
c816aa6e93bc3f514b5a76f5ebbbb644e5846acc and was tested with the packed local
protocol API. The application manifest and lockfile were unchanged:

  • npm run check: build and 287 tests passed.
  • npm run size: CSS 194026 / 195000; JS 2046284 / 2085000 bytes.
  • npm audit --audit-level=high: zero vulnerabilities.
  • git diff --check: passed; changes are source-only and use LF.
  • Protocol full check: 2047 tests passed, including registry overlap matrix.
  • Games tests cover partial serialization, touched baseline values, apply and
    restore, unsupported/invalid imports, preserved zero values, multiple-game
    namespace merging, and pending lightning/latency ordering.

0.24.0 publishes the LunaFury APIs this branch needs (LunaFurySettings,
LunaFuryButton, LunaFuryLightningMode, LunaFuryWheelGuard, MouseStatus.lunafury,
MouseStatus.brand "LunaFury"), so the type-check against the pinned version
now passes. tsc --noEmit clean, 287/287 tests, vite build clean.
@snekxs
snekxs marked this pull request as ready for review October 6, 2026 01:01
@snekxs
snekxs merged commit f3d398e into OpenMouse-Project:main Oct 6, 2026
1 check 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.

2 participants