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.
Desktop AMD iGPU + NVIDIA dGPU: Aquamarine opens the idle iGPU, so Hyprland uses software cursors on NVIDIA
Reported by lancefaul · filed Sep 21, 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
Summary
On a desktop where an NVIDIA card drives every monitor but the CPU's Radeon iGPU is still present, Aquamarine starts a DRM backend for both GPUs. Hyprland then treats the system as multi-GPU.
With Omarchy's default cursor:no_hardware_cursors = 2 ("auto"), that means a software cursor on NVIDIA (`shouldUseSoftwareCursors`, `Monitor.cpp` L2303: isNvidia() && (isMgpu() || VRR)). A software cursor also pauses direct scanout whenever the cursor is visible ("directScanoutBlockedBy": ["SW"]). So game menus, and games that always show a cursor, get composited.
Environment
- Omarchy 4.0.0.alpha, Hyprland 0.56.2 (Arch
hyprland 0.56.2-2), aquamarine 0.15.0, nvidia-open-dkms 610.57.04, kernel 7.2.5-3-omarchy - Ryzen 9 9950X3D: Radeon iGPU at
0000:7a:00.0, with nothing connected - RTX 5090 at
0000:01:00.0, driving all monitors - Gigabyte X870E AORUS Elite WiFi7. Its BIOS option "Integrated Graphics: Disabled" does not remove the iGPU from the PCI bus.
What happens
The Hyprland log shows:
drm: Found 2 GPUs
drm: Starting backend for /dev/dri/card1, with driver nvidia-drm
drm: gpu /dev/dri/card1 becomes primary drm
drm: Starting backend for /dev/dri/card0, with driver amdgpu with primary /dev/dri/card1hyprctl monitors -j reports "hardwareCursorsInUse": false. With render:direct_scanout = 1, a fullscreen game shows "directScanoutBlockedBy": ["SW"] whenever the cursor is on screen. In Helldivers 2, direct scanout was worth about 3% FPS and 16 W on this machine.
Workaround (verified)
In ~/.config/hypr/hyprland.lua. Adjust the PCI address to your NVIDIA card (ls -l /dev/dri/by-path/):
do
local pipe = io.popen("readlink -f /dev/dri/by-path/pci-0000:01:00.0-card 2>/dev/null")
local card = pipe and pipe:read("*l") or ""
if pipe then pipe:close() end
if card:match("^/dev/dri/card%d+$") then
hl.env("AQ_DRM_DEVICES", card)
end
endAfter logging out and back in:
- the log shows
drm: Found 1 GPUs hardwareCursorsInUseistrue- direct scanout stays on for a whole game session, including menus with the cursor visible.
Two details that matter:
- The path is resolved at every login because
cardNnumbering isn't guaranteed to stay the same across boots. - The by-path name can't go into
AQ_DRM_DEVICESdirectly, because its colons are the list separator (see #8776).
hl.env runs early enough: the config is loaded before Aquamarine enumerates the GPUs.
Suggestion
Omarchy could do this automatically, next to the existing NVIDIA detection in default/hypr/nvidia.lua. When an NVIDIA GPU is present and no connector on any other GPU is connected at login, it would set AQ_DRM_DEVICES to the NVIDIA card.
- The connector check leaves laptops alone, since their panel is on the iGPU (#12289, #11173).
- Trade-off: a monitor plugged into the iGPU's own ports later would not come up until the next login.
Related: #12289, #8776, #11173.
View raw text
## Summary
On a desktop where an NVIDIA card drives every monitor but the CPU's Radeon iGPU is still present, Aquamarine starts a DRM backend for both GPUs. Hyprland then treats the system as multi-GPU.
With Omarchy's default `cursor:no_hardware_cursors = 2` ("auto"), that means a **software cursor on NVIDIA** ([`shouldUseSoftwareCursors`, `Monitor.cpp` L2303](https://github.com/hyprwm/Hyprland/blob/v0.56.2/src/output/Monitor.cpp#L2290-L2306): `isNvidia() && (isMgpu() || VRR)`). A software cursor also pauses direct scanout whenever the cursor is visible (`"directScanoutBlockedBy": ["SW"]`). So game menus, and games that always show a cursor, get composited.
## Environment
- Omarchy 4.0.0.alpha, Hyprland 0.56.2 (Arch `hyprland 0.56.2-2`), aquamarine 0.15.0, nvidia-open-dkms 610.57.04, kernel 7.2.5-3-omarchy
- Ryzen 9 9950X3D: Radeon iGPU at `0000:7a:00.0`, with nothing connected
- RTX 5090 at `0000:01:00.0`, driving all monitors
- Gigabyte X870E AORUS Elite WiFi7. Its BIOS option "Integrated Graphics: Disabled" does not remove the iGPU from the PCI bus.
## What happens
The Hyprland log shows:
```
drm: Found 2 GPUs
drm: Starting backend for /dev/dri/card1, with driver nvidia-drm
drm: gpu /dev/dri/card1 becomes primary drm
drm: Starting backend for /dev/dri/card0, with driver amdgpu with primary /dev/dri/card1
```
`hyprctl monitors -j` reports `"hardwareCursorsInUse": false`. With `render:direct_scanout = 1`, a fullscreen game shows `"directScanoutBlockedBy": ["SW"]` whenever the cursor is on screen. In Helldivers 2, direct scanout was worth about 3% FPS and 16 W on this machine.
## Workaround (verified)
In `~/.config/hypr/hyprland.lua`. Adjust the PCI address to your NVIDIA card (`ls -l /dev/dri/by-path/`):
```lua
do
local pipe = io.popen("readlink -f /dev/dri/by-path/pci-0000:01:00.0-card 2>/dev/null")
local card = pipe and pipe:read("*l") or ""
if pipe then pipe:close() end
if card:match("^/dev/dri/card%d+$") then
hl.env("AQ_DRM_DEVICES", card)
end
end
```
After logging out and back in:
- the log shows `drm: Found 1 GPUs`
- `hardwareCursorsInUse` is `true`
- direct scanout stays on for a whole game session, including menus with the cursor visible.
Two details that matter:
- The path is resolved at every login because `cardN` numbering isn't guaranteed to stay the same across boots.
- The by-path name can't go into `AQ_DRM_DEVICES` directly, because its colons are the list separator (see #8776).
`hl.env` runs early enough: the config is loaded before Aquamarine enumerates the GPUs.
## Suggestion
Omarchy could do this automatically, next to the existing NVIDIA detection in `default/hypr/nvidia.lua`. When an NVIDIA GPU is present and no connector on any other GPU is connected at login, it would set `AQ_DRM_DEVICES` to the NVIDIA card.
- The connector check leaves laptops alone, since their panel is on the iGPU (#12289, #11173).
- Trade-off: a monitor plugged into the iGPU's own ports later would not come up until the next login.
Related: #12289, #8776, #11173.
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 16:59 UTC