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-1344GitHub issuePublicDecided· Out of scope

omarchy-restart-hyprsunset kills hyprsunset and the uwsm-app relaunch dies silently — night light config changes never apply

Reported by gcap0n1 · filed Aug 27, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 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

omarchy-restart-hyprsunset kills hyprsunset and the uwsm-app relaunch dies silently — night light config changes never applyrevision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

Running the official omarchy restart hyprsunset (or omarchy-restart-hyprsunset) kills the running hyprsunset and ends with no hyprsunset process at all. The replacement launched by omarchy-restart-app via setsid uwsm-app -- hyprsunset & dies within seconds, silently (no error in the command output, nothing in the user journal).

This matters more than a plain crash because hyprsunset reads ~/.config/hypr/hyprsunset.conf only at startup: users who edit the night-light temperature (or any profile) and restart to apply it end up with either a dead night light or a stale-tinted screen, and no visible error anywhere. It looks exactly like "my config change doesn't work / reverted".

Steps to reproduce

pgrep -a hyprsunset                     # e.g. 412508 hyprsunset — running
omarchy-restart-hyprsunset
sleep 2
pgrep -a hyprsunset                     # -> (empty)

Journal shows the replacement starting and then vanishing with no error:

uwsm_app-daemon[1228]: received: app -- hyprsunset
uwsm_app-daemon[1228]: sent: exec systemd-run --user --scope --slice=app-graphical.slice --unit=app-Hyprland-hyprsunset-8ff5fc60.scope --quiet --collect --same-dir -- hyprsunset
systemd[977]: Started hyprsunset.
# ... process gone seconds later, no stop/error line anywhere

The same death pattern hits every launch through the uwsm-app client when the launching context exits (which omarchy-restart-app always does, being a script that backgrounds and returns): three app-Hyprland-hyprsunset-*.scope instances started and disappeared within one debugging session, while a hyprsunset started outside uwsm (pkill -x hyprsunset; setsid hyprsunset >/dev/null 2>&1 &) survived two days of suspend/resume cycles.

Expected

omarchy-restart-hyprsunset should leave a working hyprsunset running with the current config.

Root cause (hypothesis)

omarchy-restart-app relaunches background daemons through the uwsm-app client, whose daemon wraps the app in systemd-run --user --scope. The scope appears to be torn down when the short-lived uwsm-app client process goes away — which is immediately, since omarchy-restart-app backgrounds it and exits. For a long-running daemon like hyprsunset this wrapper is the wrong lifetime model; a plain setsid exec (or a proper long-lived systemd-run --user --unit=... service) is what sticks.

Workaround

pkill -x hyprsunset
setsid hyprsunset >/dev/null 2>&1 &

System

  • Omarchy: dev (83881e97)
  • hyprsunset 0.4.0-3, Hyprland 0.56.2-1, quickshell 0.3.1-1
  • Kernel: 7.1.9-arch1-2
  • AMD Ryzen 5 5500U, Lucienne iGPU
View raw text
## What happened

Running the official `omarchy restart hyprsunset` (or `omarchy-restart-hyprsunset`) kills the running hyprsunset and ends with **no hyprsunset process at all**. The replacement launched by `omarchy-restart-app` via `setsid uwsm-app -- hyprsunset &` dies within seconds, silently (no error in the command output, nothing in the user journal).

This matters more than a plain crash because hyprsunset reads `~/.config/hypr/hyprsunset.conf` **only at startup**: users who edit the night-light temperature (or any profile) and restart to apply it end up with either a dead night light or a stale-tinted screen, and no visible error anywhere. It looks exactly like "my config change doesn't work / reverted".

## Steps to reproduce

```
pgrep -a hyprsunset                     # e.g. 412508 hyprsunset — running
omarchy-restart-hyprsunset
sleep 2
pgrep -a hyprsunset                     # -> (empty)
```

Journal shows the replacement starting and then vanishing with no error:

```
uwsm_app-daemon[1228]: received: app -- hyprsunset
uwsm_app-daemon[1228]: sent: exec systemd-run --user --scope --slice=app-graphical.slice --unit=app-Hyprland-hyprsunset-8ff5fc60.scope --quiet --collect --same-dir -- hyprsunset
systemd[977]: Started hyprsunset.
# ... process gone seconds later, no stop/error line anywhere
```

The same death pattern hits every launch through the `uwsm-app` client when the launching context exits (which `omarchy-restart-app` always does, being a script that backgrounds and returns): three `app-Hyprland-hyprsunset-*.scope` instances started and disappeared within one debugging session, while a hyprsunset started **outside** uwsm (`pkill -x hyprsunset; setsid hyprsunset >/dev/null 2>&1 &`) survived two days of suspend/resume cycles.

## Expected

`omarchy-restart-hyprsunset` should leave a working hyprsunset running with the current config.

## Root cause (hypothesis)

`omarchy-restart-app` relaunches background daemons through the `uwsm-app` client, whose daemon wraps the app in `systemd-run --user --scope`. The scope appears to be torn down when the short-lived `uwsm-app` client process goes away — which is immediately, since `omarchy-restart-app` backgrounds it and exits. For a long-running daemon like hyprsunset this wrapper is the wrong lifetime model; a plain `setsid` exec (or a proper long-lived `systemd-run --user --unit=...` service) is what sticks.

## Workaround

```
pkill -x hyprsunset
setsid hyprsunset >/dev/null 2>&1 &
```

## System

- Omarchy: dev (83881e97)
- hyprsunset 0.4.0-3, Hyprland 0.56.2-1, quickshell 0.3.1-1
- Kernel: 7.1.9-arch1-2
- AMD Ryzen 5 5500U, Lucienne iGPU

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/14347· 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 09:37 UTC