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-227GitHub issuePublicReceived

Background switcher times out with many wallpapers: image picker instantiates every slide

Reported by emkcloud · filed Sep 21, 2026 · open at source

In the audited area (menu) — decided by agents · verified. Not validated yet.

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?
AreaIn the audited areamenu· 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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: in the audited area (menu) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.

Original report

Background switcher times out with many wallpapers: image picker instantiates every sliderevision 1 · captured 2026-09-28 21:23 UTC via poll

Summary

With a few hundred images in the theme's backgrounds folder, SUPER+CTRL+SPACE (or omarchy-theme-bg-switcher) no longer opens. The terminal reports:

omarchy-shell is not responding
Image selector failed to accept request

Small folders (a handful of images) open instantly.

Environment

  • Omarchy 4.0.4-1 (omarchy package)
  • Hyprland session, omarchy-shell running (quickshell -n -p /usr/share/omarchy/shell)

Steps to reproduce

  1. Put ~500 images in ~/.config/omarchy/backgrounds/<theme>/ (a wallpaper collection installed by a plugin does this).
  2. Press SUPER+CTRL+SPACE, or run omarchy-theme-bg-switcher from a terminal.
  3. The image selector never appears; the two errors above are printed.

With OMARCHY_SHELL_IPC_TIMEOUT=15s omarchy-theme-bg-switcher the carousel does appear, after a few seconds.

Root cause (I think)

  • bin/omarchy-theme-bg-switcher calls omarchy-menu-images without --lazy-thumbnails, while bin/omarchy-theme-switcher:117 passes it. So the background selector eagerly generates a thumbnail for every image and hands the full rows payload to the picker.
  • bin/omarchy-menu-images:284 invokes omarchy-shell image-selector open …, and bin/omarchy-shell:58 enforces a hard 2s IPC timeout, so anything slower is reported as "omarchy-shell is not responding".
  • The picker creates one delegate per image with Repeater { model: root.imageArray.length } (shell/plugins/image-picker/ImagePicker.qml:437); each delegate builds Shape masks plus a layer/MultiEffect (:469-519). A Repeater instantiates all of them at once, which blocks the shell main thread for seconds; the open IPC response is only delivered after that event-loop turn, so the caller times out at 2s.
  • Measurements on my machine: a directory with 3 files opens instantly; with ~500 files open takes >2s and fails, and it does complete when the timeout is raised. Passing synthetic (non-existent) rows is fast, which points at the delegate building/rendering rather than parsing the payload.

This seems distinct from #8262 (empty directory hangs the caller).

Suggested fixes

  • Preferred: make the picker lazy/windowed (a horizontal ListView/PathView, or a windowed Repeater that only builds the visible ±N slides) so delegate count does not scale with the number of images.
  • Cheap: pass --lazy-thumbnails in omarchy-theme-bg-switcher, matching omarchy-theme-switcher, and/or raise/parameterize the IPC timeout for the open call.
  • Worth keeping in mind: plugins legitimately install hundreds of wallpapers into ~/.config/omarchy/backgrounds/<theme>/, so the built-in switcher should scale.

Workaround

OMARCHY_SHELL_IPC_TIMEOUT=15s omarchy-theme-bg-switcher, or keep fewer images in the folder.

View raw text
### Summary

With a few hundred images in the theme's backgrounds folder, `SUPER+CTRL+SPACE` (or `omarchy-theme-bg-switcher`) no longer opens. The terminal reports:

```
omarchy-shell is not responding
Image selector failed to accept request
```

Small folders (a handful of images) open instantly.

### Environment

- Omarchy 4.0.4-1 (`omarchy` package)
- Hyprland session, `omarchy-shell` running (`quickshell -n -p /usr/share/omarchy/shell`)

### Steps to reproduce

1. Put ~500 images in `~/.config/omarchy/backgrounds/<theme>/` (a wallpaper collection installed by a plugin does this).
2. Press `SUPER+CTRL+SPACE`, or run `omarchy-theme-bg-switcher` from a terminal.
3. The image selector never appears; the two errors above are printed.

With `OMARCHY_SHELL_IPC_TIMEOUT=15s omarchy-theme-bg-switcher` the carousel does appear, after a few seconds.

### Root cause (I think)

- `bin/omarchy-theme-bg-switcher` calls `omarchy-menu-images` **without** `--lazy-thumbnails`, while `bin/omarchy-theme-switcher:117` passes it. So the background selector eagerly generates a thumbnail for every image and hands the full rows payload to the picker.
- `bin/omarchy-menu-images:284` invokes `omarchy-shell image-selector open …`, and `bin/omarchy-shell:58` enforces a hard **2s** IPC timeout, so anything slower is reported as "omarchy-shell is not responding".
- The picker creates one delegate per image with `Repeater { model: root.imageArray.length }` (`shell/plugins/image-picker/ImagePicker.qml:437`); each delegate builds `Shape` masks plus a `layer`/`MultiEffect` (`:469-519`). A `Repeater` instantiates **all** of them at once, which blocks the shell main thread for seconds; the `open` IPC response is only delivered after that event-loop turn, so the caller times out at 2s.
- Measurements on my machine: a directory with 3 files opens instantly; with ~500 files `open` takes >2s and fails, and it does complete when the timeout is raised. Passing synthetic (non-existent) rows is fast, which points at the delegate building/rendering rather than parsing the payload.

This seems distinct from #8262 (empty directory hangs the caller).

### Suggested fixes

- Preferred: make the picker lazy/windowed (a horizontal `ListView`/`PathView`, or a windowed `Repeater` that only builds the visible ±N slides) so delegate count does not scale with the number of images.
- Cheap: pass `--lazy-thumbnails` in `omarchy-theme-bg-switcher`, matching `omarchy-theme-switcher`, and/or raise/parameterize the IPC timeout for the `open` call.
- Worth keeping in mind: plugins legitimately install hundreds of wallpapers into `~/.config/omarchy/backgrounds/<theme>/`, so the built-in switcher should scale.

### Workaround

`OMARCHY_SHELL_IPC_TIMEOUT=15s omarchy-theme-bg-switcher`, or keep fewer images in the folder.

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

  • Related PRpr/12248· confirmed
  • Related PRpr/12819· 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.

  • Decided by agents · verified: in the audited area (menu)
  • Decided by agents · verified: matches no known issue

The outcome (valid, duplicate, not a bug, …) is not decided yet.