Clone of https://github.com/NixOS/nixpkgs.git (to stress-test knotserver)
at python-updates 253 lines 5.1 kB view raw
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}