From 162204c48ec5a94e2ed01b74136bda33f8dd86ac Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 13:57:24 +0800 Subject: [PATCH 1/5] sunshine: use finalAttrs --- pkgs/by-name/su/sunshine/package.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pkgs/by-name/su/sunshine/package.nix b/pkgs/by-name/su/sunshine/package.nix index cd907f3df4a3..0445957968fa 100644 --- a/pkgs/by-name/su/sunshine/package.nix +++ b/pkgs/by-name/su/sunshine/package.nix @@ -54,21 +54,21 @@ let stdenv' = if cudaSupport then cudaPackages.backendStdenv else stdenv; in -stdenv'.mkDerivation rec { +stdenv'.mkDerivation (finalAttrs: { pname = "sunshine"; version = "2025.628.4510"; src = fetchFromGitHub { owner = "LizardByte"; repo = "Sunshine"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-xNWFo6a4YrJ+tBFTSReoAEi1oZ4DSguBEusizWeWKYY="; fetchSubmodules = true; }; # build webui ui = buildNpmPackage { - inherit src version; + inherit (finalAttrs) src version; pname = "sunshine-ui"; npmDepsHash = "sha256-kUixeLf8prsWQolg1v+vJ5rvwKZOsU+88+0hVOgTZ0A="; @@ -172,7 +172,7 @@ stdenv'.mkDerivation rec { env = { # needed to trigger CMake version configuration - BUILD_VERSION = "${version}"; + BUILD_VERSION = "${finalAttrs.version}"; BRANCH = "master"; COMMIT = ""; }; @@ -202,7 +202,7 @@ stdenv'.mkDerivation rec { preBuild = '' # copy webui where it can be picked up by build - cp -r ${ui}/build ../ + cp -r ${finalAttrs.ui}/build ../ ''; buildFlags = [ @@ -241,4 +241,4 @@ stdenv'.mkDerivation rec { maintainers = with maintainers; [ devusb ]; platforms = platforms.linux; }; -} +}) From 60e9ad1028ba1f65d32be64f0d1f6e2b9fbd3f69 Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 13:58:14 +0800 Subject: [PATCH 2/5] sunshine: remove with lib --- pkgs/by-name/su/sunshine/package.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkgs/by-name/su/sunshine/package.nix b/pkgs/by-name/su/sunshine/package.nix index 0445957968fa..960371cf318a 100644 --- a/pkgs/by-name/su/sunshine/package.nix +++ b/pkgs/by-name/su/sunshine/package.nix @@ -233,12 +233,12 @@ stdenv'.mkDerivation (finalAttrs: { updateScript = ./updater.sh; }; - meta = with lib; { + meta = { description = "Sunshine is a Game stream host for Moonlight"; homepage = "https://github.com/LizardByte/Sunshine"; - license = licenses.gpl3Only; + license = lib.licenses.gpl3Only; mainProgram = "sunshine"; - maintainers = with maintainers; [ devusb ]; - platforms = platforms.linux; + maintainers = with lib.maintainers; [ devusb ]; + platforms = lib.platforms.linux; }; }) From 5e3fcc12935c2e74de4e8a517808e78fc817244c Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 14:18:01 +0800 Subject: [PATCH 3/5] sunshine: refactor --- pkgs/by-name/su/sunshine/package.nix | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/pkgs/by-name/su/sunshine/package.nix b/pkgs/by-name/su/sunshine/package.nix index 960371cf318a..941391c6f35e 100644 --- a/pkgs/by-name/su/sunshine/package.nix +++ b/pkgs/by-name/su/sunshine/package.nix @@ -78,8 +78,12 @@ stdenv'.mkDerivation (finalAttrs: { ''; installPhase = '' - mkdir -p $out - cp -r * $out/ + runHook preInstall + + mkdir -p "$out" + cp -a . "$out"/ + + runHook postInstall ''; }; @@ -177,13 +181,14 @@ stdenv'.mkDerivation (finalAttrs: { COMMIT = ""; }; - postPatch = '' - # remove upstream dependency on systemd and udev + postPatch = # remove upstream dependency on systemd and udev + '' substituteInPlace cmake/packaging/linux.cmake \ --replace-fail 'find_package(Systemd)' "" \ --replace-fail 'find_package(Udev)' "" - - # don't look for npm since we build webui separately + '' + # don't look for npm since we build webui separately + + '' substituteInPlace cmake/targets/common.cmake \ --replace-fail 'find_program(NPM npm REQUIRED)' "" @@ -200,8 +205,8 @@ stdenv'.mkDerivation (finalAttrs: { --replace-fail '/bin/sleep' '${lib.getExe' coreutils "sleep"}' ''; + # copy webui where it can be picked up by build preBuild = '' - # copy webui where it can be picked up by build cp -r ${finalAttrs.ui}/build ../ ''; @@ -218,7 +223,9 @@ stdenv'.mkDerivation (finalAttrs: { # redefine installPhase to avoid attempt to build webui installPhase = '' runHook preInstall + cmake --install . + runHook postInstall ''; @@ -234,7 +241,7 @@ stdenv'.mkDerivation (finalAttrs: { }; meta = { - description = "Sunshine is a Game stream host for Moonlight"; + description = "Game stream host for Moonlight"; homepage = "https://github.com/LizardByte/Sunshine"; license = lib.licenses.gpl3Only; mainProgram = "sunshine"; From cf9b6c1e2a154f14161afb9c381ed71a3755fe45 Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 14:46:52 +0800 Subject: [PATCH 4/5] sunshine: update updater.sh --- pkgs/by-name/su/sunshine/updater.sh | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/pkgs/by-name/su/sunshine/updater.sh b/pkgs/by-name/su/sunshine/updater.sh index 7e187a3e0ec1..82e74a44c0e3 100755 --- a/pkgs/by-name/su/sunshine/updater.sh +++ b/pkgs/by-name/su/sunshine/updater.sh @@ -1,23 +1,13 @@ #! /usr/bin/env nix-shell -#! nix-shell -i bash -p gnugrep gnused coreutils curl wget jq nix-update prefetch-npm-deps nodejs +#! nix-shell -i bash -p gnugrep curl jq nix-update set -euo pipefail -pushd "$(dirname "${BASH_SOURCE[0]}")" -version=$(curl -s "https://api.github.com/repos/LizardByte/sunshine/tags" | jq -r .[0].name | grep -oP "^v\K.*") -url="https://raw.githubusercontent.com/LizardByte/sunshine/v$version/" +version=$(curl ${GITHUB_TOKEN:+-u ":$GITHUB_TOKEN"} --silent --location https://api.github.com/repos/LizardByte/Sunshine/releases/latest | jq --raw-output .tag_name | grep -oP "^v\K.*") if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then echo "Already up to date!" exit 0 fi -rm -f package-lock.json package.json -wget "$url/package.json" -npm i --package-lock-only -npm_hash=$(prefetch-npm-deps package-lock.json) -sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' package.nix -rm -f package.json - -popd -nix-update sunshine --version $version +nix-update sunshine --version $version --generate-lockfile --subpackage ui From 39772184cc545f20961c7c2edf1d6cea589510ab Mon Sep 17 00:00:00 2001 From: mivorasu Date: Sun, 27 Jul 2025 14:57:16 +0800 Subject: [PATCH 5/5] sunshine: sort --- pkgs/by-name/su/sunshine/package.nix | 63 ++++++++++++++-------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/pkgs/by-name/su/sunshine/package.nix b/pkgs/by-name/su/sunshine/package.nix index 941391c6f35e..3f73c662ebe6 100644 --- a/pkgs/by-name/su/sunshine/package.nix +++ b/pkgs/by-name/su/sunshine/package.nix @@ -87,6 +87,30 @@ stdenv'.mkDerivation (finalAttrs: { ''; }; + postPatch = # remove upstream dependency on systemd and udev + '' + substituteInPlace cmake/packaging/linux.cmake \ + --replace-fail 'find_package(Systemd)' "" \ + --replace-fail 'find_package(Udev)' "" + '' + # don't look for npm since we build webui separately + + '' + substituteInPlace cmake/targets/common.cmake \ + --replace-fail 'find_program(NPM npm REQUIRED)' "" + + substituteInPlace packaging/linux/dev.lizardbyte.app.Sunshine.desktop \ + --subst-var-by PROJECT_NAME 'Sunshine' \ + --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ + --subst-var-by SUNSHINE_DESKTOP_ICON 'sunshine' \ + --subst-var-by CMAKE_INSTALL_FULL_DATAROOTDIR "$out/share" \ + --replace-fail '/usr/bin/env systemctl start --u sunshine' 'sunshine' + + substituteInPlace packaging/linux/sunshine.service.in \ + --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ + --subst-var-by SUNSHINE_EXECUTABLE_PATH $out/bin/sunshine \ + --replace-fail '/bin/sleep' '${lib.getExe' coreutils "sleep"}' + ''; + nativeBuildInputs = [ cmake pkg-config @@ -95,7 +119,6 @@ stdenv'.mkDerivation (finalAttrs: { wayland-scanner # Avoid fighting upstream's usage of vendored ffmpeg libraries autoPatchelfHook - udevCheckHook ] ++ lib.optionals cudaSupport [ autoAddDriverRunpath @@ -181,30 +204,6 @@ stdenv'.mkDerivation (finalAttrs: { COMMIT = ""; }; - postPatch = # remove upstream dependency on systemd and udev - '' - substituteInPlace cmake/packaging/linux.cmake \ - --replace-fail 'find_package(Systemd)' "" \ - --replace-fail 'find_package(Udev)' "" - '' - # don't look for npm since we build webui separately - + '' - substituteInPlace cmake/targets/common.cmake \ - --replace-fail 'find_program(NPM npm REQUIRED)' "" - - substituteInPlace packaging/linux/dev.lizardbyte.app.Sunshine.desktop \ - --subst-var-by PROJECT_NAME 'Sunshine' \ - --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ - --subst-var-by SUNSHINE_DESKTOP_ICON 'sunshine' \ - --subst-var-by CMAKE_INSTALL_FULL_DATAROOTDIR "$out/share" \ - --replace-fail '/usr/bin/env systemctl start --u sunshine' 'sunshine' - - substituteInPlace packaging/linux/sunshine.service.in \ - --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ - --subst-var-by SUNSHINE_EXECUTABLE_PATH $out/bin/sunshine \ - --replace-fail '/bin/sleep' '${lib.getExe' coreutils "sleep"}' - ''; - # copy webui where it can be picked up by build preBuild = '' cp -r ${finalAttrs.ui}/build ../ @@ -214,12 +213,6 @@ stdenv'.mkDerivation (finalAttrs: { "sunshine" ]; - # allow Sunshine to find libvulkan - postFixup = lib.optionalString cudaSupport '' - wrapProgram $out/bin/sunshine \ - --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]} - ''; - # redefine installPhase to avoid attempt to build webui installPhase = '' runHook preInstall @@ -233,8 +226,16 @@ stdenv'.mkDerivation (finalAttrs: { install -Dm644 ../packaging/linux/dev.lizardbyte.app.Sunshine.desktop $out/share/applications/dev.lizardbyte.app.Sunshine.desktop ''; + # allow Sunshine to find libvulkan + postFixup = lib.optionalString cudaSupport '' + wrapProgram $out/bin/sunshine \ + --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]} + ''; + doInstallCheck = true; + nativeInstallCheckInputs = [ udevCheckHook ]; + passthru = { tests.sunshine = nixosTests.sunshine; updateScript = ./updater.sh;