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/touchpad dead at LUKS prompt on AMD Surface devices (fix-surface-keyboard.sh only handles pinctrl/Intel)
Reported by gs86baker · filed Sep 10, 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
System details
AMD Ryzen 5 Microsoft Surface Edition (Picasso/Raven2 APU), Surface Laptop 3/4 AMD, Omarchy 4.0.3-1, kernel 7.2.3-arch1-3
What's wrong?
On AMD Surface Laptop models, the keyboard and touchpad don't work at the LUKS disk-encryption password prompt (the pre-boot cryptsetup screen shown before the root filesystem is decrypted and the initramfs hands off to the real system). You have to plug in an external USB keyboard to unlock the disk.
Root cause: install/hardware/fix-surface-keyboard.sh only writes /etc/mkinitcpio.conf.d/surface_device_modules.conf (the module list needed in the initramfs so the keyboard/touchpad work before rootfs decryption) if it can autodetect a pinctrl_* module via lsmod:
echo "Attempting to autodetect required pinctrl module"
pinctrl_module=$(lsmod | grep pinctrl_ | cut -f 1 -d" " || true)
if [[ -z $pinctrl_module ]]; then
echo "Failed to autodetect pinctrl module."
else
...
echo "MODULES=(${pinctrl_module} surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw)" > \
/etc/mkinitcpio.conf.d/surface_device_modules.conf
fiThis assumes every Surface device needs a pinctrl module, which is true for Intel Surface models (keyboard/touchpad wired through intel_lpss_pci/GPIO pinctrl) but not for AMD Surface models. On AMD Surface Laptops (e.g. the Surface Laptop 3/4 AMD 15"), there is no pinctrl_* module involved at all — the keyboard/touchpad chain is:
surface_aggregator → surface_aggregator_registry (binds ACPI device MSHW0110 → surface_aggregator_platform_hub) → surface_hid_core/surface_hid → hid-generic/hid-multitouch, communicating with the embedded controller over UART via 8250_dw.
Because lsmod | grep pinctrl_ finds nothing on these devices, pinctrl_module is empty, the if branch is taken, and the script silently exits without ever writing surface_device_modules.conf -- leaving the initramfs without the surface_aggregator/HID modules and the keyboard/touchpad dead at the LUKS prompt.
Suggested fix: add a fallback branch for when pinctrl_module is empty that still writes the module list, omitting the Intel-only intel_lpss_pci module (harmless if included, but it's not needed here):
MODULES=(surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd hid_multitouch 8250_dw)Steps to reproduce:
1. Install Omarchy with LUKS full-disk encryption on an AMD Surface Laptop (e.g. Surface Laptop 3/4 AMD 15", DMI product_name reports "Surface Laptop 3").
2. Reboot.
3. At the disk-encryption password prompt, the built-in keyboard and touchpad don't respond. An external USB keyboard is required to type the password.
Workaround (confirmed working): manually create /etc/mkinitcpio.conf.d/surface_device_modules.conf with the module list above and run sudo mkinitcpio -P to rebuild the initramfs/UKI. After this, the built-in keyboard and touchpad work correctly at the LUKS prompt.
Note: I wasn't able to attach a capture of the actual bug since it happens before the desktop/OS is even running (pre-boot LUKS prompt), so screen recording tools aren't available at that point.
Debug info (omarchy-debug --no-sudo --print) attached below:
omarchy-debug output
Date: Thu Sep 10 08:41:28 AM EDT 2026
Hostname: roonwit
Omarchy Package: omarchy 4.0.3-1
=========================================
SYSTEM INFORMATION
=========================================
Kernel 7.2.3-arch1-3 x86_64 64bit, Desktop Hyprland 0.56.2, DM SDDM, Distro Omarchy
Machine: Type Laptop, System Microsoft, product Surface Laptop 3, v 124I:00044T:000M:0400000B:07
Mobo Microsoft, model Surface Laptop 3, part-nu Surface_Laptop_3_1873, Firmware UEFI, vendor Microsoft, v 1.3203.140
CPU: AMD Ryzen 5 Microsoft Surface Edition, arch Zen/Zen+, cores 4, threads 8
Graphics: AMD/ATI Picasso/Raven 2 [Radeon Vega Series / Radeon Mobile Series], driver amdgpu
Network: Qualcomm Atheros QCA6174 802.11ac, driver ath10k_pci
Drives: /dev/nvme0n1 SK Hynix HFM256GDGTNG-87A0A 238.47 GiB
=========================================
JOURNALCTL (CURRENT BOOT, WARNINGS+ERRORS) -- relevant lines
=========================================
Sep 10 08:38:10 roonwit kernel: dw-apb-uart AMDI0020:00: failed to request DMA
Sep 10 08:38:11 roonwit kernel: surface_serial_hub serial0-0: event: unhandled event (rqid: 0x02, tc: 0x02, tid: 0x01, cid: 0x53, iid: 0x01)Full package list and complete log available on request.
View raw text
### System details
AMD Ryzen 5 Microsoft Surface Edition (Picasso/Raven2 APU), Surface Laptop 3/4 AMD, Omarchy 4.0.3-1, kernel 7.2.3-arch1-3
### What's wrong?
On AMD Surface Laptop models, the keyboard and touchpad don't work at the LUKS disk-encryption password prompt (the pre-boot cryptsetup screen shown before the root filesystem is decrypted and the initramfs hands off to the real system). You have to plug in an external USB keyboard to unlock the disk.
**Root cause:** `install/hardware/fix-surface-keyboard.sh` only writes `/etc/mkinitcpio.conf.d/surface_device_modules.conf` (the module list needed in the initramfs so the keyboard/touchpad work before rootfs decryption) if it can autodetect a `pinctrl_*` module via `lsmod`:
```bash
echo "Attempting to autodetect required pinctrl module"
pinctrl_module=$(lsmod | grep pinctrl_ | cut -f 1 -d" " || true)
if [[ -z $pinctrl_module ]]; then
echo "Failed to autodetect pinctrl module."
else
...
echo "MODULES=(${pinctrl_module} surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw)" > \
/etc/mkinitcpio.conf.d/surface_device_modules.conf
fi
```
This assumes every Surface device needs a pinctrl module, which is true for Intel Surface models (keyboard/touchpad wired through `intel_lpss_pci`/GPIO pinctrl) but not for AMD Surface models. On AMD Surface Laptops (e.g. the Surface Laptop 3/4 AMD 15"), there is no `pinctrl_*` module involved at all — the keyboard/touchpad chain is:
`surface_aggregator` → `surface_aggregator_registry` (binds ACPI device `MSHW0110` → `surface_aggregator_platform_hub`) → `surface_hid_core`/`surface_hid` → `hid-generic`/`hid-multitouch`, communicating with the embedded controller over UART via `8250_dw`.
Because `lsmod | grep pinctrl_` finds nothing on these devices, `pinctrl_module` is empty, the `if` branch is taken, and the script silently exits without ever writing `surface_device_modules.conf` -- leaving the initramfs without the surface_aggregator/HID modules and the keyboard/touchpad dead at the LUKS prompt.
**Suggested fix:** add a fallback branch for when `pinctrl_module` is empty that still writes the module list, omitting the Intel-only `intel_lpss_pci` module (harmless if included, but it's not needed here):
```
MODULES=(surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd hid_multitouch 8250_dw)
```
**Steps to reproduce:**
1. Install Omarchy with LUKS full-disk encryption on an AMD Surface Laptop (e.g. Surface Laptop 3/4 AMD 15", DMI `product_name` reports "Surface Laptop 3").
2. Reboot.
3. At the disk-encryption password prompt, the built-in keyboard and touchpad don't respond. An external USB keyboard is required to type the password.
**Workaround (confirmed working):** manually create `/etc/mkinitcpio.conf.d/surface_device_modules.conf` with the module list above and run `sudo mkinitcpio -P` to rebuild the initramfs/UKI. After this, the built-in keyboard and touchpad work correctly at the LUKS prompt.
**Note:** I wasn't able to attach a capture of the actual bug since it happens before the desktop/OS is even running (pre-boot LUKS prompt), so screen recording tools aren't available at that point.
Debug info (`omarchy-debug --no-sudo --print`) attached below:
<details>
<summary>omarchy-debug output</summary>
```
Date: Thu Sep 10 08:41:28 AM EDT 2026
Hostname: roonwit
Omarchy Package: omarchy 4.0.3-1
=========================================
SYSTEM INFORMATION
=========================================
Kernel 7.2.3-arch1-3 x86_64 64bit, Desktop Hyprland 0.56.2, DM SDDM, Distro Omarchy
Machine: Type Laptop, System Microsoft, product Surface Laptop 3, v 124I:00044T:000M:0400000B:07
Mobo Microsoft, model Surface Laptop 3, part-nu Surface_Laptop_3_1873, Firmware UEFI, vendor Microsoft, v 1.3203.140
CPU: AMD Ryzen 5 Microsoft Surface Edition, arch Zen/Zen+, cores 4, threads 8
Graphics: AMD/ATI Picasso/Raven 2 [Radeon Vega Series / Radeon Mobile Series], driver amdgpu
Network: Qualcomm Atheros QCA6174 802.11ac, driver ath10k_pci
Drives: /dev/nvme0n1 SK Hynix HFM256GDGTNG-87A0A 238.47 GiB
=========================================
JOURNALCTL (CURRENT BOOT, WARNINGS+ERRORS) -- relevant lines
=========================================
Sep 10 08:38:10 roonwit kernel: dw-apb-uart AMDI0020:00: failed to request DMA
Sep 10 08:38:11 roonwit kernel: surface_serial_hub serial0-0: event: unhandled event (rqid: 0x02, tc: 0x02, tid: 0x01, cid: 0x53, iid: 0x01)
```
Full package list and complete log available on request.
</details>
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 11:27 UTC