{"id":51153784,"url":"https://github.com/danscmax/sidearm","last_synced_at":"2026-06-26T09:00:44.105Z","repository":{"id":344674273,"uuid":"1182677147","full_name":"danscMax/Sidearm","owner":"danscMax","description":"Desktop workflow studio for Razer Naga mice. 36 buttons, per-app profiles, macros, auto-switching. Tauri v2 + Rust + React.","archived":false,"fork":false,"pushed_at":"2026-06-25T10:27:47.000Z","size":7872,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-25T12:07:23.664Z","etag":null,"topics":["button-remapping","gaming-mouse","key-remapping","keyboard-shortcuts","macros","mouse","productivity","razer-naga","razer-naga-pro","razer-naga-v2","razer-synapse","react","rust","tauri","windows","workflow"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danscMax.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-15T20:39:36.000Z","updated_at":"2026-06-25T10:27:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/danscMax/Sidearm","commit_stats":null,"previous_names":["danscmax/sidearm"],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/danscMax/Sidearm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danscMax%2FSidearm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danscMax%2FSidearm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danscMax%2FSidearm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danscMax%2FSidearm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danscMax","download_url":"https://codeload.github.com/danscMax/Sidearm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danscMax%2FSidearm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34809886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-26T02:00:06.560Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["button-remapping","gaming-mouse","key-remapping","keyboard-shortcuts","macros","mouse","productivity","razer-naga","razer-naga-pro","razer-naga-v2","razer-synapse","react","rust","tauri","windows","workflow"],"created_at":"2026-06-26T09:00:23.031Z","updated_at":"2026-06-26T09:00:44.089Z","avatar_url":"https://github.com/danscMax.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Sidearm\n\n**Your mouse buttons, your rules.**\n\nDesktop workflow studio for multi-button mice.\nTurn 36 buttons into a personal command center.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![Platform: Windows](https://img.shields.io/badge/Platform-Windows%2010%2F11-blue.svg)](#requirements)\n[![Built with Tauri v2](https://img.shields.io/badge/Tauri-v2-orange.svg)](https://v2.tauri.app)\n\n[**English**](#-what-is-sidearm) | [**Русский**](#-что-такое-sidearm)\n\n\u003c/div\u003e\n\n---\n\n## EN What is Sidearm?\n\nSidearm turns a multi-button mouse into a **per-app productivity powerhouse**. Each of the 36 buttons can trigger keyboard shortcuts, paste text, launch apps, run macro sequences, and more. Switch between apps -- and the button layout switches with you automatically.\n\nBuilt with **Tauri v2** (Rust + React). Single-process, native Windows app. No Electron, no Python, no bloat.\n\n### The Problem\n\nYou have a gaming mouse with 12+ thumb buttons. Outside of games, they collect dust. Razer Synapse lets you bind them to keys, but:\n\n- Bindings are global -- the same in every app\n- No per-app profiles that switch automatically\n- No macros with timing, no text paste, no sequences\n- No visual feedback on what each button does\n\n### The Solution\n\nSidearm intercepts the key signals your mouse sends (F13--F24, etc.) and maps them to **context-aware actions** based on which application is currently in focus.\n\n### Features\n\n| Feature | Description |\n|---------|-------------|\n| **36 buttons** | 12 thumb + 5 top + scroll + Hypershift doubles everything |\n| **9 action types** | Keyboard shortcut, mouse action, text snippet, macro, app launch, media key, profile switch, context menu, disable |\n| **Per-app profiles** | Automatic switching when you Alt+Tab. Excel, VS Code, browser -- each gets its own layout |\n| **Two layers** | Standard + Hypershift: every button has two bindings |\n| **Macro recorder** | Record keystrokes with timing, edit delays, add text/launch steps |\n| **Live diagnostics** | Test button bindings in real time, see the full signal resolution chain |\n| **Heatmap** | See which buttons you actually use (execution counter on each button) |\n| **Verification** | Step-by-step hardware test of every button mapping |\n| **Logging** | Persistent log files with rotation + real-time in-app log viewer |\n| **Portable** | Single .exe, no installer needed |\n\n### Screenshot\n\n![Sidearm main view](docs/screenshots/main-view.png)\n\n---\n\n## Prerequisites: Setting Up Razer Synapse\n\nBefore using Sidearm, you need to configure Razer Synapse to emit **unique key signals** for each mouse button. Sidearm intercepts these signals and maps them to actions.\n\n### Step 1: Open Razer Synapse\n\nOpen Razer Synapse and select your Naga mouse.\n\n### Step 2: Remap Thumb Buttons to F13--F24\n\nFor each of the 12 thumb buttons, assign a unique function key that isn't used by your keyboard:\n\n| Thumb Button | Recommended Key |\n|-------------|----------------|\n| 1 | F13 |\n| 2 | F14 |\n| 3 | F15 |\n| 4 | F16 |\n| 5 | F17 |\n| 6 | F18 |\n| 7 | F19 |\n| 8 | F20 |\n| 9 | F21 |\n| 10 | F22 |\n| 11 | F23 |\n| 12 | F24 |\n\n### Step 3: Remap Top Buttons\n\nFor the DPI and extra top buttons, use modifier + F-key combinations:\n\n| Top Button | Recommended Key |\n|-----------|----------------|\n| DPI Up (D+) | Ctrl+Shift+F13 |\n| DPI Down (D-) | Ctrl+Shift+F14 |\n| Button 4 (Back) | Mouse 4 (keep default) |\n| Button 5 (Forward) | Mouse 5 (keep default) |\n\n### Step 4: Configure Hypershift Layer\n\nRepeat the same mapping for the Hypershift layer, but use **different** modifier combinations (e.g., Ctrl+Alt+F13 through Ctrl+Alt+F24). This gives you a second set of 12+ buttons accessible by holding the Hypershift trigger.\n\n### Step 5: Launch Sidearm\n\nOnce Synapse is configured, launch Sidearm. It will intercept the F13--F24 signals and execute your configured actions instead.\n\n\u003e **Tip:** Sidearm starts intercepting on launch. You can verify each button works in the **Diagnostics** tab by entering a signal code (e.g., `F13`) and clicking **Test**.\n\n---\n\n## Installation\n\n### Portable (recommended)\n\n1. Download `Sidearm.exe` from [Releases](https://github.com/danscMax/Sidearm/releases)\n2. Place it anywhere on your drive\n3. Run it -- that's it\n\nNo installer, no registry entries, no admin rights needed.\n\n### Requirements\n\n- **Windows 10** version 1809+ or **Windows 11**\n- **WebView2 Runtime** (bundled with Windows 11; on Windows 10 use the included installer in `resources/`)\n- **Razer Synapse** for initial mouse button remapping\n\n---\n\n## Usage Tips\n\n### Recommended Shortcuts for Productivity\n\nHere are some high-value bindings to get started:\n\n| Button | Excel | VS Code | Browser |\n|--------|-------|---------|---------|\n| 1 | Ctrl+C (Copy) | Ctrl+Shift+P (Command) | Ctrl+T (New tab) |\n| 2 | Ctrl+V (Paste) | Ctrl+P (Quick open) | Ctrl+W (Close tab) |\n| 3 | Ctrl+Z (Undo) | Ctrl+Shift+F (Search) | Ctrl+L (Address bar) |\n| 4 | Ctrl+S (Save) | Ctrl+` (Terminal) | Ctrl+Shift+T (Reopen) |\n| 5 | Ctrl+F (Find) | Ctrl+B (Sidebar) | F5 (Refresh) |\n| 6 | Delete | Ctrl+D (Multi-cursor) | Ctrl+J (Downloads) |\n\n### Hypershift = Double Your Buttons\n\nHold the Hypershift button and every thumb key becomes a **second action**. Use the Standard layer for frequent operations and Hypershift for less common ones.\n\n### Profile Auto-Switching\n\nCreate profiles in the **Profiles** tab and add application rules. Sidearm detects the foreground window and switches profiles automatically. You'll see an OSD notification in the corner when it switches.\n\n---\n\n## Building from Source\n\n```bash\n# Requirements: Node.js 20+, Rust 1.77+, Windows 10/11\n\n# Clone\ngit clone https://github.com/danscMax/Sidearm.git\ncd Sidearm\n\n# Install dependencies\nnpm install\n\n# Development (hot reload)\ncargo tauri dev\n\n# Portable release build\n.\\build_portable.bat\n# Output: ..\\Sidearm-Portable\\Sidearm.exe\n```\n\n## Architecture\n\n```\nMouse button press (F13)\n    -\u003e Windows LL keyboard hook intercepts the signal\n    -\u003e Resolver: active window -\u003e app rule -\u003e profile -\u003e button -\u003e binding\n    -\u003e Executor: sends keystrokes / types text / launches app / plays macro\n    -\u003e UI: diagnostics, heatmap, and log viewer update in real time\n```\n\n### Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Backend | Rust, `windows-sys`, low-level keyboard hooks |\n| Frontend | React 19, TypeScript, Vite 8 |\n| Framework | Tauri v2 (single process, ~18 MB binary) |\n| Logging | `tauri-plugin-log` v2 (file rotation + real-time viewer) |\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n# RU Что такое Sidearm?\n\n\u003c/div\u003e\n\nSidearm превращает многокнопочную мышь в **контекстно-зависимый центр продуктивности**. Каждая из 36 кнопок может выполнять клавиатурные сочетания, вставлять текст, запускать приложения, проигрывать макросы. Переключаете окно -- раскладка кнопок переключается автоматически.\n\nПостроен на **Tauri v2** (Rust + React). Нативное Windows-приложение в одном процессе. Без Electron, без Python.\n\n### Проблема\n\nУ вас игровая мышь с 12+ боковыми кнопками. Вне игр они простаивают. Razer Synapse позволяет привязать их к клавишам, но:\n\n- Привязки глобальные -- одинаковые во всех приложениях\n- Нет автоматического переключения профилей по приложениям\n- Нет макросов с таймингами, вставки текста, последовательностей\n- Нет визуальной обратной связи, что делает каждая кнопка\n\n### Решение\n\nSidearm перехватывает сигналы клавиш (F13--F24 и т.д.) от мыши и выполняет **контекстно-зависимые действия** в зависимости от активного приложения.\n\n### Возможности\n\n| Функция | Описание |\n|---------|----------|\n| **36 кнопок** | 12 боковых + 5 верхних + колесо + Hypershift удваивает все |\n| **9 типов действий** | Сочетания клавиш, действия мыши, текст, макросы, запуск приложений, медиа, переключение профилей, контекстное меню |\n| **Профили по приложениям** | Автоматическое переключение при Alt+Tab. Excel, VS Code, браузер -- у каждого своя раскладка |\n| **Два слоя** | Стандартный + Hypershift: каждая кнопка имеет два назначения |\n| **Запись макросов** | Запись нажатий с таймингами, редактирование задержек |\n| **Живая диагностика** | Тестирование привязок в реальном времени |\n| **Тепловая карта** | Счетчик нажатий на каждой кнопке |\n| **Верификация** | Пошаговая проверка каждого назначения |\n| **Логирование** | Лог-файлы с ротацией + просмотрщик в приложении |\n| **Портативность** | Один .exe, без установщика |\n\n### Скриншот\n\n![Sidearm главный вид](docs/screenshots/main-view.png)\n\n---\n\n## Подготовка: настройка Razer Synapse\n\nПеред использованием Sidearm нужно настроить Razer Synapse, чтобы кнопки мыши отправляли **уникальные сигналы**.\n\n### Шаг 1: Переназначьте боковые кнопки на F13--F24\n\n| Кнопка | Рекомендуемая клавиша |\n|--------|----------------------|\n| 1 | F13 |\n| 2 | F14 |\n| 3 | F15 |\n| 4 | F16 |\n| 5 | F17 |\n| 6 | F18 |\n| 7 | F19 |\n| 8 | F20 |\n| 9 | F21 |\n| 10 | F22 |\n| 11 | F23 |\n| 12 | F24 |\n\n### Шаг 2: Переназначьте верхние кнопки\n\n| Кнопка | Рекомендуемая клавиша |\n|--------|----------------------|\n| DPI+ | Ctrl+Shift+F13 |\n| DPI- | Ctrl+Shift+F14 |\n| Назад | Mouse 4 (по умолчанию) |\n| Вперед | Mouse 5 (по умолчанию) |\n\n### Шаг 3: Настройте слой Hypershift\n\nПовторите те же назначения для Hypershift-слоя, но с другими модификаторами (например, Ctrl+Alt+F13 -- Ctrl+Alt+F24).\n\n### Шаг 4: Запустите Sidearm\n\nSidearm перехватит сигналы F13--F24 и выполнит настроенные вами действия.\n\n\u003e **Совет:** Проверить работу каждой кнопки можно на вкладке **Диагностика** -- введите код сигнала (например, `F13`) и нажмите **Проверить**.\n\n---\n\n## Установка\n\n### Портативная версия (рекомендуется)\n\n1. Скачайте `Sidearm.exe` из [Releases](https://github.com/danscMax/Sidearm/releases)\n2. Поместите в любую папку\n3. Запустите\n\nНе нужен установщик, права администратора или записи в реестр.\n\n### Требования\n\n- **Windows 10** (1809+) или **Windows 11**\n- **WebView2 Runtime** (встроен в Windows 11; для Windows 10 используйте установщик из `resources/`)\n- **Razer Synapse** для первоначальной настройки кнопок мыши\n\n---\n\n## Рекомендуемые сочетания\n\n| Кнопка | Excel | VS Code | Браузер |\n|--------|-------|---------|---------|\n| 1 | Ctrl+C (Копировать) | Ctrl+Shift+P (Палитра) | Ctrl+T (Новая вкладка) |\n| 2 | Ctrl+V (Вставить) | Ctrl+P (Быстрый доступ) | Ctrl+W (Закрыть вкладку) |\n| 3 | Ctrl+Z (Отменить) | Ctrl+Shift+F (Поиск) | Ctrl+L (Адресная строка) |\n| 4 | Ctrl+S (Сохранить) | Ctrl+` (Терминал) | Ctrl+Shift+T (Вернуть) |\n| 5 | Ctrl+F (Найти) | Ctrl+B (Боковая панель) | F5 (Обновить) |\n| 6 | Delete | Ctrl+D (Мульти-курсор) | Ctrl+J (Загрузки) |\n\n---\n\n## Сборка из исходников\n\n```bash\n# Требования: Node.js 20+, Rust 1.77+, Windows 10/11\n\ngit clone https://github.com/danscMax/Sidearm.git\ncd Sidearm\nnpm install\ncargo tauri dev           # разработка\n.\\build_portable.bat      # портативная сборка\n```\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n## License\n\n[MIT](LICENSE)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanscmax%2Fsidearm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanscmax%2Fsidearm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanscmax%2Fsidearm/lists"}