Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
keyboard-layout widget switches the wrong device on laptops with vendor WMI/radio-control inputs
Reported by sas-blas · filed Aug 29, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
What happened
On a laptop whose vendor platform driver registers WMI/radio-control input devices, the omarchy.keyboard-layout bar widget switches the wrong device. Clicking it changes the label but never changes the layout actually being typed on.
Expected
Clicking the widget cycles the layout of the keyboard being typed on, and the label reflects it.
Root cause
shell/plugins/bar/widgets/KeyboardLayoutModel.js filters non-keyboard devices with:
var UNTYPED_KEYBOARDS = /^(hl-virtual-keyboard|power-button|sleep-button|lid-switch|video-bus)/Vendor platform drivers register devices that libinput reports as keyboards but that are named for the driver, not the button — so they pass the filter. On an Acer Nitro AN515-55, hyprctl devices lists 9 keyboards and 3 survive the filter:
acer-wireless-radio-control <- not a keyboard
at-translated-set-2-keyboard <- the real keyboard
acer-wmi-hotkeys <- not a keyboardWith every device still at layout index 0, selectKeyboard() falls through to keyboards[0], which is acer-wireless-radio-control. The click then runs switchxkblayout against that device:
$ hyprctl switchxkblayout acer-wireless-radio-control next
acer-wireless-radio-control : idx=1 English (US)
at-translated-set-2-keyboard: idx=0 Polish <- unchangedThe label reads "EN" (furthest-advanced device) while the user is still typing Polish.
It does not self-correct. The switch emits an activelayout event naming that same device, eventKeyboardName() accepts it (it isn't an hl-virtual-keyboard), and selectKeyboard() then pins to it by name on every subsequent read. The button toggles the label indefinitely while the real keyboard never moves.
Secondary effect: keyboardCount = 3 > 1 keeps the 10 s hyprctl -j devices poll (KeyboardLayout.qml:199) running permanently on a single-keyboard laptop, where the comment says it should never run.
Steps to reproduce
- Use a laptop with a vendor WMI hotkey device (
hyprctl devices | grep -E 'wmi|radio-control'returns something). - Set two layouts, e.g.
XKBLAYOUT=pl,usin/etc/vconsole.conf. - Click the keyboard-layout widget in the bar.
hyprctl devices -j— the label changed,at-translated-set-2-keyboarddid not.
Suggested fix
Match the driver suffix rather than specific vendor names, tolerating the index Hyprland appends to duplicates:
var UNTYPED_KEYBOARDS =
/^(hl-virtual-keyboard|power-button|sleep-button|lid-switch|video-bus)|(-wmi-hotkeys|-wireless-radio-control)(-\d+)?$/This covers asus-wmi-hotkeys and friends too. Verified locally against the device names above: the three real filters still exclude, at-translated-set-2-keyboard and external keyboards (logitech-k380) are kept, and dell-wmi — which is a real hotkey source but not named with these suffixes — is untouched, so no behaviour is lost for anyone currently working.
After the change the widget sees 1 keyboard, the poll timer stops, and the click cycles PL -> EN -> PL on the real keyboard.
Happy to open a PR if the approach looks right.
System
- Omarchy 4.0.1-1
- Hyprland 0.56.2
- Acer Nitro AN515-55, i5-10300H, GTX 1650 Ti Mobile + UHD Graphics
- Arch Linux, kernel 7.1.9-arch1-2
View raw text
## What happened On a laptop whose vendor platform driver registers WMI/radio-control input devices, the `omarchy.keyboard-layout` bar widget switches the wrong device. Clicking it changes the label but never changes the layout actually being typed on. ## Expected Clicking the widget cycles the layout of the keyboard being typed on, and the label reflects it. ## Root cause `shell/plugins/bar/widgets/KeyboardLayoutModel.js` filters non-keyboard devices with: ```js var UNTYPED_KEYBOARDS = /^(hl-virtual-keyboard|power-button|sleep-button|lid-switch|video-bus)/ ``` Vendor platform drivers register devices that libinput reports as keyboards but that are named for the driver, not the button — so they pass the filter. On an Acer Nitro AN515-55, `hyprctl devices` lists 9 keyboards and **3** survive the filter: ``` acer-wireless-radio-control <- not a keyboard at-translated-set-2-keyboard <- the real keyboard acer-wmi-hotkeys <- not a keyboard ``` With every device still at layout index 0, `selectKeyboard()` falls through to `keyboards[0]`, which is `acer-wireless-radio-control`. The click then runs `switchxkblayout` against that device: ``` $ hyprctl switchxkblayout acer-wireless-radio-control next acer-wireless-radio-control : idx=1 English (US) at-translated-set-2-keyboard: idx=0 Polish <- unchanged ``` The label reads "EN" (furthest-advanced device) while the user is still typing Polish. It does not self-correct. The switch emits an `activelayout` event naming that same device, `eventKeyboardName()` accepts it (it isn't an `hl-virtual-keyboard`), and `selectKeyboard()` then pins to it by name on every subsequent read. The button toggles the label indefinitely while the real keyboard never moves. Secondary effect: `keyboardCount = 3 > 1` keeps the 10 s `hyprctl -j devices` poll (`KeyboardLayout.qml:199`) running permanently on a single-keyboard laptop, where the comment says it should never run. ## Steps to reproduce 1. Use a laptop with a vendor WMI hotkey device (`hyprctl devices | grep -E 'wmi|radio-control'` returns something). 2. Set two layouts, e.g. `XKBLAYOUT=pl,us` in `/etc/vconsole.conf`. 3. Click the keyboard-layout widget in the bar. 4. `hyprctl devices -j` — the label changed, `at-translated-set-2-keyboard` did not. ## Suggested fix Match the driver suffix rather than specific vendor names, tolerating the index Hyprland appends to duplicates: ```js var UNTYPED_KEYBOARDS = /^(hl-virtual-keyboard|power-button|sleep-button|lid-switch|video-bus)|(-wmi-hotkeys|-wireless-radio-control)(-\d+)?$/ ``` This covers `asus-wmi-hotkeys` and friends too. Verified locally against the device names above: the three real filters still exclude, `at-translated-set-2-keyboard` and external keyboards (`logitech-k380`) are kept, and `dell-wmi` — which is a real hotkey source but not named with these suffixes — is untouched, so no behaviour is lost for anyone currently working. After the change the widget sees 1 keyboard, the poll timer stops, and the click cycles PL -> EN -> PL on the real keyboard. Happy to open a PR if the approach looks right. ## System - Omarchy 4.0.1-1 - Hyprland 0.56.2 - Acer Nitro AN515-55, i5-10300H, GTX 1650 Ti Mobile + UHD Graphics - Arch Linux, kernel 7.1.9-arch1-2
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 10:33 UTC