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 Logitech G502 instead of physical keyboard
Reported by szalikdev · filed Sep 4, 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
Description
The omarchy.keyboard-layout bar widget can select a mouse-provided keyboard interface instead of the physical typing keyboard. The indicator then changes to the requested layout, but typed characters continue using the previous layout.
In this case, selecting German made the bar show DE, while the real keyboard continued producing the Polish layout.
Steps to reproduce
- Connect a Logitech G502 LIGHTSPEED mouse and a USB keyboard.
- Configure two layouts in Hyprland:
kb_layout = "pl,de"andkb_variant = ",". - Click the keyboard-layout widget to switch from Polish to German.
- Type
YandZ.
Actual behavior
The bar shows German, but the physical keyboard remains Polish. Live hyprctl -j devices state showed:
logitech-g502: active_layout_index 1, German
sonix-usb-device: active_layout_index 0, Polish
sonix-usb-device-keyboard: active_layout_index 0, Polish
hl-virtual-keyboard-fcitx5: active_layout_index 0, PolishKeyboardLayoutModel.isTypedKeyboard() treats logitech-g502 as a typing keyboard because UNTYPED_KEYBOARDS only excludes known virtual and ACPI-style names. Since selectKeyboard() selects the furthest-advanced eligible device, the widget remains attached to the G502 after switching it.
Expected behavior
The widget should select and switch a keyboard that receives normal text input, ignoring keyboard-like interfaces exposed by mice and similar peripherals.
Confirmed workaround
Cloning omarchy.keyboard-layout and adding logitech-g502$ to UNTYPED_KEYBOARDS makes the widget select sonix-usb-device; Polish/German switching then targets the physical keyboard correctly.
A device-specific exclusion proves the cause, although a generic way to distinguish typing keyboards would be preferable upstream.
System information
- Omarchy: 4.0.2-1
- Hyprland: 0.56.2-1
- Kernel: 7.1.9-arch1-2
- CPU/GPU: AMD Ryzen Embedded R1505G / Radeon Vega
- Mouse: Logitech G502 LIGHTSPEED
- Keyboard interfaces:
sonix-usb-device,sonix-usb-device-keyboard - Input method: fcitx5 5.1.21-1
Diagnostics were collected with omarchy-debug --no-sudo --print; there were no keyboard-related warnings.
View raw text
## Description The `omarchy.keyboard-layout` bar widget can select a mouse-provided keyboard interface instead of the physical typing keyboard. The indicator then changes to the requested layout, but typed characters continue using the previous layout. In this case, selecting German made the bar show `DE`, while the real keyboard continued producing the Polish layout. ## Steps to reproduce 1. Connect a Logitech G502 LIGHTSPEED mouse and a USB keyboard. 2. Configure two layouts in Hyprland: `kb_layout = "pl,de"` and `kb_variant = ","`. 3. Click the keyboard-layout widget to switch from Polish to German. 4. Type `Y` and `Z`. ## Actual behavior The bar shows German, but the physical keyboard remains Polish. Live `hyprctl -j devices` state showed: ```text logitech-g502: active_layout_index 1, German sonix-usb-device: active_layout_index 0, Polish sonix-usb-device-keyboard: active_layout_index 0, Polish hl-virtual-keyboard-fcitx5: active_layout_index 0, Polish ``` `KeyboardLayoutModel.isTypedKeyboard()` treats `logitech-g502` as a typing keyboard because `UNTYPED_KEYBOARDS` only excludes known virtual and ACPI-style names. Since `selectKeyboard()` selects the furthest-advanced eligible device, the widget remains attached to the G502 after switching it. ## Expected behavior The widget should select and switch a keyboard that receives normal text input, ignoring keyboard-like interfaces exposed by mice and similar peripherals. ## Confirmed workaround Cloning `omarchy.keyboard-layout` and adding `logitech-g502$` to `UNTYPED_KEYBOARDS` makes the widget select `sonix-usb-device`; Polish/German switching then targets the physical keyboard correctly. A device-specific exclusion proves the cause, although a generic way to distinguish typing keyboards would be preferable upstream. ## System information - Omarchy: 4.0.2-1 - Hyprland: 0.56.2-1 - Kernel: 7.1.9-arch1-2 - CPU/GPU: AMD Ryzen Embedded R1505G / Radeon Vega - Mouse: Logitech G502 LIGHTSPEED - Keyboard interfaces: `sonix-usb-device`, `sonix-usb-device-keyboard` - Input method: fcitx5 5.1.21-1 Diagnostics were collected with `omarchy-debug --no-sudo --print`; there were no keyboard-related warnings.
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:46 UTC