From 64ab154540ffcb8ca016dfad083bce3d6907ea92 Mon Sep 17 00:00:00 2001 From: Alex Shek Date: Mon, 10 Aug 2026 15:09:26 +0800 Subject: [PATCH 1/3] feat(sunshine): rework sunshine installation --- .../ublue-os/just/82-bazzite-sunshine.just | 367 +++++++++--------- .../desktop/shared/usr/share/yafti/yafti.yml | 6 +- 2 files changed, 184 insertions(+), 189 deletions(-) diff --git a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-sunshine.just b/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-sunshine.just index 7d3adc539c..4771ad5c07 100644 --- a/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-sunshine.just +++ b/system_files/desktop/shared/usr/share/ublue-os/just/82-bazzite-sunshine.just @@ -1,6 +1,4 @@ -# vim: set ft=make : - -# Setup and configure Sunshine Game Streaming host. Options: status | enable | enable-beta | update | disable | uninstall | portal | virtual-monitor +# Setup and configure Sunshine Game Streaming host. Options: status | enable | enable-deck | update | disable | uninstall | portal | virtual-monitor [group("gaming")] setup-sunshine ACTION="": #!/usr/bin/bash @@ -12,46 +10,50 @@ setup-sunshine ACTION="": read -r reply [[ -z "$reply" || "${reply,,}" =~ ^y ]] } + press_any_key() { echo "Press Enter to continue..." read -r } + sunshine_installed() { flatpak info dev.lizardbyte.app.Sunshine >/dev/null 2>&1 } + + deck_sunshine_installed() { + rpm -q sunshine >/dev/null 2>&1 + } + # deck_sunshine refers to the layered installs of sunshine, as it is primarily for deck users who do not have access to xdg portal capture. + brew_sunshine_installed() { [[ -e /home/linuxbrew/.linuxbrew/opt/sunshine || -d /home/linuxbrew/.linuxbrew/Cellar/sunshine || -e /home/linuxbrew/.linuxbrew/opt/sunshine-beta || -d /home/linuxbrew/.linuxbrew/Cellar/sunshine-beta ]] } + get_status_token() { - local flatpak_service_state beta_service_state service_state - flatpak_service_state="$(systemctl is-enabled --user app-dev.lizardbyte.app.Sunshine 2>/dev/null || true)" - if [[ "$flatpak_service_state" == "enabled" ]]; then - echo "enable" + local service_state + service_state="$(systemctl is-enabled --user app-dev.lizardbyte.app.Sunshine 2>/dev/null || true)" + + if sunshine_installed; then + local status="enable" + elif deck_sunshine_installed; then + local status="enable-deck" elif brew_sunshine_installed; then - echo "enable-brew" - elif sunshine_installed; then - echo "disable" + local status="enable-brew" else echo "uninstall" + return fi - } - override_service() { - servicefile="[Unit] - After=graphical-session.target xdg-desktop-autostart.target xdg-desktop-portal.service - [Service] - ExecStartPre=/bin/sleep 5 - ExecStopPost=/usr/libexec/sunshine-stop-vmon - Restart=on-failure - RestartSec=5s - " - if [[ $(systemctl --user cat homebrew.sunshine-beta | grep sleep 2>/dev/null || true) == "" || $(systemctl --user cat homebrew.sunshine-beta | grep sleep 2>/dev/null || true) == "" ]]; then - systemctl --user edit --stdin homebrew.sunshine-beta <<< "$servicefile" + if [[ "$service_state" == "enabled" ]]; then + echo "$status" + else + echo "disable" fi } + virtual-monitor() { local FLATPAK_VMON_APP='{ "auto-detach": true, @@ -112,6 +114,7 @@ setup-sunshine ACTION="": echo "Virtual monitors are only supported in KDE's KWin compositor!" echo "See ${bold}https://docs.bazzite.gg/Advanced/custom_resolution/${normal} for more information." press_any_key + return 0 fi local MON_OPTION=$(Choose "Add Virtual Monitor" "Fix Error 503" "Go Back" "Exit") case "$MON_OPTION" in @@ -139,17 +142,34 @@ setup-sunshine ACTION="": ;; "Fix Error 503") echo "KWIN_WAYLAND_NO_PERMISSION_CHECKS=1" > $HOME/.config/environment.d/98-kwin-no-permission-checks.conf - echo -n "Wrote in $HOME/.config/environment.d/98-kwin-no-permission-checks: " + echo -n "Wrote in $HOME/.config/environment.d/98-kwin-no-permission-checks.conf: " cat $HOME/.config/environment.d/98-kwin-no-permission-checks.conf ;; "Go Back") - ujust setup-sunshine + return 0 ;; *) + exit 0 ;; esac } + yeet_brew() { + echo "${b}You may ignore the following errors as they are just cosmetic.${n}" + if [ -x /home/linuxbrew/.linuxbrew/bin/brew ]; then + eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" + fi + brew trust LizardByte/homebrew + brew tap LizardByte/homebrew + brew services stop sunshine 2>/dev/null || true + brew unpin sunshine 2>/dev/null || true + brew uninstall sunshine 2>/dev/null || true + brew services stop sunshine-beta 2>/dev/null || true + brew unpin sunshine-beta 2>/dev/null || true + brew uninstall sunshine-beta 2>/dev/null || true + brew untap LizardByte/homebrew 2>/dev/null || true + } + if [ "$OPTION" == "help" ]; then echo "Usage: ujust setup-sunshine