sunshine: refactor (#428789)

authored by Aleksana and committed by GitHub 7bbfeed0 0f4fad10

+55 -57
+52 -44
pkgs/by-name/su/sunshine/package.nix
··· 54 54 let 55 55 stdenv' = if cudaSupport then cudaPackages.backendStdenv else stdenv; 56 56 in 57 - stdenv'.mkDerivation rec { 57 + stdenv'.mkDerivation (finalAttrs: { 58 58 pname = "sunshine"; 59 59 version = "2025.628.4510"; 60 60 61 61 src = fetchFromGitHub { 62 62 owner = "LizardByte"; 63 63 repo = "Sunshine"; 64 - tag = "v${version}"; 64 + tag = "v${finalAttrs.version}"; 65 65 hash = "sha256-xNWFo6a4YrJ+tBFTSReoAEi1oZ4DSguBEusizWeWKYY="; 66 66 fetchSubmodules = true; 67 67 }; 68 68 69 69 # build webui 70 70 ui = buildNpmPackage { 71 - inherit src version; 71 + inherit (finalAttrs) src version; 72 72 pname = "sunshine-ui"; 73 73 npmDepsHash = "sha256-kUixeLf8prsWQolg1v+vJ5rvwKZOsU+88+0hVOgTZ0A="; 74 74 ··· 78 78 ''; 79 79 80 80 installPhase = '' 81 - mkdir -p $out 82 - cp -r * $out/ 81 + runHook preInstall 82 + 83 + mkdir -p "$out" 84 + cp -a . "$out"/ 85 + 86 + runHook postInstall 83 87 ''; 84 88 }; 85 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 + 86 114 nativeBuildInputs = [ 87 115 cmake 88 116 pkg-config ··· 91 119 wayland-scanner 92 120 # Avoid fighting upstream's usage of vendored ffmpeg libraries 93 121 autoPatchelfHook 94 - udevCheckHook 95 122 ] 96 123 ++ lib.optionals cudaSupport [ 97 124 autoAddDriverRunpath ··· 172 199 173 200 env = { 174 201 # needed to trigger CMake version configuration 175 - BUILD_VERSION = "${version}"; 202 + BUILD_VERSION = "${finalAttrs.version}"; 176 203 BRANCH = "master"; 177 204 COMMIT = ""; 178 205 }; 179 206 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 - 207 + # copy webui where it can be picked up by build 203 208 preBuild = '' 204 - # copy webui where it can be picked up by build 205 - cp -r ${ui}/build ../ 209 + cp -r ${finalAttrs.ui}/build ../ 206 210 ''; 207 211 208 212 buildFlags = [ 209 213 "sunshine" 210 214 ]; 211 215 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 216 # redefine installPhase to avoid attempt to build webui 219 217 installPhase = '' 220 218 runHook preInstall 219 + 221 220 cmake --install . 221 + 222 222 runHook postInstall 223 223 ''; 224 224 ··· 226 226 install -Dm644 ../packaging/linux/dev.lizardbyte.app.Sunshine.desktop $out/share/applications/dev.lizardbyte.app.Sunshine.desktop 227 227 ''; 228 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 + 229 235 doInstallCheck = true; 236 + 237 + nativeInstallCheckInputs = [ udevCheckHook ]; 230 238 231 239 passthru = { 232 240 tests.sunshine = nixosTests.sunshine; 233 241 updateScript = ./updater.sh; 234 242 }; 235 243 236 - meta = with lib; { 237 - description = "Sunshine is a Game stream host for Moonlight"; 244 + meta = { 245 + description = "Game stream host for Moonlight"; 238 246 homepage = "https://github.com/LizardByte/Sunshine"; 239 - license = licenses.gpl3Only; 247 + license = lib.licenses.gpl3Only; 240 248 mainProgram = "sunshine"; 241 - maintainers = with maintainers; [ devusb ]; 242 - platforms = platforms.linux; 249 + maintainers = with lib.maintainers; [ devusb ]; 250 + platforms = lib.platforms.linux; 243 251 }; 244 - } 252 + })
+3 -13
pkgs/by-name/su/sunshine/updater.sh
··· 1 1 #! /usr/bin/env nix-shell 2 - #! nix-shell -i bash -p gnugrep gnused coreutils curl wget jq nix-update prefetch-npm-deps nodejs 2 + #! nix-shell -i bash -p gnugrep curl jq nix-update 3 3 4 4 set -euo pipefail 5 - pushd "$(dirname "${BASH_SOURCE[0]}")" 6 5 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/" 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.*") 9 7 10 8 if [[ "$UPDATE_NIX_OLD_VERSION" == "$version" ]]; then 11 9 echo "Already up to date!" 12 10 exit 0 13 11 fi 14 12 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 13 + nix-update sunshine --version $version --generate-lockfile --subpackage ui