sunshine: refactor (#428789)

authored by Aleksana and committed by GitHub 7bbfeed0 0f4fad10

+55 -57
+52 -44
pkgs/by-name/su/sunshine/package.nix
··· 54 let 55 stdenv' = if cudaSupport then cudaPackages.backendStdenv else stdenv; 56 in 57 - stdenv'.mkDerivation rec { 58 pname = "sunshine"; 59 version = "2025.628.4510"; 60 61 src = fetchFromGitHub { 62 owner = "LizardByte"; 63 repo = "Sunshine"; 64 - tag = "v${version}"; 65 hash = "sha256-xNWFo6a4YrJ+tBFTSReoAEi1oZ4DSguBEusizWeWKYY="; 66 fetchSubmodules = true; 67 }; 68 69 # build webui 70 ui = buildNpmPackage { 71 - inherit src version; 72 pname = "sunshine-ui"; 73 npmDepsHash = "sha256-kUixeLf8prsWQolg1v+vJ5rvwKZOsU+88+0hVOgTZ0A="; 74 ··· 78 ''; 79 80 installPhase = '' 81 - mkdir -p $out 82 - cp -r * $out/ 83 ''; 84 }; 85 86 nativeBuildInputs = [ 87 cmake 88 pkg-config ··· 91 wayland-scanner 92 # Avoid fighting upstream's usage of vendored ffmpeg libraries 93 autoPatchelfHook 94 - udevCheckHook 95 ] 96 ++ lib.optionals cudaSupport [ 97 autoAddDriverRunpath ··· 172 173 env = { 174 # needed to trigger CMake version configuration 175 - BUILD_VERSION = "${version}"; 176 BRANCH = "master"; 177 COMMIT = ""; 178 }; 179 180 - postPatch = '' 181 - # remove upstream dependency on systemd and udev 182 - substituteInPlace cmake/packaging/linux.cmake \ 183 - --replace-fail 'find_package(Systemd)' "" \ 184 - --replace-fail 'find_package(Udev)' "" 185 - 186 - # don't look for npm since we build webui separately 187 - substituteInPlace cmake/targets/common.cmake \ 188 - --replace-fail 'find_program(NPM npm REQUIRED)' "" 189 - 190 - substituteInPlace packaging/linux/dev.lizardbyte.app.Sunshine.desktop \ 191 - --subst-var-by PROJECT_NAME 'Sunshine' \ 192 - --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ 193 - --subst-var-by SUNSHINE_DESKTOP_ICON 'sunshine' \ 194 - --subst-var-by CMAKE_INSTALL_FULL_DATAROOTDIR "$out/share" \ 195 - --replace-fail '/usr/bin/env systemctl start --u sunshine' 'sunshine' 196 - 197 - substituteInPlace packaging/linux/sunshine.service.in \ 198 - --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ 199 - --subst-var-by SUNSHINE_EXECUTABLE_PATH $out/bin/sunshine \ 200 - --replace-fail '/bin/sleep' '${lib.getExe' coreutils "sleep"}' 201 - ''; 202 - 203 preBuild = '' 204 - # copy webui where it can be picked up by build 205 - cp -r ${ui}/build ../ 206 ''; 207 208 buildFlags = [ 209 "sunshine" 210 ]; 211 212 - # allow Sunshine to find libvulkan 213 - postFixup = lib.optionalString cudaSupport '' 214 - wrapProgram $out/bin/sunshine \ 215 - --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]} 216 - ''; 217 - 218 # redefine installPhase to avoid attempt to build webui 219 installPhase = '' 220 runHook preInstall 221 cmake --install . 222 runHook postInstall 223 ''; 224 ··· 226 install -Dm644 ../packaging/linux/dev.lizardbyte.app.Sunshine.desktop $out/share/applications/dev.lizardbyte.app.Sunshine.desktop 227 ''; 228 229 doInstallCheck = true; 230 231 passthru = { 232 tests.sunshine = nixosTests.sunshine; 233 updateScript = ./updater.sh; 234 }; 235 236 - meta = with lib; { 237 - description = "Sunshine is a Game stream host for Moonlight"; 238 homepage = "https://github.com/LizardByte/Sunshine"; 239 - license = licenses.gpl3Only; 240 mainProgram = "sunshine"; 241 - maintainers = with maintainers; [ devusb ]; 242 - platforms = platforms.linux; 243 }; 244 - }
··· 54 let 55 stdenv' = if cudaSupport then cudaPackages.backendStdenv else stdenv; 56 in 57 + stdenv'.mkDerivation (finalAttrs: { 58 pname = "sunshine"; 59 version = "2025.628.4510"; 60 61 src = fetchFromGitHub { 62 owner = "LizardByte"; 63 repo = "Sunshine"; 64 + tag = "v${finalAttrs.version}"; 65 hash = "sha256-xNWFo6a4YrJ+tBFTSReoAEi1oZ4DSguBEusizWeWKYY="; 66 fetchSubmodules = true; 67 }; 68 69 # build webui 70 ui = buildNpmPackage { 71 + inherit (finalAttrs) src version; 72 pname = "sunshine-ui"; 73 npmDepsHash = "sha256-kUixeLf8prsWQolg1v+vJ5rvwKZOsU+88+0hVOgTZ0A="; 74 ··· 78 ''; 79 80 installPhase = '' 81 + runHook preInstall 82 + 83 + mkdir -p "$out" 84 + cp -a . "$out"/ 85 + 86 + runHook postInstall 87 ''; 88 }; 89 90 + postPatch = # remove upstream dependency on systemd and udev 91 + '' 92 + substituteInPlace cmake/packaging/linux.cmake \ 93 + --replace-fail 'find_package(Systemd)' "" \ 94 + --replace-fail 'find_package(Udev)' "" 95 + '' 96 + # don't look for npm since we build webui separately 97 + + '' 98 + substituteInPlace cmake/targets/common.cmake \ 99 + --replace-fail 'find_program(NPM npm REQUIRED)' "" 100 + 101 + substituteInPlace packaging/linux/dev.lizardbyte.app.Sunshine.desktop \ 102 + --subst-var-by PROJECT_NAME 'Sunshine' \ 103 + --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ 104 + --subst-var-by SUNSHINE_DESKTOP_ICON 'sunshine' \ 105 + --subst-var-by CMAKE_INSTALL_FULL_DATAROOTDIR "$out/share" \ 106 + --replace-fail '/usr/bin/env systemctl start --u sunshine' 'sunshine' 107 + 108 + substituteInPlace packaging/linux/sunshine.service.in \ 109 + --subst-var-by PROJECT_DESCRIPTION 'Self-hosted game stream host for Moonlight' \ 110 + --subst-var-by SUNSHINE_EXECUTABLE_PATH $out/bin/sunshine \ 111 + --replace-fail '/bin/sleep' '${lib.getExe' coreutils "sleep"}' 112 + ''; 113 + 114 nativeBuildInputs = [ 115 cmake 116 pkg-config ··· 119 wayland-scanner 120 # Avoid fighting upstream's usage of vendored ffmpeg libraries 121 autoPatchelfHook 122 ] 123 ++ lib.optionals cudaSupport [ 124 autoAddDriverRunpath ··· 199 200 env = { 201 # needed to trigger CMake version configuration 202 + BUILD_VERSION = "${finalAttrs.version}"; 203 BRANCH = "master"; 204 COMMIT = ""; 205 }; 206 207 + # copy webui where it can be picked up by build 208 preBuild = '' 209 + cp -r ${finalAttrs.ui}/build ../ 210 ''; 211 212 buildFlags = [ 213 "sunshine" 214 ]; 215 216 # redefine installPhase to avoid attempt to build webui 217 installPhase = '' 218 runHook preInstall 219 + 220 cmake --install . 221 + 222 runHook postInstall 223 ''; 224 ··· 226 install -Dm644 ../packaging/linux/dev.lizardbyte.app.Sunshine.desktop $out/share/applications/dev.lizardbyte.app.Sunshine.desktop 227 ''; 228 229 + # allow Sunshine to find libvulkan 230 + postFixup = lib.optionalString cudaSupport '' 231 + wrapProgram $out/bin/sunshine \ 232 + --set LD_LIBRARY_PATH ${lib.makeLibraryPath [ vulkan-loader ]} 233 + ''; 234 + 235 doInstallCheck = true; 236 + 237 + nativeInstallCheckInputs = [ udevCheckHook ]; 238 239 passthru = { 240 tests.sunshine = nixosTests.sunshine; 241 updateScript = ./updater.sh; 242 }; 243 244 + meta = { 245 + description = "Game stream host for Moonlight"; 246 homepage = "https://github.com/LizardByte/Sunshine"; 247 + license = lib.licenses.gpl3Only; 248 mainProgram = "sunshine"; 249 + maintainers = with lib.maintainers; [ devusb ]; 250 + platforms = lib.platforms.linux; 251 }; 252 + })
+3 -13
pkgs/by-name/su/sunshine/updater.sh
··· 1 #! /usr/bin/env nix-shell 2 - #! nix-shell -i bash -p gnugrep gnused coreutils curl wget jq nix-update prefetch-npm-deps nodejs 3 4 set -euo pipefail 5 - pushd "$(dirname "${BASH_SOURCE[0]}")" 6 7 - version=$(curl -s "https://api.github.com/repos/LizardByte/sunshine/tags" | jq -r .[0].name | grep -oP "^v\K.*") 8 - url="https://raw.githubusercontent.com/LizardByte/sunshine/v$version/" 9 10 if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then 11 echo "Already up to date!" 12 exit 0 13 fi 14 15 - rm -f package-lock.json package.json 16 - wget "$url/package.json" 17 - npm i --package-lock-only 18 - npm_hash=$(prefetch-npm-deps package-lock.json) 19 - sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' package.nix 20 - rm -f package.json 21 - 22 - popd 23 - nix-update sunshine --version $version
··· 1 #! /usr/bin/env nix-shell 2 + #! nix-shell -i bash -p gnugrep curl jq nix-update 3 4 set -euo pipefail 5 6 + 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.*") 7 8 if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then 9 echo "Already up to date!" 10 exit 0 11 fi 12 13 + nix-update sunshine --version $version --generate-lockfile --subpackage ui