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