Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / applications / virtualization / podman-desktop / default.nix
blob412db059eac776cc2b63c4261ca15793d3b7d3da
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchYarnDeps
5 , yarn
6 , fixup_yarn_lock
7 , nodejs
8 , makeWrapper
9 , copyDesktopItems
10 , desktopToDarwinBundle
11 , electron
12 , makeDesktopItem
15 stdenv.mkDerivation (finalAttrs: {
16   pname = "podman-desktop";
17   version = "0.12.0";
19   src = fetchFromGitHub {
20     owner = "containers";
21     repo = "podman-desktop";
22     rev = "v${finalAttrs.version}";
23     sha256 = "sha256-gEjcI+bfETYZB/pHDXRcNxNVDsbwuqQL1E22fMkIJHI=";
24   };
26   offlineCache = fetchYarnDeps {
27     yarnLock = "${finalAttrs.src}/yarn.lock";
28     sha256 = "sha256-x0hqNxi6r1i3vBe1tJQl+Oht2St9VIH3Eq27MZLkojA=";
29   };
31   patches = [
32     # podman should be installed with nix; disable auto-installation
33     ./patches/extension-no-download-podman.patch
34     ./patches/fix-yarn-lock-deterministic.patch
35   ];
37   postPatch = ''
38     for file in packages/main/src/tray-animate-icon.ts extensions/podman/src/util.ts packages/main/src/plugin/certificates.ts; do
39       substituteInPlace "$file" \
40         --replace 'process.resourcesPath'          "'$out/share/lib/podman-desktop/resources'" \
41         --replace '(process as any).resourcesPath' "'$out/share/lib/podman-desktop/resources'"
42     done
43   '';
45   ELECTRON_SKIP_BINARY_DOWNLOAD = "1";
47   nativeBuildInputs = [
48     yarn
49     fixup_yarn_lock
50     nodejs
51     makeWrapper
52     copyDesktopItems
53   ]
54   ++ lib.optionals stdenv.isDarwin [
55     desktopToDarwinBundle
56   ];
58   configurePhase = ''
59     runHook preConfigure
61     export HOME="$TMPDIR"
62     yarn config --offline set yarn-offline-mirror "$offlineCache"
63     fixup_yarn_lock yarn.lock
64     yarn install --offline --frozen-lockfile --ignore-platform --ignore-scripts --no-progress --non-interactive
65     patchShebangs node_modules/
67     runHook postConfigure
68   '';
70   buildPhase = ''
71     runHook preBuild
73     yarn --offline run build
74     yarn --offline run electron-builder --dir \
75       --config .electron-builder.config.cjs \
76       -c.electronDist=${electron}/libexec/electron \
77       -c.electronVersion=${electron.version}
79     runHook postBuild
80   '';
82   installPhase = ''
83     runHook preInstall
85     mkdir -p "$out/share/lib/podman-desktop"
86     cp -r dist/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/podman-desktop"
88     install -Dm644 buildResources/icon.svg "$out/share/icons/hicolor/scalable/apps/podman-desktop.svg"
90     makeWrapper '${electron}/bin/electron' "$out/bin/podman-desktop" \
91       --add-flags "$out/share/lib/podman-desktop/resources/app.asar" \
92       --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" \
93       --inherit-argv0
95     runHook postInstall
96   '';
98   # see: https://github.com/containers/podman-desktop/blob/main/.flatpak.desktop
99   desktopItems = [
100     (makeDesktopItem {
101       name = "podman-desktop";
102       exec = "podman-desktop %U";
103       icon = "podman-desktop";
104       desktopName = "Podman Desktop";
105       genericName = "Desktop client for podman";
106       comment = finalAttrs.meta.description;
107       categories = [ "Utility" ];
108       startupWMClass = "Podman Desktop";
109     })
110   ];
112   meta = with lib; {
113     description = "A graphical tool for developing on containers and Kubernetes";
114     homepage = "https://podman-desktop.io";
115     changelog = "https://github.com/containers/podman-desktop/releases/tag/v${finalAttrs.version}";
116     license = licenses.asl20;
117     maintainers = with maintainers; [ panda2134 ];
118     inherit (electron.meta) platforms;
119   };