gastonmira/omarchy-mx-master • 6d9184a • Scanned 8/25/2026, 1:13:32 PM
Changed since 6d9184a…6d9184a (0 files, 0 commits)
Usual omarchy plugin add https://github.com/gastonmira/omarchy-mx-master.git --enable installs latest. This pins to the exact commit audited here (6d9184a):
omarchy plugin add https://github.com/gastonmira/omarchy-mx-master.git --yes && \ git -C ~/.config/omarchy/plugins/mxmaster.panel checkout 6d9184ada0a17e2c71dacbe1889c2e255d5887c1 && \ omarchy plugin enable mxmaster.panel # audited commit 6d9184a
Unpinned (latest): omarchy plugin add https://github.com/gastonmira/omarchy-mx-master.git --enable
Bar widget and panel for a Bluetooth-paired Logitech MX Master 3S. Shows connection/battery/host and lets the user tune DPI, SmartShift threshold, scroll ratchet/invert/hi-res and reassign thumb/gesture buttons. All writes go to the mouse's onboard memory via Solaar, so they persist across reboots and travel with the mouse to its other paired hosts.
Well-hardened bar widget that wraps bundled helpers (mx-ctl/mx-buttons → solaar) with strict caps, plain-text sanitization and safe bash positional parameters. No unauthenticated IPC or injection surface; only intentional local code execution is the user-typed Custom button command which is explicitly user-authorized.
Model opencode-go/muse-spark-1.2-contributor • 8/25/2026, 1:13:32 PM
sequenceDiagram
participant User
participant Panel as Panel.qml
participant Ctl as mx-ctl (bash)
participant Btn as mx-buttons (python)
participant Solaar
participant Mouse as MX Master 3S
User->>Panel: open panel / toggle / drag slider
Panel->>Ctl: Process bash -c 'MX_DEVICE="$1" "$0" status [--battery]' ctl deviceName
Ctl->>Solaar: solaar config/show DEVICE
Solaar->>Mouse: HID++ query
Mouse-->>Solaar: settings + battery
Solaar-->>Ctl: text output
Ctl-->>Panel: key=value lines (capped, parseStatus)
Panel-->>User: render battery/DPI/hosts (Model.plain/snapDpi)
User->>Panel: set DPI / toggle / change-host
Panel->>Ctl: Process bash -c 'MX_DEVICE="$1" "$0" set "$2" "$3"' ctl deviceName key value
Ctl->>Solaar: solaar config DEVICE key value
Solaar->>Mouse: write onboard memory
User->>Panel: set button action (incl. Custom command)
Panel->>Btn: Process bash -c 'MX_DEVICE="$1" "$0" set ...' buttonsCtl deviceName name action command
Btn->>Solaar: solaar config divert-keys/reprogrammable-keys + regenerate ~/.config/solaar/rules.yaml (yaml_str escaped)
Btn->>Solaar: restart daemon (SIGTERM + Popen hide)
Note over Btn,Solaar: Later button press → Solaar Execute: [bash,-c, command]Generated by AI from static findings + file context
Registers bar-widget IPC name for Omarchy shell routing; no custom message handler or payload parsing is defined in Panel.qml (no onIpc/message handler), so static flag's assumed conditional validation does not apply – exposure is inherent to framework and benign here.
Not just a path resolve – Qt.resolvedUrl("mx-ctl") (and line 88 "mx-buttons") locates bundled executables later run via Process command with safe bash -c 'MX_DEVICE="$1" "$0" ...' positional-arg pattern; args (deviceName, keys, snapped DPI) are quoted as "$1"/"$2"/"$3" and capped via Model.capInput/plain, so no shell injection despite being an exec sink.
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-25T11:13:32.673Z • Commit 6d9184a linked to GitHub for verification • Overview