Omarchy
Install the Punktfunk host on Omarchy 4.x — the Arch repo, then one setup command for the firewall, autostart, the app menu and the bar widget.
Install the host on Omarchy 4.x and wire it into the desktop with one command. Omarchy is Arch underneath, so the repo and packages are the Arch ones; only the install line and the desktop wiring differ.
One command instead? The guided installer (preview)
runs every step below, punktfunk-omarchy setup included:
curl -fsSL https://punktfunk.unom.io/install.sh | sh1. GPU driver
Same as Arch: sudo pacman -S --needed nvidia-utils on NVIDIA; on AMD and Intel,
the Mesa stack you already have.
2. Install and wire it in
curl -fsS https://git.unom.io/api/packages/unom/arch/repository.key | sudo pacman-key --add -sudo pacman-key --lsign-key E0CA04465C99C936E0B0C6510A317015A34DDD69grep -q '^\[punktfunk\]' /etc/pacman.conf || printf '\n[punktfunk]\nServer = https://git.unom.io/api/packages/unom/arch/$repo/$arch\n' | sudo tee -a /etc/pacman.conf >/dev/nullsudo pacman -Sysudo pacman -S punktfunk-host punktfunk-web punktfunk-scripting punktfunk-clientpunktfunk-omarchy setupRun pacman -Sy, then pacman -S, as shown. Omarchy aborts any pacman -Syu <package>
("Woah partner…") and installs nothing, because system upgrades go through omarchy update.
The last line, punktfunk-omarchy setup, does the rest. Each step is safe to re-run:
| Step | What it does |
|---|---|
| Groups | Adds you to input (virtual gamepads) and punktfunk (the virtual Steam Deck pad). Log out and back in before streaming. |
| Autostart | Enables punktfunk-host and punktfunk-web as user services that start at login. |
| Firewall | Opens the host's ufw profiles to your local networks and tailscale0 (see Firewall). |
| Browser trust | Trusts the console's certificate in Chromium, so it opens without a warning. |
| App menu | Adds Punktfunk Web Console to Apps (Super+Space), already signed in, plus a Punktfunk Host submenu. |
| Bar widget | A Punktfunk widget in the bar. It replaces the tray icon. |
| Toasts | Pairing requests (with Approve / Deny) and stream start/stop as Omarchy notifications. |
| Idle | Keeps the screen awake while a stream runs, then restores your setting. |
| Theme | The web console and the Linux client follow omarchy-theme-set. |
| Client menu | With punktfunk-client installed: your saved hosts in the Omarchy menu. |
To skip a part, pass --groups=0, --cert=0, --toasts=0, --idle-guard=0, --theme=0 or
--menu=0. The guided installer asks about toasts, idle and theme on its own settings screen.
punktfunk-omarchy status shows what is on.
3. Pair
Open Punktfunk Web Console from Apps and pair your first device. From a terminal instead:
punktfunk-host ctl pair arm # opens a pairing window and prints the PIN
punktfunk-host ctl pending # devices waiting, with name and fingerprint tail
punktfunk-host ctl approve 1The Punktfunk Host submenu has the same actions. Every verb: ctl.
Dedicated display or This screen
| Mode | What streams |
|---|---|
| Dedicated display (default) | A virtual display at the client's size and refresh. |
| This screen | This box's primary monitor, untouched. |
Pick one from Punktfunk Host in Apps, from the bar widget's Display tab, or with
punktfunk-omarchy mode dedicated / mode mirror (mode --status shows the current one).
Switching restarts a running host and ends its stream. This screen is the
Streamed screen setting.
The bar widget
Click the Punktfunk mark for a panel with five tabs: Overview, Pair, Devices, Display and Stats. A waiting device opens Pair. Right-click the mark to stop a live session, or to open the web console when nothing is streaming.
Keys: 1–5 or h / l switch tabs, j / k move, Enter activates, Esc closes.
Firewall
setup opens punktfunk-native and punktfunk-web to 192.168.0.0/16, 10.0.0.0/8,
172.16.0.0/12 and tailscale0. The Tailscale rule waits dormant until the interface exists.
punktfunk-gamestream opens only while GameStream is on, which
GameStream in the menu sets. A management port moved off 47990 opens
too. Video needs no rule; see Ports.
Updating
omarchy update updates Punktfunk with the rest of the system, after its snapper snapshot. The
console's Updates card shows that command instead of an Update now button. A rollback reverts
the binaries only; your pairings and ~/.config/punktfunk stay.
Next to Sunshine
Omarchy can install Sunshine as a service. Both hosts want TCP 47990, and GameStream uses exactly Sunshine's ports.
- The guided installer moves Punktfunk's management API to 47991 when Sunshine, Apollo or
Vibeshine is running or enabled, and
setupopens that port. By hand: addPUNKTFUNK_MGMT_BIND=0.0.0.0:47991to~/.config/punktfunk/host.env, then re-runpunktfunk-omarchy setup. - Leave GameStream off while Sunshine runs; only one host can bind those ports.
To switch for good, run omarchy remove service sunshine. See
Switching from Sunshine.
Moonlight (GameStream)
Punktfunk's own clients don't need it. For stock Moonlight on a trusted LAN, choose Punktfunk Host → GameStream in Apps: it turns on the console's GameStream setting, restarts the host and opens the ufw profile. Enter the PIN a Moonlight client shows with Punktfunk Host → Moonlight PIN.
This box as a client
The install line includes punktfunk-client. It follows the Omarchy theme live; turn that off with
Follow the Omarchy theme in its preferences, or Follow system theme in the game console's
settings. Hosts in the Omarchy menu in preferences (or punktfunk-client --omarchy-menu on)
adds a Punktfunk submenu with a connect row per saved host, a wake row where the MAC is known,
and the game console. setup turns it on for you.
Good to know
- Sessions. The host starts at login on both Hyprland login sessions. Only
Hyprland (uwsm-managed) also restarts it with the session;
punktfunk-omarchy statussays which one you run. It rarely matters: the host finds the live compositor on every connect. - Keep-alive. A disconnect keeps the virtual display for the
keep-alive window, then moves its workspace to a physical
monitor. Release it early in the console (Displays → Release) or with
punktfunk-host ctl display release. - Screen sharing. During a stream the host borrows Omarchy's screen-share picker setting and hands it back when the last stream ends. Browser shares keep working.
- Your own hooks. If
~/.config/punktfunk/hooks.jsonalready exists,setupprints the toast and idle entries for you to add instead of editing it. - Snapshot mirror. Omarchy pins Arch packages to a snapshot. If pacman reports an unsatisfiable
dependency, wait for the next
omarchy update. - Disk encryption. Omarchy encrypts the disk by default, so a Wake-on-LAN cold boot stops at the passphrase. Suspend the box instead.
Troubleshooting
Run punktfunk-omarchy status first. It checks the units, ufw rules, groups, the portal and
Hyprland's permission mode in one pass.
Black frames, or input does nothing
Hyprland's permission enforcement is on and silently denies the host. Add to your Hyprland config:
o.permission("/usr/bin/punktfunk-host", "screencopy", "allow")
o.permission("/usr/bin/punktfunk-host", "plugin", "allow")No picture at all
Capture goes through xdg-desktop-portal-hyprland. Check it with
systemctl --user status xdg-desktop-portal-hyprland.
The host isn't running after a reboot
Autostart is off. Re-run punktfunk-omarchy setup.
Physical monitors stay dark after a disconnect
The virtual display is still in its keep-alive window. Release it as above; see Virtual displays.
More in Troubleshooting and on the Hyprland page.
Uninstall
punktfunk-omarchy remove
sudo pacman -R punktfunk-host punktfunk-web punktfunk-scripting punktfunk-client # the ones you haveremove undoes every setup step and restores the tray icon and the screen-share picker. Your
groups, pairings and ~/.config/punktfunk stay; Uninstall clears them.