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

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.

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: enables unit by its alias before the alias existsrevision 1 · captured 2026-10-04 12:10 UTC via poll

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:

systemctl --user enable --now sunshine

The 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.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:

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:

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

Omarchy4.0.3-1
Kernel7.2.3-arch1-3
systemd261 (261.2-1-arch)
CPUAMD Ryzen 7 PRO 8845HS w/ Radeon 780M
GPUAMD HawkPoint1 (rev d5)
sunshine2026.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.