1{ lib
2, stdenv
3, fetchurl
4, makeDesktopItem
5, wrapGAppsHook3
6, atk
7, at-spi2-atk
8, at-spi2-core
9, alsa-lib
10, cairo
11, cups
12, dbus
13, expat
14, gdk-pixbuf
15, glib
16, gtk3
17, freetype
18, fontconfig
19, nss
20, nspr
21, pango
22, udev
23, libsecret
24, libuuid
25, libX11
26, libxcb
27, libXi
28, libXcursor
29, libXdamage
30, libXrandr
31, libXcomposite
32, libXext
33, libXfixes
34, libXrender
35, libXtst
36, libXScrnSaver
37, libxkbcommon
38, libdrm
39, mesa
40# It's unknown which version of openssl that postman expects but it seems that
41# OpenSSL 3+ seems to work fine (cf.
42# https://github.com/NixOS/nixpkgs/issues/254325). If postman breaks apparently
43# around OpenSSL stuff then try changing this dependency version.
44, openssl
45, xorg
46, pname
47, version
48, meta
49, copyDesktopItems
50, makeWrapper
51}:
52
53let
54 dist = {
55 aarch64-linux = {
56 arch = "arm64";
57 sha256 = "sha256-yq2J5KRv/NJDaQG7e7RKyzbJqKWRolSU9X6khHxlrNo=";
58 };
59
60 x86_64-linux = {
61 arch = "64";
62 sha256 = "sha256-fAaxrLZSXGBYr4Vu0Cz2pZwXivSTkaIF5wL217cB9qM=";
63 };
64 }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
65
66in
67stdenv.mkDerivation rec {
68 inherit pname version meta;
69
70 src = fetchurl {
71 url = "https://dl.pstmn.io/download/version/${version}/linux${dist.arch}";
72 inherit (dist) sha256;
73 name = "${pname}-${version}.tar.gz";
74 };
75
76 dontConfigure = true;
77
78 desktopItems = [
79 (makeDesktopItem {
80 name = "postman";
81 exec = "postman";
82 icon = "postman";
83 comment = "API Development Environment";
84 desktopName = "Postman";
85 genericName = "Postman";
86 categories = [ "Development" ];
87 })
88 ];
89
90 buildInputs = [
91 stdenv.cc.cc.lib
92 atk
93 at-spi2-atk
94 at-spi2-core
95 alsa-lib
96 cairo
97 cups
98 dbus
99 expat
100 gdk-pixbuf
101 glib
102 gtk3
103 freetype
104 fontconfig
105 mesa
106 nss
107 nspr
108 pango
109 udev
110 libdrm
111 libsecret
112 libuuid
113 libX11
114 libxcb
115 libXi
116 libXcursor
117 libXdamage
118 libXrandr
119 libXcomposite
120 libXext
121 libXfixes
122 libXrender
123 libXtst
124 libXScrnSaver
125 libxkbcommon
126 xorg.libxshmfence
127 ];
128
129 nativeBuildInputs = [ wrapGAppsHook3 copyDesktopItems ];
130
131 installPhase = ''
132 runHook preInstall
133 mkdir -p $out/share/postman
134 cp -R app/* $out/share/postman
135 rm $out/share/postman/Postman
136
137 mkdir -p $out/bin
138 ln -s $out/share/postman/postman $out/bin/postman
139
140 source "${makeWrapper}/nix-support/setup-hook"
141 wrapProgram $out/bin/${pname} \
142 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland}}"
143
144 mkdir -p $out/share/icons/hicolor/128x128/apps
145 ln -s $out/share/postman/resources/app/assets/icon.png $out/share/icons/postman.png
146 ln -s $out/share/postman/resources/app/assets/icon.png $out/share/icons/hicolor/128x128/apps/postman.png
147 runHook postInstall
148 '';
149
150 postFixup = ''
151 pushd $out/share/postman
152 patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" postman
153 patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" chrome_crashpad_handler
154 for file in $(find . -type f \( -name \*.node -o -name postman -o -name \*.so\* \) ); do
155 ORIGIN=$(patchelf --print-rpath $file); \
156 patchelf --set-rpath "${lib.makeLibraryPath buildInputs}:$ORIGIN" $file
157 done
158 popd
159 wrapProgram $out/bin/postman --set PATH ${lib.makeBinPath [ openssl ]}
160 '';
161}