A macOS menu bar app to remap the 12 side buttons of the Razer Naga V2 Hyperspeed. Intercepts the default 1–0–=– key events and maps them to actions like key sequences, app launching, and macros. Includes Bluetooth battery level display.
⬇️ Download Latest Release (v0.1.0)
- Remap Naga side buttons 1–12 to:
- Key sequences
- Launch applications
- Simple macros
- Profile switching
- Toggle remapping ON/OFF from the menu bar
- Configure mappings in a dedicated window
- Battery percentage display via Bluetooth (UUID 0x180F / 0x2A19)
- Modern dark UI with Razer-green accents
- macOS 13.0 or later
- Razer Naga V2 Hyperspeed (other Naga models may work; device matching by vendor/product name is included)
- Bluetooth enabled (for battery reporting)
- Download
NagaController-v0.1.0.dmgfrom Releases - Open the DMG file
- Drag
NagaController.appto the Applications folder - Double-click
NagaController.appto launch
- Click the menu bar icon → turn ON "Enable remapping"
- Click "Configure mappings…" to set actions for buttons 1–12
- Accessibility: System Settings → Privacy & Security → Accessibility → enable "NagaController"
- Bluetooth (battery): System Settings → Privacy & Security → Bluetooth → allow "NagaController"
- Tip: Always launch the same
.appyou granted permissions to (avoid running other binaries) so permissions persist
- Battery percentage works over Bluetooth (BLE) only; vendor 2.4GHz dongles typically don't expose battery via public APIs
- Razer Naga family, tested on:
Naga V2 Hyperspeed (Naga V2 HS) - Matching logic in
Sources/NagaController/HID/HIDListener.swift:- Vendor IDs:
0x1532(Razer) or0x068e(observed on some Naga V2 HS units) - OR product name contains
"naga"(case-insensitive) as a fallback
- Vendor IDs:
- Regular keyboards are not remapped. Events are only blocked when a recent HID press from a matching Naga device is correlated with the event tap
- Grant Accessibility permissions (System Settings → Privacy & Security → Accessibility) and ensure the app is checked
- Launch from Terminal to see diagnostics:
./NagaController.app/Contents/MacOS/NagaController
- Turn ON "Enable remapping" in the menu bar popover
- Expected logs:
- Startup:
[HID] Listener started (vendors: 0x68e, 0x1532; plus product contains 'naga')[HID] Device matched: vendor=0x68e, product=Naga V2 HS(your device may vary)
- On side-button press:
[HID] Press recorded: vendor=0x..., product=..., usage=0x1e, buttonIndex=1(etc.)
- On keyboard safety (non-Naga):
[HID] Ignored keyboard usage from device: vendor=0x..., product=...
- Startup:
- If mouse buttons still type digits instead of your mapping:
- Ensure remapping is enabled
- Verify the Accessibility permission is granted
- Paste the relevant
[HID] Device matchedand[HID] Press recordedlines into an issue so we can whitelist your device if needed
NagaController can show your mouse battery percentage when the mouse is connected over Bluetooth (BLE). It uses the standard Battery Service (UUID 0x180F) and Battery Level characteristic (0x2A19).
This does not work over the HyperSpeed 2.4GHz dongle — most vendor dongles do not expose battery via public APIs.
- On launch, the app requests Bluetooth permission and then:
- Tries
retrieveConnectedPeripherals(withServices: [0x180F])to attach to already-connected devices - Falls back to scanning for devices that advertise
0x180For whose name contains "Razer"/"Naga"
- Tries
- Once connected, it reads Battery Level and subscribes for updates
- The battery percentage is displayed in the menu bar title and in the popover. At 20% or lower, the popover label turns red and a local notification is shown
- System Settings → Privacy & Security → Bluetooth → allow "NagaController"
- Connect your mouse via Bluetooth and ensure it's awake
- Ensure the device is connected over Bluetooth (not via the HyperSpeed dongle)
- Wake the mouse (move/click) and re-open the popover
- Launch from Terminal to see BLE diagnostics
# Build release app bundle
bash Scripts/build_app.sh
# Run the app
./NagaController.app/Contents/MacOS/NagaControllercd dmg-assets
./setup-app-icon-and-dmg-simple.shThis creates a signed and notarized DMG installer.
Sources/NagaController/— App source code (Swift + AppKit)Resources/— Info.plist, default profilesScripts/— Build helper scriptsTests/— Unit testsdmg-assets/— Icon, background, and DMG creation script
Issues and logs are welcome. If your Naga isn't detected, please include the [HID] lines from the app's console output.
See LICENSE for details.