#!/bin/bash # omarchy:summary=Install Sunshine and open Moonlight streaming ports for LAN and Tailscale. # omarchy:requires-sudo=true set -e TCP_PORTS=(47984 47989 48010) UDP_PORTS=(5353 47998 47999 48000 48002 48010) PRIVATE_CIDRS=(10.0.0.0/8 172.16.0.0/12 192.168.0.0/16) UFW_COMMENT="omarchy-sunshine" SUNSHINE_ADMIN_APP="Sunshine Admin" SUNSHINE_ADMIN_URL="https://localhost:47990" SUNSHINE_ADMIN_EXEC="omarchy-launch-webapp $SUNSHINE_ADMIN_URL --ignore-certificate-errors" SUNSHINE_ICON_SOURCE="/usr/share/sunshine/web/images/logo-sunshine-45.png" HYPR_AUTOSTART_FILE="$HOME/.config/hypr/autostart.lua" HYPR_AUTOSTART_ENTRY='o.launch_on_start("sunshine")' open_ufw_port_for_private_lans() { local proto="$1" local port="$2" local cidr for cidr in "${PRIVATE_CIDRS[@]}"; do sudo ufw allow in proto "$proto" from "$cidr" to any port "$port" comment "$UFW_COMMENT" >/dev/null done } open_ufw_port_for_tailscale() { local proto="$1" local port="$2" if ip link show tailscale0 >/dev/null 2>&1; then sudo ufw allow in on tailscale0 to any port "$port" proto "$proto" comment "$UFW_COMMENT" >/dev/null fi } open_ufw_ports() { local port if omarchy-cmd-missing ufw; then echo "UFW is not installed; skipping Sunshine firewall rules." return fi for port in "${TCP_PORTS[@]}"; do open_ufw_port_for_private_lans tcp "$port" open_ufw_port_for_tailscale tcp "$port" done for port in "${UDP_PORTS[@]}"; do open_ufw_port_for_private_lans udp "$port" open_ufw_port_for_tailscale udp "$port" done sudo ufw reload } install_admin_webapp() { omarchy-webapp-install "$SUNSHINE_ADMIN_APP" "$SUNSHINE_ADMIN_URL" "$SUNSHINE_ICON_SOURCE" "$SUNSHINE_ADMIN_EXEC" } enable_hyprland_autostart() { mkdir -p "$(dirname "$HYPR_AUTOSTART_FILE")" touch "$HYPR_AUTOSTART_FILE" if ! grep -Fxq "$HYPR_AUTOSTART_ENTRY" "$HYPR_AUTOSTART_FILE"; then printf '\n%s\n' "$HYPR_AUTOSTART_ENTRY" >>"$HYPR_AUTOSTART_FILE" fi } echo "Installing Sunshine..." omarchy-pkg-add sunshine systemctl --user enable --now sunshine echo "Opening Sunshine firewall ports..." open_ufw_ports echo "Installing Sunshine admin web app..." install_admin_webapp $SUNSHINE_ADMIN_EXEC >/dev/null 2>&1 & echo "Enabling Sunshine autostart..." enable_hyprland_autostart echo "" echo "Sunshine has been installed and its Moonlight streaming ports are open for private LANs and Tailscale."