Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-259GitHub issuePublicFixed

LIBVA_DRIVER_NAME=nvidia breaks all video playback on muxless hybrid laptops where the iGPU drives the display

Reported by DavidEvansDev · filed Sep 20, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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

LIBVA_DRIVER_NAME=nvidia breaks all video playback on muxless hybrid laptops where the iGPU drives the displayrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

On a muxless hybrid laptop where the panel is wired to the AMD iGPU and the NVIDIA dGPU has no connected outputs, Omarchy sets LIBVA_DRIVER_NAME=nvidia. This silently breaks all hardware video decode in Chromium/Electron apps: audio plays but video never renders, and tabs visibly flicker.

It is not a soft failure. Because vaInitialize succeeds, Chromium never falls back to software decode, so there is no recovery path and nothing useful in the logs.

Root cause

default/hypr/nvidia.lua gates on the mere presence of a GSP-capable NVIDIA GPU:

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")
    hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")

It never checks which GPU drives the display. On this machine only card2-eDP-2 (amdgpu) is connected; every NVIDIA connector is disconnected and nvidia-smi reports display_active: Disabled.

Chromium deliberately refuses NVIDIA render nodes for VA-API:

WARNING:media/gpu/vaapi/vaapi_wrapper.cc:130] Should skip nVidia device named: nvidia-drm

so it decodes on /dev/dri/renderD129 (amdgpu) — while LIBVA_DRIVER_NAME=nvidia forces libva to load the NVDEC driver there. With NVD_BACKEND=direct, nvidia-vaapi-driver reaches the dGPU over CUDA and ignores the DRM fd it was handed, so initialisation reports success against the wrong GPU. Decoded frames land in NVIDIA memory that the AMD-driven display cannot import.

Demonstrated by initialising libva directly against the AMD render node:

AMD node (renderD129) + LIBVA_DRIVER_NAME=nvidia
  OK  va 1.24  vendor=VA-API NVDEC driver [direct backend]      <-- wrong GPU, still "succeeds"

AMD node (renderD129) + LIBVA_DRIVER_NAME=radeonsi
  OK  va 1.24  vendor=Mesa Gallium driver 26.2.2-arch1.1 for AMD Radeon 860M Graphics (radeonsi, krackan1)

AMD node (renderD129) + LIBVA_DRIVER_NAME unset (autodetect)
  OK  va 1.24  vendor=Mesa Gallium driver 26.2.2-arch1.1 for AMD Radeon 860M Graphics (radeonsi, krackan1)

libva's own autodetection picks the correct driver. Omarchy's override is what breaks it.

Steps to reproduce

  1. Use a muxless hybrid laptop whose internal panel is driven by the AMD/Intel iGPU (NVIDIA dGPU has no connected connector).
  2. Boot Omarchy; default/hypr/nvidia.lua exports LIBVA_DRIVER_NAME=nvidia.
  3. Open any YouTube video in Chromium.
  4. Audio plays; the video area stays blank and the tab flickers.

Expected

Hardware decode works, or at minimum falls back to software decode rather than failing silently against a GPU that cannot present.

Suggested fix

Only claim the NVIDIA VA-API driver when NVIDIA actually drives a connected output. Everything else in the block (__GLX_VENDOR_LIBRARY_NAME, PRIME offload) can stay as-is — it is specifically LIBVA_DRIVER_NAME/NVD_BACKEND that must follow the display, since VA-API surfaces have to be importable by whichever GPU scans out.

A sysfs-only detector, consistent with the existing "don't shell out to lspci" note in that file:

# omarchy-hw-nvidia-drives-display
for conn in /sys/class/drm/card*-*/status; do
  [ "$(cat "$conn" 2>/dev/null)" = "connected" ] || continue
  card="${conn%-*}"; card="${card%/status}"
  drv=$(basename "$(readlink -f "$(dirname "$conn")/../device/driver")" 2>/dev/null)
  [ "$drv" = "nvidia" ] && exit 0
done
exit 1

then in nvidia.lua:

if o.shell_succeeds(o.shell_quote(nvidia_gsp)) and o.shell_succeeds(o.shell_quote(nvidia_drives_display)) then
  hl.env("NVD_BACKEND", "direct")
  hl.env("LIBVA_DRIVER_NAME", "nvidia")
end
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")

Simply leaving LIBVA_DRIVER_NAME unset on iGPU-driven systems would also be correct — libva autodetects radeonsi properly, as shown above.

Note this must also hold for hotplug: an external monitor on an NVIDIA-wired HDMI/DP port changes the answer at runtime. Gating on boot-time state is still a strict improvement over gating on nothing.

Workaround

Append to ~/.config/hypr/hyprland.lua (loads after the defaults):

hl.env("LIBVA_DRIVER_NAME", "radeonsi")

System details

  • Omarchy: 4.0.4-1
  • CPU: AMD Ryzen AI 7 350 w/ Radeon 860M
  • GPUs: NVIDIA GB206M RTX 5070 Max-Q [10de:2d18] (card1, renderD128) + AMD Krackan Radeon 860M [1002:1114] (card2, renderD129)
  • Connected outputs: card2-eDP-2 only — all NVIDIA connectors disconnected
  • Kernel: 7.2.5-3-omarchy
  • Hyprland: 0.56.2 / Aquamarine 0.15.0
  • Driver: nvidia-open-dkms 610.57.04, mesa 26.2.2, libva 2.24.1, libva-nvidia-driver 0.0.18
  • Chromium: 152.0.7977.82
View raw text
## What happened

On a muxless hybrid laptop where the panel is wired to the **AMD iGPU** and the NVIDIA dGPU has **no connected outputs**, Omarchy sets `LIBVA_DRIVER_NAME=nvidia`. This silently breaks all hardware video decode in Chromium/Electron apps: **audio plays but video never renders**, and tabs visibly flicker.

It is not a soft failure. Because `vaInitialize` *succeeds*, Chromium never falls back to software decode, so there is no recovery path and nothing useful in the logs.

## Root cause

`default/hypr/nvidia.lua` gates on the mere *presence* of a GSP-capable NVIDIA GPU:

```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")
    hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
```

It never checks **which GPU drives the display**. On this machine only `card2-eDP-2` (amdgpu) is connected; every NVIDIA connector is disconnected and `nvidia-smi` reports `display_active: Disabled`.

Chromium deliberately refuses NVIDIA render nodes for VA-API:

```
WARNING:media/gpu/vaapi/vaapi_wrapper.cc:130] Should skip nVidia device named: nvidia-drm
```

so it decodes on `/dev/dri/renderD129` (amdgpu) — while `LIBVA_DRIVER_NAME=nvidia` forces libva to load the NVDEC driver there. With `NVD_BACKEND=direct`, nvidia-vaapi-driver reaches the dGPU over CUDA and **ignores the DRM fd it was handed**, so initialisation reports success against the wrong GPU. Decoded frames land in NVIDIA memory that the AMD-driven display cannot import.

Demonstrated by initialising libva directly against the AMD render node:

```
AMD node (renderD129) + LIBVA_DRIVER_NAME=nvidia
  OK  va 1.24  vendor=VA-API NVDEC driver [direct backend]      <-- wrong GPU, still "succeeds"

AMD node (renderD129) + LIBVA_DRIVER_NAME=radeonsi
  OK  va 1.24  vendor=Mesa Gallium driver 26.2.2-arch1.1 for AMD Radeon 860M Graphics (radeonsi, krackan1)

AMD node (renderD129) + LIBVA_DRIVER_NAME unset (autodetect)
  OK  va 1.24  vendor=Mesa Gallium driver 26.2.2-arch1.1 for AMD Radeon 860M Graphics (radeonsi, krackan1)
```

libva's own autodetection picks the correct driver. Omarchy's override is what breaks it.

## Steps to reproduce

1. Use a muxless hybrid laptop whose internal panel is driven by the AMD/Intel iGPU (NVIDIA dGPU has no connected connector).
2. Boot Omarchy; `default/hypr/nvidia.lua` exports `LIBVA_DRIVER_NAME=nvidia`.
3. Open any YouTube video in Chromium.
4. Audio plays; the video area stays blank and the tab flickers.

## Expected

Hardware decode works, or at minimum falls back to software decode rather than failing silently against a GPU that cannot present.

## Suggested fix

Only claim the NVIDIA VA-API driver when NVIDIA actually drives a connected output. Everything else in the block (`__GLX_VENDOR_LIBRARY_NAME`, PRIME offload) can stay as-is — it is specifically `LIBVA_DRIVER_NAME`/`NVD_BACKEND` that must follow the display, since VA-API surfaces have to be importable by whichever GPU scans out.

A sysfs-only detector, consistent with the existing "don't shell out to lspci" note in that file:

```sh
# omarchy-hw-nvidia-drives-display
for conn in /sys/class/drm/card*-*/status; do
  [ "$(cat "$conn" 2>/dev/null)" = "connected" ] || continue
  card="${conn%-*}"; card="${card%/status}"
  drv=$(basename "$(readlink -f "$(dirname "$conn")/../device/driver")" 2>/dev/null)
  [ "$drv" = "nvidia" ] && exit 0
done
exit 1
```

then in `nvidia.lua`:

```lua
if o.shell_succeeds(o.shell_quote(nvidia_gsp)) and o.shell_succeeds(o.shell_quote(nvidia_drives_display)) then
  hl.env("NVD_BACKEND", "direct")
  hl.env("LIBVA_DRIVER_NAME", "nvidia")
end
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
```

Simply leaving `LIBVA_DRIVER_NAME` unset on iGPU-driven systems would also be correct — libva autodetects `radeonsi` properly, as shown above.

Note this must also hold for hotplug: an external monitor on an NVIDIA-wired HDMI/DP port changes the answer at runtime. Gating on boot-time state is still a strict improvement over gating on nothing.

## Workaround

Append to `~/.config/hypr/hyprland.lua` (loads after the defaults):

```lua
hl.env("LIBVA_DRIVER_NAME", "radeonsi")
```

## System details

- **Omarchy:** 4.0.4-1
- **CPU:** AMD Ryzen AI 7 350 w/ Radeon 860M
- **GPUs:** NVIDIA GB206M RTX 5070 Max-Q `[10de:2d18]` (card1, renderD128) + AMD Krackan Radeon 860M `[1002:1114]` (card2, renderD129)
- **Connected outputs:** `card2-eDP-2` only — all NVIDIA connectors disconnected
- **Kernel:** 7.2.5-3-omarchy
- **Hyprland:** 0.56.2 / Aquamarine 0.15.0
- **Driver:** nvidia-open-dkms 610.57.04, mesa 26.2.2, libva 2.24.1, libva-nvidia-driver 0.0.18
- **Chromium:** 152.0.7977.82

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 19:19 UTC