aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix114
1 files changed, 114 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix
new file mode 100644
index 000000000000..c1c7b5a2706e
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/misc/multibootusb/default.nix
@@ -0,0 +1,114 @@
+{ fetchFromGitHub, libxcb, mtools, p7zip, parted, procps, qemu, unzip, zip,
+ coreutils, gnugrep, which, gnused, e2fsprogs, autoPatchelfHook, gptfdisk,
+ python36Packages, qt5, runtimeShell, stdenv, util-linux, wrapQtAppsHook }:
+
+# Note: Multibootusb is tricky to maintain. It relies on the
+# $PYTHONPATH variable containing some of their code, so that
+# something like:
+#
+# from scripts import config
+#
+# works. It also relies on the current directory to find some runtime
+# resources thanks to a use of __file__.
+#
+# https://github.com/mbusb/multibootusb/blob/0d34d70c3868f1d7695cfd141141b17c075de967/scripts/osdriver.py#L59
+
+python36Packages.buildPythonApplication rec {
+ pname = "multibootusb";
+ name = "${pname}-${version}";
+ version = "9.2.0";
+
+ nativeBuildInputs = [
+ wrapQtAppsHook
+ autoPatchelfHook
+ unzip
+ zip
+ ];
+
+ runTimeDeps = [
+ coreutils
+ gnugrep
+ which
+ parted
+ util-linux
+ qemu
+ p7zip
+ gnused
+ mtools
+ procps
+ e2fsprogs
+ gptfdisk
+ ];
+
+ buildInputs = [
+ libxcb
+ python36Packages.python
+ qt5.full
+ ];
+
+ src = fetchFromGitHub {
+ owner = "mbusb";
+ repo = pname;
+ rev = "v${version}";
+
+ sha256 = "0wlan0cp6c2i0nahixgpmkm0h4n518gj8rc515d579pqqp91p2h3";
+ };
+
+ # Tests can't run inside the NixOS sandbox
+ # "Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory"
+ doCheck = false;
+
+ pythonPath = [
+ python36Packages.dbus-python
+ python36Packages.pyqt5
+ python36Packages.pytest-shutil
+ python36Packages.pyudev
+ python36Packages.six
+ ];
+
+ # multibootusb ships zips with various versions of syslinux, we need to patchelf them
+ postPatch = ''
+ for zip in $(find . -name "*.zip"); do
+ zip=$(readlink -f $zip)
+ target="$(mktemp -d)"
+ pushd $target
+ unzip $zip
+ rm $zip
+ autoPatchelf .
+ zip -r $zip *
+ popd
+ done
+ '';
+
+ postInstall = ''
+ # This script doesn't work and it doesn't add much anyway
+ rm $out/bin/multibootusb-pkexec
+
+ # The installed data isn't sufficient for whatever reason, missing gdisk/gdisk.exe
+ mkdir -p "$out/share/${pname}"
+ cp -r data "$out/share/${pname}/data"
+ '';
+
+ preFixup = ''
+ makeWrapperArgs+=(
+ # Firstly, add all necessary QT variables
+ "''${qtWrapperArgs[@]}"
+
+ # Then, add the installed scripts/ directory to the python path
+ --prefix "PYTHONPATH" ":" "$out/lib/${python36Packages.python.libPrefix}/site-packages"
+
+ # Add some runtime dependencies
+ --prefix "PATH" ":" "${stdenv.lib.makeBinPath runTimeDeps}"
+
+ # Finally, move to directory that contains data
+ --run "cd $out/share/${pname}"
+ )
+ '';
+
+ meta = with stdenv.lib; {
+ description = "Multiboot USB creator for Linux live disks";
+ homepage = "http://multibootusb.org/";
+ license = licenses.gpl2;
+ maintainers = []; # Looking for a maintainer!
+ };
+}