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.
omarchy install service sunshine fails: enables unit by its alias before the alias exists
Reported by noonat · filed Sep 11, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #7050 (R-1810). GitHub close reason: completed.
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
What happened
omarchy install service sunshine fails partway through with:
Failed to enable unit: Unit sunshine.service does not existThe package installs, but the service is left disabled and **the firewall
ports are never opened**, so Moonlight cannot reach the host.
Cause
omarchy-install-service-sunshine:74 enables the unit by its alias:
systemctl --user enable --now sunshineThe sunshine package ships the unit as/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service, which declares:
[Install]
WantedBy=graphical-session.target
Alias=sunshine.serviceA systemd Alias= is realised as a symlink created by `systemctl enable`.
Before the unit is enabled, sunshine.service does not resolve, so enabling by
that name cannot work. Enabling by the real name succeeds and creates the alias
as a side effect:
$ 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' -> ...Minimal reproduction, independent of Sunshine — a scratch unit with anyAlias= produces the identical error:
cat > ~/.config/systemd/user/zz-alias-probe.service <<'UNIT'
[Unit]
Description=probe
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
[Install]
WantedBy=default.target
Alias=zz-probe-alias.service
UNIT
systemctl --user daemon-reload
systemctl --user enable zz-probe-alias.service
# Failed to enable unit: Unit zz-probe-alias.service does not exist
systemctl --user enable zz-alias-probe.service # works, and creates the aliasWhy it is worse than a cosmetic error
The script runs under set -e, and the failing call is at line 74 of 87, so
everything after it is skipped:
open_ufw_ports(line 77) — Moonlight ports never openedinstall_admin_webapp(line 80) — no admin shortcutenable_hyprland_autostart(line 84) — no autostart
The final success message never prints, but the earlierInstalling Sunshine... output makes it look like most of the work completed.
The missing firewall rules are the practical failure: Sunshine appears
installed and, once started manually, appears healthy, while remaining
unreachable from the LAN.
Suggested fix
Enable the unit by its real name atomarchy-install-service-sunshine:74:
systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.serviceThe sunshine.service alias is then available for later use.
Worth considering separately: the script adds a Hyprland autostart entry
(o.launch_on_start("sunshine")) in addition to the systemd unit, but the unit
is already WantedBy=graphical-session.target, so both together start Sunshine
twice.
System
| Omarchy | 4.0.3-1 |
| Kernel | 7.2.3-arch1-3 |
| systemd | 261 (261.2-1-arch) |
| CPU | AMD Ryzen 7 PRO 8845HS w/ Radeon 780M |
| GPU | AMD HawkPoint1 (rev d5) |
| sunshine | 2026.516.143833-4.1 |
View raw text
### What happened
`omarchy install service sunshine` fails partway through with:
```
Failed to enable unit: Unit sunshine.service does not exist
```
The package installs, but the service is left disabled and **the firewall
ports are never opened**, so Moonlight cannot reach the host.
### Cause
`omarchy-install-service-sunshine:74` enables the unit by its alias:
```bash
systemctl --user enable --now sunshine
```
The `sunshine` package ships the unit as
`/usr/lib/systemd/user/app-dev.lizardbyte.app.Sunshine.service`, which declares:
```ini
[Install]
WantedBy=graphical-session.target
Alias=sunshine.service
```
A systemd `Alias=` is realised as a symlink **created by `systemctl enable`**.
Before the unit is enabled, `sunshine.service` does not resolve, so enabling by
that name cannot work. Enabling by the real name succeeds and creates the alias
as a side effect:
```
$ 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' -> ...
```
Minimal reproduction, independent of Sunshine — a scratch unit with any
`Alias=` produces the identical error:
```bash
cat > ~/.config/systemd/user/zz-alias-probe.service <<'UNIT'
[Unit]
Description=probe
[Service]
Type=oneshot
ExecStart=/bin/true
RemainAfterExit=yes
[Install]
WantedBy=default.target
Alias=zz-probe-alias.service
UNIT
systemctl --user daemon-reload
systemctl --user enable zz-probe-alias.service
# Failed to enable unit: Unit zz-probe-alias.service does not exist
systemctl --user enable zz-alias-probe.service # works, and creates the alias
```
### Why it is worse than a cosmetic error
The script runs under `set -e`, and the failing call is at line 74 of 87, so
everything after it is skipped:
- `open_ufw_ports` (line 77) — Moonlight ports never opened
- `install_admin_webapp` (line 80) — no admin shortcut
- `enable_hyprland_autostart` (line 84) — no autostart
The final success message never prints, but the earlier
`Installing Sunshine...` output makes it look like most of the work completed.
The missing firewall rules are the practical failure: Sunshine appears
installed and, once started manually, appears healthy, while remaining
unreachable from the LAN.
### Suggested fix
Enable the unit by its real name at
`omarchy-install-service-sunshine:74`:
```bash
systemctl --user enable --now app-dev.lizardbyte.app.Sunshine.service
```
The `sunshine.service` alias is then available for later use.
Worth considering separately: the script adds a Hyprland autostart entry
(`o.launch_on_start("sunshine")`) in addition to the systemd unit, but the unit
is already `WantedBy=graphical-session.target`, so both together start Sunshine
twice.
### System
| | |
|---|---|
| Omarchy | 4.0.3-1 |
| Kernel | 7.2.3-arch1-3 |
| systemd | 261 (261.2-1-arch) |
| CPU | AMD Ryzen 7 PRO 8845HS w/ Radeon 780M |
| GPU | AMD HawkPoint1 (rev d5) |
| sunshine | 2026.516.143833-4.1 |
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.