Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at devShellTools-shell 156 lines 4.5 kB view raw
1{ 2 lib, 3 stdenv, 4 fetchFromGitHub, 5 makeWrapper, 6 copyDesktopItems, 7 electron_37, 8 nodejs, 9 pnpm_10, 10 makeDesktopItem, 11 darwin, 12 nix-update-script, 13 _experimental-update-script-combinators, 14 writeShellApplication, 15 nix, 16 jq, 17 gnugrep, 18}: 19 20let 21 electron = electron_37; 22in 23stdenv.mkDerivation (finalAttrs: { 24 pname = "podman-desktop"; 25 version = "1.20.2"; 26 27 passthru.updateScript = _experimental-update-script-combinators.sequence [ 28 (nix-update-script { }) 29 (lib.getExe (writeShellApplication { 30 name = "podman-desktop-dependencies-updater"; 31 runtimeInputs = [ 32 nix 33 jq 34 gnugrep 35 ]; 36 runtimeEnv = { 37 PNAME = "podman-desktop"; 38 PKG_FILE = builtins.toString ./package.nix; 39 }; 40 text = '' 41 new_src="$(nix-build --attr "pkgs.$PNAME.src" --no-out-link)" 42 new_electron_major="$(jq '.devDependencies.electron' "$new_src/package.json" | grep --perl-regexp --only-matching '\d+' | head -n 1)" 43 new_pnpm_major="$(jq '.packageManager' "$new_src/package.json" | grep --perl-regexp --only-matching '\d+' | head -n 1)" 44 sed -i -E "s/electron_[0-9]+/electron_$new_electron_major/g" "$PKG_FILE" 45 sed -i -E "s/pnpm_[0-9]+/pnpm_$new_pnpm_major/g" "$PKG_FILE" 46 ''; 47 })) 48 (nix-update-script { 49 # Changing the pnpm version requires updating `pnpmDeps.hash`. 50 extraArgs = [ "--version=skip" ]; 51 }) 52 ]; 53 54 src = fetchFromGitHub { 55 owner = "containers"; 56 repo = "podman-desktop"; 57 tag = "v${finalAttrs.version}"; 58 hash = "sha256-+UdVTTm528Q9TIZwznzseBn8JazvQJOxJyjdzBmVUaA="; 59 }; 60 61 pnpmDeps = pnpm_10.fetchDeps { 62 inherit (finalAttrs) pname version src; 63 fetcherVersion = 1; 64 hash = "sha256-GX33PE534jWX7v9jCwZALuCT6gQClBXlOTPZC09EuC8="; 65 }; 66 67 patches = [ 68 # podman should be installed with nix; disable auto-installation 69 ./extension-no-download-podman.patch 70 ]; 71 72 ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; 73 74 nativeBuildInputs = [ 75 nodejs 76 pnpm_10.configHook 77 ] 78 ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ 79 copyDesktopItems 80 makeWrapper 81 ] 82 ++ lib.optionals stdenv.hostPlatform.isDarwin [ 83 darwin.autoSignDarwinBinariesHook 84 ]; 85 86 buildPhase = '' 87 runHook preBuild 88 89 cp -r ${electron.dist} electron-dist 90 chmod -R u+w electron-dist 91 92 pnpm build 93 94 # Explicitly set identity to null to avoid signing on arm64 macs with newer electron-builder. 95 # See: https://github.com/electron-userland/electron-builder/pull/9007 96 ./node_modules/.bin/electron-builder \ 97 --dir \ 98 --config .electron-builder.config.cjs \ 99 -c.mac.identity=null \ 100 -c.electronDist=electron-dist \ 101 -c.electronVersion=${electron.version} 102 103 runHook postBuild 104 ''; 105 106 installPhase = '' 107 runHook preInstall 108 109 '' 110 + lib.optionalString stdenv.hostPlatform.isDarwin '' 111 mkdir -p $out/Applications 112 mv dist/mac*/Podman\ Desktop.app $out/Applications 113 '' 114 + lib.optionalString (!stdenv.hostPlatform.isDarwin) '' 115 mkdir -p "$out/share/lib/podman-desktop" 116 cp -r dist/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/podman-desktop" 117 118 install -Dm644 buildResources/icon.svg "$out/share/icons/hicolor/scalable/apps/podman-desktop.svg" 119 120 makeWrapper '${electron}/bin/electron' "$out/bin/podman-desktop" \ 121 --add-flags "$out/share/lib/podman-desktop/resources/app.asar" \ 122 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ 123 --inherit-argv0 124 '' 125 + '' 126 127 runHook postInstall 128 ''; 129 130 # see: https://github.com/containers/podman-desktop/blob/main/.flatpak.desktop 131 desktopItems = [ 132 (makeDesktopItem { 133 name = "podman-desktop"; 134 exec = "podman-desktop %U"; 135 icon = "podman-desktop"; 136 desktopName = "Podman Desktop"; 137 genericName = "Desktop client for podman"; 138 comment = finalAttrs.meta.description; 139 categories = [ "Utility" ]; 140 startupWMClass = "Podman Desktop"; 141 }) 142 ]; 143 144 meta = { 145 description = "Graphical tool for developing on containers and Kubernetes"; 146 homepage = "https://podman-desktop.io"; 147 changelog = "https://github.com/containers/podman-desktop/releases/tag/v${finalAttrs.version}"; 148 license = lib.licenses.asl20; 149 maintainers = with lib.maintainers; [ 150 booxter 151 panda2134 152 ]; 153 inherit (electron.meta) platforms; 154 mainProgram = "podman-desktop"; 155 }; 156})