summary refs log tree commit diff
path: root/pkgs/tools/package-management
diff options
context:
space:
mode:
authortilpner <till@hoeppner.ws>2018-06-09 19:10:16 +0200
committertilpner <till@hoeppner.ws>2018-06-15 11:02:15 +0200
commitf38459442af891bc34237b3e067ece4ffce7e0b5 (patch)
tree137b7c9eb0c9629455bc0d00c3876a1786ddd9fb /pkgs/tools/package-management
parentbc490a4b3f48a3667c206869c5cc15056149d6c1 (diff)
downloadnixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar.gz
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar.bz2
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar.lz
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar.xz
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.tar.zst
nixlib-f38459442af891bc34237b3e067ece4ffce7e0b5.zip
appimage-run: init
This adds a best-effort hack to run AppImages, which currently don't
work out-of-the-box on NixOS. This is not preferable to using packaged
applications, but may help users if the application they want to run
is not in nixpkgs.

It uses the package list from the Steam chroot, but without Steam
packages.
Diffstat (limited to 'pkgs/tools/package-management')
-rw-r--r--pkgs/tools/package-management/appimage-run/default.nix146
1 files changed, 146 insertions, 0 deletions
diff --git a/pkgs/tools/package-management/appimage-run/default.nix b/pkgs/tools/package-management/appimage-run/default.nix
new file mode 100644
index 000000000000..f6c4c25559e2
--- /dev/null
+++ b/pkgs/tools/package-management/appimage-run/default.nix
@@ -0,0 +1,146 @@
+{ stdenv, writeScript, buildFHSUserEnv, coreutils
+, extraPkgs ? pkgs: [] }:
+
+buildFHSUserEnv {
+  name = "appimage-run";
+
+  # 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
+  ] ++ extraPkgs pkgs;
+
+  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
+    dbus-glib
+    libav
+    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
+    strace
+  ];
+
+  runScript = writeScript "appimage-exec" ''
+    #!${stdenv.shell}
+    APPIMAGE="$(realpath "$1")"
+
+    if [ ! -x "$APPIMAGE" ]; then
+      echo "fatal: $APPIMAGE is not executable"
+      exit 1
+    fi
+
+    SHA256="$(${coreutils}/bin/sha256sum "$APPIMAGE" | cut -d ' ' -f 1)"
+    SQUASHFS_ROOT="''${XDG_CACHE_HOME:-$HOME/.cache}/appimage-run/$SHA256/"
+    mkdir -p "$SQUASHFS_ROOT"
+
+    export APPDIR="$SQUASHFS_ROOT/squashfs-root"
+    if [ ! -x "$APPDIR" ]; then
+      cd "$SQUASHFS_ROOT"
+      "$APPIMAGE" --appimage-extract 2>/dev/null
+    fi
+
+    cd "$APPDIR"
+    export PATH="$PATH:$PWD/usr/bin"
+    export APPIMAGE_SILENT_INSTALL=1
+
+    if [ -n "$APPIMAGE_DEBUG_EXEC" ]; then
+      exec "$APPIMAGE_DEBUG_EXEC"
+    fi
+
+    exec ./AppRun
+  '';
+}