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

omarchy install service sunshine always fails: enables 'sunshine.service' but package ships 'app-dev.lizardbyte.app.Sunshine.service'

Reported by molesza · filed Aug 30, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #7050 (R-1810). GitHub close reason: completed.

Received and recorded verbatim. Nothing has been checked 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?
Not yet mapped to any requirement or component.
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. No decision has been recorded yet.

Original report

omarchy install service sunshine always fails: enables 'sunshine.service' but package ships 'app-dev.lizardbyte.app.Sunshine.service'revision 1 · captured 2026-10-04 12:03 UTC via poll

What happened

omarchy install service sunshine fails partway through. The package installs fine, then:

:: Running post-transaction hooks...
(1/5) Reloading user manager configuration...
...
Failed to enable unit: Unit sunshine.service does not exist

Because omarchy-install-service-sunshine runs under set -e, the script aborts at that line and silently skips every remaining step:

  • the ufw rules for the Moonlight ports (LAN + tailscale0) are never added
  • the "Sunshine Admin" web app is never installed
  • the o.launch_on_start("sunshine") autostart entry is never written to ~/.config/hypr/autostart.lua

So the user is left with Sunshine installed but not running, not enabled at boot, and firewalled off — with no indication that most of the installer didn't run.

Expected

Sunshine enabled and started, ports opened, admin web app installed.

Cause

The installer hardcodes:

systemctl --user enable --now sunshine

But the sunshine package ships the unit as /usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service. That unit declares:

[Install]
WantedBy=graphical-session.target
Alias=sunshine.service

Alias= is only materialized as a symlink once the unit is enabled, so sunshine.service does not exist on a fresh install. It is a chicken-and-egg: you cannot enable it by its alias before enabling it. This fails 100% of the time on a clean install.

Enabling it by its real name works and creates the alias:

$ systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service
Created symlink '/home/<user>/.config/systemd/user/sunshine.service' → '/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service'.
Created symlink '/home/<user>/.config/systemd/user/graphical-session.target.wants/app-dev.lizardbyte.app.Sunshine.service' → '/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service'.

Steps to reproduce

  1. On a system without Sunshine installed, run omarchy install service sunshine
  2. Enter the sudo password, accept the pacman transaction
  3. Observe Failed to enable unit: Unit sunshine.service does not exist and the script exiting before the firewall/webapp/autostart steps

Suggested fix

In omarchy-install-service-sunshine, enable the unit by its real name:

systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service

Worth noting the unit is already WantedBy=graphical-session.target, so it autostarts on login under uwsm on its own — the additional o.launch_on_start("sunshine") Hyprland autostart entry looks like it would start a second instance.

Minor: admin UI port not opened

Separately, TCP_PORTS=(47984 47989 48010) omits 47990, the Sunshine configuration UI. Since pairing (setting the initial username/password and entering the Moonlight PIN) can only be done through that UI, and the installer explicitly opens the other ports on tailscale0 for remote streaming, a user connecting over Tailscale can stream but cannot pair without separately opening 47990 or tunnelling it over SSH.

System details

  • Omarchy: 4.0.1-1
  • sunshine: 2026.516.143833-4 (omarchy repo)
  • Kernel: 7.1.9-arch1-2
  • CPU: AMD Ryzen 7 9800X3D
  • GPU: NVIDIA GeForce RTX 5090 (nvidia-open-dkms 610.57.04) + AMD Granite Ridge iGPU
  • Compositor: Hyprland under uwsm, SDDM display manager
View raw text
### What happened

`omarchy install service sunshine` fails partway through. The package installs fine, then:

```
:: Running post-transaction hooks...
(1/5) Reloading user manager configuration...
...
Failed to enable unit: Unit sunshine.service does not exist
```

Because `omarchy-install-service-sunshine` runs under `set -e`, the script aborts at that line and **silently skips every remaining step**:

- the ufw rules for the Moonlight ports (LAN + `tailscale0`) are never added
- the "Sunshine Admin" web app is never installed
- the `o.launch_on_start("sunshine")` autostart entry is never written to `~/.config/hypr/autostart.lua`

So the user is left with Sunshine installed but not running, not enabled at boot, and firewalled off — with no indication that most of the installer didn't run.

### Expected

Sunshine enabled and started, ports opened, admin web app installed.

### Cause

The installer hardcodes:

```bash
systemctl --user enable --now sunshine
```

But the `sunshine` package ships the unit as `/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service`. That unit declares:

```ini
[Install]
WantedBy=graphical-session.target
Alias=sunshine.service
```

`Alias=` is only materialized as a symlink **once the unit is enabled**, so `sunshine.service` does not exist on a fresh install. It is a chicken-and-egg: you cannot enable it by its alias before enabling it. This fails 100% of the time on a clean install.

Enabling it by its real name works and creates the alias:

```
$ systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service
Created symlink '/home/<user>/.config/systemd/user/sunshine.service' → '/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service'.
Created symlink '/home/<user>/.config/systemd/user/graphical-session.target.wants/app-dev.lizardbyte.app.Sunshine.service' → '/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service'.
```

### Steps to reproduce

1. On a system without Sunshine installed, run `omarchy install service sunshine`
2. Enter the sudo password, accept the pacman transaction
3. Observe `Failed to enable unit: Unit sunshine.service does not exist` and the script exiting before the firewall/webapp/autostart steps

### Suggested fix

In `omarchy-install-service-sunshine`, enable the unit by its real name:

```bash
systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service
```

Worth noting the unit is already `WantedBy=graphical-session.target`, so it autostarts on login under uwsm on its own — the additional `o.launch_on_start("sunshine")` Hyprland autostart entry looks like it would start a second instance.

### Minor: admin UI port not opened

Separately, `TCP_PORTS=(47984 47989 48010)` omits **47990**, the Sunshine configuration UI. Since pairing (setting the initial username/password and entering the Moonlight PIN) can only be done through that UI, and the installer explicitly opens the other ports on `tailscale0` for remote streaming, a user connecting over Tailscale can stream but cannot pair without separately opening 47990 or tunnelling it over SSH.

### System details

- Omarchy: `4.0.1-1`
- sunshine: `2026.516.143833-4` (omarchy repo)
- Kernel: `7.1.9-arch1-2`
- CPU: AMD Ryzen 7 9800X3D
- GPU: NVIDIA GeForce RTX 5090 (nvidia-open-dkms 610.57.04) + AMD Granite Ridge iGPU
- Compositor: Hyprland under uwsm, SDDM display manager

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.

No decision has been recorded yet.