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

omarchy install service sunshine fails: enabling by Alias= before the unit is enabled can never resolve

Reported by mikkelon · filed Sep 2, 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 fails: enabling by Alias= before the unit is enabled can never resolverevision 1 · captured 2026-10-04 12:03 UTC via poll

What happened

omarchy install service sunshine aborts partway through on a fresh install:

Installing Sunshine...
...
(4/4) installing sunshine                                    [====] 100%
Failed to enable unit: Unit sunshine.service does not exist

The package installs fine, but the script exits at that point and never completes.

Root cause

bin/omarchy-install-service-sunshine line 74 runs:

systemctl --user enable --now sunshine

The omarchy/sunshine package does not ship a sunshine.service. It ships:

/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service

That unit declares Alias=sunshine.service in its [Install] section — but a
systemd Alias= is only materialised as a symlink when the unit is enabled.
So on a fresh install sunshine.service does not yet exist, and enabling *by the
alias* is a chicken-and-egg that can never succeed.

Enabling by the real unit name works and creates the alias, after which
sunshine.service resolves normally:

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

$ systemctl --user is-active sunshine.service
active

Impact

The script has set -e, so the failed enable aborts everything after line 74:

  • Sunshine is not enabled or started
  • UFW streaming ports (47984/47989/48010 TCP, 5353/47998/47999/48000/48002/48010 UDP) are not opened for private LANs or tailscale0
  • The "Sunshine Admin" web app is not installed
  • o.launch_on_start("sunshine") is not added to ~/.config/hypr/autostart.lua

The user is left with a Sunshine package installed but entirely non-functional, and
the only visible symptom is the one-line Failed to enable unit message.

Steps to reproduce

  1. On a system without Sunshine installed, run omarchy install service sunshine
  2. Observe Failed to enable unit: Unit sunshine.service does not exist
  3. systemctl --user is-enabled app-dev.lizardbyte.app.Sunshine.service → disabled
  4. ls ~/.local/share/applications | grep -i sunshine → nothing
  5. tail ~/.config/hypr/autostart.lua → no launch_on_start entry

Expected

The install completes: the service is enabled and running, ports are opened, and the
admin web app is installed.

Suggested fix

Enable the unit by the name the package actually ships:

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

Worth noting: that unit is already WantedBy=graphical-session.target, so it starts
with the session on its own. The separate o.launch_on_start("sunshine") autostart
entry the script adds will spawn a second instance competing for the same ports —
possibly worth dropping as part of the same fix.

System details

Omarchy4.0.2-1
sunshine2026.516.143833-4 (omarchy repo)
systemd261.2-1
Kernel7.1.9-arch1-2
CPUIntel Core Ultra 9 285K
GPUIntel Arrow Lake-S (integrated)
View raw text
### What happened

`omarchy install service sunshine` aborts partway through on a fresh install:

```
Installing Sunshine...
...
(4/4) installing sunshine                                    [====] 100%
Failed to enable unit: Unit sunshine.service does not exist
```

The package installs fine, but the script exits at that point and never completes.

### Root cause

`bin/omarchy-install-service-sunshine` line 74 runs:

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

The `omarchy/sunshine` package does not ship a `sunshine.service`. It ships:

```
/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service
```

That unit declares `Alias=sunshine.service` in its `[Install]` section — but a
`systemd` `Alias=` is only materialised as a symlink **when the unit is enabled**.
So on a fresh install `sunshine.service` does not yet exist, and enabling *by the
alias* is a chicken-and-egg that can never succeed.

Enabling by the real unit name works and creates the alias, after which
`sunshine.service` resolves normally:

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

$ systemctl --user is-active sunshine.service
active
```

### Impact

The script has `set -e`, so the failed `enable` aborts everything after line 74:

- Sunshine is **not** enabled or started
- UFW streaming ports (47984/47989/48010 TCP, 5353/47998/47999/48000/48002/48010 UDP) are **not** opened for private LANs or `tailscale0`
- The "Sunshine Admin" web app is **not** installed
- `o.launch_on_start("sunshine")` is **not** added to `~/.config/hypr/autostart.lua`

The user is left with a Sunshine package installed but entirely non-functional, and
the only visible symptom is the one-line `Failed to enable unit` message.

### Steps to reproduce

1. On a system without Sunshine installed, run `omarchy install service sunshine`
2. Observe `Failed to enable unit: Unit sunshine.service does not exist`
3. `systemctl --user is-enabled app-dev.lizardbyte.app.Sunshine.service` → `disabled`
4. `ls ~/.local/share/applications | grep -i sunshine` → nothing
5. `tail ~/.config/hypr/autostart.lua` → no `launch_on_start` entry

### Expected

The install completes: the service is enabled and running, ports are opened, and the
admin web app is installed.

### Suggested fix

Enable the unit by the name the package actually ships:

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

Worth noting: that unit is already `WantedBy=graphical-session.target`, so it starts
with the session on its own. The separate `o.launch_on_start("sunshine")` autostart
entry the script adds will spawn a second instance competing for the same ports —
possibly worth dropping as part of the same fix.

### System details

| | |
|---|---|
| Omarchy | 4.0.2-1 |
| sunshine | 2026.516.143833-4 (omarchy repo) |
| systemd | 261.2-1 |
| Kernel | 7.1.9-arch1-2 |
| CPU | Intel Core Ultra 9 285K |
| GPU | Intel Arrow Lake-S (integrated) |

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.