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.
nvidia.lua forces LIBVA_DRIVER_NAME=nvidia even when the iGPU drives the display, breaking hardware video decode (black video)
Reported by smoo7h · filed Sep 20, 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
default/hypr/nvidia.lua sets LIBVA_DRIVER_NAME=nvidia whenever an NVIDIA GPU is present, without checking whether it is the GPU that actually drives the display.
On a hybrid desktop where the monitor is plugged into the motherboard (Intel iGPU), Hyprland and every GPU-accelerated app render on the Intel DRM node, but libva is forced to load the NVDEC VA-API driver against that Intel node. Hardware video decode then returns black frames. Audio and normal page rendering are unaffected, so the symptom is "YouTube plays sound over a black player" in Chrome/Chromium, and black video in any VA-API consumer.
https://github.com/basecamp/omarchy/blob/master/default/hypr/nvidia.lua
if o.shell_succeeds(o.shell_quote(nvidia)) then
if o.shell_succeeds(o.shell_quote(nvidia_gsp)) then
hl.env("NVD_BACKEND", "direct")
hl.env("LIBVA_DRIVER_NAME", "nvidia") -- <-- unconditional
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")omarchy-hw-nvidia only answers "is an NVIDIA card installed", which is not the same question as "does NVIDIA drive the display".
Expected
LIBVA_DRIVER_NAME should be left unset (libva autodetects correctly per DRM node) unless the NVIDIA GPU is the one with a connected output. Autodetection already picks the right driver on both nodes on this machine.
Steps to reproduce
- Desktop with an Intel iGPU and a discrete NVIDIA card, both drivers loaded.
- Plug the monitor into the motherboard's output, not the NVIDIA card's.
- Boot into Hyprland and open any YouTube video in Chrome.
- Audio plays; the player area is solid black. The rest of the page (thumbnails, text, UI) renders normally.
Evidence
Display is on the Intel node — the NVIDIA card has no connected output:
$ for c in /sys/class/drm/card*/card*-*/status; do printf "%s " "$c"; cat "$c"; done | grep -v disconnected
/sys/class/drm/card2/card2-DP-4/status connected # card2 = 0000:00:02.0 = Intel UHD 630
$ ls -l /dev/dri/by-path/
pci-0000:00:02.0-card -> ../card2 # Intel
pci-0000:00:02.0-render -> ../renderD129 # Intel
pci-0000:01:00.0-card -> ../card1 # NVIDIA (no output connected)
pci-0000:01:00.0-render -> ../renderD128 # NVIDIAChrome's GPU process correctly selects the Intel node, then inherits the wrong VA driver:
$ ps -eo args | grep 'type=gpu-process'
/opt/google/chrome/chrome --type=gpu-process --ozone-platform=wayland --render-node-override=/dev/dri/renderD129 ...
$ systemctl --user show-environment | grep LIBVA
LIBVA_DRIVER_NAME=nvidiaVA-API on the Intel node with the forced driver — broken:
$ ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD129 -f lavfi -i nullsrc -frames:v 0 -f null -
libva: User environment variable requested driver 'nvidia'
libva: Trying to open /usr/lib/dri/nvidia_drv_video.so
VAAPI driver: VA-API NVDEC driver [direct backend].
$ ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD129 -f lavfi -i testsrc=size=320x240:rate=5:duration=1 \
-vf 'format=nv12,hwupload' -c:v h264_vaapi -f null -
Terminating thread with return code -38 (Function not implemented)
Could not open encoder before EOFWith the variable unset, libva autodetects the correct driver and the same test passes:
$ env -u LIBVA_DRIVER_NAME ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD129 ...
libva: Trying to open /usr/lib/dri/iHD_drv_video.so
VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 26.2.4
# h264_vaapi encode smoke test: exit 0A/B in Chrome, two throwaway profiles, same video, sampling the player region of each window:
LIBVA_DRIVER_NAME | non-black pixels in player |
|---|---|
nvidia | 3.3% |
iHD | 100% |
Screenshot of the bug is attached: the YouTube UI renders fine, only the decoded video is black.
Workaround
Appending this to ~/.config/hypr/hyprland.lua (it loads after the Omarchy defaults) fixes it:
hl.env("LIBVA_DRIVER_NAME", "iHD")Suggested fix
Gate the LIBVA_DRIVER_NAME / NVD_BACKEND exports on the NVIDIA GPU actually having a connected output, e.g. check /sys/class/drm/card*/card*-*/status for the NVIDIA card's DRM minor before setting them, or simply drop LIBVA_DRIVER_NAME and let libva autodetect per DRM node. __GLX_VENDOR_LIBRARY_NAME is a separate concern and is not implicated here.
System details
- Omarchy 4.0.4-1
- Kernel 7.2.5-3-omarchy
- CPU: Intel Core i9-9900K
- GPU 0: Intel UHD 630 (CoffeeLake GT2,
8086:3e98) — monitor connected here - GPU 1: NVIDIA RTX 4090 (
10de:2684),nvidia-open-dkms/nvidia-utils610.57.04 — no output connected - mesa 1:26.2.2-1, libva 2.24.1-1, intel-media-driver (iHD 26.2.4), libva-nvidia-driver 0.0.18-1
- Google Chrome 153.0.8010.47 (Wayland/ozone)
View raw text
## What happened
`default/hypr/nvidia.lua` sets `LIBVA_DRIVER_NAME=nvidia` whenever an NVIDIA GPU is *present*, without checking whether it is the GPU that actually drives the display.
On a hybrid desktop where the monitor is plugged into the **motherboard** (Intel iGPU), Hyprland and every GPU-accelerated app render on the Intel DRM node, but libva is forced to load the NVDEC VA-API driver against that Intel node. Hardware video decode then returns **black frames**. Audio and normal page rendering are unaffected, so the symptom is "YouTube plays sound over a black player" in Chrome/Chromium, and black video in any VA-API consumer.
https://github.com/basecamp/omarchy/blob/master/default/hypr/nvidia.lua
```lua
if o.shell_succeeds(o.shell_quote(nvidia)) then
if o.shell_succeeds(o.shell_quote(nvidia_gsp)) then
hl.env("NVD_BACKEND", "direct")
hl.env("LIBVA_DRIVER_NAME", "nvidia") -- <-- unconditional
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
```
`omarchy-hw-nvidia` only answers "is an NVIDIA card installed", which is not the same question as "does NVIDIA drive the display".
## Expected
`LIBVA_DRIVER_NAME` should be left unset (libva autodetects correctly per DRM node) unless the NVIDIA GPU is the one with a connected output. Autodetection already picks the right driver on both nodes on this machine.
## Steps to reproduce
1. Desktop with an Intel iGPU and a discrete NVIDIA card, both drivers loaded.
2. Plug the monitor into the **motherboard's** output, not the NVIDIA card's.
3. Boot into Hyprland and open any YouTube video in Chrome.
4. Audio plays; the player area is solid black. The rest of the page (thumbnails, text, UI) renders normally.
## Evidence
Display is on the Intel node — the NVIDIA card has no connected output:
```
$ for c in /sys/class/drm/card*/card*-*/status; do printf "%s " "$c"; cat "$c"; done | grep -v disconnected
/sys/class/drm/card2/card2-DP-4/status connected # card2 = 0000:00:02.0 = Intel UHD 630
$ ls -l /dev/dri/by-path/
pci-0000:00:02.0-card -> ../card2 # Intel
pci-0000:00:02.0-render -> ../renderD129 # Intel
pci-0000:01:00.0-card -> ../card1 # NVIDIA (no output connected)
pci-0000:01:00.0-render -> ../renderD128 # NVIDIA
```
Chrome's GPU process correctly selects the Intel node, then inherits the wrong VA driver:
```
$ ps -eo args | grep 'type=gpu-process'
/opt/google/chrome/chrome --type=gpu-process --ozone-platform=wayland --render-node-override=/dev/dri/renderD129 ...
$ systemctl --user show-environment | grep LIBVA
LIBVA_DRIVER_NAME=nvidia
```
VA-API on the Intel node with the forced driver — broken:
```
$ ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD129 -f lavfi -i nullsrc -frames:v 0 -f null -
libva: User environment variable requested driver 'nvidia'
libva: Trying to open /usr/lib/dri/nvidia_drv_video.so
VAAPI driver: VA-API NVDEC driver [direct backend].
$ ffmpeg -init_hw_device vaapi=va:/dev/dri/renderD129 -f lavfi -i testsrc=size=320x240:rate=5:duration=1 \
-vf 'format=nv12,hwupload' -c:v h264_vaapi -f null -
Terminating thread with return code -38 (Function not implemented)
Could not open encoder before EOF
```
With the variable unset, libva autodetects the correct driver and the same test passes:
```
$ env -u LIBVA_DRIVER_NAME ffmpeg -v verbose -init_hw_device vaapi=va:/dev/dri/renderD129 ...
libva: Trying to open /usr/lib/dri/iHD_drv_video.so
VAAPI driver: Intel iHD driver for Intel(R) Gen Graphics - 26.2.4
# h264_vaapi encode smoke test: exit 0
```
A/B in Chrome, two throwaway profiles, same video, sampling the player region of each window:
| `LIBVA_DRIVER_NAME` | non-black pixels in player |
| --- | --- |
| `nvidia` | 3.3% |
| `iHD` | 100% |
Screenshot of the bug is attached: the YouTube UI renders fine, only the decoded video is black.
## Workaround
Appending this to `~/.config/hypr/hyprland.lua` (it loads after the Omarchy defaults) fixes it:
```lua
hl.env("LIBVA_DRIVER_NAME", "iHD")
```
## Suggested fix
Gate the `LIBVA_DRIVER_NAME` / `NVD_BACKEND` exports on the NVIDIA GPU actually having a connected output, e.g. check `/sys/class/drm/card*/card*-*/status` for the NVIDIA card's DRM minor before setting them, or simply drop `LIBVA_DRIVER_NAME` and let libva autodetect per DRM node. `__GLX_VENDOR_LIBRARY_NAME` is a separate concern and is not implicated here.
## System details
- Omarchy 4.0.4-1
- Kernel 7.2.5-3-omarchy
- CPU: Intel Core i9-9900K
- GPU 0: Intel UHD 630 (CoffeeLake GT2, `8086:3e98`) — **monitor connected here**
- GPU 1: NVIDIA RTX 4090 (`10de:2684`), `nvidia-open-dkms`/`nvidia-utils` 610.57.04 — no output connected
- mesa 1:26.2.2-1, libva 2.24.1-1, intel-media-driver (iHD 26.2.4), libva-nvidia-driver 0.0.18-1
- Google Chrome 153.0.8010.47 (Wayland/ozone)
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
- Fixed bypr/9483· confirmed
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:12 UTC