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.
Theme intros show black on NVIDIA, then the shell draws the previous theme's wallpaper path
Reported by claytonfaria · filed Oct 9, 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
- Intel Core i7-14700, NVIDIA GeForce RTX 4070 SUPER (only GPU),
nvidia-open-dkms/nvidia-utils615.71.09,egl-wayland1.1.24,egl-wayland21.0.2 - Single monitor: DP-4, ASUS PA279CRV, 3840x2160@60, scale 1.6, XRGB8888
- Omarchy
4.0.0.r6815.g50d687a-1(omarchy-dev,pacman -Qkk: 0 altered files), kernel 7.2.8-5-omarchy-bore owe0.2.10-4, Hyprland 0.56.2, aquamarine 0.15.1, quickshell 0.3.2, mpv 0.41.0, ffmpeg 9.0.2, qt6-base 6.12.0- Env:
LIBVA_DRIVER_NAME=nvidia,NVD_BACKEND=direct,__GLX_VENDOR_LIBRARY_NAME=nvidia - Stock config. Background intros enabled, animations on. Reproduced after a fresh reboot.
What's wrong?
Switching to a theme whose wallpaper has an intro clip (and the login intro) gives a black desktop: black for the whole intro, and afterwards the wrong wallpaper (black, or the previous theme's image) until omarchy-shell background refresh or a shell restart. Plain mpv <clip> plays the same clips fine.
There seem to be two separate problems that stack.
1. The intro video is never visible (OWE on NVIDIA)
Reproduced without a theme switch, on an empty workspace:
owe warm; sleep 4
owe intro --start first-frame /usr/share/omarchy/themes/gruvbox/backgrounds/intros/1-the-backwater.mp4Measured 2.3s into the clip:
owe render-status:{"kind":"video","time_pos":2.333,"hwdec":"nvdec","outputs":1,"swaps":56,"swap_failures":0}hyprctl layers:owe-background(2400x1350, full screen) is the only background layer; the shell background is unmapped.- A
grimscreenshot of the output is black, and that's also what you see on the monitor. owe render '{"cmd":"snapshot",...}'taken at the same moment shows the correct frame (the river scene).
What I ruled out:
- Decoding.
OWE_HWDEC=no(software decode,hwdec: "no"in render-status) is black too. - Alpha. A Hyprland
ignore_alphalayer rule onowe-backgroundchanges nothing. - Delivery to the compositor. With
WAYLAND_DEBUG=clientonowe-renderduring an intro, it sends 219attach/damage(0,0,INT_MAX,INT_MAX)/commitwith 3 dmabuf buffers (3840x2160,AR24, modifier0x0300000000606014), and Hyprland returns everywl_callback.done. The surface getsset_buffer_scale(1), a viewport destination of 2400x1350, andpreferred_scale(192). The Hyprland log has no buffer import errors.
The snapshot renders offscreen through owe_mpv_render_fbo(), while the window path renders mpv into FBO 0 (owe_mpv_render_output()), after owe_mpv_update() has made the context current with EGL_NO_SURFACE. The window's buffers come out opaque black (the glClearColor(0,0,0,1) colour), so I suspect mpv's draw into the default framebuffer of the window surface doesn't land on the NVIDIA driver. That's a guess; I haven't confirmed it in the code.
Probably the same as #14526 (hybrid AMD+NVIDIA). This machine has only an NVIDIA GPU. #14546 wouldn't help here: render-status reports a healthy, advancing video.
2. After the intro, the shell draws the previous theme's wallpaper path
On the intro path, set_theme_background in omarchy-theme-set never gives the background service the new path. It only calls background setInstant when the intro fails. While OWE plays the intro the shell is suspended, and the theme swap replaces current/theme. When OWE resumes the shell (setSuspended false) and parks its renderer, Background.qml still holds the old current/theme/backgrounds/<previous name>:
owed: intro finished
owed: shell background enabled
omarchy-shell: WARN scene: QML QQuickImage* at @Ui/BackgroundMedia.qml[36:5]: Cannot open: file:///home/<user>/.local/state/omarchy/current/theme/backgrounds/0-ship-at-sea.jpg
owed: renderer parked, the shell draws the stillSeen after this boot for 1-totoro.webp, 2-flower-basket.webp and 0-ship-at-sea.jpg, each the previous theme's file. The result is a black desktop. When the old URL is still in Qt's image cache (cached: true), you get the previous theme's image instead. omarchy-shell background refresh fixes it every time.
A fix I tested locally: Background.qml reads the current/background link again and calls setBackground(path, true) when setSuspended goes from true to false. The forced reload also covers #14191, where both themes use the same file name. With that change the right wallpaper appeared after every intro.
Steps
- Stock install on NVIDIA, intros enabled.
omarchy theme set gruvbox, thenomarchy theme set everforest(any theme whose chosen wallpaper has an intro).- Black for about 7s while
owedlogsintro playing. Afterrenderer parked, the desktop is black or shows the previous theme's wallpaper.
Related: #14526, #14546, #14191. This supersedes #14728, which I closed to re-test after a reboot.
View raw text
### System details
- Intel Core i7-14700, NVIDIA GeForce RTX 4070 SUPER (only GPU), `nvidia-open-dkms` / `nvidia-utils` 615.71.09, `egl-wayland` 1.1.24, `egl-wayland2` 1.0.2
- Single monitor: DP-4, ASUS PA279CRV, 3840x2160@60, scale 1.6, XRGB8888
- Omarchy `4.0.0.r6815.g50d687a-1` (`omarchy-dev`, `pacman -Qkk`: 0 altered files), kernel 7.2.8-5-omarchy-bore
- `owe` 0.2.10-4, Hyprland 0.56.2, aquamarine 0.15.1, quickshell 0.3.2, mpv 0.41.0, ffmpeg 9.0.2, qt6-base 6.12.0
- Env: `LIBVA_DRIVER_NAME=nvidia`, `NVD_BACKEND=direct`, `__GLX_VENDOR_LIBRARY_NAME=nvidia`
- Stock config. Background intros enabled, animations on. Reproduced after a fresh reboot.
### What's wrong?
Switching to a theme whose wallpaper has an intro clip (and the login intro) gives a black desktop: black for the whole intro, and afterwards the wrong wallpaper (black, or the previous theme's image) until `omarchy-shell background refresh` or a shell restart. Plain `mpv <clip>` plays the same clips fine.
There seem to be two separate problems that stack.
#### 1. The intro video is never visible (OWE on NVIDIA)
Reproduced without a theme switch, on an empty workspace:
```bash
owe warm; sleep 4
owe intro --start first-frame /usr/share/omarchy/themes/gruvbox/backgrounds/intros/1-the-backwater.mp4
```
Measured 2.3s into the clip:
- `owe render-status`: `{"kind":"video","time_pos":2.333,"hwdec":"nvdec","outputs":1,"swaps":56,"swap_failures":0}`
- `hyprctl layers`: `owe-background` (2400x1350, full screen) is the only background layer; the shell background is unmapped.
- A `grim` screenshot of the output is black, and that's also what you see on the monitor.
- `owe render '{"cmd":"snapshot",...}'` taken at the same moment shows the correct frame (the river scene).
What I ruled out:
- **Decoding.** `OWE_HWDEC=no` (software decode, `hwdec: "no"` in render-status) is black too.
- **Alpha.** A Hyprland `ignore_alpha` layer rule on `owe-background` changes nothing.
- **Delivery to the compositor.** With `WAYLAND_DEBUG=client` on `owe-render` during an intro, it sends 219 `attach`/`damage(0,0,INT_MAX,INT_MAX)`/`commit` with 3 dmabuf buffers (3840x2160, `AR24`, modifier `0x0300000000606014`), and Hyprland returns every `wl_callback.done`. The surface gets `set_buffer_scale(1)`, a viewport destination of 2400x1350, and `preferred_scale(192)`. The Hyprland log has no buffer import errors.
The snapshot renders offscreen through `owe_mpv_render_fbo()`, while the window path renders mpv into FBO 0 (`owe_mpv_render_output()`), after `owe_mpv_update()` has made the context current with `EGL_NO_SURFACE`. The window's buffers come out opaque black (the `glClearColor(0,0,0,1)` colour), so I suspect mpv's draw into the default framebuffer of the window surface doesn't land on the NVIDIA driver. That's a guess; I haven't confirmed it in the code.
Probably the same as #14526 (hybrid AMD+NVIDIA). This machine has only an NVIDIA GPU. #14546 wouldn't help here: render-status reports a healthy, advancing video.
#### 2. After the intro, the shell draws the previous theme's wallpaper path
On the intro path, `set_theme_background` in `omarchy-theme-set` never gives the background service the new path. It only calls `background setInstant` when the intro *fails*. While OWE plays the intro the shell is suspended, and the theme swap replaces `current/theme`. When OWE resumes the shell (`setSuspended false`) and parks its renderer, `Background.qml` still holds the old `current/theme/backgrounds/<previous name>`:
```
owed: intro finished
owed: shell background enabled
omarchy-shell: WARN scene: QML QQuickImage* at @Ui/BackgroundMedia.qml[36:5]: Cannot open: file:///home/<user>/.local/state/omarchy/current/theme/backgrounds/0-ship-at-sea.jpg
owed: renderer parked, the shell draws the still
```
Seen after this boot for `1-totoro.webp`, `2-flower-basket.webp` and `0-ship-at-sea.jpg`, each the previous theme's file. The result is a black desktop. When the old URL is still in Qt's image cache (`cached: true`), you get the previous theme's image instead. `omarchy-shell background refresh` fixes it every time.
A fix I tested locally: `Background.qml` reads the `current/background` link again and calls `setBackground(path, true)` when `setSuspended` goes from true to false. The forced reload also covers #14191, where both themes use the same file name. With that change the right wallpaper appeared after every intro.
### Steps
1. Stock install on NVIDIA, intros enabled.
2. `omarchy theme set gruvbox`, then `omarchy theme set everforest` (any theme whose chosen wallpaper has an intro).
3. Black for about 7s while `owed` logs `intro playing`. After `renderer parked`, the desktop is black or shows the previous theme's wallpaper.
Related: #14526, #14546, #14191. This supersedes #14728, which I closed to re-test after a reboot.
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 23:49 UTC