{ lib, buildNpmPackage, importNpmLock, electron, makeWrapper, aria2, apm, coreutils, gnugrep, which, xdg-utils, bash, }: buildNpmPackage rec { pname = "spark-store"; version = "5.1.1"; src = lib.cleanSourceWith { src = ../.; filter = path: type: let baseName = baseNameOf path; in !(lib.elem baseName [ ".git" "dist" "dist-electron" "node_modules" "release" "result" ]); }; npmDeps = importNpmLock { npmRoot = ../.; }; npmConfigHook = importNpmLock.npmConfigHook; nativeBuildInputs = [ makeWrapper ]; env = { ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD = "1"; }; buildPhase = '' runHook preBuild npm run build:vite runHook postBuild ''; installPhase = '' runHook preInstall appDir="$out/share/spark-store" npm prune --omit=dev --ignore-scripts substituteInPlace extras/shell-caller.sh \ --replace-fail "/usr/bin/apm" "${lib.getExe' apm "apm"}" mkdir -p "$appDir" "$out/bin" cp -r dist dist-electron package.json node_modules extras icons "$appDir"/ chmod -R u+w "$appDir" find "$appDir/extras" -type f -exec chmod +x {} \; substituteInPlace "$appDir/dist-electron/main/index.js" \ --replace-fail "/opt/spark-store/extras/shell-caller.sh" "$appDir/extras/shell-caller.sh" \ --replace-fail "/opt/spark-store/extras/app-launcher" "$appDir/extras/app-launcher" install -Dm644 pkg/usr/share/applications/spark-store.desktop \ "$out/share/applications/spark-store.desktop" install -Dm644 icons/spark-store.svg \ "$out/share/icons/hicolor/scalable/apps/spark-store.svg" install -Dm644 icons/spark-store.png \ "$out/share/icons/hicolor/512x512/apps/spark-store.png" install -Dm644 extras/store.spark-app.spark-store.policy \ "$out/share/polkit-1/actions/store.spark-app.spark-store.policy" substituteInPlace "$out/share/polkit-1/actions/store.spark-app.spark-store.policy" \ --replace-fail "/opt/spark-store/extras/shell-caller.sh" "$appDir/extras/shell-caller.sh" cat > "$out/bin/spark-store" </dev/null 2>&1; then app_args+=(--no-spark) fi if [ -r /etc/os-release ] && ${gnugrep}/bin/grep -q "ID=aosc" /etc/os-release; then app_args+=(--no-spark) fi exec ${electron}/bin/electron "\''${electron_args[@]}" "$appDir" "\''${app_args[@]}" "\$@" EOF chmod +x "$out/bin/spark-store" patchShebangs "$appDir/extras" runHook postInstall ''; postFixup = '' appDir="$out/share/spark-store" wrapProgram "$appDir/extras/shell-caller.sh" \ --prefix PATH : ${ lib.makeBinPath [ aria2 bash coreutils which xdg-utils ] } substituteInPlace "$appDir/extras/.shell-caller.sh-wrapped" \ --replace-fail "#!/bin/bash" "#!${bash}/bin/bash" ''; meta = { description = "Client for Spark App Store"; homepage = "https://spark-app.store"; license = lib.licenses.gpl3Only; mainProgram = "spark-store"; platforms = lib.platforms.linux; }; }