gastonmira/omarchy-mx-master • 6d9184a • Scanned 8/25/2026, 11:42:49 AM
Changed since 6d9184a…6d9184a (0 files, 0 commits)
Shows battery, connection state and live settings for a Logitech MX Master 3S in the Omarchy bar and lets the user adjust DPI, scroll-wheel modes and SmartShift threshold. It also remaps the divertable mouse buttons to presets or custom shell commands that run via Solaar rules, writing changes to the mouse's onboard memory so they persist across reboots and hosts.
Plugin is a legitimate system widget with careful input caps, output truncation, and shell escaping; IPC exposure is inert and bundled executables are invoked via positional parameters with no unsanitized injection path. Main privilege is intended: writing mouse settings and Solaar rules and restarting Solaar.
Model opencode-go/muse-spark-1.2-contributor • 8/25/2026, 11:42:49 AM
sequenceDiagram
participant User
participant Panel
participant Ctl as mx-ctl
participant Btn as mx-buttons
participant Solaar
participant Mouse
User->>Panel: open panel / move slider / pick button action
Panel->>Ctl: Process bash -c MX_DEVICE="$1" "$0" status/set (ctl, deviceName)
Ctl->>Solaar: solaar config/show "$DEVICE" (timeout 15s, head -c 64k)
Solaar->>Mouse: HID++ over Bluetooth/hidraw
Mouse-->>Solaar: settings / Battery
Solaar-->>Ctl: key=value lines
Ctl-->>Panel: stdout -> Model.parseStatus/capInput
Panel->>Btn: get / set button (mx-buttons get/set)
Btn->>Solaar: solaar config divert-keys / reprogrammable-keys
Btn->>Solaar: write ~/.config/solaar/rules.yaml (yaml_str escaped) + SIGTERM/restartGenerated by AI from static findings + file context
Sets ipcTarget but defines no IpcHandler/onMessage; no custom payload handler exists to validate or exploit, only base Panel lifecycle is exposed.
Qt.resolvedUrl("mx-ctl") (and "mx-buttons" at line 88) locates bundled helpers, not arbitrary files; both are later executed via Process bash -c with positional params ($0=ctl, $1=deviceName) and quoted MX_DEVICE="$1", preventing injection.
No network calls — good.
No changes detected (first scan).
No obfuscation detected.
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | fileOps | Util.fileUrl | Panel.qml | 29 | Resolves file URL | readonly property string ctl: String(Qt.resolvedUrl("mx-ctl")).replace("file://", "") |
These are expected Quickshell imports, not counted as risk.
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| info | imports | import Quickshell | Panel.qml | 2 | Expected Quickshell import — normal for Omarchy plugins (no risk) | import Quickshell.Io |
| info | imports | import qs | Panel.qml | 3 | Expected local module import — normal for Omarchy plugins (no risk) | import qs.Commons |
| Path | Type | Lines | Size |
|---|---|---|---|
| Model.js | js | 161 | 5856 |
| Panel.qml | qml | 791 | 29452 |
| actions.json | json | 38 | 2677 |
| manifest.json | json | 70 | 1880 |
| Severity | Category | Pattern | File | Line | Description | Snippet |
|---|---|---|---|---|---|---|
| medium | ipc | ipcTarget | Panel.qml | 16 | IPC handler exposure — payload appears validated via conditional check (handler checks state before acting; review logic) | ipcTarget: "mxmaster.panel" |
| medium | fileOps | Util.fileUrl | Panel.qml | 29 | Resolves file URL | readonly property string ctl: String(Qt.resolvedUrl("mx-ctl")).replace("file://", "") |
Generated by omarchy-audit at 2026-08-25T09:42:49.184Z • Commit 6d9184a linked to GitHub for verification • Overview