|
|
|
@ -1,21 +1,33 @@ |
|
|
|
|
{ stdenv, python36Packages, fetchFromGitHub, libxcb, mtools, p7zip, parted, procps, utillinux, qt5, runtimeShell }: |
|
|
|
|
{ fetchFromGitHub, libxcb, mtools, p7zip, parted, procps, |
|
|
|
|
python36Packages, qt5, runtimeShell, stdenv, utillinux, 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 |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
buildInputs = [ |
|
|
|
|
python36Packages.dbus-python |
|
|
|
|
python36Packages.pyqt5 |
|
|
|
|
python36Packages.pytest-shutil |
|
|
|
|
python36Packages.python |
|
|
|
|
python36Packages.pyudev |
|
|
|
|
python36Packages.six |
|
|
|
|
libxcb |
|
|
|
|
mtools |
|
|
|
|
p7zip |
|
|
|
|
parted |
|
|
|
|
procps |
|
|
|
|
python36Packages.python |
|
|
|
|
qt5.full |
|
|
|
|
utillinux |
|
|
|
|
]; |
|
|
|
@ -28,32 +40,42 @@ python36Packages.buildPythonApplication rec { |
|
|
|
|
sha256 = "0wlan0cp6c2i0nahixgpmkm0h4n518gj8rc515d579pqqp91p2h3"; |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
# Skip the fixup stage where stuff is shrinked (can't shrink text files) |
|
|
|
|
phases = [ "unpackPhase" "installPhase" ]; |
|
|
|
|
|
|
|
|
|
installPhase = '' |
|
|
|
|
share="$out/share/${pname}" |
|
|
|
|
mkdir -p "$share" |
|
|
|
|
cp -r data "$share/data" |
|
|
|
|
cp -r scripts "$share/scripts" |
|
|
|
|
cp "${pname}" "$share/${pname}" |
|
|
|
|
|
|
|
|
|
mkdir "$out/bin" |
|
|
|
|
cat > "$out/bin/${pname}" <<EOF |
|
|
|
|
#!${runtimeShell} |
|
|
|
|
cd "$share" |
|
|
|
|
export PYTHONPATH="$PYTHONPATH:$share" |
|
|
|
|
export PATH="$PATH:${parted}/bin:${procps}/bin" |
|
|
|
|
|
|
|
|
|
"${python36Packages.python}/bin/python" "${pname}" |
|
|
|
|
EOF |
|
|
|
|
chmod +x "$out/bin/${pname}" |
|
|
|
|
# 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 |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
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" |
|
|
|
|
|
|
|
|
|
# Finally, move to directory that contains data |
|
|
|
|
"--run" "\"cd $out/share/${pname}\"" |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
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" |
|
|
|
|
''; |
|
|
|
|
|
|
|
|
|
meta = with stdenv.lib; { |
|
|
|
|
description = "Multiboot USB creator for Linux live disks"; |
|
|
|
|
homepage = http://multibootusb.org/; |
|
|
|
|
license = licenses.gpl2; |
|
|
|
|
maintainers = with maintainers; [ jD91mZM2 ]; |
|
|
|
|
maintainers = []; # Looking for a maintainer! |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|