58443d8a50
The appimageTools attrset contains utilities to prevent the usage of appimage-run to package AppImages, like done/attempted in #49370 and #53156. This has the advantage of allowing for per-package environment changes, and extracts into the store instead of the users home directory. The package list was extracted into appimageTools to prevent duplication.
176 lines
3.4 KiB
Nix
176 lines
3.4 KiB
Nix
{ pkgs, stdenv, libarchive, patchelf, zlib, buildFHSUserEnv, writeScript }:
|
|
|
|
rec {
|
|
# Both extraction functions could be unified, but then
|
|
# it would depend on libmagic to correctly identify ISO 9660s
|
|
|
|
extractType1 = { name, src }: stdenv.mkDerivation {
|
|
name = "${name}-extracted";
|
|
inherit src;
|
|
|
|
nativeBuildInputs = [ libarchive ];
|
|
buildCommand = ''
|
|
mkdir $out
|
|
bsdtar -x -C $out -f $src
|
|
'';
|
|
};
|
|
|
|
extractType2 = { name, src }: stdenv.mkDerivation {
|
|
name = "${name}-extracted";
|
|
inherit src;
|
|
|
|
nativeBuildInputs = [ patchelf ];
|
|
buildCommand = ''
|
|
install $src ./appimage
|
|
patchelf \
|
|
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
|
|
--replace-needed libz.so.1 ${zlib}/lib/libz.so.1 \
|
|
./appimage
|
|
|
|
./appimage --appimage-extract
|
|
|
|
cp -rv squashfs-root $out
|
|
'';
|
|
};
|
|
|
|
wrapAppImage = { name, src, extraPkgs }: buildFHSUserEnv (defaultFhsEnvArgs // {
|
|
inherit name;
|
|
|
|
targetPkgs = pkgs: defaultFhsEnvArgs.targetPkgs pkgs ++ extraPkgs pkgs;
|
|
|
|
runScript = writeScript "run" ''
|
|
#!${stdenv.shell}
|
|
|
|
export APPDIR=${src}
|
|
export APPIMAGE_SILENT_INSTALL=1
|
|
cd $APPDIR
|
|
exec ./AppRun "$@"
|
|
'';
|
|
});
|
|
|
|
wrapType1 = args@{ name, src, extraPkgs ? pkgs: [] }: wrapAppImage {
|
|
inherit name extraPkgs;
|
|
src = extractType1 { inherit name src; };
|
|
};
|
|
|
|
wrapType2 = args@{ name, src, extraPkgs ? pkgs: [] }: wrapAppImage {
|
|
inherit name extraPkgs;
|
|
src = extractType2 { inherit name src; };
|
|
};
|
|
|
|
defaultFhsEnvArgs = {
|
|
name = "appimage-env";
|
|
|
|
# Most of the packages were taken from the Steam chroot
|
|
targetPkgs = pkgs: with pkgs; [
|
|
gtk3
|
|
bashInteractive
|
|
gnome3.zenity
|
|
python2
|
|
xorg.xrandr
|
|
which
|
|
perl
|
|
xdg_utils
|
|
iana-etc
|
|
krb5
|
|
];
|
|
|
|
multiPkgs = pkgs: with pkgs; [
|
|
desktop-file-utils
|
|
xorg.libXcomposite
|
|
xorg.libXtst
|
|
xorg.libXrandr
|
|
xorg.libXext
|
|
xorg.libX11
|
|
xorg.libXfixes
|
|
libGL
|
|
|
|
gst_all_1.gstreamer
|
|
gst_all_1.gst-plugins-ugly
|
|
libdrm
|
|
xorg.xkeyboardconfig
|
|
xorg.libpciaccess
|
|
|
|
glib
|
|
gtk2
|
|
bzip2
|
|
zlib
|
|
gdk_pixbuf
|
|
|
|
xorg.libXinerama
|
|
xorg.libXdamage
|
|
xorg.libXcursor
|
|
xorg.libXrender
|
|
xorg.libXScrnSaver
|
|
xorg.libXxf86vm
|
|
xorg.libXi
|
|
xorg.libSM
|
|
xorg.libICE
|
|
gnome2.GConf
|
|
freetype
|
|
(curl.override { gnutlsSupport = true; sslSupport = false; })
|
|
nspr
|
|
nss
|
|
fontconfig
|
|
cairo
|
|
pango
|
|
expat
|
|
dbus
|
|
cups
|
|
libcap
|
|
SDL2
|
|
libusb1
|
|
udev
|
|
dbus-glib
|
|
libav
|
|
atk
|
|
at-spi2-atk
|
|
libudev0-shim
|
|
networkmanager098
|
|
|
|
xorg.libXt
|
|
xorg.libXmu
|
|
xorg.libxcb
|
|
libGLU
|
|
libuuid
|
|
libogg
|
|
libvorbis
|
|
SDL
|
|
SDL2_image
|
|
glew110
|
|
openssl
|
|
libidn
|
|
tbb
|
|
wayland
|
|
mesa_noglu
|
|
libxkbcommon
|
|
|
|
flac
|
|
freeglut
|
|
libjpeg
|
|
libpng12
|
|
libsamplerate
|
|
libmikmod
|
|
libtheora
|
|
libtiff
|
|
pixman
|
|
speex
|
|
SDL_image
|
|
SDL_ttf
|
|
SDL_mixer
|
|
SDL2_ttf
|
|
SDL2_mixer
|
|
gstreamer
|
|
gst-plugins-base
|
|
libappindicator-gtk2
|
|
libcaca
|
|
libcanberra
|
|
libgcrypt
|
|
libvpx
|
|
librsvg
|
|
xorg.libXft
|
|
libvdpau
|
|
alsaLib
|
|
];
|
|
};
|
|
}
|