Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
1{
2 lib,
3 bash,
4 binutils-unwrapped,
5 coreutils,
6 gawk,
7 libarchive,
8 pv,
9 squashfsTools,
10 buildFHSEnv,
11 pkgs,
12}:
13
14rec {
15 appimage-exec = pkgs.replaceVarsWith {
16 src = ./appimage-exec.sh;
17 isExecutable = true;
18 dir = "bin";
19 replacements = {
20 inherit (pkgs) runtimeShell;
21 path = lib.makeBinPath [
22 bash
23 binutils-unwrapped
24 coreutils
25 gawk
26 libarchive
27 pv
28 squashfsTools
29 ];
30 };
31 };
32
33 extract =
34 args@{
35 pname,
36 version,
37 name ? null,
38 postExtract ? "",
39 src,
40 ...
41 }:
42 assert lib.assertMsg (
43 name == null
44 ) "The `name` argument is deprecated. Use `pname` and `version` instead to construct the name.";
45 pkgs.runCommand "${pname}-${version}-extracted"
46 {
47 nativeBuildInputs = [ appimage-exec ];
48 strictDeps = true;
49 }
50 ''
51 appimage-exec.sh -x $out ${src}
52 ${postExtract}
53 '';
54
55 # for compatibility, deprecated
56 extractType1 = extract;
57 extractType2 = extract;
58 wrapType1 = wrapType2;
59
60 wrapAppImage =
61 args@{
62 src,
63 extraPkgs ? pkgs: [ ],
64 meta ? { },
65 ...
66 }:
67 buildFHSEnv (
68 defaultFhsEnvArgs
69 // {
70 targetPkgs = pkgs: [ appimage-exec ] ++ defaultFhsEnvArgs.targetPkgs pkgs ++ extraPkgs pkgs;
71
72 runScript = "appimage-exec.sh -w ${src} --";
73
74 meta = {
75 sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
76 }
77 // meta;
78 }
79 // (removeAttrs args (builtins.attrNames (builtins.functionArgs wrapAppImage)))
80 );
81
82 wrapType2 =
83 args@{
84 src,
85 extraPkgs ? pkgs: [ ],
86 ...
87 }:
88 wrapAppImage (
89 args
90 // {
91 inherit extraPkgs;
92 src = extract (
93 lib.filterAttrs (
94 key: value:
95 builtins.elem key [
96 "pname"
97 "version"
98 "src"
99 ]
100 ) args
101 );
102
103 # passthru src to make nix-update work
104 # hack to keep the origin position (unsafeGetAttrPos)
105 passthru =
106 lib.pipe args [
107 lib.attrNames
108 (lib.remove "src")
109 (removeAttrs args)
110 ]
111 // args.passthru or { };
112 }
113 );
114
115 defaultFhsEnvArgs = {
116 # Most of the packages were taken from the Steam chroot
117 targetPkgs =
118 pkgs: with pkgs; [
119 gtk3
120 bashInteractive
121 zenity
122 xorg.xrandr
123 which
124 perl
125 xdg-user-dirs # flutter desktop apps
126 xdg-utils
127 iana-etc
128 krb5
129 gsettings-desktop-schemas
130 hicolor-icon-theme # dont show a gtk warning about hicolor not being installed
131 ];
132
133 # list of libraries expected in an appimage environment:
134 # https://github.com/AppImage/pkg2appimage/blob/master/excludelist
135 multiPkgs =
136 pkgs: with pkgs; [
137 desktop-file-utils
138 xorg.libXcomposite
139 xorg.libXtst
140 xorg.libXrandr
141 xorg.libXext
142 xorg.libX11
143 xorg.libXfixes
144 libGL
145
146 gst_all_1.gstreamer
147 gst_all_1.gst-plugins-ugly
148 gst_all_1.gst-plugins-base
149 libdrm
150 xorg.xkeyboardconfig
151 xorg.libpciaccess
152
153 glib
154 bzip2
155 zlib
156 gdk-pixbuf
157
158 xorg.libXinerama
159 xorg.libXdamage
160 xorg.libXcursor
161 xorg.libXrender
162 xorg.libXScrnSaver
163 xorg.libXxf86vm
164 xorg.libXi
165 xorg.libSM
166 xorg.libICE
167 freetype
168 curlWithGnuTls
169 nspr
170 nss
171 fontconfig
172 cairo
173 pango
174 expat
175 dbus
176 cups
177 libcap
178 SDL2
179 libusb1
180 udev
181 dbus-glib
182 atk
183 at-spi2-atk
184 libudev0-shim
185
186 xorg.libXt
187 xorg.libXmu
188 xorg.libxcb
189 xorg.xcbutil
190 xorg.xcbutilwm
191 xorg.xcbutilimage
192 xorg.xcbutilkeysyms
193 xorg.xcbutilrenderutil
194 libGLU
195 libuuid
196 libogg
197 libvorbis
198 SDL2_image
199 glew110
200 openssl
201 libidn
202 tbb
203 wayland
204 libgbm
205 libxkbcommon
206 vulkan-loader
207
208 flac
209 libglut
210 libjpeg
211 libpng12
212 libpulseaudio
213 libsamplerate
214 libmikmod
215 libthai
216 libtheora
217 libtiff
218 pixman
219 speex
220 SDL2_ttf
221 SDL2_mixer
222 libcaca
223 libcanberra
224 libgcrypt
225 libvpx
226 librsvg
227 xorg.libXft
228 libvdpau
229 alsa-lib
230
231 harfbuzz
232 e2fsprogs
233 libgpg-error
234 keyutils.lib
235 libjack2
236 fribidi
237 p11-kit
238
239 gmp
240
241 # libraries not on the upstream include list, but nevertheless expected
242 # by at least one appimage
243 libtool.lib # for Synfigstudio
244 at-spi2-core
245 pciutils # for FreeCAD
246 pipewire # immersed-vr wayland support
247
248 libsecret # For bitwarden
249 libmpg123 # Slippi launcher
250 brotli # TwitchDropsMiner
251 ];
252 };
253}