about summary refs log tree commit diff
path: root/pkgs/by-name/qu/quickemu/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/by-name/qu/quickemu/package.nix')
-rw-r--r--pkgs/by-name/qu/quickemu/package.nix121
1 files changed, 121 insertions, 0 deletions
diff --git a/pkgs/by-name/qu/quickemu/package.nix b/pkgs/by-name/qu/quickemu/package.nix
new file mode 100644
index 0000000000000..b650ef91f88ec
--- /dev/null
+++ b/pkgs/by-name/qu/quickemu/package.nix
@@ -0,0 +1,121 @@
+{
+  lib,
+  fetchFromGitHub,
+  stdenv,
+  makeWrapper,
+  cdrtools,
+  curl,
+  gawk,
+  gnugrep,
+  gnused,
+  jq,
+  ncurses,
+  pciutils,
+  procps,
+  python3,
+  qemu,
+  socat,
+  spice-gtk,
+  swtpm,
+  usbutils,
+  util-linux,
+  unzip,
+  xdg-user-dirs,
+  xrandr,
+  zsync,
+  OVMF,
+  OVMFFull,
+  quickemu,
+  testers,
+  installShellFiles,
+  fetchpatch2,
+}:
+let
+  runtimePaths = [
+    cdrtools
+    curl
+    gawk
+    gnugrep
+    gnused
+    jq
+    ncurses
+    pciutils
+    procps
+    python3
+    qemu
+    socat
+    swtpm
+    usbutils
+    util-linux
+    unzip
+    xdg-user-dirs
+    xrandr
+    zsync
+  ];
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  pname = "quickemu";
+  version = "4.9.4";
+
+  src = fetchFromGitHub {
+    owner = "quickemu-project";
+    repo = "quickemu";
+    rev = finalAttrs.version;
+    hash = "sha256-fjbXgze6klvbRgkJtPIUh9kEkP/As7dAj+cazpzelBY=";
+  };
+
+  postPatch = ''
+    sed -i \
+      -e '/OVMF_CODE_4M.secboot.fd/s|ovmfs=(|ovmfs=("${OVMFFull.firmware}","${OVMFFull.variables}" |' \
+      -e '/OVMF_CODE_4M.fd/s|ovmfs=(|ovmfs=("${OVMF.firmware}","${OVMF.variables}" |' \
+      -e '/cp "''${VARS_IN}" "''${VARS_OUT}"/a chmod +w "''${VARS_OUT}"' \
+      -e 's/Icon=.*qemu.svg/Icon=qemu/' \
+      quickemu
+  '';
+
+  patches = [
+    # reduces windows vm ram requirements to 4G, to match microsoft recommendations
+    # TODO: remove on next release
+    (fetchpatch2 {
+      name = "decrease-windows-ram-requirements.patch";
+      url = "https://github.com/quickemu-project/quickemu/commit/f51697593a4650c5486661292e2febe1d16f8c71.patch";
+      hash = "sha256-J5hIvQGtkufOcjk2FZN65iox/W2zkLlg+Veg9TF11Fs=";
+    })
+  ];
+
+  nativeBuildInputs = [
+    makeWrapper
+    installShellFiles
+  ];
+
+  installPhase = ''
+    runHook preInstall
+
+    installManPage docs/quickget.1 docs/quickemu.1 docs/quickemu_conf.1
+    install -Dm755 -t "$out/bin" chunkcheck quickemu quickget quickreport windowskey
+
+    # spice-gtk needs to be put in suffix so that when virtualisation.spiceUSBRedirection
+    # is enabled, the wrapped spice-client-glib-usb-acl-helper is used
+    for f in chunkcheck quickget quickemu quickreport windowskey; do
+      wrapProgram $out/bin/$f \
+        --prefix PATH : "${lib.makeBinPath runtimePaths}" \
+        --suffix PATH : "${lib.makeBinPath [ spice-gtk ]}"
+    done
+
+    runHook postInstall
+  '';
+
+  passthru.tests = testers.testVersion { package = quickemu; };
+
+  meta = {
+    description = "Quickly create and run optimised Windows, macOS and Linux virtual machines";
+    homepage = "https://github.com/quickemu-project/quickemu";
+    mainProgram = "quickemu";
+    license = lib.licenses.mit;
+    maintainers = with lib.maintainers; [
+      fedx-sudo
+      flexiondotorg
+    ];
+  };
+})