about summary refs log tree commit diff
path: root/pkgs/applications/virtualization
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/applications/virtualization')
-rw-r--r--pkgs/applications/virtualization/OVMF/default.nix49
-rw-r--r--pkgs/applications/virtualization/arion/default.nix2
-rw-r--r--pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock254
-rw-r--r--pkgs/applications/virtualization/cloud-hypervisor/default.nix11
-rw-r--r--pkgs/applications/virtualization/colima/default.nix10
-rw-r--r--pkgs/applications/virtualization/conmon-rs/default.nix6
-rw-r--r--pkgs/applications/virtualization/containerd/default.nix4
-rw-r--r--pkgs/applications/virtualization/cri-o/default.nix4
-rw-r--r--pkgs/applications/virtualization/crosvm/default.nix16
-rw-r--r--pkgs/applications/virtualization/crun/default.nix4
-rw-r--r--pkgs/applications/virtualization/ddev/default.nix6
-rw-r--r--pkgs/applications/virtualization/docker/buildx.nix4
-rw-r--r--pkgs/applications/virtualization/docker/compose.nix8
-rw-r--r--pkgs/applications/virtualization/docker/compose_1.nix47
-rw-r--r--pkgs/applications/virtualization/docker/default.nix58
-rw-r--r--pkgs/applications/virtualization/docker/gc.nix5
-rw-r--r--pkgs/applications/virtualization/driver/win-pvdrivers/default.nix74
-rw-r--r--pkgs/applications/virtualization/ecs-agent/default.nix4
-rw-r--r--pkgs/applications/virtualization/firecracker/default.nix59
-rw-r--r--pkgs/applications/virtualization/kraft/default.nix1
-rw-r--r--pkgs/applications/virtualization/krunvm/default.nix6
-rw-r--r--pkgs/applications/virtualization/libnvidia-container/default.nix4
-rw-r--r--pkgs/applications/virtualization/lima/bin.nix19
-rw-r--r--pkgs/applications/virtualization/lima/default.nix4
-rw-r--r--pkgs/applications/virtualization/lkl/default.nix2
-rw-r--r--pkgs/applications/virtualization/looking-glass-client/default.nix13
-rw-r--r--pkgs/applications/virtualization/nixpacks/default.nix6
-rw-r--r--pkgs/applications/virtualization/open-vm-tools/default.nix150
-rw-r--r--pkgs/applications/virtualization/podman-compose/default.nix7
-rw-r--r--pkgs/applications/virtualization/podman-desktop/default.nix4
-rw-r--r--pkgs/applications/virtualization/podman-tui/default.nix51
-rw-r--r--pkgs/applications/virtualization/podman/default.nix27
-rw-r--r--pkgs/applications/virtualization/pods/Cargo.lock1427
-rw-r--r--pkgs/applications/virtualization/pods/default.nix13
-rw-r--r--pkgs/applications/virtualization/qboot/default.nix2
-rw-r--r--pkgs/applications/virtualization/qemu/default.nix139
-rw-r--r--pkgs/applications/virtualization/qemu/fix-qemu-ga.patch75
-rw-r--r--pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch189
-rw-r--r--pkgs/applications/virtualization/qemu/remove-ui-cocoa-use-safe-area-insets.patch14
-rw-r--r--pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch200
-rw-r--r--pkgs/applications/virtualization/qemu/revert-ui-cocoa-use-the-standard-about-panel.patch145
-rw-r--r--pkgs/applications/virtualization/quickgui/default.nix83
-rw-r--r--pkgs/applications/virtualization/quickgui/pubspec.lock.json1189
-rw-r--r--pkgs/applications/virtualization/runc/default.nix4
-rw-r--r--pkgs/applications/virtualization/rust-hypervisor-firmware/default.nix2
-rw-r--r--pkgs/applications/virtualization/rvvm/default.nix7
-rw-r--r--pkgs/applications/virtualization/sail-riscv/default.nix2
-rw-r--r--pkgs/applications/virtualization/singularity/generic.nix85
-rw-r--r--pkgs/applications/virtualization/singularity/packages.nix10
-rw-r--r--pkgs/applications/virtualization/spike/default.nix17
-rw-r--r--pkgs/applications/virtualization/stratovirt/default.nix7
-rw-r--r--pkgs/applications/virtualization/stratovirt/micro_vm-allow-SYS_clock_gettime.patch25
-rw-r--r--pkgs/applications/virtualization/tart/default.nix6
-rw-r--r--pkgs/applications/virtualization/umoci/default.nix1
-rw-r--r--pkgs/applications/virtualization/virt-manager/default.nix11
-rw-r--r--pkgs/applications/virtualization/virt-viewer/default.nix13
-rw-r--r--pkgs/applications/virtualization/virt-what/default.nix4
-rw-r--r--pkgs/applications/virtualization/virtualbox/default.nix13
-rw-r--r--pkgs/applications/virtualization/virtualbox/extpack.nix7
-rw-r--r--pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix2
-rw-r--r--pkgs/applications/virtualization/virtualbox/guest-additions/builder.nix11
-rw-r--r--pkgs/applications/virtualization/virtualbox/guest-additions/default.nix10
-rw-r--r--pkgs/applications/virtualization/vmware-workstation/default.nix26
-rw-r--r--pkgs/applications/virtualization/vpcs/default.nix60
-rw-r--r--pkgs/applications/virtualization/x11docker/default.nix2
-rw-r--r--pkgs/applications/virtualization/xen/0000-fix-install-python.4.15.patch16
-rw-r--r--pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch19
-rw-r--r--pkgs/applications/virtualization/xen/0004-makefile-use-efi-ld.4.15.patch42
-rw-r--r--pkgs/applications/virtualization/xen/0005-makefile-fix-efi-mountdir-use.4.15.patch37
-rw-r--r--pkgs/applications/virtualization/xen/4.15.nix183
-rw-r--r--pkgs/applications/virtualization/xen/4.17/default.nix56
-rw-r--r--pkgs/applications/virtualization/xen/4.18/default.nix56
-rw-r--r--pkgs/applications/virtualization/xen/4.19/default.nix58
-rw-r--r--pkgs/applications/virtualization/xen/README.md209
-rw-r--r--pkgs/applications/virtualization/xen/generic.nix265
-rw-r--r--pkgs/applications/virtualization/xen/generic/0000-xen-ipxe-src-generic.patch (renamed from pkgs/applications/virtualization/xen/0000-fix-ipxe-src.4.15.patch)8
-rw-r--r--pkgs/applications/virtualization/xen/generic/default.nix728
-rw-r--r--pkgs/applications/virtualization/xen/generic/patches.nix159
-rw-r--r--pkgs/applications/virtualization/xen/packages.nix99
-rwxr-xr-xpkgs/applications/virtualization/xen/update.sh202
-rw-r--r--pkgs/applications/virtualization/xen/xsa-patches.nix493
-rw-r--r--pkgs/applications/virtualization/xhyve/default.nix2
-rw-r--r--pkgs/applications/virtualization/youki/default.nix51
-rw-r--r--pkgs/applications/virtualization/youki/fix-cargo-lock.patch40
84 files changed, 3980 insertions, 3463 deletions
diff --git a/pkgs/applications/virtualization/OVMF/default.nix b/pkgs/applications/virtualization/OVMF/default.nix
index 60eaa6428d62c..35336ad8ad3f3 100644
--- a/pkgs/applications/virtualization/OVMF/default.nix
+++ b/pkgs/applications/virtualization/OVMF/default.nix
@@ -1,5 +1,5 @@
 { stdenv, nixosTests, lib, edk2, util-linux, nasm, acpica-tools, llvmPackages
-, fetchurl, python3, pexpect, xorriso, qemu, dosfstools, mtools
+, fetchFromGitLab, python3, pexpect, xorriso, qemu, dosfstools, mtools
 , fdSize2MB ? false
 , fdSize4MB ? secureBoot
 , secureBoot ? false
@@ -12,7 +12,7 @@
 # to use as the PK and first KEK for the keystore.
 #
 # By default, we use Debian's cert. This default
-# should chnage to a NixOS cert once we have our
+# should change to a NixOS cert once we have our
 # own secure boot signing infrastructure.
 #
 # Ignored if msVarsTemplate is false.
@@ -29,6 +29,7 @@
     x86_64 = "OvmfPkg/OvmfPkgX64.dsc";
     aarch64 = "ArmVirtPkg/ArmVirtQemu.dsc";
     riscv64 = "OvmfPkg/RiscVVirt/RiscVVirtQemu.dsc";
+    loongarch64 = "OvmfPkg/LoongArchVirt/LoongArchVirtQemu.dsc";
   }.${stdenv.hostPlatform.parsed.cpu.name}
   or (throw "Unsupported OVMF `projectDscPath` on ${stdenv.hostPlatform.parsed.cpu.name}")
 , fwPrefix ? {
@@ -36,6 +37,7 @@
     x86_64 = "OVMF";
     aarch64 = "AAVMF";
     riscv64 = "RISCV_VIRT";
+    loongarch64 = "LOONGARCH_VIRT";
   }.${stdenv.hostPlatform.parsed.cpu.name}
   or (throw "Unsupported OVMF `fwPrefix` on ${stdenv.hostPlatform.parsed.cpu.name}")
 , metaPlatforms ? edk2.meta.platforms
@@ -66,17 +68,26 @@ let
 
   OvmfPkKek1AppPrefix = "4e32566d-8e9e-4f52-81d3-5bb9715f9727";
 
-  debian-edk-src = fetchurl {
-    url = "http://deb.debian.org/debian/pool/main/e/edk2/edk2_2023.11-5.debian.tar.xz";
-    sha256 = "1yxlab4md30pxvjadr6b4xn6cyfw0c292q63pyfv4vylvhsb24g4";
+  debian-edk-src = fetchFromGitLab {
+    domain = "salsa.debian.org";
+    owner = "qemu-team";
+    repo = "edk2";
+    nonConeMode = true;
+    sparseCheckout = [
+      "debian/edk2-vars-generator.py"
+      "debian/python"
+      "debian/PkKek-1-*.pem"
+    ];
+    rev = "refs/tags/debian/2024.05-1";
+    hash = "sha256-uAjXJaHOVh944ZxcA2IgCsrsncxuhc0JKlsXs0E03s0=";
   };
 
   buildPrefix = "Build/*/*";
 
 in
 
-assert platformSpecific ? ${cpuName};
 assert msVarsTemplate -> fdSize4MB;
+assert msVarsTemplate -> platformSpecific ? ${cpuName};
 assert msVarsTemplate -> platformSpecific.${cpuName} ? msVarsArgs;
 
 edk2.mkDerivation projectDscPath (finalAttrs: {
@@ -111,7 +122,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
   env.PYTHON_COMMAND = "python3";
 
   postUnpack = lib.optionalDrvAttr msVarsTemplate ''
-    unpackFile ${debian-edk-src}
+    ln -s ${debian-edk-src}/debian
   '';
 
   postConfigure = lib.optionalDrvAttr msVarsTemplate ''
@@ -121,24 +132,25 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
     export PYTHONPATH=$NIX_BUILD_TOP/debian/python:$PYTHONPATH
   '';
 
-  postBuild = lib.optionalString stdenv.hostPlatform.isAarch ''
+  postBuild = lib.optionalString (stdenv.hostPlatform.isAarch || stdenv.hostPlatform.isLoongArch64) ''
     (
     cd ${buildPrefix}/FV
     cp QEMU_EFI.fd ${fwPrefix}_CODE.fd
     cp QEMU_VARS.fd ${fwPrefix}_VARS.fd
-
+    )
+  '' + lib.optionalString stdenv.hostPlatform.isAarch ''
     # QEMU expects 64MiB CODE and VARS files on ARM/AARCH64 architectures
     # Truncate the firmware files to the expected size
-    truncate -s 64M ${fwPrefix}_CODE.fd
-    truncate -s 64M ${fwPrefix}_VARS.fd
-    )
+    truncate -s 64M ${buildPrefix}/FV/${fwPrefix}_CODE.fd
+    truncate -s 64M ${buildPrefix}/FV/${fwPrefix}_VARS.fd
   '' + lib.optionalString stdenv.hostPlatform.isRiscV ''
     truncate -s 32M ${buildPrefix}/FV/${fwPrefix}_CODE.fd
     truncate -s 32M ${buildPrefix}/FV/${fwPrefix}_VARS.fd
   '' + lib.optionalString msVarsTemplate ''
     (
     cd ${buildPrefix}
-    python3 $NIX_BUILD_TOP/debian/edk2-vars-generator.py \
+    # locale must be set on Darwin for invocations of mtools to work correctly
+    LC_ALL=C python3 $NIX_BUILD_TOP/debian/edk2-vars-generator.py \
       --flavor ${msVarsArgs.flavor} \
       --enrolldefaultkeys ${msVarsArgs.archDir}/EnrollDefaultKeys.efi \
       --shell ${msVarsArgs.archDir}/Shell.efi \
@@ -155,7 +167,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
   postInstall = ''
     mkdir -vp $fd/FV
   '' + lib.optionalString (builtins.elem fwPrefix [
-    "OVMF" "AAVMF" "RISCV_VIRT"
+    "OVMF" "AAVMF" "RISCV_VIRT" "LOONGARCH_VIRT"
   ]) ''
     mv -v $out/FV/${fwPrefix}_{CODE,VARS}.fd $fd/FV
   '' + lib.optionalString stdenv.hostPlatform.isx86 ''
@@ -165,7 +177,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
     ln -sv $fd/FV/${fwPrefix}_CODE{,.ms}.fd
   '' + lib.optionalString stdenv.hostPlatform.isAarch ''
     mv -v $out/FV/QEMU_{EFI,VARS}.fd $fd/FV
-    # Add symlinks for Fedora dir layout: https://src.fedoraproject.org/cgit/rpms/edk2.git/tree/edk2.spec
+    # Add symlinks for Fedora dir layout: https://src.fedoraproject.org/rpms/edk2/blob/main/f/edk2.spec
     mkdir -vp $fd/AAVMF
     ln -s $fd/FV/AAVMF_CODE.fd $fd/AAVMF/QEMU_EFI-pflash.raw
     ln -s $fd/FV/AAVMF_VARS.fd $fd/AAVMF/vars-template-pflash.raw
@@ -179,6 +191,9 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
   in {
     firmware  = "${prefix}_CODE.fd";
     variables = "${prefix}_VARS.fd";
+    variablesMs =
+      assert msVarsTemplate;
+      "${prefix}_VARS.ms.fd";
     # This will test the EFI firmware for the host platform as part of the NixOS Tests setup.
     tests.basic-systemd-boot = nixosTests.systemd-boot.basic;
     tests.secureBoot-systemd-boot = nixosTests.systemd-boot.secureBoot;
@@ -190,7 +205,7 @@ edk2.mkDerivation projectDscPath (finalAttrs: {
     homepage = "https://github.com/tianocore/tianocore.github.io/wiki/OVMF";
     license = lib.licenses.bsd2;
     platforms = metaPlatforms;
-    maintainers = with lib.maintainers; [ adamcstephens raitobezarius ];
-    broken = stdenv.isDarwin;
+    maintainers = with lib.maintainers; [ adamcstephens raitobezarius mjoerg ];
+    broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
   };
 })
diff --git a/pkgs/applications/virtualization/arion/default.nix b/pkgs/applications/virtualization/arion/default.nix
index 716a94a05d8e4..e5ab20cf1937a 100644
--- a/pkgs/applications/virtualization/arion/default.nix
+++ b/pkgs/applications/virtualization/arion/default.nix
@@ -54,7 +54,7 @@ let
       mv $out/bin/arion $out/libexec
       makeWrapper $out/libexec/arion $out/bin/arion \
         --unset PYTHONPATH \
-        --prefix PATH : ${lib.makeBinPath [ pkgs.docker-compose_1 ]} \
+        --prefix PATH : ${lib.makeBinPath [ pkgs.docker-compose ]} \
         ;
     '';
   };
diff --git a/pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock b/pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock
index 302b760135471..dbb3ee5a6b796 100644
--- a/pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock
+++ b/pkgs/applications/virtualization/cloud-hypervisor/Cargo.lock
@@ -12,9 +12,9 @@ dependencies = [
 
 [[package]]
 name = "addr2line"
-version = "0.21.0"
+version = "0.22.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
 dependencies = [
  "gimli",
 ]
@@ -36,23 +36,24 @@ dependencies = [
 
 [[package]]
 name = "anstream"
-version = "0.6.13"
+version = "0.6.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb"
+checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b"
 dependencies = [
  "anstyle",
  "anstyle-parse",
  "anstyle-query",
  "anstyle-wincon",
  "colorchoice",
+ "is_terminal_polyfill",
  "utf8parse",
 ]
 
 [[package]]
 name = "anstyle"
-version = "1.0.6"
+version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc"
+checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b"
 
 [[package]]
 name = "anstyle-parse"
@@ -74,9 +75,9 @@ dependencies = [
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.3"
+version = "3.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19"
+checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8"
 dependencies = [
  "anstyle",
  "windows-sys 0.52.0",
@@ -84,9 +85,9 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.81"
+version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
 
 [[package]]
 name = "api_client"
@@ -136,9 +137,9 @@ dependencies = [
 
 [[package]]
 name = "async-channel"
-version = "2.2.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3"
+checksum = "9f2776ead772134d55b62dd45e59a79e21612d85d0af729b8b7d3967d601a62a"
 dependencies = [
  "concurrent-queue",
  "event-listener 5.3.0",
@@ -281,9 +282,9 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
 
 [[package]]
 name = "backtrace"
-version = "0.3.71"
+version = "0.3.73"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d"
+checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
 dependencies = [
  "addr2line",
  "cc",
@@ -296,9 +297,9 @@ dependencies = [
 
 [[package]]
 name = "bitfield-struct"
-version = "0.5.6"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26b8cea8bb6a81b75a84603b9e096f05fa86db057904ef29be1deee900532bd"
+checksum = "6c2ce686adbebce0ee484a502c440b4657739adbad65eadf06d64f5816ee9765"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -313,9 +314,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bitflags"
-version = "2.5.0"
+version = "2.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
 
 [[package]]
 name = "block"
@@ -362,9 +363,9 @@ dependencies = [
 
 [[package]]
 name = "bumpalo"
-version = "3.15.4"
+version = "3.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
 
 [[package]]
 name = "byteorder"
@@ -420,7 +421,7 @@ checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce"
 
 [[package]]
 name = "cloud-hypervisor"
-version = "40.0.0"
+version = "41.0.0"
 dependencies = [
  "anyhow",
  "api_client",
@@ -451,9 +452,9 @@ dependencies = [
 
 [[package]]
 name = "colorchoice"
-version = "1.0.0"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
+checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0"
 
 [[package]]
 name = "concurrent-queue"
@@ -509,9 +510,9 @@ dependencies = [
 
 [[package]]
 name = "darling"
-version = "0.20.9"
+version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83b2eb4d90d12bdda5ed17de686c2acb4c57914f8f921b8da7e112b5a36f3fe1"
+checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
 dependencies = [
  "darling_core",
  "darling_macro",
@@ -519,9 +520,9 @@ dependencies = [
 
 [[package]]
 name = "darling_core"
-version = "0.20.9"
+version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "622687fe0bac72a04e5599029151f5796111b90f1baaa9b544d807a5e31cd120"
+checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
 dependencies = [
  "fnv",
  "ident_case",
@@ -533,9 +534,9 @@ dependencies = [
 
 [[package]]
 name = "darling_macro"
-version = "0.20.9"
+version = "0.20.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "733cabb43482b1a1b53eee8583c2b9e8684d592215ea83efd305dd31bc2f0178"
+checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
 dependencies = [
  "darling_core",
  "quote",
@@ -566,12 +567,13 @@ dependencies = [
  "acpi_tables",
  "anyhow",
  "arch",
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "byteorder",
  "event_monitor",
  "hypervisor",
  "libc",
  "log",
+ "num_enum",
  "pci",
  "serde",
  "thiserror",
@@ -638,9 +640,9 @@ checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
 
 [[package]]
 name = "enumflags2"
-version = "0.7.9"
+version = "0.7.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3278c9d5fb675e0a51dabcf4c0d355f692b064171535ba72361be1528a9d8e8d"
+checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
 dependencies = [
  "enumflags2_derive",
  "serde",
@@ -648,9 +650,9 @@ dependencies = [
 
 [[package]]
 name = "enumflags2_derive"
-version = "0.7.9"
+version = "0.7.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c785274071b1b420972453b306eeca06acf4633829db4223b58a2a8c5953bc4"
+checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -686,7 +688,7 @@ version = "4.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "74351c3392ea1ff6cd2628e0042d268ac2371cb613252ff383b6dfa50d22fa79"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "libc",
 ]
 
@@ -698,9 +700,9 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
 [[package]]
 name = "errno"
-version = "0.3.8"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
 dependencies = [
  "libc",
  "windows-sys 0.52.0",
@@ -897,7 +899,7 @@ version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6341b3480afbb34eaefc7f92713bc92f2d83e338aaa1c44192f9c2956f4a4903"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "cfg-if",
  "log",
  "managed",
@@ -940,9 +942,9 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.28.1"
+version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
 
 [[package]]
 name = "glob"
@@ -1015,9 +1017,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
 
 [[package]]
 name = "igvm"
-version = "0.3.1"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bc8970c7e36437c52af3b3ef1acaa5e334c2a95cd8ee9639d574830f48af17e"
+checksum = "7984b10433b50e06a06bd50c69bca4888a5d7de8975f64ea4c2a7687eb99b09d"
 dependencies = [
  "bitfield-struct",
  "crc32fast",
@@ -1032,9 +1034,9 @@ dependencies = [
 
 [[package]]
 name = "igvm_defs"
-version = "0.3.1"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c4942827cef415726296f6d62411afdb13c1b1924125f3222988f04bef33ad2"
+checksum = "b64ec5588c475372ae830475d3ee9a7bd255407dcb9f03faf6d493556eb6105a"
 dependencies = [
  "bitfield-struct",
  "open-enum",
@@ -1081,6 +1083,12 @@ dependencies = [
 ]
 
 [[package]]
+name = "is_terminal_polyfill"
+version = "1.70.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800"
+
+[[package]]
 name = "itoa"
 version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1112,13 +1120,24 @@ version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bedae2ca4a531bebe311abaf9691f5cc14eaa21475243caa2e39c43bb872947d"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "kvm-bindings",
  "libc",
  "vmm-sys-util",
 ]
 
 [[package]]
+name = "landlock"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dafb8a4afee64f167eb2b52d32f0eea002e41a7a6450e68c799c8ec3a81a634c"
+dependencies = [
+ "enumflags2",
+ "libc",
+ "thiserror",
+]
+
+[[package]]
 name = "lazy_static"
 version = "1.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1126,9 +1145,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
 
 [[package]]
 name = "libc"
-version = "0.2.153"
+version = "0.2.155"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
 
 [[package]]
 name = "libredox"
@@ -1136,7 +1155,7 @@ version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "libc",
 ]
 
@@ -1156,9 +1175,9 @@ dependencies = [
 
 [[package]]
 name = "libz-sys"
-version = "1.1.16"
+version = "1.1.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e143b5e666b2695d28f6bca6497720813f699c9602dd7f5cac91008b8ada7f9"
+checksum = "c15da26e5af7e25c90b37a2d75cdbf940cf4a55316de9d84c679c9b8bfabf82e"
 dependencies = [
  "cc",
  "libc",
@@ -1193,9 +1212,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.21"
+version = "0.4.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
 
 [[package]]
 name = "managed"
@@ -1311,7 +1330,7 @@ version = "0.28.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "cfg-if",
  "cfg_aliases",
  "libc",
@@ -1335,19 +1354,20 @@ dependencies = [
 
 [[package]]
 name = "num_enum"
-version = "0.7.2"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
+checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
 dependencies = [
  "num_enum_derive",
 ]
 
 [[package]]
 name = "num_enum_derive"
-version = "0.7.2"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
+checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
 dependencies = [
+ "proc-macro-crate",
  "proc-macro2",
  "quote",
  "syn 2.0.66",
@@ -1355,9 +1375,9 @@ dependencies = [
 
 [[package]]
 name = "object"
-version = "0.32.2"
+version = "0.36.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
+checksum = "081b846d1d56ddfc18fdf1a922e4f6e07a11768ea1b92dec44e42b72712ccfce"
 dependencies = [
  "memchr",
 ]
@@ -1370,29 +1390,29 @@ checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 
 [[package]]
 name = "open-enum"
-version = "0.4.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba485b94b3e73fa752d98cfcab74647a4a537269682cc1ee5256aa020432506d"
+checksum = "2eb2508143a400b3361812094d987dd5adc81f0f5294a46491be648d6c94cab5"
 dependencies = [
  "open-enum-derive",
 ]
 
 [[package]]
 name = "open-enum-derive"
-version = "0.4.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fed1c261430059cab8b2b51eec42a3c15750439ec6c013cd8fe41d4a450de776"
+checksum = "8d1296fab5231654a5aec8bf9e87ba4e3938c502fc4c3c0425a00084c78944be"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.66",
 ]
 
 [[package]]
 name = "openssl-src"
-version = "300.2.3+3.2.1"
+version = "300.3.1+3.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843"
+checksum = "7259953d42a81bf137fbbd73bd30a8e1914d6dce43c2b90ed575783a22608b91"
 dependencies = [
  "cc",
 ]
@@ -1486,9 +1506,9 @@ dependencies = [
 
 [[package]]
 name = "paste"
-version = "1.0.14"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
 
 [[package]]
 name = "pci"
@@ -1538,9 +1558,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
 name = "piper"
-version = "0.2.1"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+checksum = "ae1d5c74c9876f070d3e8fd503d748c7d974c3e48da8f41350fa5222ef9b4391"
 dependencies = [
  "atomic-waker",
  "fastrand",
@@ -1555,9 +1575,9 @@ checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
 
 [[package]]
 name = "pnet"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "130c5b738eeda2dc5796fe2671e49027e6935e817ab51b930a36ec9e6a206a64"
+checksum = "682396b533413cc2e009fbb48aadf93619a149d3e57defba19ff50ce0201bd0d"
 dependencies = [
  "ipnetwork",
  "pnet_base",
@@ -1569,18 +1589,18 @@ dependencies = [
 
 [[package]]
 name = "pnet_base"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe4cf6fb3ab38b68d01ab2aea03ed3d1132b4868fa4e06285f29f16da01c5f4c"
+checksum = "ffc190d4067df16af3aba49b3b74c469e611cad6314676eaf1157f31aa0fb2f7"
 dependencies = [
  "no-std-net",
 ]
 
 [[package]]
 name = "pnet_datalink"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad5854abf0067ebbd3967f7d45ebc8976ff577ff0c7bd101c4973ae3c70f98fe"
+checksum = "e79e70ec0be163102a332e1d2d5586d362ad76b01cec86f830241f2b6452a7b7"
 dependencies = [
  "ipnetwork",
  "libc",
@@ -1591,9 +1611,9 @@ dependencies = [
 
 [[package]]
 name = "pnet_macros"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "688b17499eee04a0408aca0aa5cba5fc86401d7216de8a63fdf7a4c227871804"
+checksum = "13325ac86ee1a80a480b0bc8e3d30c25d133616112bb16e86f712dcf8a71c863"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1603,18 +1623,18 @@ dependencies = [
 
 [[package]]
 name = "pnet_macros_support"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eea925b72f4bd37f8eab0f221bbe4c78b63498350c983ffa9dd4bcde7e030f56"
+checksum = "eed67a952585d509dd0003049b1fc56b982ac665c8299b124b90ea2bdb3134ab"
 dependencies = [
  "pnet_base",
 ]
 
 [[package]]
 name = "pnet_packet"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9a005825396b7fe7a38a8e288dbc342d5034dac80c15212436424fef8ea90ba"
+checksum = "4c96ebadfab635fcc23036ba30a7d33a80c39e8461b8bd7dc7bb186acb96560f"
 dependencies = [
  "glob",
  "pnet_base",
@@ -1624,9 +1644,9 @@ dependencies = [
 
 [[package]]
 name = "pnet_sys"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "417c0becd1b573f6d544f73671070b039051e5ad819cc64aa96377b536128d00"
+checksum = "7d4643d3d4db6b08741050c2f3afa9a892c4244c085a72fcda93c9c2c9a00f4b"
 dependencies = [
  "libc",
  "winapi",
@@ -1634,9 +1654,9 @@ dependencies = [
 
 [[package]]
 name = "pnet_transport"
-version = "0.34.0"
+version = "0.35.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2637e14d7de974ee2f74393afccbc8704f3e54e6eb31488715e72481d1662cc3"
+checksum = "5f604d98bc2a6591cf719b58d3203fd882bdd6bf1db696c4ac97978e9f4776bf"
 dependencies = [
  "libc",
  "pnet_base",
@@ -1661,9 +1681,12 @@ dependencies = [
 
 [[package]]
 name = "ppv-lite86"
-version = "0.2.17"
+version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
+dependencies = [
+ "zerocopy",
+]
 
 [[package]]
 name = "proc-macro-crate"
@@ -1770,9 +1793,9 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.10.4"
+version = "1.10.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c"
+checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -1799,9 +1822,9 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
 
 [[package]]
 name = "remain"
-version = "0.2.13"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ad9f2390298a947ee0aa6073d440e221c0726188cfbcdf9604addb6ee393eb4a"
+checksum = "46aef80f842736de545ada6ec65b81ee91504efd6853f4b96de7414c42ae7443"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -1826,7 +1849,7 @@ version = "0.38.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "errno",
  "libc",
  "linux-raw-sys",
@@ -1876,9 +1899,9 @@ dependencies = [
 
 [[package]]
 name = "serde_json"
-version = "1.0.115"
+version = "1.0.120"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd"
+checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
 dependencies = [
  "itoa",
  "ryu",
@@ -1898,9 +1921,9 @@ dependencies = [
 
 [[package]]
 name = "serde_with"
-version = "3.7.0"
+version = "3.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ee80b0e361bbf88fd2f6e242ccd19cfda072cb0faa6ae694ecee08199938569a"
+checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857"
 dependencies = [
  "serde",
  "serde_derive",
@@ -1909,9 +1932,9 @@ dependencies = [
 
 [[package]]
 name = "serde_with_macros"
-version = "3.7.0"
+version = "3.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6561dc161a9224638a31d876ccdfefbc1df91d3f3a8342eddb35f055d48c7655"
+checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350"
 dependencies = [
  "darling",
  "proc-macro2",
@@ -1946,9 +1969,9 @@ dependencies = [
 
 [[package]]
 name = "signal-hook-registry"
-version = "1.4.1"
+version = "1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
 dependencies = [
  "libc",
 ]
@@ -2062,18 +2085,18 @@ dependencies = [
 
 [[package]]
 name = "thiserror"
-version = "1.0.61"
+version = "1.0.62"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709"
+checksum = "f2675633b1499176c2dff06b0856a27976a8f9d436737b4cf4f312d4d91d8bbb"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.61"
+version = "1.0.62"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533"
+checksum = "d20468752b09f49e909e55a5d338caa8bedf615594e9d80bc4c565d30faf798c"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2257,7 +2280,7 @@ version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6be08d1166d41a78861ad50212ab3f9eca0729c349ac3a7a8f557c62406b87cc"
 dependencies = [
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "libc",
  "vm-memory",
  "vmm-sys-util",
@@ -2433,7 +2456,7 @@ dependencies = [
  "anyhow",
  "arc-swap",
  "arch",
- "bitflags 2.5.0",
+ "bitflags 2.6.0",
  "block",
  "blocking",
  "cfg-if",
@@ -2450,6 +2473,7 @@ dependencies = [
  "hypervisor",
  "igvm",
  "igvm_defs",
+ "landlock",
  "libc",
  "linux-loader",
  "log",
@@ -2803,9 +2827,9 @@ dependencies = [
 
 [[package]]
 name = "zerocopy"
-version = "0.7.32"
+version = "0.7.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
 dependencies = [
  "byteorder",
  "zerocopy-derive",
@@ -2813,9 +2837,9 @@ dependencies = [
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.7.32"
+version = "0.7.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2824,9 +2848,9 @@ dependencies = [
 
 [[package]]
 name = "zvariant"
-version = "4.1.1"
+version = "4.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9aa6d31a02fbfb602bfde791de7fedeb9c2c18115b3d00f3a36e489f46ffbbc7"
+checksum = "1724a2b330760dc7d2a8402d841119dc869ef120b139d29862d6980e9c75bfc9"
 dependencies = [
  "endi",
  "enumflags2",
@@ -2837,9 +2861,9 @@ dependencies = [
 
 [[package]]
 name = "zvariant_derive"
-version = "4.1.1"
+version = "4.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "642bf1b6b6d527988b3e8193d20969d53700a36eac734d21ae6639db168701c8"
+checksum = "55025a7a518ad14518fb243559c058a2e5b848b015e31f1d90414f36e3317859"
 dependencies = [
  "proc-macro-crate",
  "proc-macro2",
diff --git a/pkgs/applications/virtualization/cloud-hypervisor/default.nix b/pkgs/applications/virtualization/cloud-hypervisor/default.nix
index c208ec8f92d9c..9af9b964825f1 100644
--- a/pkgs/applications/virtualization/cloud-hypervisor/default.nix
+++ b/pkgs/applications/virtualization/cloud-hypervisor/default.nix
@@ -1,14 +1,16 @@
-{ lib, stdenv, fetchFromGitHub, rustPlatform, pkg-config, dtc, openssl }:
+{ lib, stdenv, fetchFromGitHub, fetchpatch
+, rustPlatform, pkg-config, dtc, openssl
+}:
 
 rustPlatform.buildRustPackage rec {
   pname = "cloud-hypervisor";
-  version = "40.0";
+  version = "41.0";
 
   src = fetchFromGitHub {
     owner = "cloud-hypervisor";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-zrMJGdbOukNbzmcTuIcHlwAbJvTzhz53dc4TO/Fplb4=";
+    hash = "sha256-CI7hWRZUexvmBZJ8cPXxZxwmcxLnw6h9PFMhoaj9jh4=";
   };
 
   cargoLock = {
@@ -26,7 +28,8 @@ rustPlatform.buildRustPackage rec {
   separateDebugInfo = true;
 
   nativeBuildInputs = [ pkg-config ];
-  buildInputs = [ openssl ] ++ lib.optional stdenv.isAarch64 dtc;
+  buildInputs = lib.optional stdenv.hostPlatform.isAarch64 dtc;
+  checkInputs = [ openssl ];
 
   OPENSSL_NO_VENDOR = true;
 
diff --git a/pkgs/applications/virtualization/colima/default.nix b/pkgs/applications/virtualization/colima/default.nix
index b3b981079d843..290186a59e3eb 100644
--- a/pkgs/applications/virtualization/colima/default.nix
+++ b/pkgs/applications/virtualization/colima/default.nix
@@ -12,18 +12,18 @@
 , colima
   # use lima-bin on darwin to support native macOS virtualization
   # https://github.com/NixOS/nixpkgs/pull/209171
-, lima-drv ? if stdenv.isDarwin then lima-bin else lima
+, lima-drv ? if stdenv.hostPlatform.isDarwin then lima-bin else lima
 }:
 
 buildGoModule rec {
   pname = "colima";
-  version = "0.6.9";
+  version = "0.7.5";
 
   src = fetchFromGitHub {
     owner = "abiosoft";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-7kaZ55Uhvx8V75IgURD03fLoAd/O/+2h/7tv9XiqnX4=";
+    hash = "sha256-WInmoTUaEm2kQ7esZgPj3YIHmHbBrlBTWcLPC9/2MdY=";
     # We need the git revision
     leaveDotGit = true;
     postFetch = ''
@@ -33,9 +33,9 @@ buildGoModule rec {
   };
 
   nativeBuildInputs = [ installShellFiles makeWrapper ]
-    ++ lib.optionals stdenv.isDarwin [ darwin.DarwinTools ];
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ darwin.DarwinTools ];
 
-  vendorHash = "sha256-FPcz109zQBHaS/bIl78rVeiEluR1PhrJhgs21Ex6qEg=";
+  vendorHash = "sha256-niuBo2YUUYKH0eSApOByNLrcHqr9m5VKGoiGp1fKklg=";
 
   # disable flaky Test_extractZones
   # https://hydra.nixos.org/build/212378003/log
diff --git a/pkgs/applications/virtualization/conmon-rs/default.nix b/pkgs/applications/virtualization/conmon-rs/default.nix
index efb463580e0ee..a68f48ebaa404 100644
--- a/pkgs/applications/virtualization/conmon-rs/default.nix
+++ b/pkgs/applications/virtualization/conmon-rs/default.nix
@@ -7,19 +7,19 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "conmon-rs";
-  version = "0.6.3";
+  version = "0.6.6";
 
   src = fetchFromGitHub {
     owner = "containers";
     repo = pname;
     rev = "v${version}";
-    hash = "sha256-+RKjJtI01Y56+cFDdOSAL4BodI7R/rM3B3ht3p6+xzs=";
+    hash = "sha256-1kGAUAmiPI9zE8LE7G2r0Gy0YM+BUy2MxY7IQOu2ZDQ=";
   };
 
   nativeBuildInputs = [ capnproto protobuf ];
   doCheck = false;
 
-  cargoHash = "sha256-4VOse+y0EO9IORyeAO/j1t6ssQARJp7lK21TUJVuH78=";
+  cargoVendorDir = ".cargo-vendor";
 
   meta = with lib; {
     description = "OCI container runtime monitor written in Rust";
diff --git a/pkgs/applications/virtualization/containerd/default.nix b/pkgs/applications/virtualization/containerd/default.nix
index acb652e33cb77..3b9dcf0bfad4e 100644
--- a/pkgs/applications/virtualization/containerd/default.nix
+++ b/pkgs/applications/virtualization/containerd/default.nix
@@ -11,13 +11,13 @@
 
 buildGoModule rec {
   pname = "containerd";
-  version = "1.7.18";
+  version = "1.7.22";
 
   src = fetchFromGitHub {
     owner = "containerd";
     repo = "containerd";
     rev = "v${version}";
-    hash = "sha256-IlK5IwniaBhqMgxQzV8btQcbdJkNEQeUMoh6aOsBOHQ=";
+    hash = "sha256-8IHBKai4PvvTuHPDTgx9wFEBzz4MM7Mwo8Q/bzFRzfk=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/virtualization/cri-o/default.nix b/pkgs/applications/virtualization/cri-o/default.nix
index 00f17d75d6e59..0524e0d699900 100644
--- a/pkgs/applications/virtualization/cri-o/default.nix
+++ b/pkgs/applications/virtualization/cri-o/default.nix
@@ -15,13 +15,13 @@
 
 buildGoModule rec {
   pname = "cri-o";
-  version = "1.30.2";
+  version = "1.31.0";
 
   src = fetchFromGitHub {
     owner = "cri-o";
     repo = "cri-o";
     rev = "v${version}";
-    hash = "sha256-4v7Pt3WS68h+Un4QNATyQ/o/+8b8nVoNsy6VgwB9Brc=";
+    hash = "sha256-pY8FRxexf/WG+aGkKZc4EtqO9uxAV7D6EFWirgSEye8=";
   };
   vendorHash = null;
 
diff --git a/pkgs/applications/virtualization/crosvm/default.nix b/pkgs/applications/virtualization/crosvm/default.nix
index 40d940a6904d6..96e457b407246 100644
--- a/pkgs/applications/virtualization/crosvm/default.nix
+++ b/pkgs/applications/virtualization/crosvm/default.nix
@@ -1,22 +1,23 @@
 { lib, rustPlatform, fetchgit
 , pkg-config, protobuf, python3, wayland-scanner
 , libcap, libdrm, libepoxy, minijail, virglrenderer, wayland, wayland-protocols
+, pkgsCross
 }:
 
 rustPlatform.buildRustPackage rec {
   pname = "crosvm";
-  version = "125.0";
+  version = "127.0";
 
   src = fetchgit {
     url = "https://chromium.googlesource.com/chromiumos/platform/crosvm";
-    rev = "6a7ff1ecb7fad6820d3bbfe8b11e65854059aba5";
-    hash = "sha256-y/vHU8i9YNbzSHla853z/2w914mVMFOryyaHE1uxlvM=";
+    rev = "8fdfed12c960850e9d5e809cfd2a40ce3bdd98d6";
+    hash = "sha256-W0zLYM91xoq9vURgYs2noc9F9RtvoXztIIHMx0HVK5g=";
     fetchSubmodules = true;
   };
 
   separateDebugInfo = true;
 
-  cargoHash = "sha256-1AUfd9dhIZvVVUsVbnGoLKc0lBfccwM4wqWgU4yZWOE=";
+  cargoHash = "sha256-nEJBRlwMqTahaIC9WdtoxGLVfc+U9sJ0ilzLhavcbD0=";
 
   nativeBuildInputs = [
     pkg-config protobuf python3 rustPlatform.bindgenHook wayland-scanner
@@ -35,7 +36,12 @@ rustPlatform.buildRustPackage rec {
 
   buildFeatures = [ "virgl_renderer" ];
 
-  passthru.updateScript = ./update.py;
+  passthru = {
+    updateScript = ./update.py;
+    tests = {
+      musl = pkgsCross.musl64.crosvm;
+    };
+  };
 
   meta = with lib; {
     description = "Secure virtual machine monitor for KVM";
diff --git a/pkgs/applications/virtualization/crun/default.nix b/pkgs/applications/virtualization/crun/default.nix
index 18d5909fbcc86..5dca484e5e9ea 100644
--- a/pkgs/applications/virtualization/crun/default.nix
+++ b/pkgs/applications/virtualization/crun/default.nix
@@ -39,13 +39,13 @@ let
 in
 stdenv.mkDerivation rec {
   pname = "crun";
-  version = "1.15";
+  version = "1.17";
 
   src = fetchFromGitHub {
     owner = "containers";
     repo = pname;
     rev = version;
-    hash = "sha256-ZLkpwNxhTssp5RZ041+/mveq7Sct8fVzsdt8X319V1Q=";
+    hash = "sha256-d2YBpW8KivWYPRPpvXlT5tWPX8hvTCaSkMxdSuswYRA=";
     fetchSubmodules = true;
   };
 
diff --git a/pkgs/applications/virtualization/ddev/default.nix b/pkgs/applications/virtualization/ddev/default.nix
index 549022d9908c2..95aacbeb63865 100644
--- a/pkgs/applications/virtualization/ddev/default.nix
+++ b/pkgs/applications/virtualization/ddev/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "ddev";
-  version = "1.23.2";
+  version = "1.23.4";
 
   src = fetchFromGitHub {
     owner = "ddev";
     repo = "ddev";
     rev = "v${version}";
-    hash = "sha256-pzBSyCIA2r/4zYIYEmKF6c0gryudSKZebSXSpmJUbsQ=";
+    hash = "sha256-+Ou9YbFwUVu6AqR041ngnVb9TpiO1UMph2w1zsbEMEM=";
   };
 
   vendorHash = null;
@@ -38,6 +38,6 @@ buildGoModule rec {
     license = licenses.asl20;
     platforms = platforms.unix;
     mainProgram = "ddev";
-    maintainers = with maintainers; [ ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/applications/virtualization/docker/buildx.nix b/pkgs/applications/virtualization/docker/buildx.nix
index 609b0e97deb05..57ce036eb4956 100644
--- a/pkgs/applications/virtualization/docker/buildx.nix
+++ b/pkgs/applications/virtualization/docker/buildx.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "docker-buildx";
-  version = "0.14.1";
+  version = "0.17.1";
 
   src = fetchFromGitHub {
     owner = "docker";
     repo = "buildx";
     rev = "v${version}";
-    hash = "sha256-IseiGF+tQWv7Z2jlCINuWH2Gzcdow2qazvYVFBGyQPU=";
+    hash = "sha256-+d0yaosNoOOuo/A7aC6pfy2xGJU718nBBNMMok2Ofv0=";
   };
 
   doCheck = false;
diff --git a/pkgs/applications/virtualization/docker/compose.nix b/pkgs/applications/virtualization/docker/compose.nix
index e5ce653f8b137..45099329c2e62 100644
--- a/pkgs/applications/virtualization/docker/compose.nix
+++ b/pkgs/applications/virtualization/docker/compose.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "docker-compose";
-  version = "2.27.2";
+  version = "2.29.7";
 
   src = fetchFromGitHub {
     owner = "docker";
     repo = "compose";
     rev = "v${version}";
-    hash = "sha256-QwTn/oAfB1bJkPcI0oDGC4vp0xUQxjhF8+jZ+hqpr5Q=";
+    hash = "sha256-6ksZAGVAFnLwPnCXlCtp4cWfxzJRp/bfVkpvp3Z6fiQ=";
   };
 
   postPatch = ''
@@ -16,7 +16,7 @@ buildGoModule rec {
     rm -rf e2e/
   '';
 
-  vendorHash = "sha256-KczMkSwYP9Ng1dYUU7+ig2VRUEOPkaWTV77c9xGqbw0=";
+  vendorHash = "sha256-B2ywdZjp7h7eFYNJ4wXmAdbOxc8ftGqHnLmDvzQASJE=";
 
   ldflags = [ "-X github.com/docker/compose/v2/internal.Version=${version}" "-s" "-w" ];
 
@@ -35,6 +35,6 @@ buildGoModule rec {
     mainProgram = "docker-compose";
     homepage = "https://github.com/docker/compose";
     license = licenses.asl20;
-    maintainers = with maintainers; [ ];
+    maintainers = [ ];
   };
 }
diff --git a/pkgs/applications/virtualization/docker/compose_1.nix b/pkgs/applications/virtualization/docker/compose_1.nix
deleted file mode 100644
index ac5d726439ce1..0000000000000
--- a/pkgs/applications/virtualization/docker/compose_1.nix
+++ /dev/null
@@ -1,47 +0,0 @@
-{ lib, buildPythonApplication, fetchPypi
-, installShellFiles
-, mock, pytest, nose
-, pyyaml, colorama, docopt
-, dockerpty, docker, jsonschema, requests
-, six, texttable, websocket-client, cached-property
-, paramiko, distro, python-dotenv
-}:
-
-buildPythonApplication rec {
-  version = "1.29.2";
-  pname = "docker-compose";
-
-  src = fetchPypi {
-    inherit pname version;
-    hash = "sha256-TIzZ0h0jdBJ5PRi9MxEASe6a+Nqz/iwhO70HM5WbCbc=";
-  };
-
-  # lots of networking and other fails
-  doCheck = false;
-  nativeBuildInputs = [ installShellFiles ];
-  nativeCheckInputs = [ mock pytest nose ];
-  propagatedBuildInputs = [
-    pyyaml colorama dockerpty docker
-    jsonschema requests six texttable websocket-client
-    docopt cached-property paramiko distro python-dotenv
-  ];
-
-  postPatch = ''
-    # Remove upper bound on requires, see also
-    # https://github.com/docker/compose/issues/4431
-    sed -i "s/, < .*',$/',/" setup.py
-  '';
-
-  postInstall = ''
-    installShellCompletion --bash contrib/completion/bash/docker-compose
-    installShellCompletion --zsh contrib/completion/zsh/_docker-compose
-  '';
-
-  meta = with lib; {
-    homepage = "https://docs.docker.com/compose/";
-    description = "Multi-container orchestration for Docker";
-    mainProgram = "docker-compose";
-    license = licenses.asl20;
-    maintainers = with maintainers; [ Frostman ];
-  };
-}
diff --git a/pkgs/applications/virtualization/docker/default.nix b/pkgs/applications/virtualization/docker/default.nix
index 3d096c3389f9d..928480e6c4f69 100644
--- a/pkgs/applications/virtualization/docker/default.nix
+++ b/pkgs/applications/virtualization/docker/default.nix
@@ -16,11 +16,12 @@ rec {
       , sqlite, iproute2, docker-buildx, docker-compose, docker-sbom
       , iptables, e2fsprogs, xz, util-linux, xfsprogs, git
       , procps, rootlesskit, slirp4netns, fuse-overlayfs, nixosTests
-      , clientOnly ? !stdenv.isLinux, symlinkJoin
+      , clientOnly ? !stdenv.hostPlatform.isLinux, symlinkJoin
       , withSystemd ? lib.meta.availableOn stdenv.hostPlatform systemd, systemd
-      , withBtrfs ? stdenv.isLinux, btrfs-progs
-      , withLvm ? stdenv.isLinux, lvm2
-      , withSeccomp ? stdenv.isLinux, libseccomp
+      , withBtrfs ? stdenv.hostPlatform.isLinux, btrfs-progs
+      , withLvm ? stdenv.hostPlatform.isLinux, lvm2
+      , withSeccomp ? stdenv.hostPlatform.isLinux, libseccomp
+      , knownVulnerabilities ? []
     }:
   let
     docker-runc = runc.overrideAttrs {
@@ -79,7 +80,7 @@ rec {
       hash = mobyHash;
     };
 
-    moby = buildGoModule (lib.optionalAttrs stdenv.isLinux rec {
+    moby = buildGoModule (lib.optionalAttrs stdenv.hostPlatform.isLinux rec {
       pname = "moby";
       inherit version;
 
@@ -94,9 +95,9 @@ rec {
         ++ lib.optional withSystemd systemd
         ++ lib.optional withSeccomp libseccomp;
 
-      extraPath = lib.optionals stdenv.isLinux (lib.makeBinPath [ iproute2 iptables e2fsprogs xz xfsprogs procps util-linux git ]);
+      extraPath = lib.optionals stdenv.hostPlatform.isLinux (lib.makeBinPath [ iproute2 iptables e2fsprogs xz xfsprogs procps util-linux git ]);
 
-      extraUserPath = lib.optionals (stdenv.isLinux && !clientOnly) (lib.makeBinPath [ rootlesskit slirp4netns fuse-overlayfs ]);
+      extraUserPath = lib.optionals (stdenv.hostPlatform.isLinux && !clientOnly) (lib.makeBinPath [ rootlesskit slirp4netns fuse-overlayfs ]);
 
       patches = lib.optionals (lib.versionOlder version "23") [
         # This patch incorporates code from a PR fixing using buildkit with the ZFS graph driver.
@@ -187,7 +188,7 @@ rec {
       makeWrapper pkg-config go-md2man go libtool installShellFiles
     ];
 
-    buildInputs = plugins ++ lib.optionals (lib.versionAtLeast version "23" && stdenv.isLinux) [
+    buildInputs = plugins ++ lib.optionals (lib.versionAtLeast version "23" && stdenv.hostPlatform.isLinux) [
       glibc
       glibc.static
     ];
@@ -267,6 +268,7 @@ rec {
       license = licenses.asl20;
       maintainers = with maintainers; [ offline vdemeester periklis teutat3s ];
       mainProgram = "docker";
+      inherit knownVulnerabilities;
     };
   });
 
@@ -284,32 +286,52 @@ rec {
     containerdHash = "sha256-y3CYDZbA2QjIn1vyq/p1F1pAVxQHi/0a6hGWZCRWzyk=";
     tiniRev = "v0.19.0";
     tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
+    knownVulnerabilities = [
+      "CVE-2024-23651"
+      "CVE-2024-23652"
+      "CVE-2024-23653"
+      "CVE-2024-41110"
+    ];
   };
 
   docker_25 = callPackage dockerGen rec {
-    version = "25.0.5";
+    version = "25.0.6";
     cliRev = "v${version}";
-    cliHash = "sha256-CACMi3bXUN6oGc2f/Z+lNQqMgQ4llRWPRKgijdpiPGg=";
+    cliHash = "sha256-7ZKjlONL5RXEJZrvssrL1PQMNANP0qTw4myGKdtd19U=";
     mobyRev = "v${version}";
-    mobyHash = "sha256-4QGz22fXxyAD77pyUWb2lF3VKqxmPIrGqcJGoyrEHew=";
+    mobyHash = "sha256-+zkhUMeVD3HNq8WrWQmLskq+HykvD5kzSACmf67YbJE=";
     runcRev = "v1.1.12";
     runcHash = "sha256-N77CU5XiGYIdwQNPFyluXjseTeaYuNJ//OsEUS0g/v0=";
-    containerdRev = "v1.7.13";
-    containerdHash = "sha256-y3CYDZbA2QjIn1vyq/p1F1pAVxQHi/0a6hGWZCRWzyk=";
+    containerdRev = "v1.7.20";
+    containerdHash = "sha256-Q9lTzz+G5PSoChy8MZtbOpO81AyNWXC+CgGkdOg14uY=";
     tiniRev = "v0.19.0";
     tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
   };
 
   docker_26 = callPackage dockerGen rec {
-    version = "26.1.4";
+    version = "26.1.5";
     cliRev = "v${version}";
-    cliHash = "sha256-7yCR49Un1i1kB+66IKt/8lgwKNkUjtVh52DH9OY8Pw4=";
+    cliHash = "sha256-UlN+Uc0YHhLyu14h5oDBXP4K9y2tYKPOIPTGZCe4PVY=";
     mobyRev = "v${version}";
-    mobyHash = "sha256-0WwlpUECvmNq6DBm7U7rjzYfGKF7pxsfs9+x5uVPV0k=";
+    mobyHash = "sha256-6Hx7GnA7P6HqDlnGoc+HpPHSl69XezwAEGbvWYUVQlE=";
     runcRev = "v1.1.12";
     runcHash = "sha256-N77CU5XiGYIdwQNPFyluXjseTeaYuNJ//OsEUS0g/v0=";
-    containerdRev = "v1.7.15";
-    containerdHash = "sha256-qLrPLGxsUmgEscrhyl+1rJ0k7c9ibKnpMpsJPD4xDZU=";
+    containerdRev = "v1.7.18";
+    containerdHash = "sha256-IlK5IwniaBhqMgxQzV8btQcbdJkNEQeUMoh6aOsBOHQ=";
+    tiniRev = "v0.19.0";
+    tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
+  };
+
+  docker_27 = callPackage dockerGen rec {
+    version = "27.3.0";
+    cliRev = "v${version}";
+    cliHash = "sha256-1z2MmWq+HD2fhpZqXu0G7oBL3Mc0NN/fR69aMWRelns=";
+    mobyRev = "v${version}";
+    mobyHash = "sha256-AKl06k2ePWOFhL3oH086HcLLYs2Da+wLOcGjGnQ0SXE=";
+    runcRev = "v1.1.14";
+    runcHash = "sha256-7PYbSZqCQLTaeFppuNz5mxDlwEyLkA5zpdMhWy1tWmc=";
+    containerdRev = "v1.7.22";
+    containerdHash = "sha256-8IHBKai4PvvTuHPDTgx9wFEBzz4MM7Mwo8Q/bzFRzfk=";
     tiniRev = "v0.19.0";
     tiniHash = "sha256-ZDKu/8yE5G0RYFJdhgmCdN3obJNyRWv6K/Gd17zc1sI=";
   };
diff --git a/pkgs/applications/virtualization/docker/gc.nix b/pkgs/applications/virtualization/docker/gc.nix
index 7d45427627fa9..29df4bfea3a55 100644
--- a/pkgs/applications/virtualization/docker/gc.nix
+++ b/pkgs/applications/virtualization/docker/gc.nix
@@ -1,7 +1,4 @@
 { stdenv, lib, fetchFromGitHub, makeWrapper, docker, coreutils, procps, gnused, findutils, gnugrep }:
-
-with lib;
-
 stdenv.mkDerivation rec {
   pname = "docker-gc";
   version = "unstable-2015-10-5";
@@ -23,7 +20,7 @@ stdenv.mkDerivation rec {
         --prefix PATH : "${lib.makeBinPath [ docker coreutils procps gnused findutils gnugrep ]}"
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Docker garbage collection of containers and images";
     mainProgram = "docker-gc";
     license = licenses.asl20;
diff --git a/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix b/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix
deleted file mode 100644
index c44f101ba9464..0000000000000
--- a/pkgs/applications/virtualization/driver/win-pvdrivers/default.nix
+++ /dev/null
@@ -1,74 +0,0 @@
-{ lib, stdenvNoCC, fetchurl }:
-
-let
-  # Upstream versioned download links are broken
-  # NOTE: the archive.org timestamp must be updated if the version changes.
-  # See https://xenproject.org/downloads/
-  files = [
-    {
-      url = "https://web.archive.org/web/20230817070451if_/https://xenbits.xenproject.org/pvdrivers/win/xenbus.tar";
-      hash = "sha256-sInkbVL/xkoUeZxgknLM3e2AXBVSqItF2Vpkon53Xec=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817070811if_/https://xenbits.xenproject.org/pvdrivers/win/xencons.tar";
-      hash = "sha256-r8bxH5B4y0V9qgALi42KtpZW05UOevv29AqqXaIXMBo=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817070811if_/https://xenbits.xenproject.org/pvdrivers/win/xenhid.tar";
-      hash = "sha256-e7ztzaXi/6irMus9IH0cfbW5HiKSaybXV1C/rd5mEfA=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817071133if_/https://xenbits.xenproject.org/pvdrivers/win/xeniface.tar";
-      hash = "sha256-qPM0TjcGR2luPtOSAfXJ22k6yhwJOmOP3ot6kopEFsI=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817071134if_/https://xenbits.xenproject.org/pvdrivers/win/xennet.tar";
-      hash = "sha256-Vg1wSfXjIVRd2iXCa19W4Jdaf2LTVin0yac/D70UjPM=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817070811if_/https://xenbits.xenproject.org/pvdrivers/win/xenvbd.tar";
-      hash = "sha256-nLNM0TWqsEWiQBCYxARMldvRecRUcY5DBF5DNAG4490=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817071225if_/https://xenbits.xenproject.org/pvdrivers/win/xenvif.tar";
-      hash = "sha256-R8G5vG6Q4g0/UkA2oxcc9/jaHZQYb+u64NShCNt7s7U=";
-    }
-    {
-      url = "https://web.archive.org/web/20230817071153if_/https://xenbits.xenproject.org/pvdrivers/win/xenvkbd.tar";
-      hash = "sha256-CaSxCKnT/KaZw8Ma60g2z+4lOOWIRisGRtzMveQqQmM=";
-    }
-  ];
-
-in
-stdenvNoCC.mkDerivation {
-  pname = "win-pvdrivers";
-  version = "unstable-2023-08-17";
-
-  srcs = map ({hash, url}: fetchurl {
-    inherit hash url;
-    # Wait & retry up to 3 times as archive.org can closes connection
-    # when an HTTP client makes too many requests
-    curlOpts = "--retry 3 --retry-delay 5";
-  }) files;
-
-
-  unpackPhase = ''
-    runHook preUnpack
-
-    for _src in $srcs; do
-      mkdir -p $out
-      tar xfv $_src -C $out
-    done
-
-    runHook postUnpack
-  '';
-
-  meta = with lib; {
-    description = "Xen Subproject: Windows PV Drivers";
-    homepage = "https://xenproject.org/developers/teams/windows-pv-drivers/";
-    license = licenses.bsd2;
-    maintainers = with maintainers; [ anthonyroussel ];
-    platforms = platforms.linux;
-    sourceProvenance = with sourceTypes; [ binaryNativeCode ];
-  };
-}
diff --git a/pkgs/applications/virtualization/ecs-agent/default.nix b/pkgs/applications/virtualization/ecs-agent/default.nix
index e5fe625cdf9f1..39c1ba4b7e2eb 100644
--- a/pkgs/applications/virtualization/ecs-agent/default.nix
+++ b/pkgs/applications/virtualization/ecs-agent/default.nix
@@ -2,13 +2,13 @@
 
 buildGoModule rec {
   pname = "amazon-ecs-agent";
-  version = "1.82.4";
+  version = "1.86.3";
 
   src = fetchFromGitHub {
     rev = "v${version}";
     owner = "aws";
     repo = pname;
-    hash = "sha256-bM/K3fxkeDwsXKsgZaEkurgYdSHnOgIQ2oUKc5atvZk=";
+    hash = "sha256-YygvAYoqbWVmtBgHNrP0Xp1zSgCv2PsnWARWyo3K8rM=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/virtualization/firecracker/default.nix b/pkgs/applications/virtualization/firecracker/default.nix
deleted file mode 100644
index fca5227177d46..0000000000000
--- a/pkgs/applications/virtualization/firecracker/default.nix
+++ /dev/null
@@ -1,59 +0,0 @@
-{ fetchurl, lib, stdenv }:
-
-let
-  version = "1.7.0";
-  # nixpkgs-update: no auto update
-
-  suffix = {
-    x86_64-linux = "x86_64";
-    aarch64-linux = "aarch64";
-  }."${stdenv.hostPlatform.system}" or (throw "Unsupported system: ${stdenv.hostPlatform.system}");
-
-  baseurl = "https://github.com/firecracker-microvm/firecracker/releases/download";
-
-  dlbin = sha256: fetchurl {
-    url = "${baseurl}/v${version}/firecracker-v${version}-${suffix}.tgz";
-    sha256 = sha256."${stdenv.hostPlatform.system}"or (throw "unsupported system ${stdenv.hostPlatform.system}");
-  };
-
-in
-stdenv.mkDerivation {
-  pname = "firecracker";
-  inherit version;
-
-  sourceRoot = ".";
-  src = dlbin {
-    x86_64-linux = "sha256-Vb0+bVmf3RCONuUvmu4jGfBsGKkPL6SbZOk/3wb1/1M=";
-    aarch64-linux = "sha256-PLoQA4a6qulxSns/ZRSgn6EtHr46/hstNhP1pAHt9VA=";
-  };
-
-  dontConfigure = true;
-
-  buildPhase = ''
-    mv release-v${version}-${suffix}/firecracker-v${version}-${suffix} firecracker
-    mv release-v${version}-${suffix}/jailer-v${version}-${suffix} jailer
-    chmod +x firecracker jailer
-  '';
-
-  doCheck = true;
-  checkPhase = ''
-    ./firecracker --version
-    ./jailer --version
-  '';
-
-  installPhase = ''
-    mkdir -p $out/bin
-    install -D firecracker $out/bin/firecracker
-    install -D jailer      $out/bin/jailer
-  '';
-
-  meta = with lib; {
-    description = "Secure, fast, minimal micro-container virtualization";
-    homepage = "http://firecracker-microvm.io";
-    changelog = "https://github.com/firecracker-microvm/firecracker/releases/tag/v${version}";
-    mainProgram = "firecracker";
-    license = licenses.asl20;
-    platforms = [ "x86_64-linux" "aarch64-linux" ];
-    maintainers = with maintainers; [ thoughtpolice qjoly ];
-  };
-}
diff --git a/pkgs/applications/virtualization/kraft/default.nix b/pkgs/applications/virtualization/kraft/default.nix
index 1e066477b721b..a20f44bc9d881 100644
--- a/pkgs/applications/virtualization/kraft/default.nix
+++ b/pkgs/applications/virtualization/kraft/default.nix
@@ -1,7 +1,6 @@
 { lib
 , buildGoModule
 , fetchFromGitHub
-, stdenv
 , nix-update-script
 }:
 
diff --git a/pkgs/applications/virtualization/krunvm/default.nix b/pkgs/applications/virtualization/krunvm/default.nix
index d6da5a2742f51..392ba594189ab 100644
--- a/pkgs/applications/virtualization/krunvm/default.nix
+++ b/pkgs/applications/virtualization/krunvm/default.nix
@@ -35,9 +35,9 @@ stdenv.mkDerivation rec {
     rustc
     asciidoctor
     makeWrapper
-  ] ++ lib.optionals stdenv.isDarwin [ sigtool ];
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ sigtool ];
 
-  buildInputs = [ libkrun ] ++ lib.optionals stdenv.isDarwin [
+  buildInputs = [ libkrun ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
     libiconv
   ];
 
@@ -57,7 +57,7 @@ stdenv.mkDerivation rec {
 
   # It attaches entitlements with codesign and strip removes those,
   # voiding the entitlements and making it non-operational.
-  dontStrip = stdenv.isDarwin;
+  dontStrip = stdenv.hostPlatform.isDarwin;
 
   postFixup = ''
     wrapProgram $out/bin/krunvm \
diff --git a/pkgs/applications/virtualization/libnvidia-container/default.nix b/pkgs/applications/virtualization/libnvidia-container/default.nix
index b462b24711de5..28ea0a675b17b 100644
--- a/pkgs/applications/virtualization/libnvidia-container/default.nix
+++ b/pkgs/applications/virtualization/libnvidia-container/default.nix
@@ -1,6 +1,6 @@
 { stdenv
 , lib
-, addOpenGLRunpath
+, addDriverRunpath
 , fetchFromGitHub
 , pkg-config
 , elfutils
@@ -102,7 +102,7 @@ stdenv.mkDerivation rec {
 
   postInstall =
     let
-      inherit (addOpenGLRunpath) driverLink;
+      inherit (addDriverRunpath) driverLink;
       libraryPath = lib.makeLibraryPath [ "$out" driverLink "${driverLink}-32" ];
     in
     ''
diff --git a/pkgs/applications/virtualization/lima/bin.nix b/pkgs/applications/virtualization/lima/bin.nix
index ba26d9e6041d5..ca45c58ff2190 100644
--- a/pkgs/applications/virtualization/lima/bin.nix
+++ b/pkgs/applications/virtualization/lima/bin.nix
@@ -48,7 +48,7 @@ stdenvNoCC.mkDerivation {
   sourceRoot = ".";
 
   nativeBuildInputs = [ makeBinaryWrapper installShellFiles ]
-    ++ lib.optionals stdenvNoCC.isLinux [ autoPatchelfHook ];
+    ++ lib.optionals stdenvNoCC.hostPlatform.isLinux [ autoPatchelfHook ];
 
   installPhase = ''
     runHook preInstall
@@ -57,10 +57,17 @@ stdenvNoCC.mkDerivation {
     chmod +x $out/bin/limactl
     wrapProgram $out/bin/limactl \
       --prefix PATH : ${lib.makeBinPath [ qemu ]}
-    installShellCompletion --cmd limactl \
-      --bash <($out/bin/limactl completion bash) \
-      --fish <($out/bin/limactl completion fish) \
-      --zsh <($out/bin/limactl completion zsh)
+
+    # the shell completion only works with a patched $out/bin/limactl and so
+    # needs to run after the autoPatchelfHook is executed in postFixup.
+    doShellCompletion() {
+      installShellCompletion --cmd limactl \
+        --bash <($out/bin/limactl completion bash) \
+        --fish <($out/bin/limactl completion fish) \
+        --zsh <($out/bin/limactl completion zsh)
+    }
+    postFixupHooks+=(doShellCompletion)
+
     runHook postInstall
   '';
 
@@ -72,7 +79,7 @@ stdenvNoCC.mkDerivation {
 
   # Stripping removes entitlements of the binary on Darwin making it non-operational.
   # Therefore, disable stripping on Darwin.
-  dontStrip = stdenvNoCC.isDarwin;
+  dontStrip = stdenvNoCC.hostPlatform.isDarwin;
 
   passthru.updateScript =
     let
diff --git a/pkgs/applications/virtualization/lima/default.nix b/pkgs/applications/virtualization/lima/default.nix
index c57b58a008b32..318d54c77c413 100644
--- a/pkgs/applications/virtualization/lima/default.nix
+++ b/pkgs/applications/virtualization/lima/default.nix
@@ -23,7 +23,7 @@ buildGoModule rec {
   vendorHash = "sha256-P0Qnfu/cqLveAwz9jf/wTXxkoh0jvazlE5C/PcUrWsA=";
 
   nativeBuildInputs = [ makeWrapper installShellFiles ]
-    ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun sigtool ];
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ xcbuild.xcrun sigtool ];
 
   # clean fails with read only vendor dir
   postPatch = ''
@@ -34,7 +34,7 @@ buildGoModule rec {
 
   # It attaches entitlements with codesign and strip removes those,
   # voiding the entitlements and making it non-operational.
-  dontStrip = stdenv.isDarwin;
+  dontStrip = stdenv.hostPlatform.isDarwin;
 
   buildPhase = ''
     runHook preBuild
diff --git a/pkgs/applications/virtualization/lkl/default.nix b/pkgs/applications/virtualization/lkl/default.nix
index c889dc5ff50af..751cbd021fc21 100644
--- a/pkgs/applications/virtualization/lkl/default.nix
+++ b/pkgs/applications/virtualization/lkl/default.nix
@@ -34,7 +34,7 @@ stdenv.mkDerivation rec {
 
     # Fixup build with newer Linux headers: https://github.com/lkl/linux/pull/484
     sed '1i#include <linux/sockios.h>' -i tools/lkl/lib/hijack/xlate.c
-  '' + lib.optionalString stdenv.isi686 ''
+  '' + lib.optionalString stdenv.hostPlatform.isi686 ''
     echo CONFIG_KALLSYMS=n >> arch/lkl/configs/defconfig
     echo CONFIG_KALLSYMS_BASE_RELATIVE=n >> arch/lkl/configs/defconfig
   '' + lib.optionalString firewallSupport ''
diff --git a/pkgs/applications/virtualization/looking-glass-client/default.nix b/pkgs/applications/virtualization/looking-glass-client/default.nix
index a3eaea0cfd787..6adb2ebcc163e 100644
--- a/pkgs/applications/virtualization/looking-glass-client/default.nix
+++ b/pkgs/applications/virtualization/looking-glass-client/default.nix
@@ -26,6 +26,7 @@
 
 , wayland
 , wayland-protocols
+, wayland-scanner
 
 , pipewire
 , pulseaudio
@@ -47,15 +48,15 @@ let
     icon = "lg-logo";
   };
 in
-stdenv.mkDerivation rec {
+stdenv.mkDerivation (finalAttrs: {
   pname = "looking-glass-client";
   version = "B7-rc1";
 
   src = fetchFromGitHub {
     owner = "gnif";
     repo = "LookingGlass";
-    rev = version;
-    sha256 = "sha256-ne1Q+67+P8RHcTsqdiSSwkFf0g3pSNT91WN/lsSzssU=";
+    rev = finalAttrs.version;
+    hash = "sha256-ne1Q+67+P8RHcTsqdiSSwkFf0g3pSNT91WN/lsSzssU=";
     fetchSubmodules = true;
   };
 
@@ -64,7 +65,7 @@ stdenv.mkDerivation rec {
     ./0001-client-cmake-move-X11-config-directives-to-displayse.patch
   ];
 
-  nativeBuildInputs = [ cmake pkg-config ];
+  nativeBuildInputs = [ cmake pkg-config wayland-scanner ];
 
   buildInputs = [ libX11 libGL freefont_ttf spice-protocol expat libbfd nettle fontconfig libffi ]
     ++ lib.optionals xorgSupport [ libxkbcommon libXi libXScrnSaver libXinerama libXcursor libXpresent libXext libXrandr libXdmcp ]
@@ -80,7 +81,7 @@ stdenv.mkDerivation rec {
     ++ lib.optionals (!pipewireSupport) [ "-DENABLE_PIPEWIRE=no" ];
 
   postUnpack = ''
-    echo ${src.rev} > source/VERSION
+    echo ${finalAttrs.src.rev} > source/VERSION
     export sourceRoot="source/client"
   '';
 
@@ -105,4 +106,4 @@ stdenv.mkDerivation rec {
     maintainers = with maintainers; [ alexbakker babbaj j-brn ];
     platforms = [ "x86_64-linux" ];
   };
-}
+})
diff --git a/pkgs/applications/virtualization/nixpacks/default.nix b/pkgs/applications/virtualization/nixpacks/default.nix
index b32e607032750..772cc2189d99a 100644
--- a/pkgs/applications/virtualization/nixpacks/default.nix
+++ b/pkgs/applications/virtualization/nixpacks/default.nix
@@ -2,16 +2,16 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "nixpacks";
-  version = "1.24.1";
+  version = "1.28.1";
 
   src = fetchFromGitHub {
     owner = "railwayapp";
     repo = pname;
     rev = "v${version}";
-    sha256 = "sha256-niKz+F1RJtZrE8+BaJwy5bjGS3miJf5C9LttTnC+iuk=";
+    sha256 = "sha256-0gy9fm18Tc1ALZEV+XZN8kwK725PpIK2OTKKMatvtVQ=";
   };
 
-  cargoHash = "sha256-fzG53DqZKgW6Gen+0ZO9lxgPXkxw7S6OdZWNNI+y9hU=";
+  cargoHash = "sha256-r7jVcDja3BZyZoN2JxDymyv+rOv3wWaGo+yC4GwnZ50=";
 
   # skip test due FHS dependency
   doCheck = false;
diff --git a/pkgs/applications/virtualization/open-vm-tools/default.nix b/pkgs/applications/virtualization/open-vm-tools/default.nix
deleted file mode 100644
index e5dde1e021c7f..0000000000000
--- a/pkgs/applications/virtualization/open-vm-tools/default.nix
+++ /dev/null
@@ -1,150 +0,0 @@
-{ stdenv
-, lib
-, fetchFromGitHub
-, makeWrapper
-, autoreconfHook
-, bash
-, fuse3
-, libmspack
-, openssl
-, pam
-, xercesc
-, icu
-, libdnet
-, procps
-, libtirpc
-, rpcsvc-proto
-, libX11
-, libXext
-, libXinerama
-, libXi
-, libXrender
-, libXrandr
-, libXtst
-, libxcrypt
-, libxml2
-, pkg-config
-, glib
-, gdk-pixbuf-xlib
-, gtk3
-, gtkmm3
-, iproute2
-, dbus
-, systemd
-, which
-, libdrm
-, udev
-, util-linux
-, xmlsec
-, withX ? true
-}:
-
-stdenv.mkDerivation (finalAttrs: {
-  pname = "open-vm-tools";
-  version = "12.4.0";
-
-  src = fetchFromGitHub {
-    owner = "vmware";
-    repo = "open-vm-tools";
-    rev = "stable-${finalAttrs.version}";
-    hash = "sha256-RcjNY02aLOU4X6znfZ37+ICB19WYp+HxHRvvpfW3Ub8=";
-  };
-
-  sourceRoot = "${finalAttrs.src.name}/open-vm-tools";
-
-  outputs = [ "out" "dev" ];
-
-  nativeBuildInputs = [
-    autoreconfHook
-    makeWrapper
-    pkg-config
-  ];
-
-  buildInputs = [
-    fuse3
-    glib
-    icu
-    libdnet
-    libdrm
-    libmspack
-    libtirpc
-    libxcrypt
-    libxml2
-    openssl
-    pam
-    procps
-    rpcsvc-proto
-    udev
-    xercesc
-    xmlsec
-  ] ++ lib.optionals withX [
-    gdk-pixbuf-xlib
-    gtk3
-    gtkmm3
-    libX11
-    libXext
-    libXinerama
-    libXi
-    libXrender
-    libXrandr
-    libXtst
-  ];
-
-  postPatch = ''
-    sed -i Makefile.am \
-      -e 's,etc/vmware-tools,''${prefix}/etc/vmware-tools,'
-    sed -i scripts/Makefile.am \
-      -e 's,^confdir = ,confdir = ''${prefix},' \
-      -e 's,usr/bin,''${prefix}/usr/bin,'
-    sed -i services/vmtoolsd/Makefile.am \
-      -e 's,etc/vmware-tools,''${prefix}/etc/vmware-tools,' \
-      -e 's,$(PAM_PREFIX),''${prefix}/$(PAM_PREFIX),'
-    sed -i vgauth/service/Makefile.am \
-      -e 's,/etc/vmware-tools/vgauth/schemas,''${prefix}/etc/vmware-tools/vgauth/schemas,' \
-      -e 's,$(DESTDIR)/etc/vmware-tools/vgauth.conf,''${prefix}/etc/vmware-tools/vgauth.conf,'
-
-    # don't abort on any warning
-    sed -i 's,CFLAGS="$CFLAGS -Werror",,' configure.ac
-
-    # Make reboot work, shutdown is not in /sbin on NixOS
-    sed -i 's,/sbin/shutdown,shutdown,' lib/system/systemLinux.c
-
-    # Fix paths to fuse3 (we do not use fuse2 so that is not modified)
-    sed -i 's,/bin/fusermount3,${fuse3}/bin/fusermount3,' vmhgfs-fuse/config.c
-
-    substituteInPlace services/plugins/vix/foundryToolsDaemon.c \
-     --replace "/usr/bin/vmhgfs-fuse" "${placeholder "out"}/bin/vmhgfs-fuse" \
-     --replace "/bin/mount" "${util-linux}/bin/mount"
-  '';
-
-  configureFlags = [
-    "--without-kernel-modules"
-    "--with-udev-rules-dir=${placeholder "out"}/lib/udev/rules.d"
-    "--with-fuse=fuse3"
-  ] ++ lib.optional (!withX) "--without-x";
-
-  enableParallelBuilding = true;
-
-  preConfigure = ''
-    mkdir -p ${placeholder "out"}/lib/udev/rules.d
-  '';
-
-  postInstall = ''
-    wrapProgram "$out/etc/vmware-tools/scripts/vmware/network" \
-      --prefix PATH ':' "${lib.makeBinPath [ iproute2 dbus systemd which ]}"
-    substituteInPlace "$out/lib/udev/rules.d/99-vmware-scsi-udev.rules" --replace "/bin/sh" "${bash}/bin/sh"
-  '';
-
-  meta = with lib; {
-    homepage = "https://github.com/vmware/open-vm-tools";
-    changelog = "https://github.com/vmware/open-vm-tools/releases/tag/stable-${finalAttrs.version}";
-    description = "Set of tools for VMWare guests to improve host-guest interaction";
-    longDescription = ''
-      A set of services and modules that enable several features in VMware products for
-      better management of, and seamless user interactions with, guests.
-    '';
-    license = licenses.gpl2;
-    platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ];
-    maintainers = with maintainers; [ joamaki kjeremy ];
-  };
-})
diff --git a/pkgs/applications/virtualization/podman-compose/default.nix b/pkgs/applications/virtualization/podman-compose/default.nix
index bdd585e9c8bc4..44d9caf260573 100644
--- a/pkgs/applications/virtualization/podman-compose/default.nix
+++ b/pkgs/applications/virtualization/podman-compose/default.nix
@@ -1,7 +1,7 @@
-{ lib, buildPythonApplication, fetchFromGitHub, python-dotenv, pyyaml, setuptools, pipBuildHook, pypaBuildHook }:
+{ lib, buildPythonApplication, fetchFromGitHub, python-dotenv, pyyaml, setuptools, pypaBuildHook }:
 
 buildPythonApplication rec {
-  version = "1.1.0";
+  version = "1.2.0";
   pname = "podman-compose";
   pyproject = true;
 
@@ -9,10 +9,9 @@ buildPythonApplication rec {
     repo = "podman-compose";
     owner = "containers";
     rev = "v${version}";
-    sha256 = "sha256-uNgzdLrnDIABtt0L2pvsil14esRzl0XcWohgf7Oksr8=";
+    hash = "sha256-40RatexY/6eRfCodaiBeJpyt1sDUj2STSPL0gBECdRs=";
   };
 
-
   build-system = [
     setuptools
   ];
diff --git a/pkgs/applications/virtualization/podman-desktop/default.nix b/pkgs/applications/virtualization/podman-desktop/default.nix
index fdf8294013990..ce7d993d39dea 100644
--- a/pkgs/applications/virtualization/podman-desktop/default.nix
+++ b/pkgs/applications/virtualization/podman-desktop/default.nix
@@ -51,7 +51,7 @@ stdenv.mkDerivation (finalAttrs: {
     makeWrapper
     copyDesktopItems
   ]
-  ++ lib.optionals stdenv.isDarwin [
+  ++ lib.optionals stdenv.hostPlatform.isDarwin [
     desktopToDarwinBundle
   ];
 
@@ -73,7 +73,7 @@ stdenv.mkDerivation (finalAttrs: {
     yarn --offline run build
     yarn --offline run electron-builder --dir \
       --config .electron-builder.config.cjs \
-      -c.electronDist=${electron}/libexec/electron \
+      -c.electronDist=${electron.dist} \
       -c.electronVersion=${electron.version}
 
     runHook postBuild
diff --git a/pkgs/applications/virtualization/podman-tui/default.nix b/pkgs/applications/virtualization/podman-tui/default.nix
deleted file mode 100644
index 0d7947a3f2511..0000000000000
--- a/pkgs/applications/virtualization/podman-tui/default.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ lib, stdenv, fetchFromGitHub, buildGoModule, testers, podman-tui }:
-
-buildGoModule rec {
-  pname = "podman-tui";
-  version = "1.1.0";
-
-  src = fetchFromGitHub {
-    owner = "containers";
-    repo = "podman-tui";
-    rev = "v${version}";
-    hash = "sha256-my/y2cgF7F0wk5VJKfmqotBrV3HPmRQGPjlSdMe7wXk=";
-  };
-
-  vendorHash = null;
-
-  CGO_ENABLED = 0;
-
-  tags = [ "containers_image_openpgp" "remote" ]
-    ++ lib.optional stdenv.isDarwin "darwin";
-
-  ldflags = [ "-s" "-w" ];
-
-  preCheck = ''
-    export USER=$(whoami)
-    export HOME="$(mktemp -d)"
-  '';
-
-  checkFlags =
-    let
-      skippedTests = [
-        # Disable flaky tests
-        "TestDialogs"
-        "TestVoldialogs"
-      ];
-    in
-    [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
-
-  passthru.tests.version = testers.testVersion {
-    package = podman-tui;
-    command = "HOME=$(mktemp -d) podman-tui version";
-    version = "v${version}";
-  };
-
-  meta = with lib; {
-    homepage = "https://github.com/containers/podman-tui";
-    description = "Podman Terminal UI";
-    license = licenses.asl20;
-    maintainers = with maintainers; [ aaronjheng ];
-    mainProgram = "podman-tui";
-  };
-}
diff --git a/pkgs/applications/virtualization/podman/default.nix b/pkgs/applications/virtualization/podman/default.nix
index d9c506ae59c47..57ede5b8b1613 100644
--- a/pkgs/applications/virtualization/podman/default.nix
+++ b/pkgs/applications/virtualization/podman/default.nix
@@ -22,8 +22,7 @@
 , crun
 , runc
 , conmon
-, extraRuntimes ? lib.optionals stdenv.isLinux [ runc ]  # e.g.: runc, gvisor, youki
-, slirp4netns
+, extraRuntimes ? lib.optionals stdenv.hostPlatform.isLinux [ runc ]  # e.g.: runc, gvisor, youki
 , fuse-overlayfs
 , util-linux
 , iptables
@@ -33,30 +32,32 @@
 , aardvark-dns
 , netavark
 , passt
+, vfkit
 , testers
 , podman
 }:
 let
   # do not add qemu to this wrapper, store paths get written to the podman vm config and break when GCed
 
-  binPath = lib.makeBinPath (lib.optionals stdenv.isLinux [
+  binPath = lib.makeBinPath (lib.optionals stdenv.hostPlatform.isLinux [
     fuse-overlayfs
     util-linux
     iptables
     iproute2
+  ] ++ lib.optionals stdenv.hostPlatform.isDarwin [
+    vfkit
   ] ++ extraPackages);
 
   helpersBin = symlinkJoin {
     name = "podman-helper-binary-wrapper";
 
-    # this only works for some binaries, others may need to be be added to `binPath` or in the modules
+    # this only works for some binaries, others may need to be added to `binPath` or in the modules
     paths = [
       gvproxy
-    ] ++ lib.optionals stdenv.isLinux [
+    ] ++ lib.optionals stdenv.hostPlatform.isLinux [
       aardvark-dns
       catatonit # added here for the pause image and also set in `containersConf` for `init_path`
       netavark
-      slirp4netns
       passt
       conmon
       crun
@@ -65,13 +66,13 @@ let
 in
 buildGoModule rec {
   pname = "podman";
-  version = "5.1.1";
+  version = "5.2.3";
 
   src = fetchFromGitHub {
     owner = "containers";
     repo = "podman";
     rev = "v${version}";
-    hash = "sha256-3u4QOX7K0bMcbvwkXVoCpq7p5rKkvmOlOIRSUEbjFOY=";
+    hash = "sha256-2FnUijeQhre7B4utsGGEGbMuuMVZlPDoM2di3z1d4vs=";
   };
 
   patches = [
@@ -92,7 +93,7 @@ buildGoModule rec {
 
   nativeBuildInputs = [ pkg-config go-md2man installShellFiles makeWrapper python3 ];
 
-  buildInputs = lib.optionals stdenv.isLinux [
+  buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
     btrfs-progs
     gpgme
     libapparmor
@@ -109,7 +110,7 @@ buildGoModule rec {
     runHook preBuild
     patchShebangs .
     substituteInPlace Makefile --replace "/bin/bash" "${runtimeShell}"
-    ${if stdenv.isDarwin then ''
+    ${if stdenv.hostPlatform.isDarwin then ''
       make podman-remote # podman-mac-helper uses FHS paths
     '' else ''
       make bin/podman bin/rootlessport bin/quadlet
@@ -120,7 +121,7 @@ buildGoModule rec {
 
   installPhase = ''
     runHook preInstall
-    ${if stdenv.isDarwin then ''
+    ${if stdenv.hostPlatform.isDarwin then ''
       install bin/darwin/podman -Dt $out/bin
     '' else ''
       make install.bin install.systemd
@@ -133,7 +134,7 @@ buildGoModule rec {
     runHook postInstall
   '';
 
-  postFixup = lib.optionalString stdenv.isLinux ''
+  postFixup = lib.optionalString stdenv.hostPlatform.isLinux ''
     RPATH=$(patchelf --print-rpath $out/bin/.podman-wrapped)
     patchelf --set-rpath "${lib.makeLibraryPath [ systemd ]}":$RPATH $out/bin/.podman-wrapped
   '';
@@ -143,7 +144,7 @@ buildGoModule rec {
       package = podman;
       command = "HOME=$TMPDIR podman --version";
     };
-  } // lib.optionalAttrs stdenv.isLinux {
+  } // lib.optionalAttrs stdenv.hostPlatform.isLinux {
     inherit (nixosTests) podman;
     # related modules
     inherit (nixosTests)
diff --git a/pkgs/applications/virtualization/pods/Cargo.lock b/pkgs/applications/virtualization/pods/Cargo.lock
index d53094fcf9bf3..c12193cc03dfb 100644
--- a/pkgs/applications/virtualization/pods/Cargo.lock
+++ b/pkgs/applications/virtualization/pods/Cargo.lock
@@ -4,9 +4,9 @@ version = 3
 
 [[package]]
 name = "addr2line"
-version = "0.21.0"
+version = "0.22.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
+checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678"
 dependencies = [
  "gimli",
 ]
@@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
 [[package]]
 name = "aes"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -31,9 +31,9 @@ dependencies = [
 
 [[package]]
 name = "aho-corasick"
-version = "1.1.2"
+version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
+checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916"
 dependencies = [
  "memchr",
 ]
@@ -55,22 +55,23 @@ dependencies = [
 
 [[package]]
 name = "anyhow"
-version = "1.0.75"
+version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
 
 [[package]]
 name = "ashpd"
-version = "0.6.0"
-source = "git+https://github.com/bilelmoussaoui/ashpd.git?rev=30216eccd3f4ecb50c4d34a493a33e6eef4e375c#30216eccd3f4ecb50c4d34a493a33e6eef4e375c"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfe7e0dd0ac5a401dc116ed9f9119cf9decc625600474cb41f0fc0a0050abc9a"
 dependencies = [
  "enumflags2",
  "futures-channel",
  "futures-util",
  "gdk4-wayland",
  "gdk4-x11",
+ "glib",
  "gtk4",
- "once_cell",
  "rand",
  "serde",
  "serde_repr",
@@ -81,146 +82,122 @@ dependencies = [
 
 [[package]]
 name = "async-broadcast"
-version = "0.5.1"
+version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b"
+checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e"
 dependencies = [
- "event-listener 2.5.3",
+ "event-listener",
+ "event-listener-strategy",
  "futures-core",
+ "pin-project-lite",
 ]
 
 [[package]]
 name = "async-channel"
-version = "1.9.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35"
+checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
 dependencies = [
  "concurrent-queue",
- "event-listener 2.5.3",
+ "event-listener-strategy",
  "futures-core",
+ "pin-project-lite",
 ]
 
 [[package]]
 name = "async-io"
-version = "1.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
-dependencies = [
- "async-lock 2.8.0",
- "autocfg",
- "cfg-if",
- "concurrent-queue",
- "futures-lite 1.13.0",
- "log",
- "parking",
- "polling 2.8.0",
- "rustix 0.37.27",
- "slab",
- "socket2 0.4.10",
- "waker-fn",
-]
-
-[[package]]
-name = "async-io"
-version = "2.2.0"
+version = "2.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997"
+checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8"
 dependencies = [
- "async-lock 3.0.0",
+ "async-lock",
  "cfg-if",
  "concurrent-queue",
  "futures-io",
- "futures-lite 2.0.1",
+ "futures-lite",
  "parking",
- "polling 3.3.0",
- "rustix 0.38.21",
+ "polling",
+ "rustix",
  "slab",
  "tracing",
- "waker-fn",
- "windows-sys",
-]
-
-[[package]]
-name = "async-lock"
-version = "2.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b"
-dependencies = [
- "event-listener 2.5.3",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "async-lock"
-version = "3.0.0"
+version = "3.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45e900cdcd39bb94a14487d3f7ef92ca222162e6c7c3fe7cb3550ea75fb486ed"
+checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
 dependencies = [
- "event-listener 3.0.1",
+ "event-listener",
  "event-listener-strategy",
  "pin-project-lite",
 ]
 
 [[package]]
 name = "async-process"
-version = "1.8.1"
+version = "2.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88"
+checksum = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374"
 dependencies = [
- "async-io 1.13.0",
- "async-lock 2.8.0",
+ "async-channel",
+ "async-io",
+ "async-lock",
  "async-signal",
+ "async-task",
  "blocking",
  "cfg-if",
- "event-listener 3.0.1",
- "futures-lite 1.13.0",
- "rustix 0.38.21",
- "windows-sys",
+ "event-listener",
+ "futures-lite",
+ "rustix",
+ "tracing",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "async-recursion"
-version = "1.0.5"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "async-signal"
-version = "0.2.5"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+checksum = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3"
 dependencies = [
- "async-io 2.2.0",
- "async-lock 2.8.0",
+ "async-io",
+ "async-lock",
  "atomic-waker",
  "cfg-if",
  "futures-core",
  "futures-io",
- "rustix 0.38.21",
+ "rustix",
  "signal-hook-registry",
  "slab",
- "windows-sys",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "async-task"
-version = "4.5.0"
+version = "4.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4eb2cdb97421e01129ccb49169d8279ed21e829929144f4a22a6e54ac549ca1"
+checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
 
 [[package]]
 name = "async-trait"
-version = "0.1.74"
+version = "0.1.81"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+checksum = "6e0c28dcc82d7c8ead5cb13beb15405b57b8546e93215673ff8ca0349a028107"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
@@ -231,15 +208,15 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
 
 [[package]]
 name = "autocfg"
-version = "1.1.0"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0"
 
 [[package]]
 name = "backtrace"
-version = "0.3.69"
+version = "0.3.73"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
+checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a"
 dependencies = [
  "addr2line",
  "cc",
@@ -264,9 +241,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bitflags"
-version = "2.4.1"
+version = "2.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
 
 [[package]]
 name = "block"
@@ -294,25 +271,22 @@ dependencies = [
 
 [[package]]
 name = "blocking"
-version = "1.4.1"
+version = "1.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8c36a4d0d48574b3dd360b4b7d95cc651d2b6557b6402848a27d4b228a473e2a"
+checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
 dependencies = [
  "async-channel",
- "async-lock 2.8.0",
  "async-task",
- "fastrand 2.0.1",
  "futures-io",
- "futures-lite 1.13.0",
+ "futures-lite",
  "piper",
- "tracing",
 ]
 
 [[package]]
 name = "bumpalo"
-version = "3.14.0"
+version = "3.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
+checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
 
 [[package]]
 name = "byteorder"
@@ -328,27 +302,28 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38"
 
 [[package]]
 name = "bytes"
-version = "1.5.0"
+version = "1.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
+checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50"
 
 [[package]]
 name = "cairo-rs"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "797fd5a634dcb0ad0d7d583df794deb0a236d88e759cd34b7da20198c6c9d145"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.6.0",
  "cairo-sys-rs",
  "glib",
  "libc",
- "once_cell",
  "thiserror",
 ]
 
 [[package]]
 name = "cairo-sys-rs"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "428290f914b9b86089f60f5d8a9f6e440508e1bcff23b25afd51502b0a2da88f"
 dependencies = [
  "glib-sys",
  "libc",
@@ -366,18 +341,15 @@ dependencies = [
 
 [[package]]
 name = "cc"
-version = "1.0.83"
+version = "1.1.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
-dependencies = [
- "libc",
-]
+checksum = "e9e8aabfac534be767c909e0690571677d49f41bd8465ae876fe043d52ba5292"
 
 [[package]]
 name = "cfg-expr"
-version = "0.15.5"
+version = "0.15.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03915af431787e6ffdcc74c645077518c6b6e01f80b761e0fbbfa288536311b3"
+checksum = "d067ad48b8650848b989a59a86c6c36a995d02d2bf778d45c3c5d57bc2718f02"
 dependencies = [
  "smallvec",
  "target-lexicon",
@@ -390,10 +362,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
+[[package]]
 name = "chrono"
-version = "0.4.31"
+version = "0.4.38"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
 dependencies = [
  "android-tzdata",
  "iana-time-zone",
@@ -417,9 +395,9 @@ dependencies = [
 
 [[package]]
 name = "concurrent-queue"
-version = "2.3.0"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
 dependencies = [
  "crossbeam-utils",
 ]
@@ -439,7 +417,7 @@ dependencies = [
  "log",
  "mime",
  "paste",
- "pin-project 1.1.3",
+ "pin-project 1.1.5",
  "serde",
  "serde_json",
  "tar",
@@ -450,36 +428,33 @@ dependencies = [
 
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crc32fast"
-version = "1.3.2"
+version = "1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
 dependencies = [
  "cfg-if",
 ]
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.16"
+version = "0.8.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
-dependencies = [
- "cfg-if",
-]
+checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
 
 [[package]]
 name = "crypto-common"
@@ -494,25 +469,14 @@ dependencies = [
 
 [[package]]
 name = "deranged"
-version = "0.3.9"
+version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
 dependencies = [
  "powerfmt",
 ]
 
 [[package]]
-name = "derivative"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
 name = "digest"
 version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -524,10 +488,16 @@ dependencies = [
 ]
 
 [[package]]
+name = "endi"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
+
+[[package]]
 name = "enumflags2"
-version = "0.7.8"
+version = "0.7.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939"
+checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
 dependencies = [
  "enumflags2_derive",
  "serde",
@@ -535,13 +505,13 @@ dependencies = [
 
 [[package]]
 name = "enumflags2_derive"
-version = "0.7.8"
+version = "0.7.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246"
+checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
@@ -552,34 +522,19 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
 [[package]]
 name = "errno"
-version = "0.3.6"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c18ee0ed65a5f1f81cac6b1d213b69c35fa47d4252ad41f1486dbd8226fe36e"
+checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
 dependencies = [
  "libc",
- "windows-sys",
-]
-
-[[package]]
-name = "error-chain"
-version = "0.12.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d2f06b9cac1506ece98fe3231e3cc9c4410ec3d5b1f24ae1c8946f0742cdefc"
-dependencies = [
- "version_check",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "event-listener"
-version = "2.5.3"
+version = "5.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
-
-[[package]]
-name = "event-listener"
-version = "3.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01cec0252c2afff729ee6f00e903d479fba81784c8e2bd77447673471fdfaea1"
+checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
 dependencies = [
  "concurrent-queue",
  "parking",
@@ -588,28 +543,19 @@ dependencies = [
 
 [[package]]
 name = "event-listener-strategy"
-version = "0.3.0"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
+checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
 dependencies = [
- "event-listener 3.0.1",
+ "event-listener",
  "pin-project-lite",
 ]
 
 [[package]]
 name = "fastrand"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
-
-[[package]]
-name = "fastrand"
-version = "2.0.1"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
+checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a"
 
 [[package]]
 name = "field-offset"
@@ -617,27 +563,27 @@ version = "0.3.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "38e2275cc4e4fc009b0669731a1e5ab7ebf11f469eaede2bab9309a5b4d6057f"
 dependencies = [
- "memoffset 0.9.0",
+ "memoffset",
  "rustc_version",
 ]
 
 [[package]]
 name = "filetime"
-version = "0.2.22"
+version = "0.2.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+checksum = "bf401df4a4e3872c4fe8151134cf483738e74b67fc934d6532c882b3d24a4550"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.3.5",
- "windows-sys",
+ "libredox",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "flate2"
-version = "1.0.28"
+version = "1.0.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e"
+checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920"
 dependencies = [
  "crc32fast",
  "miniz_oxide",
@@ -651,18 +597,18 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
 
 [[package]]
 name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
 dependencies = [
  "percent-encoding",
 ]
 
 [[package]]
 name = "futures"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -675,9 +621,9 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -685,15 +631,15 @@ dependencies = [
 
 [[package]]
 name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -702,63 +648,51 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
 
 [[package]]
 name = "futures-lite"
-version = "1.13.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
 dependencies = [
- "fastrand 1.9.0",
+ "fastrand",
  "futures-core",
  "futures-io",
- "memchr",
  "parking",
  "pin-project-lite",
- "waker-fn",
-]
-
-[[package]]
-name = "futures-lite"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
-dependencies = [
- "futures-core",
- "pin-project-lite",
 ]
 
 [[package]]
 name = "futures-macro"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
 
 [[package]]
 name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
 
 [[package]]
 name = "futures-util"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -786,20 +720,21 @@ dependencies = [
 
 [[package]]
 name = "gdk-pixbuf"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28bb53ecb56857c683c9ec859908e076dd3969c7d67598bd8b1ce095d211304a"
 dependencies = [
  "gdk-pixbuf-sys",
  "gio",
  "glib",
  "libc",
- "once_cell",
 ]
 
 [[package]]
 name = "gdk-pixbuf-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9f6681a0c1330d1d3968bec1529f7172d62819ef0bdbb0d18022320654158b03"
 dependencies = [
  "gio-sys",
  "glib-sys",
@@ -810,8 +745,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b7d7237c1487ed4b300aac7744efcbf1319e12d60d7afcd6f505414bd5b5dea"
 dependencies = [
  "cairo-rs",
  "gdk-pixbuf",
@@ -824,8 +760,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-sys"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a67576c8ec012156d7f680e201a807b4432a77babb3157e0555e990ab6bcd878"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -840,8 +777,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-wayland"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34f422f60971cdea128457cad122c46fee48b3a53aa1e1d140919d50ff5b7491"
 dependencies = [
  "gdk4",
  "gdk4-wayland-sys",
@@ -852,8 +790,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-wayland-sys"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23295b2ecafae572224a382b876b0bdc0fed947da63b51edebc8798288002048"
 dependencies = [
  "glib-sys",
  "libc",
@@ -862,8 +801,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-x11"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c4b89c2149f74668d630279559fb5e2b4f11a77124b73d04518cc344854cd626"
 dependencies = [
  "gdk4",
  "gdk4-x11-sys",
@@ -874,8 +814,9 @@ dependencies = [
 
 [[package]]
 name = "gdk4-x11-sys"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a186f565940124ebd6c1c97e9eb0909e2d19a33ccd3eebed4ff32ebda766207d"
 dependencies = [
  "gdk4-sys",
  "glib-sys",
@@ -895,9 +836,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.11"
+version = "0.2.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
 dependencies = [
  "cfg-if",
  "libc",
@@ -926,14 +867,15 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.28.0"
+version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd"
 
 [[package]]
 name = "gio"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "398e3da68749fdc32783cbf7521ec3f65c9cf946db8c7774f8460af49e52c6e2"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -942,7 +884,6 @@ dependencies = [
  "gio-sys",
  "glib",
  "libc",
- "once_cell",
  "pin-project-lite",
  "smallvec",
  "thiserror",
@@ -950,22 +891,24 @@ dependencies = [
 
 [[package]]
 name = "gio-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e4feb96b31c32730ea3e1e89aecd2e4e37ecb1c473ad8f685e3430a159419f63"
 dependencies = [
  "glib-sys",
  "gobject-sys",
  "libc",
  "system-deps",
- "winapi",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "glib"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fee90a615ce05be7a32932cfb8adf2c4bbb4700e80d37713c981fb24c0c56238"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.6.0",
  "futures-channel",
  "futures-core",
  "futures-executor",
@@ -977,28 +920,28 @@ dependencies = [
  "gobject-sys",
  "libc",
  "memchr",
- "once_cell",
  "smallvec",
  "thiserror",
 ]
 
 [[package]]
 name = "glib-macros"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4da558d8177c0c8c54368818b508a4244e1286fce2858cef4e547023f0cfa5ef"
 dependencies = [
  "heck",
- "proc-macro-crate 2.0.0",
- "proc-macro-error",
+ "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "glib-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4958c26e5a01c9af00dea669a97369eccbec29a8e6d125c24ea2d85ee7467b60"
 dependencies = [
  "libc",
  "system-deps",
@@ -1006,8 +949,9 @@ dependencies = [
 
 [[package]]
 name = "gobject-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c6908864f5ffff15b56df7e90346863904f49b949337ed0456b9287af61903b8"
 dependencies = [
  "glib-sys",
  "libc",
@@ -1016,8 +960,9 @@ dependencies = [
 
 [[package]]
 name = "graphene-rs"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "630e940ad5824f90221d6579043a9cd1f8bec86b4a17faaf7827d58eb16e8c1f"
 dependencies = [
  "glib",
  "graphene-sys",
@@ -1026,8 +971,9 @@ dependencies = [
 
 [[package]]
 name = "graphene-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6fb8fade7b754982f47ebbed241fd2680816fdd4598321784da10b9e1168836a"
 dependencies = [
  "glib-sys",
  "libc",
@@ -1037,8 +983,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f3cf2091e1af185b347b3450817d93dea6fe435df7abd4c2cd7fb5bcb4cfda8"
 dependencies = [
  "cairo-rs",
  "gdk4",
@@ -1051,8 +998,9 @@ dependencies = [
 
 [[package]]
 name = "gsk4-sys"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6aa69614a26d8760c186c3690f1b0fbb917572ca23ef83137445770ceddf8cde"
 dependencies = [
  "cairo-sys-rs",
  "gdk4-sys",
@@ -1066,8 +1014,9 @@ dependencies = [
 
 [[package]]
 name = "gtk4"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eaffc6c743c9160514cc9b67eace364e5dc5798369fa809cdb04e035c21c5c5d"
 dependencies = [
  "cairo-rs",
  "field-offset",
@@ -1086,21 +1035,21 @@ dependencies = [
 
 [[package]]
 name = "gtk4-macros"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "188211f546ce5801f6d0245c37b6249143a2cb4fa040e54829ca1e76796e9f09"
 dependencies = [
- "anyhow",
- "proc-macro-crate 2.0.0",
- "proc-macro-error",
+ "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "gtk4-sys"
-version = "0.8.0"
-source = "git+https://github.com/gtk-rs/gtk4-rs.git#ecf65d90e4b9bd42d810aa44bdd0b3bd220cbd18"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1114a207af8ada02cf4658a76692f4190f06f093380d5be07e3ca8b43aa7c666"
 dependencies = [
  "cairo-sys-rs",
  "gdk-pixbuf-sys",
@@ -1117,21 +1066,27 @@ dependencies = [
 
 [[package]]
 name = "hashbrown"
-version = "0.14.2"
+version = "0.14.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
 
 [[package]]
 name = "heck"
-version = "0.4.1"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
 
 [[package]]
 name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
+
+[[package]]
+name = "hermit-abi"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
 
 [[package]]
 name = "hex"
@@ -1141,9 +1096,9 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
 
 [[package]]
 name = "hkdf"
-version = "0.12.3"
+version = "0.12.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
 dependencies = [
  "hmac",
 ]
@@ -1159,42 +1114,42 @@ dependencies = [
 
 [[package]]
 name = "hostname"
-version = "0.3.1"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867"
+checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba"
 dependencies = [
+ "cfg-if",
  "libc",
- "match_cfg",
- "winapi",
+ "windows",
 ]
 
 [[package]]
 name = "http"
-version = "0.2.10"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f95b9abcae896730d42b78e09c155ed4ddf82c07b4de772c64aee5b2d8b7c150"
+checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
 dependencies = [
- "bytes 1.5.0",
+ "bytes 1.7.1",
  "fnv",
  "itoa",
 ]
 
 [[package]]
 name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
 dependencies = [
- "bytes 1.5.0",
+ "bytes 1.7.1",
  "http",
  "pin-project-lite",
 ]
 
 [[package]]
 name = "httparse"
-version = "1.8.0"
+version = "1.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904"
+checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9"
 
 [[package]]
 name = "httpdate"
@@ -1204,11 +1159,11 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 
 [[package]]
 name = "hyper"
-version = "0.14.27"
+version = "0.14.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9"
 dependencies = [
- "bytes 1.5.0",
+ "bytes 1.7.1",
  "futures-channel",
  "futures-core",
  "futures-util",
@@ -1218,7 +1173,7 @@ dependencies = [
  "httpdate",
  "itoa",
  "pin-project-lite",
- "socket2 0.4.10",
+ "socket2",
  "tokio",
  "tower-service",
  "tracing",
@@ -1234,15 +1189,15 @@ dependencies = [
  "futures-util",
  "hex",
  "hyper",
- "pin-project 1.1.3",
+ "pin-project 1.1.5",
  "tokio",
 ]
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.58"
+version = "0.1.60"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
@@ -1263,9 +1218,9 @@ dependencies = [
 
 [[package]]
 name = "idna"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
@@ -1273,9 +1228,9 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "2.1.0"
+version = "2.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
 dependencies = [
  "equivalent",
  "hashbrown",
@@ -1293,55 +1248,41 @@ dependencies = [
 ]
 
 [[package]]
-name = "instant"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
-dependencies = [
- "cfg-if",
-]
-
-[[package]]
 name = "io-lifetimes"
-version = "1.0.11"
+version = "2.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-dependencies = [
- "hermit-abi",
- "libc",
- "windows-sys",
-]
+checksum = "5a611371471e98973dbcab4e0ec66c31a10bc356eeb4d54a0e05eac8158fe38c"
 
 [[package]]
 name = "itoa"
-version = "1.0.9"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
 
 [[package]]
 name = "js-sys"
-version = "0.3.65"
+version = "0.3.69"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d"
 dependencies = [
  "wasm-bindgen",
 ]
 
 [[package]]
 name = "lazy_static"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
 dependencies = [
  "spin",
 ]
 
 [[package]]
 name = "libadwaita"
-version = "0.6.0"
-source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs#24608c684b8fa59357d0d586fde75c04a464cbf6"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2ff9c222b5c783729de45185f07b2fec2d43a7f9c63961e777d3667e20443878"
 dependencies = [
- "gdk-pixbuf",
  "gdk4",
  "gio",
  "glib",
@@ -1353,8 +1294,9 @@ dependencies = [
 
 [[package]]
 name = "libadwaita-sys"
-version = "0.6.0"
-source = "git+https://gitlab.gnome.org/World/Rust/libadwaita-rs#24608c684b8fa59357d0d586fde75c04a464cbf6"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1c44d8bdbad31d6639e1f20cc9c1424f1a8e02d751fc28d44659bf743fb9eca6"
 dependencies = [
  "gdk4-sys",
  "gio-sys",
@@ -1368,9 +1310,9 @@ dependencies = [
 
 [[package]]
 name = "libc"
-version = "0.2.150"
+version = "0.2.155"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
 
 [[package]]
 name = "libm"
@@ -1379,46 +1321,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
 
 [[package]]
-name = "libpanel"
-version = "0.3.0"
-source = "git+https://gitlab.gnome.org/World/Rust/libpanel-rs.git#7dd6d088f92079893f0e5d2afc2c8258b807ddcd"
-dependencies = [
- "futures-core",
- "gdk4",
- "gio",
- "glib",
- "gtk4",
- "libadwaita",
- "libc",
- "libpanel-sys",
-]
-
-[[package]]
-name = "libpanel-sys"
-version = "0.3.0"
-source = "git+https://gitlab.gnome.org/World/Rust/libpanel-rs.git#7dd6d088f92079893f0e5d2afc2c8258b807ddcd"
+name = "libredox"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
 dependencies = [
- "gdk4-sys",
- "gio-sys",
- "glib-sys",
- "gobject-sys",
- "gtk4-sys",
- "libadwaita-sys",
+ "bitflags 2.6.0",
  "libc",
- "system-deps",
+ "redox_syscall 0.5.3",
 ]
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.4.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
 
 [[package]]
 name = "locale_config"
@@ -1435,9 +1352,9 @@ dependencies = [
 
 [[package]]
 name = "log"
-version = "0.4.20"
+version = "0.4.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
+checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
 
 [[package]]
 name = "malloc_buf"
@@ -1449,31 +1366,26 @@ dependencies = [
 ]
 
 [[package]]
-name = "match_cfg"
-version = "0.1.0"
+name = "md-5"
+version = "0.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4"
+checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
+dependencies = [
+ "cfg-if",
+ "digest",
+]
 
 [[package]]
 name = "memchr"
-version = "2.6.4"
+version = "2.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
 
 [[package]]
 name = "memoffset"
-version = "0.7.1"
+version = "0.9.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
-dependencies = [
- "autocfg",
-]
-
-[[package]]
-name = "memoffset"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
 dependencies = [
  "autocfg",
 ]
@@ -1486,22 +1398,32 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 
 [[package]]
 name = "miniz_oxide"
-version = "0.7.1"
+version = "0.7.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
+checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08"
 dependencies = [
  "adler",
 ]
 
 [[package]]
 name = "mio"
-version = "0.8.9"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+checksum = "4569e456d394deccd22ce1c1913e6ea0e54519f577285001215d33557431afe4"
 dependencies = [
+ "hermit-abi 0.3.9",
  "libc",
  "wasi",
- "windows-sys",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "multi_log"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad56bb3c7c7c15b4e25de86c9123e886e5f80a0c03ace219b453b081c2bf20d7"
+dependencies = [
+ "log",
 ]
 
 [[package]]
@@ -1515,21 +1437,22 @@ dependencies = [
 
 [[package]]
 name = "nix"
-version = "0.26.4"
+version = "0.29.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b"
+checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
 dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
  "cfg-if",
+ "cfg_aliases",
  "libc",
- "memoffset 0.7.1",
+ "memoffset",
 ]
 
 [[package]]
 name = "num"
-version = "0.4.1"
+version = "0.4.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
+checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
 dependencies = [
  "num-bigint",
  "num-complex",
@@ -1541,11 +1464,10 @@ dependencies = [
 
 [[package]]
 name = "num-bigint"
-version = "0.4.4"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
+checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9"
 dependencies = [
- "autocfg",
  "num-integer",
  "num-traits",
 ]
@@ -1570,28 +1492,33 @@ dependencies = [
 
 [[package]]
 name = "num-complex"
-version = "0.4.4"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
+checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
 dependencies = [
  "num-traits",
 ]
 
 [[package]]
+name = "num-conv"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
+
+[[package]]
 name = "num-integer"
-version = "0.1.45"
+version = "0.1.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
+checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
 dependencies = [
- "autocfg",
  "num-traits",
 ]
 
 [[package]]
 name = "num-iter"
-version = "0.1.43"
+version = "0.1.45"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
+checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
 dependencies = [
  "autocfg",
  "num-integer",
@@ -1600,11 +1527,10 @@ dependencies = [
 
 [[package]]
 name = "num-rational"
-version = "0.4.1"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
+checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
 dependencies = [
- "autocfg",
  "num-bigint",
  "num-integer",
  "num-traits",
@@ -1612,28 +1538,18 @@ dependencies = [
 
 [[package]]
 name = "num-traits"
-version = "0.2.17"
+version = "0.2.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
+checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
 dependencies = [
  "autocfg",
 ]
 
 [[package]]
-name = "num_cpus"
-version = "1.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
-dependencies = [
- "hermit-abi",
- "libc",
-]
-
-[[package]]
 name = "num_threads"
-version = "0.1.6"
+version = "0.1.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44"
+checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
 dependencies = [
  "libc",
 ]
@@ -1669,43 +1585,45 @@ dependencies = [
 
 [[package]]
 name = "object"
-version = "0.32.1"
+version = "0.36.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "27b64972346851a39438c60b341ebc01bba47464ae329e55cf343eb93964efd9"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 
 [[package]]
 name = "oo7"
-version = "0.2.1"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "220729ba847d98e1a9902c05e41dae79ce4a0b913dad68bc540dd3120a8c2b6b"
+checksum = "8fc6ce4692fbfd044ce22ca07dcab1a30fa12432ca2aa5b1294eca50d3332a24"
 dependencies = [
  "aes",
- "byteorder",
  "cbc",
  "cipher",
  "digest",
+ "endi",
  "futures-util",
  "hkdf",
  "hmac",
+ "md-5",
  "num",
  "num-bigint-dig",
- "once_cell",
  "pbkdf2",
  "rand",
  "serde",
  "sha2",
+ "subtle",
  "tokio",
  "zbus",
  "zeroize",
+ "zvariant",
 ]
 
 [[package]]
@@ -1720,20 +1638,21 @@ dependencies = [
 
 [[package]]
 name = "pango"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54768854025df6903061d0084fd9702a253ddfd60db7d9b751d43b76689a7f0a"
 dependencies = [
  "gio",
  "glib",
  "libc",
- "once_cell",
  "pango-sys",
 ]
 
 [[package]]
 name = "pango-sys"
-version = "0.19.0"
-source = "git+https://github.com/gtk-rs/gtk-rs-core#24ac2075336c7a1ccd5058fd3b732f6616f2f9da"
+version = "0.20.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b07cc57d10cee4ec661f718a6902cee18c2f4cfae08e87e5a390525946913390"
 dependencies = [
  "glib-sys",
  "gobject-sys",
@@ -1742,6 +1661,12 @@ dependencies = [
 ]
 
 [[package]]
+name = "paris"
+version = "1.5.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8fecab3723493c7851f292cb060f3ee1c42f19b8d749345d0d7eaf3fd19aa62d"
+
+[[package]]
 name = "parking"
 version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1749,9 +1674,9 @@ checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae"
 
 [[package]]
 name = "paste"
-version = "1.0.14"
+version = "1.0.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c"
+checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
 
 [[package]]
 name = "pbkdf2"
@@ -1765,9 +1690,9 @@ dependencies = [
 
 [[package]]
 name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
 
 [[package]]
 name = "pin-project"
@@ -1780,11 +1705,11 @@ dependencies = [
 
 [[package]]
 name = "pin-project"
-version = "1.1.3"
+version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3"
 dependencies = [
- "pin-project-internal 1.1.3",
+ "pin-project-internal 1.1.5",
 ]
 
 [[package]]
@@ -1800,20 +1725,20 @@ dependencies = [
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.3"
+version = "1.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "pin-project-lite"
-version = "0.2.13"
+version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58"
+checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
 
 [[package]]
 name = "pin-utils"
@@ -1823,20 +1748,20 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
 name = "piper"
-version = "0.2.1"
+version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
+checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
 dependencies = [
  "atomic-waker",
- "fastrand 2.0.1",
+ "fastrand",
  "futures-io",
 ]
 
 [[package]]
 name = "pkg-config"
-version = "0.3.27"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
 
 [[package]]
 name = "podman-api"
@@ -1845,7 +1770,7 @@ source = "git+https://github.com/vv9k/podman-api-rs.git#f35e6f9f9fdb9d9023aed341
 dependencies = [
  "base64",
  "byteorder",
- "bytes 1.5.0",
+ "bytes 1.7.1",
  "containers-api",
  "flate2",
  "futures-util",
@@ -1874,7 +1799,7 @@ dependencies = [
 
 [[package]]
 name = "pods"
-version = "2.0.0"
+version = "2.1.0-devel"
 dependencies = [
  "anyhow",
  "ashpd",
@@ -1883,14 +1808,15 @@ dependencies = [
  "gtk4",
  "indexmap",
  "libadwaita",
- "libpanel",
  "log",
+ "multi_log",
  "names",
  "oo7",
  "paste",
  "podman-api",
  "serde",
  "serde_json",
+ "simplelog",
  "sourceview5",
  "syslog",
  "tokio",
@@ -1901,32 +1827,17 @@ dependencies = [
 
 [[package]]
 name = "polling"
-version = "2.8.0"
+version = "3.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
+checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511"
 dependencies = [
- "autocfg",
- "bitflags 1.3.2",
  "cfg-if",
  "concurrent-queue",
- "libc",
- "log",
+ "hermit-abi 0.4.0",
  "pin-project-lite",
- "windows-sys",
-]
-
-[[package]]
-name = "polling"
-version = "3.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
-dependencies = [
- "cfg-if",
- "concurrent-queue",
- "pin-project-lite",
- "rustix 0.38.21",
+ "rustix",
  "tracing",
- "windows-sys",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -1937,67 +1848,36 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
 
 [[package]]
 name = "ppv-lite86"
-version = "0.2.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
-
-[[package]]
-name = "proc-macro-crate"
-version = "1.3.1"
+version = "0.2.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
+checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
 dependencies = [
- "once_cell",
- "toml_edit 0.19.15",
+ "zerocopy",
 ]
 
 [[package]]
 name = "proc-macro-crate"
-version = "2.0.0"
+version = "3.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
 dependencies = [
- "toml_edit 0.20.7",
-]
-
-[[package]]
-name = "proc-macro-error"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
-dependencies = [
- "proc-macro-error-attr",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "version_check",
-]
-
-[[package]]
-name = "proc-macro-error-attr"
-version = "1.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
-dependencies = [
- "proc-macro2",
- "quote",
- "version_check",
+ "toml_edit 0.21.1",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.69"
+version = "1.0.86"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da"
+checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.36"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
 dependencies = [
  "proc-macro2",
 ]
@@ -2043,18 +1923,18 @@ dependencies = [
 
 [[package]]
 name = "redox_syscall"
-version = "0.4.1"
+version = "0.5.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
+checksum = "2a908a6e00f1fdd0dfd9c0eb08ce85126f6d8bbda50017e74bc4a4b7d4a926a4"
 dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
 ]
 
 [[package]]
 name = "regex"
-version = "1.10.2"
+version = "1.10.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -2064,9 +1944,9 @@ dependencies = [
 
 [[package]]
 name = "regex-automata"
-version = "0.4.3"
+version = "0.4.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -2075,15 +1955,15 @@ dependencies = [
 
 [[package]]
 name = "regex-syntax"
-version = "0.8.2"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
+checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b"
 
 [[package]]
 name = "rustc-demangle"
-version = "0.1.23"
+version = "0.1.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
+checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
 
 [[package]]
 name = "rustc_version"
@@ -2096,90 +1976,77 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.37.27"
+version = "0.38.34"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
+checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f"
 dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.6.0",
  "errno",
- "io-lifetimes",
  "libc",
- "linux-raw-sys 0.3.8",
- "windows-sys",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b426b0506e5d50a7d8dafcf2e81471400deb602392c7dd110815afb4eaf02a3"
-dependencies = [
- "bitflags 2.4.1",
- "errno",
- "libc",
- "linux-raw-sys 0.4.11",
- "windows-sys",
+ "linux-raw-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "ryu"
-version = "1.0.15"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
 
 [[package]]
 name = "semver"
-version = "1.0.20"
+version = "1.0.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b"
 
 [[package]]
 name = "serde"
-version = "1.0.192"
+version = "1.0.206"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bca2a08484b285dcb282d0f67b26cadc0df8b19f8c12502c13d966bf9482f001"
+checksum = "5b3e4cd94123dd520a128bcd11e34d9e9e423e7e3e50425cb1b4b1e3549d0284"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.192"
+version = "1.0.206"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d6c7207fbec9faa48073f3e3074cbe553af6ea512d7c21ba46e434e70ea9fbc1"
+checksum = "fabfb6138d2383ea8208cf98ccf69cdfb1aff4088460681d84189aa259762f97"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.108"
+version = "1.0.122"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da"
 dependencies = [
  "itoa",
+ "memchr",
  "ryu",
  "serde",
 ]
 
 [[package]]
 name = "serde_repr"
-version = "0.1.17"
+version = "0.1.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145"
+checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "serde_spanned"
-version = "0.6.4"
+version = "0.6.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
 dependencies = [
  "serde",
 ]
@@ -2208,14 +2075,26 @@ dependencies = [
 
 [[package]]
 name = "signal-hook-registry"
-version = "1.4.1"
+version = "1.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
+checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
 dependencies = [
  "libc",
 ]
 
 [[package]]
+name = "simplelog"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "16257adbfaef1ee58b1363bdc0664c9b8e1e30aed86049635fb5f147d065a9c0"
+dependencies = [
+ "log",
+ "paris",
+ "termcolor",
+ "time",
+]
+
+[[package]]
 name = "slab"
 version = "0.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2226,34 +2105,25 @@ dependencies = [
 
 [[package]]
 name = "smallvec"
-version = "1.11.2"
+version = "1.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
 
 [[package]]
 name = "socket2"
-version = "0.4.10"
+version = "0.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d"
+checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
 dependencies = [
  "libc",
- "winapi",
-]
-
-[[package]]
-name = "socket2"
-version = "0.5.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b5fac59a5cb5dd637972e5fca70daf0523c9067fcdc4842f053dae04a18f8e9"
-dependencies = [
- "libc",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "sourceview5"
-version = "0.8.0"
-source = "git+https://gitlab.gnome.org/World/Rust/sourceview5-rs.git#5baec2e87544136de6c3e1a3614624d60986d530"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "905c83b38d4aff1800a12adba65b083deba61b4d948f62fc2ff7ad7d77656d05"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -2269,8 +2139,9 @@ dependencies = [
 
 [[package]]
 name = "sourceview5-sys"
-version = "0.8.0"
-source = "git+https://gitlab.gnome.org/World/Rust/sourceview5-rs.git#5baec2e87544136de6c3e1a3614624d60986d530"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4a3759467713554a8063faa380237ee2c753e89026bbe1b8e9611d991cb106ff"
 dependencies = [
  "gdk-pixbuf-sys",
  "gdk4-sys",
@@ -2285,9 +2156,9 @@ dependencies = [
 
 [[package]]
 name = "spin"
-version = "0.5.2"
+version = "0.9.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
 
 [[package]]
 name = "static_assertions"
@@ -2297,9 +2168,9 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
 
 [[package]]
 name = "subtle"
-version = "2.5.0"
+version = "2.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
 
 [[package]]
 name = "syn"
@@ -2314,9 +2185,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.39"
+version = "2.0.73"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+checksum = "837a7e8026c6ce912ff01cefbe8cafc2f8010ac49682e2a3d9decc3bce1ecaaf"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -2325,11 +2196,10 @@ dependencies = [
 
 [[package]]
 name = "syslog"
-version = "6.1.0"
+version = "7.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7434e95bcccce1215d30f4bf84fe8c00e8de1b9be4fb736d747ca53d36e7f96f"
+checksum = "019f1500a13379b7d051455df397c75770de6311a7a188a699499502704d9f10"
 dependencies = [
- "error-chain",
  "hostname",
  "libc",
  "log",
@@ -2338,9 +2208,9 @@ dependencies = [
 
 [[package]]
 name = "system-deps"
-version = "6.2.0"
+version = "7.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a2d580ff6a20c55dfb86be5f9c238f67835d0e81cbdea8bf5680e0897320331"
+checksum = "6c81f13d9a334a6c242465140bd262fae382b752ff2011c4f7419919a9c97922"
 dependencies = [
  "cfg-expr",
  "heck",
@@ -2351,9 +2221,9 @@ dependencies = [
 
 [[package]]
 name = "tar"
-version = "0.4.40"
+version = "0.4.41"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"
+checksum = "cb797dad5fb5b76fcf519e702f4a589483b5ef06567f160c392832c1f5e44909"
 dependencies = [
  "filetime",
  "libc",
@@ -2362,58 +2232,68 @@ dependencies = [
 
 [[package]]
 name = "target-lexicon"
-version = "0.12.12"
+version = "0.12.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
 
 [[package]]
 name = "temp-dir"
-version = "0.1.11"
+version = "0.1.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af547b166dd1ea4b472165569fc456cfb6818116f854690b0ff205e636523dab"
+checksum = "1f227968ec00f0e5322f9b8173c7a0cbcff6181a0a5b28e9892491c286277231"
 
 [[package]]
 name = "tempfile"
-version = "3.8.1"
+version = "3.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64"
 dependencies = [
  "cfg-if",
- "fastrand 2.0.1",
- "redox_syscall 0.4.1",
- "rustix 0.38.21",
- "windows-sys",
+ "fastrand",
+ "once_cell",
+ "rustix",
+ "windows-sys 0.59.0",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
+dependencies = [
+ "winapi-util",
 ]
 
 [[package]]
 name = "thiserror"
-version = "1.0.50"
+version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "time"
-version = "0.3.30"
+version = "0.3.36"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5"
+checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885"
 dependencies = [
  "deranged",
  "itoa",
  "libc",
+ "num-conv",
  "num_threads",
  "powerfmt",
  "serde",
@@ -2429,18 +2309,19 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
 
 [[package]]
 name = "time-macros"
-version = "0.2.15"
+version = "0.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ad70d68dba9e1f8aceda7aa6711965dfec1cac869f311a51bd08b3a2ccbce20"
+checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf"
 dependencies = [
+ "num-conv",
  "time-core",
 ]
 
 [[package]]
 name = "tinyvec"
-version = "1.6.0"
+version = "1.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938"
 dependencies = [
  "tinyvec_macros",
 ]
@@ -2453,27 +2334,26 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.34.0"
+version = "1.39.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+checksum = "daa4fb1bc778bd6f04cbfc4bb2d06a7396a8f299dc33ea1900cedaa316f467b1"
 dependencies = [
  "backtrace",
- "bytes 1.5.0",
+ "bytes 1.7.1",
  "libc",
  "mio",
- "num_cpus",
  "pin-project-lite",
  "signal-hook-registry",
- "socket2 0.5.5",
+ "socket2",
  "tracing",
- "windows-sys",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "tokio-stream"
-version = "0.1.14"
+version = "0.1.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842"
+checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af"
 dependencies = [
  "futures-core",
  "pin-project-lite",
@@ -2496,58 +2376,47 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.8.8"
+version = "0.8.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
+checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
 dependencies = [
  "serde",
  "serde_spanned",
  "toml_datetime",
- "toml_edit 0.21.0",
+ "toml_edit 0.22.20",
 ]
 
 [[package]]
 name = "toml_datetime"
-version = "0.6.5"
+version = "0.6.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
+checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "toml_edit"
-version = "0.19.15"
+version = "0.21.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
 dependencies = [
  "indexmap",
  "toml_datetime",
- "winnow",
+ "winnow 0.5.40",
 ]
 
 [[package]]
 name = "toml_edit"
-version = "0.20.7"
+version = "0.22.20"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
-dependencies = [
- "indexmap",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.21.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
+checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
 dependencies = [
  "indexmap",
  "serde",
  "serde_spanned",
  "toml_datetime",
- "winnow",
+ "winnow 0.6.18",
 ]
 
 [[package]]
@@ -2575,7 +2444,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
@@ -2589,9 +2458,9 @@ dependencies = [
 
 [[package]]
 name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
 
 [[package]]
 name = "typenum"
@@ -2601,19 +2470,20 @@ checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
 
 [[package]]
 name = "uds_windows"
-version = "1.0.2"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce65604324d3cce9b966701489fbd0cf318cb1f7bd9dd07ac9a4ee6fb791930d"
+checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
 dependencies = [
+ "memoffset",
  "tempfile",
  "winapi",
 ]
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.13"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
 
 [[package]]
 name = "unicode-ident"
@@ -2623,18 +2493,18 @@ checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
 
 [[package]]
 name = "unicode-normalization"
-version = "0.1.22"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
+checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5"
 dependencies = [
  "tinyvec",
 ]
 
 [[package]]
 name = "url"
-version = "2.4.1"
+version = "2.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c"
 dependencies = [
  "form_urlencoded",
  "idna",
@@ -2644,27 +2514,27 @@ dependencies = [
 
 [[package]]
 name = "utf8parse"
-version = "0.2.1"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
+checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
 
 [[package]]
 name = "version-compare"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29"
+checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b"
 
 [[package]]
 name = "version_check"
-version = "0.9.4"
+version = "0.9.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
 
 [[package]]
 name = "vte"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98b0a06c0f086f7abe70cf308967153479e223b6a9809f7dcc6c47b045574bc9"
+checksum = "40eb22ae96f050e0c0d6f7ce43feeae26c348fc4dea56928ca81537cfaa6188b"
 dependencies = [
  "utf8parse",
  "vte_generate_state_changes",
@@ -2673,9 +2543,10 @@ dependencies = [
 [[package]]
 name = "vte4"
 version = "0.8.0"
-source = "git+https://gitlab.gnome.org/World/Rust/vte4-rs.git#aa466f43ead6190c6c4b8792f78ed766df1c289e"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7759016227e58e3239b8dca9c4a70086345844872b1f27cba0dba990fef5cb44"
 dependencies = [
- "bitflags 1.3.2",
+ "cairo-rs",
  "gdk4",
  "gio",
  "glib",
@@ -2689,8 +2560,10 @@ dependencies = [
 [[package]]
 name = "vte4-sys"
 version = "0.8.0"
-source = "git+https://gitlab.gnome.org/World/Rust/vte4-rs.git#aa466f43ead6190c6c4b8792f78ed766df1c289e"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c1aa57d29283c6eeac2e34c16791436275d254ac02b8590b02698feef197234"
 dependencies = [
+ "cairo-sys-rs",
  "gdk4-sys",
  "gio-sys",
  "glib-sys",
@@ -2702,21 +2575,15 @@ dependencies = [
 
 [[package]]
 name = "vte_generate_state_changes"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d257817081c7dffcdbab24b9e62d2def62e2ff7d00b1c20062551e6cccc145ff"
+checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e"
 dependencies = [
  "proc-macro2",
  "quote",
 ]
 
 [[package]]
-name = "waker-fn"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
-
-[[package]]
 name = "want"
 version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2733,9 +2600,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.88"
+version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8"
 dependencies = [
  "cfg-if",
  "wasm-bindgen-macro",
@@ -2743,24 +2610,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.88"
+version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.88"
+version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -2768,22 +2635,22 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.88"
+version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.88"
+version = "0.2.92"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96"
 
 [[package]]
 name = "winapi"
@@ -2802,38 +2669,67 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
 
 [[package]]
+name = "winapi-util"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
+dependencies = [
+ "windows-sys 0.59.0",
+]
+
+[[package]]
 name = "winapi-x86_64-pc-windows-gnu"
 version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
+name = "windows"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be"
+dependencies = [
+ "windows-core",
+ "windows-targets",
+]
+
+[[package]]
 name = "windows-core"
-version = "0.51.1"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
 dependencies = [
  "windows-targets",
 ]
 
 [[package]]
 name = "windows-sys"
-version = "0.48.0"
+version = "0.59.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
 dependencies = [
  "windows-targets",
 ]
 
 [[package]]
 name = "windows-targets"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
+checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
 dependencies = [
  "windows_aarch64_gnullvm",
  "windows_aarch64_msvc",
  "windows_i686_gnu",
+ "windows_i686_gnullvm",
  "windows_i686_msvc",
  "windows_x86_64_gnu",
  "windows_x86_64_gnullvm",
@@ -2842,94 +2738,108 @@ dependencies = [
 
 [[package]]
 name = "windows_aarch64_gnullvm"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
+checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
 
 [[package]]
 name = "windows_aarch64_msvc"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
+checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
 
 [[package]]
 name = "windows_i686_gnu"
-version = "0.48.5"
+version = "0.52.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
+
+[[package]]
+name = "windows_i686_gnullvm"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
+checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
 
 [[package]]
 name = "windows_i686_msvc"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
+checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
 
 [[package]]
 name = "windows_x86_64_gnu"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
+checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
 
 [[package]]
 name = "windows_x86_64_gnullvm"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
+checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
 
 [[package]]
 name = "windows_x86_64_msvc"
-version = "0.48.5"
+version = "0.52.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
+checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
 
 [[package]]
 name = "winnow"
-version = "0.5.19"
+version = "0.5.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "winnow"
+version = "0.6.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
 dependencies = [
  "memchr",
 ]
 
 [[package]]
 name = "xattr"
-version = "1.0.1"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
+checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f"
 dependencies = [
  "libc",
+ "linux-raw-sys",
+ "rustix",
 ]
 
 [[package]]
 name = "xdg-home"
-version = "1.0.0"
+version = "1.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd"
+checksum = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
 dependencies = [
- "nix",
- "winapi",
+ "libc",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
 name = "zbus"
-version = "3.14.1"
+version = "4.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948"
+checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
 dependencies = [
  "async-broadcast",
  "async-process",
  "async-recursion",
  "async-trait",
- "byteorder",
- "derivative",
  "enumflags2",
- "event-listener 2.5.3",
+ "event-listener",
  "futures-core",
  "futures-sink",
  "futures-util",
  "hex",
  "nix",
- "once_cell",
  "ordered-stream",
  "rand",
  "serde",
@@ -2939,7 +2849,7 @@ dependencies = [
  "tokio",
  "tracing",
  "uds_windows",
- "winapi",
+ "windows-sys 0.52.0",
  "xdg-home",
  "zbus_macros",
  "zbus_names",
@@ -2948,23 +2858,22 @@ dependencies = [
 
 [[package]]
 name = "zbus_macros"
-version = "3.14.1"
+version = "4.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d"
+checksum = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
 dependencies = [
- "proc-macro-crate 1.3.1",
+ "proc-macro-crate",
  "proc-macro2",
  "quote",
- "regex",
- "syn 1.0.109",
+ "syn 2.0.73",
  "zvariant_utils",
 ]
 
 [[package]]
 name = "zbus_names"
-version = "2.6.0"
+version = "3.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9"
+checksum = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
 dependencies = [
  "serde",
  "static_assertions",
@@ -2972,10 +2881,31 @@ dependencies = [
 ]
 
 [[package]]
+name = "zerocopy"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
+dependencies = [
+ "byteorder",
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.35"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.73",
+]
+
+[[package]]
 name = "zeroize"
-version = "1.6.0"
+version = "1.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
+checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
 dependencies = [
  "zeroize_derive",
 ]
@@ -2988,18 +2918,17 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.73",
 ]
 
 [[package]]
 name = "zvariant"
-version = "3.15.0"
+version = "4.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c"
+checksum = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
 dependencies = [
- "byteorder",
+ "endi",
  "enumflags2",
- "libc",
  "serde",
  "static_assertions",
  "url",
@@ -3008,24 +2937,24 @@ dependencies = [
 
 [[package]]
 name = "zvariant_derive"
-version = "3.15.0"
+version = "4.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd"
+checksum = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
 dependencies = [
- "proc-macro-crate 1.3.1",
+ "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.73",
  "zvariant_utils",
 ]
 
 [[package]]
 name = "zvariant_utils"
-version = "1.0.1"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200"
+checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.73",
 ]
diff --git a/pkgs/applications/virtualization/pods/default.nix b/pkgs/applications/virtualization/pods/default.nix
index 65fb88824497f..201fcf89988bc 100644
--- a/pkgs/applications/virtualization/pods/default.nix
+++ b/pkgs/applications/virtualization/pods/default.nix
@@ -19,26 +19,19 @@
 
 stdenv.mkDerivation rec {
   pname = "pods";
-  version = "2.0.0";
+  version = "2.0.1-unstable-2024-08-11";
 
   src = fetchFromGitHub {
     owner = "marhkb";
     repo = pname;
-    rev = "v${version}";
-    sha256 = "sha256-jSN4WmyzYARhDkwAtTYD4iXNTM1QQbAAwQ/ICHg7k3k=";
+    rev = "146a85b4860375ac0a5be8d7be57fb12753a3c42";
+    sha256 = "sha256-KaS38XC+V3jRPPTnI4UqMc9KGAC7INHMu47LVo9YP44=";
   };
 
   cargoDeps = rustPlatform.importCargoLock {
     lockFile = ./Cargo.lock;
     outputHashes = {
-      "ashpd-0.6.0" = "sha256-kLacOwMZ4MQlFYCx5J4kI4J+a9fVRF5Ii/AkWOL/TNQ=";
-      "cairo-rs-0.19.0" = "sha256-8s+ngacR7d2wb1FKYf0pycxMQbgW63zMKpMgaUs2e+c=";
-      "gdk4-0.8.0" = "sha256-o9HC4VX6ntPk0JXAX5Whhu0qlUdpPky/1PNrRd9zjdk=";
-      "libadwaita-0.6.0" = "sha256-3Kge7SIE+vex/uOIt7hjmU68jidkBjrW96o24hu3e/U=";
-      "libpanel-0.3.0" = "sha256-LA8ynd+7imEdQwvLslmKw+pPNbAEle9fZ2sFuyRY/jU=";
       "podman-api-0.10.0" = "sha256-nbxK/U5G+PlbytpHdr63x/C69hBgedPXBFfgdzT9fdc=";
-      "sourceview5-0.8.0" = "sha256-+f+mm682H4eRC7Xzx5wukecDZq+hMpJQ3+3xHzG00Go=";
-      "vte4-0.8.0" = "sha256-KZBpfSAngbp5czAXdKA7Au5uYqs2L5MyNsnXcBH77lo=";
     };
   };
 
diff --git a/pkgs/applications/virtualization/qboot/default.nix b/pkgs/applications/virtualization/qboot/default.nix
index f5a1e13410b98..e0d833d0c2d50 100644
--- a/pkgs/applications/virtualization/qboot/default.nix
+++ b/pkgs/applications/virtualization/qboot/default.nix
@@ -26,7 +26,7 @@ stdenv.mkDerivation {
     description = "Simple x86 firmware for booting Linux";
     homepage = "https://github.com/bonzini/qboot";
     license = lib.licenses.gpl2;
-    maintainers = with lib.maintainers; [ ];
+    maintainers = [ ];
     platforms = [ "x86_64-linux" "i686-linux" ];
   };
 }
diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix
index 982eee2cbb1fc..8625069da8b19 100644
--- a/pkgs/applications/virtualization/qemu/default.nix
+++ b/pkgs/applications/virtualization/qemu/default.nix
@@ -1,52 +1,67 @@
-{ lib, stdenv, fetchurl, fetchpatch, python3Packages, zlib, pkg-config, glib, buildPackages
-, pixman, vde2, alsa-lib, texinfo, flex
+{ lib, stdenv, fetchurl, fetchpatch, python3Packages, zlib, pkg-config, glib, overrideSDK, buildPackages
+, pixman, vde2, alsa-lib, flex, pcre2
 , bison, lzo, snappy, libaio, libtasn1, gnutls, nettle, curl, dtc, ninja, meson
 , sigtool
 , makeWrapper, removeReferencesTo
 , attr, libcap, libcap_ng, socat, libslirp
-, CoreServices, Cocoa, Hypervisor, rez, setfile, vmnet
-, guestAgentSupport ? (with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows) && !toolsOnly
-, numaSupport ? stdenv.isLinux && !stdenv.isAarch32 && !toolsOnly, numactl
-, seccompSupport ? stdenv.isLinux && !toolsOnly, libseccomp
-, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner && !toolsOnly
-, pulseSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libpulseaudio
-, pipewireSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, pipewire
-, sdlSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, SDL2, SDL2_image
-, jackSupport ? !stdenv.isDarwin && !nixosTestRunner && !toolsOnly, libjack2
-, gtkSupport ? !stdenv.isDarwin && !xenSupport && !nixosTestRunner && !toolsOnly, gtk3, gettext, vte, wrapGAppsHook3
-, vncSupport ? !nixosTestRunner && !toolsOnly, libjpeg, libpng
-, smartcardSupport ? !nixosTestRunner && !toolsOnly, libcacard
-, spiceSupport ? true && !nixosTestRunner && !toolsOnly, spice, spice-protocol
-, ncursesSupport ? !nixosTestRunner && !toolsOnly, ncurses
+, CoreServices, Cocoa, Hypervisor, Kernel, rez, setfile, vmnet
+, guestAgentSupport ? (with stdenv.hostPlatform; isLinux || isNetBSD || isOpenBSD || isSunOS || isWindows) && !minimal
+, numaSupport ? stdenv.hostPlatform.isLinux && !stdenv.hostPlatform.isAarch32 && !minimal, numactl
+, seccompSupport ? stdenv.hostPlatform.isLinux && !minimal, libseccomp
+, alsaSupport ? lib.hasSuffix "linux" stdenv.hostPlatform.system && !nixosTestRunner && !minimal
+, pulseSupport ? !stdenv.hostPlatform.isDarwin && !nixosTestRunner && !minimal, libpulseaudio
+, pipewireSupport ? !stdenv.hostPlatform.isDarwin && !nixosTestRunner && !minimal, pipewire
+, sdlSupport ? !stdenv.hostPlatform.isDarwin && !nixosTestRunner && !minimal, SDL2, SDL2_image
+, jackSupport ? !stdenv.hostPlatform.isDarwin && !nixosTestRunner && !minimal, libjack2
+, gtkSupport ? !stdenv.hostPlatform.isDarwin && !xenSupport && !nixosTestRunner && !minimal, gtk3, gettext, vte, wrapGAppsHook3
+, vncSupport ? !nixosTestRunner && !minimal, libjpeg, libpng
+, smartcardSupport ? !nixosTestRunner && !minimal, libcacard
+, spiceSupport ? true && !nixosTestRunner && !minimal, spice, spice-protocol
+, ncursesSupport ? !nixosTestRunner && !minimal, ncurses
 , usbredirSupport ? spiceSupport, usbredir
 , xenSupport ? false, xen
 , cephSupport ? false, ceph
 , glusterfsSupport ? false, glusterfs, libuuid
 , openGLSupport ? sdlSupport, mesa, libepoxy, libdrm
-, rutabagaSupport ? openGLSupport && !toolsOnly && lib.meta.availableOn stdenv.hostPlatform rutabaga_gfx, rutabaga_gfx
+, rutabagaSupport ? openGLSupport && !minimal && lib.meta.availableOn stdenv.hostPlatform rutabaga_gfx, rutabaga_gfx
 , virglSupport ? openGLSupport, virglrenderer
-, libiscsiSupport ? !toolsOnly, libiscsi
+, libiscsiSupport ? !minimal, libiscsi
 , smbdSupport ? false, samba
-, tpmSupport ? !toolsOnly
-, uringSupport ? stdenv.isLinux, liburing
-, canokeySupport ? !toolsOnly, canokey-qemu
-, capstoneSupport ? !toolsOnly, capstone
-, enableDocs ? true
+, tpmSupport ? !minimal
+, uringSupport ? stdenv.hostPlatform.isLinux && !userOnly, liburing
+, canokeySupport ? !minimal, canokey-qemu
+, capstoneSupport ? !minimal, capstone
+, pluginsSupport ? !stdenv.hostPlatform.isStatic
+, enableDocs ? !minimal || toolsOnly
+, enableTools ? !minimal || toolsOnly
+, enableBlobs ? !minimal || toolsOnly
 , hostCpuOnly ? false
 , hostCpuTargets ? (if toolsOnly
                     then [ ]
                     else if hostCpuOnly
-                    then (lib.optional stdenv.isx86_64 "i386-softmmu"
+                    then (lib.optional stdenv.hostPlatform.isx86_64 "i386-softmmu"
                           ++ ["${stdenv.hostPlatform.qemuArch}-softmmu"])
                     else null)
 , nixosTestRunner ? false
 , toolsOnly ? false
+, userOnly ? false
+, minimal ? toolsOnly || userOnly
 , gitUpdater
 , qemu-utils # for tests attribute
 }:
 
 let
   hexagonSupport = hostCpuTargets == null || lib.elem "hexagon" hostCpuTargets;
+
+  buildPlatformStdenv =
+    if stdenv.buildPlatform.isDarwin then
+      overrideSDK buildPackages.stdenv {
+        # Keep these values in sync with `all-packages.nix`.
+        darwinSdkVersion = "12.3";
+        darwinMinVersion = "12.0";
+      }
+    else
+      buildPackages.stdenv;
 in
 
 stdenv.mkDerivation (finalAttrs: {
@@ -54,34 +69,37 @@ stdenv.mkDerivation (finalAttrs: {
     + lib.optionalString xenSupport "-xen"
     + lib.optionalString hostCpuOnly "-host-cpu-only"
     + lib.optionalString nixosTestRunner "-for-vm-tests"
-    + lib.optionalString toolsOnly "-utils";
-  version = "9.0.1";
+    + lib.optionalString toolsOnly "-utils"
+    + lib.optionalString userOnly "-user";
+  version = "9.1.0";
 
   src = fetchurl {
     url = "https://download.qemu.org/qemu-${finalAttrs.version}.tar.xz";
-    hash = "sha256-0PTbD70VHAzxb4SusqUA9ulQCXMlRvRNr6uNIEm7uAU=";
+    hash = "sha256-gWtwIqi6fCrDDi4M+XPoJva8yFBTOWAyEsXt6OlNeDQ=";
   };
 
-  depsBuildBuild = [ buildPackages.stdenv.cc ]
+  depsBuildBuild = [ buildPlatformStdenv.cc ]
     ++ lib.optionals hexagonSupport [ pkg-config ];
 
   nativeBuildInputs = [
     makeWrapper removeReferencesTo
-    pkg-config flex bison dtc meson ninja
+    pkg-config flex bison meson ninja
 
     # Don't change this to python3 and python3.pkgs.*, breaks cross-compilation
-    python3Packages.python python3Packages.sphinx python3Packages.sphinx-rtd-theme
+    python3Packages.python
   ]
     ++ lib.optionals gtkSupport [ wrapGAppsHook3 ]
+    ++ lib.optionals enableDocs [ python3Packages.sphinx python3Packages.sphinx-rtd-theme ]
     ++ lib.optionals hexagonSupport [ glib ]
-    ++ lib.optionals stdenv.isDarwin [ sigtool ];
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ sigtool ]
+    ++ lib.optionals (!userOnly) [ dtc ];
 
-  buildInputs = [ dtc zlib glib pixman
-    vde2 texinfo lzo snappy libtasn1
+  buildInputs = [ zlib glib pixman
+    vde2 lzo snappy libtasn1
     gnutls nettle curl libslirp
   ]
     ++ lib.optionals ncursesSupport [ ncurses ]
-    ++ lib.optionals stdenv.isDarwin [ CoreServices Cocoa Hypervisor rez setfile vmnet ]
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ CoreServices Cocoa Hypervisor Kernel rez setfile vmnet ]
     ++ lib.optionals seccompSupport [ libseccomp ]
     ++ lib.optionals numaSupport [ numactl ]
     ++ lib.optionals alsaSupport [ alsa-lib ]
@@ -94,7 +112,8 @@ stdenv.mkDerivation (finalAttrs: {
     ++ lib.optionals smartcardSupport [ libcacard ]
     ++ lib.optionals spiceSupport [ spice-protocol spice ]
     ++ lib.optionals usbredirSupport [ usbredir ]
-    ++ lib.optionals stdenv.isLinux [ libaio libcap_ng libcap attr ]
+    ++ lib.optionals stdenv.hostPlatform.isLinux [ libcap_ng libcap attr ]
+    ++ lib.optionals (stdenv.hostPlatform.isLinux && !userOnly) [ libaio ]
     ++ lib.optionals xenSupport [ xen ]
     ++ lib.optionals cephSupport [ ceph ]
     ++ lib.optionals glusterfsSupport [ glusterfs libuuid ]
@@ -105,28 +124,19 @@ stdenv.mkDerivation (finalAttrs: {
     ++ lib.optionals smbdSupport [ samba ]
     ++ lib.optionals uringSupport [ liburing ]
     ++ lib.optionals canokeySupport [ canokey-qemu ]
-    ++ lib.optionals capstoneSupport [ capstone ];
+    ++ lib.optionals capstoneSupport [ capstone ]
+    ++ lib.optionals (!userOnly) [ dtc ];
 
   dontUseMesonConfigure = true; # meson's configurePhase isn't compatible with qemu build
+  dontAddStaticConfigureFlags = true;
 
   outputs = [ "out" ] ++ lib.optional guestAgentSupport "ga";
   # On aarch64-linux we would shoot over the Hydra's 2G output limit.
-  separateDebugInfo = !(stdenv.isAarch64 && stdenv.isLinux);
+  separateDebugInfo = !(stdenv.hostPlatform.isAarch64 && stdenv.hostPlatform.isLinux);
 
   patches = [
     ./fix-qemu-ga.patch
 
-    # QEMU upstream does not demand compatibility to pre-10.13, so 9p-darwin
-    # support on nix requires utimensat fallback. The patch adding this fallback
-    # set was removed during the process of upstreaming this functionality, and
-    # will still be needed in nix until the macOS SDK reaches 10.13+.
-    ./provide-fallback-for-utimensat.patch
-    # Cocoa clipboard support only works on macOS 10.14+
-    ./revert-ui-cocoa-add-clipboard-support.patch
-    # Standard about panel requires AppKit and macOS 10.13+
-    ./revert-ui-cocoa-use-the-standard-about-panel.patch
-    # Safe area insets require macOS 11+
-    ./remove-ui-cocoa-use-safe-area-insets.patch
     # Workaround for upstream issue with nested virtualisation: https://gitlab.com/qemu-project/qemu/-/issues/1008
     (fetchpatch {
       url = "https://gitlab.com/qemu-project/qemu/-/commit/3e4546d5bd38a1e98d4bd2de48631abf0398a3a2.diff";
@@ -158,7 +168,7 @@ stdenv.mkDerivation (finalAttrs: {
   configureFlags = [
     "--disable-strip" # We'll strip ourselves after separating debug info.
     (lib.enableFeature enableDocs "docs")
-    "--enable-tools"
+    (lib.enableFeature enableTools "tools")
     "--localstatedir=/var"
     "--sysconfdir=/etc"
     "--cross-prefix=${stdenv.cc.targetPrefix}"
@@ -169,8 +179,8 @@ stdenv.mkDerivation (finalAttrs: {
     ++ lib.optional spiceSupport "--enable-spice"
     ++ lib.optional usbredirSupport "--enable-usb-redir"
     ++ lib.optional (hostCpuTargets != null) "--target-list=${lib.concatStringsSep "," hostCpuTargets}"
-    ++ lib.optionals stdenv.isDarwin [ "--enable-cocoa" "--enable-hvf" ]
-    ++ lib.optional stdenv.isLinux "--enable-linux-aio"
+    ++ lib.optionals stdenv.hostPlatform.isDarwin [ "--enable-cocoa" "--enable-hvf" ]
+    ++ lib.optional (stdenv.hostPlatform.isLinux && !userOnly) "--enable-linux-aio"
     ++ lib.optional gtkSupport "--enable-gtk"
     ++ lib.optional xenSupport "--enable-xen"
     ++ lib.optional cephSupport "--enable-rbd"
@@ -182,7 +192,11 @@ stdenv.mkDerivation (finalAttrs: {
     ++ lib.optional smbdSupport "--smbd=${samba}/bin/smbd"
     ++ lib.optional uringSupport "--enable-linux-io-uring"
     ++ lib.optional canokeySupport "--enable-canokey"
-    ++ lib.optional capstoneSupport "--enable-capstone";
+    ++ lib.optional capstoneSupport "--enable-capstone"
+    ++ lib.optional (!pluginsSupport) "--disable-plugins"
+    ++ lib.optional (!enableBlobs) "--disable-install-blobs"
+    ++ lib.optional userOnly "--disable-system"
+    ++ lib.optional stdenv.hostPlatform.isStatic "--static";
 
   dontWrapGApps = true;
 
@@ -190,7 +204,7 @@ stdenv.mkDerivation (finalAttrs: {
   # voiding the entitlements and making it non-operational.
   # The alternative is to re-sign with entitlements after stripping:
   # * https://github.com/qemu/qemu/blob/v6.1.0/scripts/entitlement.sh#L25
-  dontStrip = stdenv.isDarwin;
+  dontStrip = stdenv.hostPlatform.isDarwin;
 
   postFixup = ''
     # the .desktop is both invalid and pointless
@@ -206,6 +220,11 @@ stdenv.mkDerivation (finalAttrs: {
     for f in $out/bin/qemu-system-*; do
       wrapGApp $f
     done
+  '' + lib.optionalString stdenv.hostPlatform.isStatic ''
+    # HACK: Otherwise the result will have the entire buildInputs closure
+    # injected by the pkgsStatic stdenv
+    # <https://github.com/NixOS/nixpkgs/issues/83667>
+    rm -f $out/nix-support/propagated-build-inputs
   '';
   preBuild = "cd build";
 
@@ -241,7 +260,7 @@ stdenv.mkDerivation (finalAttrs: {
     # xattrs are not allowed in the sandbox
     substituteInPlace ../tests/qtest/virtio-9p-test.c \
       --replace-fail mapped-xattr mapped-file
-  '' + lib.optionalString stdenv.isDarwin ''
+  '' + lib.optionalString stdenv.hostPlatform.isDarwin ''
     # skip test that stalls on darwin, perhaps due to subtle differences
     # in fifo behaviour
     substituteInPlace ../tests/unit/meson.build \
@@ -249,7 +268,7 @@ stdenv.mkDerivation (finalAttrs: {
   '';
 
   # Add a ‘qemu-kvm’ wrapper for compatibility/convenience.
-  postInstall = lib.optionalString (!toolsOnly) ''
+  postInstall = lib.optionalString (!minimal) ''
     ln -s $out/bin/qemu-system-${stdenv.hostPlatform.qemuArch} $out/bin/qemu-kvm
   '';
 
@@ -274,11 +293,17 @@ stdenv.mkDerivation (finalAttrs: {
     homepage = "https://www.qemu.org/";
     description = "Generic and open source machine emulator and virtualizer";
     license = licenses.gpl2Plus;
-    maintainers = with maintainers; [ eelco qyliss ];
+    maintainers = with maintainers; [ qyliss ] ++ lib.optionals xenSupport xen.meta.maintainers;
     platforms = platforms.unix;
   }
   # toolsOnly: Does not have qemu-kvm and there's no main support tool
-  // lib.optionalAttrs (!toolsOnly) {
+  # userOnly: There's one qemu-<arch> for every architecture
+  // lib.optionalAttrs (!toolsOnly && !userOnly) {
     mainProgram = "qemu-kvm";
+  }
+  # userOnly: https://qemu.readthedocs.io/en/v9.0.2/user/main.html
+  // lib.optionalAttrs userOnly {
+    platforms = with platforms; (linux ++ freebsd ++ openbsd ++ netbsd);
+    description = "QEMU User space emulator - launch executables compiled for one CPU on another CPU";
   };
 })
diff --git a/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch b/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
index 94dec69168002..9a4a7f0d432ee 100644
--- a/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
+++ b/pkgs/applications/virtualization/qemu/fix-qemu-ga.patch
@@ -1,36 +1,45 @@
-diff --git i/qga/commands-posix.c w/qga/commands-posix.c
-index 954efed01b..39c4b916ce 100644
---- i/qga/commands-posix.c
-+++ w/qga/commands-posix.c
-@@ -123,6 +123,8 @@ void qmp_guest_shutdown(bool has_mode, const char *mode, Error **errp)
-         execl("/sbin/shutdown", "shutdown", shutdown_flag, "-g0", "-y",
-               "hypervisor initiated shutdown", (char *)NULL);
- #else
-+        execl("/run/current-system/sw/bin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
-+               "hypervisor initiated shutdown", (char *)NULL);
-         execl("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
-                "hypervisor initiated shutdown", (char *)NULL);
- #endif
-@@ -158,11 +160,13 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
-     pid_t pid;
-     Error *local_err = NULL;
-     struct timeval tv;
-+    static const char hwclock_path_nix[] = "/run/current-system/sw/bin/hwclock";
-     static const char hwclock_path[] = "/sbin/hwclock";
-     static int hwclock_available = -1;
- 
-     if (hwclock_available < 0) {
--        hwclock_available = (access(hwclock_path, X_OK) == 0);
-+        hwclock_available = (access(hwclock_path_nix, X_OK) == 0) ||
-+                            (access(hwclock_path, X_OK) == 0);
+diff --git a/qga/commands-posix.c b/qga/commands-posix.c
+index c2bd0b4316..47cee1c351 100644
+--- a/qga/commands-posix.c
++++ b/qga/commands-posix.c
+@@ -246,7 +246,7 @@ void qmp_guest_shutdown(const char *mode, Error **errp)
+         return;
      }
  
-     if (!hwclock_available) {
-@@ -208,6 +212,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+-    const char *argv[] = {"/sbin/shutdown",
++    const char *argv[] = {"/run/current-system/sw/bin/shutdown",
+ #ifdef CONFIG_SOLARIS
+                           shutdown_flag, "-g0", "-y",
+ #elif defined(CONFIG_BSD)
+@@ -257,6 +257,10 @@ void qmp_guest_shutdown(const char *mode, Error **errp)
+                           "hypervisor initiated shutdown", (char *) NULL};
+ 
+     ga_run_command(argv, NULL, "shutdown", &local_err);
++    if (local_err) {
++        argv[0] = "/sbin/shutdown";
++        ga_run_command(argv, NULL, "shutdown", &local_err);
++    }
+     if (local_err) {
+         error_propagate(errp, local_err);
+         return;
+@@ -270,7 +274,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+     int ret;
+     Error *local_err = NULL;
+     struct timeval tv;
+-    const char *argv[] = {"/sbin/hwclock", has_time ? "-w" : "-s", NULL};
++    const char *argv[] = {"/run/current-system/sw/bin/hwclock", has_time ? "-w" : "-s", NULL};
  
-         /* Use '/sbin/hwclock -w' to set RTC from the system time,
-          * or '/sbin/hwclock -s' to set the system time from RTC. */
-+        execl(hwclock_path_nix, "hwclock", has_time ? "-w" : "-s", NULL);
-         execl(hwclock_path, "hwclock", has_time ? "-w" : "-s", NULL);
-         _exit(EXIT_FAILURE);
-     } else if (pid < 0) {
+     /* If user has passed a time, validate and set it. */
+     if (has_time) {
+@@ -303,6 +307,11 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
+      * hardware clock (RTC). */
+     ga_run_command(argv, NULL, "set hardware clock to system time",
+                    &local_err);
++    if (local_err) {
++        argv[0] = "/sbin/hwclock";
++        ga_run_command(argv, NULL, "set hardware clock to system time",
++                       &local_err);
++    }
+     if (local_err) {
+         error_propagate(errp, local_err);
+         return;
diff --git a/pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch b/pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch
deleted file mode 100644
index dc4f4abb27383..0000000000000
--- a/pkgs/applications/virtualization/qemu/provide-fallback-for-utimensat.patch
+++ /dev/null
@@ -1,189 +0,0 @@
-From 2ec149ea3f0046fa83e3be74aca192649a60be47 Mon Sep 17 00:00:00 2001
-From: Keno Fischer <keno@juliacomputing.com>
-Date: Sat, 16 Jun 2018 20:56:54 -0400
-Subject: [PATCH] 9p: darwin: Provide fallback impl for utimensat
-
-This function is new in Mac OS 10.13. Provide a fallback implementation
-when building against older SDKs. The complication in the definition comes
-having to separately handle the used SDK version and the target OS version.
-
-- If the SDK version is too low (__MAC_10_13 not defined), utimensat is not
-  defined in the header, so we must not try to use it (doing so would error).
-- Otherwise, if the targetted OS version is at least 10.13, we know this
-  function is available, so we can unconditionally call it.
-- Lastly, we check for the availability of the __builtin_available macro to
-  potentially insert a dynamic check for this OS version. However, __builtin_available
-  is only available with sufficiently recent versions of clang and while all
-  Apple clang versions that ship with Xcode versions that support the 10.13
-  SDK support with builtin, we want to allow building with compilers other
-  than Apple clang that may not support this builtin.
-
-Signed-off-by: Keno Fischer <keno@juliacomputing.com>
-Signed-off-by: Michael Roitzsch <reactorcontrol@icloud.com>
-Signed-off-by: Will Cohen <wwcohen@gmail.com>
----
- hw/9pfs/9p-local.c       |  2 +-
- hw/9pfs/9p-util-darwin.c | 96 ++++++++++++++++++++++++++++++++++++++++
- hw/9pfs/9p-util-linux.c  |  6 +++
- hw/9pfs/9p-util.h        |  8 ++++
- 4 files changed, 111 insertions(+), 1 deletion(-)
-
-diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
-index 9d07620235..9c77a431d5 100644
---- a/hw/9pfs/9p-local.c
-+++ b/hw/9pfs/9p-local.c
-@@ -1081,7 +1081,7 @@ static int local_utimensat(FsContext *s, V9fsPath *fs_path,
-         goto out;
-     }
- 
--    ret = qemu_utimensat(dirfd, name, buf, AT_SYMLINK_NOFOLLOW);
-+    ret = utimensat_nofollow(dirfd, name, buf);
-     close_preserve_errno(dirfd);
- out:
-     g_free(dirpath);
-diff --git a/hw/9pfs/9p-util-darwin.c b/hw/9pfs/9p-util-darwin.c
-index 95146e7354..74ab2a7f99 100644
---- a/hw/9pfs/9p-util-darwin.c
-+++ b/hw/9pfs/9p-util-darwin.c
-@@ -145,3 +145,99 @@ int qemu_mknodat(int dirfd, const char *filename, mode_t mode, dev_t dev)
- }
- 
- #endif
-+
-+#ifndef __has_builtin
-+#define __has_builtin(x) 0
-+#endif
-+
-+static int update_times_from_stat(int fd, struct timespec times[2],
-+                                  int update0, int update1)
-+{
-+    struct stat buf;
-+    int ret = fstat(fd, &buf);
-+    if (ret == -1) {
-+        return ret;
-+    }
-+    if (update0) {
-+        times[0] = buf.st_atimespec;
-+    }
-+    if (update1) {
-+        times[1] = buf.st_mtimespec;
-+    }
-+    return 0;
-+}
-+
-+int utimensat_nofollow(int dirfd, const char *filename,
-+                       const struct timespec times_in[2])
-+{
-+    int ret, fd;
-+    int special0, special1;
-+    struct timeval futimes_buf[2];
-+    struct timespec times[2];
-+    memcpy(times, times_in, 2 * sizeof(struct timespec));
-+
-+/* Check whether we have an SDK version that defines utimensat */
-+#if defined(__MAC_10_13)
-+# if __MAC_OS_X_VERSION_MIN_REQUIRED >= __MAC_10_13
-+#  define UTIMENSAT_AVAILABLE 1
-+# elif __has_builtin(__builtin_available)
-+#  define UTIMENSAT_AVAILABLE __builtin_available(macos 10.13, *)
-+# else
-+#  define UTIMENSAT_AVAILABLE 0
-+# endif
-+    if (UTIMENSAT_AVAILABLE) {
-+        return utimensat(dirfd, filename, times, AT_SYMLINK_NOFOLLOW);
-+    }
-+#endif
-+
-+    /* utimensat not available. Use futimes. */
-+    fd = openat_file(dirfd, filename, O_PATH_9P_UTIL | O_NOFOLLOW, 0);
-+    if (fd == -1) {
-+        return -1;
-+    }
-+
-+    special0 = times[0].tv_nsec == UTIME_OMIT;
-+    special1 = times[1].tv_nsec == UTIME_OMIT;
-+    if (special0 || special1) {
-+        /* If both are set, nothing to do */
-+        if (special0 && special1) {
-+            ret = 0;
-+            goto done;
-+        }
-+
-+        ret = update_times_from_stat(fd, times, special0, special1);
-+        if (ret < 0) {
-+            goto done;
-+        }
-+    }
-+
-+    special0 = times[0].tv_nsec == UTIME_NOW;
-+    special1 = times[1].tv_nsec == UTIME_NOW;
-+    if (special0 || special1) {
-+        ret = futimes(fd, NULL);
-+        if (ret < 0) {
-+            goto done;
-+        }
-+
-+        /* If both are set, we are done */
-+        if (special0 && special1) {
-+            ret = 0;
-+            goto done;
-+        }
-+
-+        ret = update_times_from_stat(fd, times, special0, special1);
-+        if (ret < 0) {
-+            goto done;
-+        }
-+    }
-+
-+    futimes_buf[0].tv_sec = times[0].tv_sec;
-+    futimes_buf[0].tv_usec = times[0].tv_nsec / 1000;
-+    futimes_buf[1].tv_sec = times[1].tv_sec;
-+    futimes_buf[1].tv_usec = times[1].tv_nsec / 1000;
-+    ret = futimes(fd, futimes_buf);
-+
-+done:
-+    close_preserve_errno(fd);
-+    return ret;
-+}
-diff --git a/hw/9pfs/9p-util-linux.c b/hw/9pfs/9p-util-linux.c
-index db451b0784..320697f347 100644
---- a/hw/9pfs/9p-util-linux.c
-+++ b/hw/9pfs/9p-util-linux.c
-@@ -68,3 +68,9 @@ int qemu_mknodat(int dirfd, const char *filename, mode_t mode, dev_t dev)
- {
-     return mknodat(dirfd, filename, mode, dev);
- }
-+
-+int utimensat_nofollow(int dirfd, const char *filename,
-+                       const struct timespec times[2])
-+{
-+    return utimensat(dirfd, filename, times, AT_SYMLINK_NOFOLLOW);
-+}
-diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
-index c314cf381d..12d57f3398 100644
---- a/hw/9pfs/9p-util.h
-+++ b/hw/9pfs/9p-util.h
-@@ -101,6 +101,12 @@ static inline int errno_to_dotl(int err) {
- #define qemu_utimensat  utimensat
- #define qemu_unlinkat   unlinkat
- 
-+/* Compatibility with old SDK Versions for Darwin */
-+#if defined(CONFIG_DARWIN) && !defined(UTIME_NOW)
-+#define UTIME_NOW -1
-+#define UTIME_OMIT -2
-+#endif
-+
- static inline void close_preserve_errno(int fd)
- {
-     int serrno = errno;
-@@ -163,6 +169,8 @@ ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
-                               char *list, size_t size);
- ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
-                                 const char *name);
-+int utimensat_nofollow(int dirfd, const char *filename,
-+                       const struct timespec times[2]);
- 
- /*
-  * Darwin has d_seekoff, which appears to function similarly to d_off.
--- 
-2.39.2
diff --git a/pkgs/applications/virtualization/qemu/remove-ui-cocoa-use-safe-area-insets.patch b/pkgs/applications/virtualization/qemu/remove-ui-cocoa-use-safe-area-insets.patch
deleted file mode 100644
index 2a8430afaa705..0000000000000
--- a/pkgs/applications/virtualization/qemu/remove-ui-cocoa-use-safe-area-insets.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-diff --git a/ui/cocoa.m b/ui/cocoa.m
-index 25e0db9dd0..7ce889d798 100644
---- a/ui/cocoa.m
-+++ b/ui/cocoa.m
-@@ -539,9 +539,6 @@ - (NSSize)fixAspectRatio:(NSSize)max
- - (NSSize) screenSafeAreaSize
- {
-     NSSize size = [[[self window] screen] frame].size;
--    NSEdgeInsets insets = [[[self window] screen] safeAreaInsets];
--    size.width -= insets.left + insets.right;
--    size.height -= insets.top + insets.bottom;
-     return size;
- }
- 
diff --git a/pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch b/pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch
deleted file mode 100644
index c429bce03dcf6..0000000000000
--- a/pkgs/applications/virtualization/qemu/revert-ui-cocoa-add-clipboard-support.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-Based on a reversion of upstream 7e3e20d89129614f4a7b2451fe321cc6ccca3b76,
-adapted for 7.2.0
-
-diff --git a/include/ui/clipboard.h b/include/ui/clipboard.h
-index ce76aa451f..c4e1dc4ff4 100644
---- a/include/ui/clipboard.h
-+++ b/include/ui/clipboard.h
-@@ -269,7 +269,7 @@ void qemu_clipboard_set_data(QemuClipboardPeer *peer,
-                              QemuClipboardInfo *info,
-                              QemuClipboardType type,
-                              uint32_t size,
--                             const void *data,
-+                             void *data,
-                              bool update);
- 
- G_DEFINE_AUTOPTR_CLEANUP_FUNC(QemuClipboardInfo, qemu_clipboard_info_unref)
-diff --git a/ui/clipboard.c b/ui/clipboard.c
-index 3d14bffaf8..2c3f4c3ba0 100644
---- a/ui/clipboard.c
-+++ b/ui/clipboard.c
-@@ -154,7 +154,7 @@ void qemu_clipboard_set_data(QemuClipboardPeer *peer,
-                              QemuClipboardInfo *info,
-                              QemuClipboardType type,
-                              uint32_t size,
--                             const void *data,
-+                             void *data,
-                              bool update)
- {
-     if (!info ||
-diff --git a/ui/cocoa.m b/ui/cocoa.m
-index 660d3e0935..0e6760c360 100644
---- a/ui/cocoa.m
-+++ b/ui/cocoa.m
-@@ -29,7 +29,6 @@
- 
- #include "qemu/help-texts.h"
- #include "qemu-main.h"
--#include "ui/clipboard.h"
- #include "ui/console.h"
- #include "ui/input.h"
- #include "ui/kbd-state.h"
-@@ -105,10 +104,6 @@ static void cocoa_switch(DisplayChangeListener *dcl,
- 
- static bool allow_events;
- 
--static NSInteger cbchangecount = -1;
--static QemuClipboardInfo *cbinfo;
--static QemuEvent cbevent;
--
- // Utility functions to run specified code block with the BQL held
- typedef void (^CodeBlock)(void);
- typedef bool (^BoolCodeBlock)(void);
-@@ -1799,107 +1794,6 @@ static void addRemovableDevicesMenuItems(void)
-     qapi_free_BlockInfoList(pointerToFree);
- }
- 
--@interface QemuCocoaPasteboardTypeOwner : NSObject<NSPasteboardTypeOwner>
--@end
--
--@implementation QemuCocoaPasteboardTypeOwner
--
--- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSPasteboardType)type
--{
--    if (type != NSPasteboardTypeString) {
--        return;
--    }
--
--    with_bql(^{
--        QemuClipboardInfo *info = qemu_clipboard_info_ref(cbinfo);
--        qemu_event_reset(&cbevent);
--        qemu_clipboard_request(info, QEMU_CLIPBOARD_TYPE_TEXT);
--
--        while (info == cbinfo &&
--               info->types[QEMU_CLIPBOARD_TYPE_TEXT].available &&
--               info->types[QEMU_CLIPBOARD_TYPE_TEXT].data == NULL) {
--            bql_unlock();
--            qemu_event_wait(&cbevent);
--            bql_lock();
--        }
--
--        if (info == cbinfo) {
--            NSData *data = [[NSData alloc] initWithBytes:info->types[QEMU_CLIPBOARD_TYPE_TEXT].data
--                                           length:info->types[QEMU_CLIPBOARD_TYPE_TEXT].size];
--            [sender setData:data forType:NSPasteboardTypeString];
--            [data release];
--        }
--
--        qemu_clipboard_info_unref(info);
--    });
--}
--
--@end
--
--static QemuCocoaPasteboardTypeOwner *cbowner;
--
--static void cocoa_clipboard_notify(Notifier *notifier, void *data);
--static void cocoa_clipboard_request(QemuClipboardInfo *info,
--                                    QemuClipboardType type);
--
--static QemuClipboardPeer cbpeer = {
--    .name = "cocoa",
--    .notifier = { .notify = cocoa_clipboard_notify },
--    .request = cocoa_clipboard_request
--};
--
--static void cocoa_clipboard_update_info(QemuClipboardInfo *info)
--{
--    if (info->owner == &cbpeer || info->selection != QEMU_CLIPBOARD_SELECTION_CLIPBOARD) {
--        return;
--    }
--
--    if (info != cbinfo) {
--        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
--        qemu_clipboard_info_unref(cbinfo);
--        cbinfo = qemu_clipboard_info_ref(info);
--        cbchangecount = [[NSPasteboard generalPasteboard] declareTypes:@[NSPasteboardTypeString] owner:cbowner];
--        [pool release];
--    }
--
--    qemu_event_set(&cbevent);
--}
--
--static void cocoa_clipboard_notify(Notifier *notifier, void *data)
--{
--    QemuClipboardNotify *notify = data;
--
--    switch (notify->type) {
--    case QEMU_CLIPBOARD_UPDATE_INFO:
--        cocoa_clipboard_update_info(notify->info);
--        return;
--    case QEMU_CLIPBOARD_RESET_SERIAL:
--        /* ignore */
--        return;
--    }
--}
--
--static void cocoa_clipboard_request(QemuClipboardInfo *info,
--                                    QemuClipboardType type)
--{
--    NSAutoreleasePool *pool;
--    NSData *text;
--
--    switch (type) {
--    case QEMU_CLIPBOARD_TYPE_TEXT:
--        pool = [[NSAutoreleasePool alloc] init];
--        text = [[NSPasteboard generalPasteboard] dataForType:NSPasteboardTypeString];
--        if (text) {
--            qemu_clipboard_set_data(&cbpeer, info, type,
--                                    [text length], [text bytes], true);
--        }
--        [pool release];
--        break;
--    default:
--        break;
--    }
--}
--
- /*
-  * The startup process for the OSX/Cocoa UI is complicated, because
-  * OSX insists that the UI runs on the initial main thread, and so we
-@@ -1922,7 +1816,6 @@ static void cocoa_clipboard_request(QemuClipboardInfo *info,
-     status = qemu_default_main();
-     qemu_mutex_unlock_iothread();
-     COCOA_DEBUG("Second thread: qemu_default_main() returned, exiting\n");
--    [cbowner release];
-     exit(status);
- }
- 
-@@ -2003,18 +1896,6 @@ static void cocoa_refresh(DisplayChangeListener *dcl)
-             [cocoaView setAbsoluteEnabled:YES];
-         });
-     }
--
--    if (cbchangecount != [[NSPasteboard generalPasteboard] changeCount]) {
--        qemu_clipboard_info_unref(cbinfo);
--        cbinfo = qemu_clipboard_info_new(&cbpeer, QEMU_CLIPBOARD_SELECTION_CLIPBOARD);
--        if ([[NSPasteboard generalPasteboard] availableTypeFromArray:@[NSPasteboardTypeString]]) {
--            cbinfo->types[QEMU_CLIPBOARD_TYPE_TEXT].available = true;
--        }
--        qemu_clipboard_update(cbinfo);
--        cbchangecount = [[NSPasteboard generalPasteboard] changeCount];
--        qemu_event_set(&cbevent);
--    }
--
-     [pool release];
- }
- 
-@@ -2071,12 +1952,6 @@ static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
-     // register vga output callbacks
-     register_displaychangelistener(&dcl);
-     [cocoaView updateUIInfo];
--
--    qemu_event_init(&cbevent, false);
--    cbowner = [[QemuCocoaPasteboardTypeOwner alloc] init];
--    qemu_clipboard_peer_register(&cbpeer);
--
--    [pool release];
- }
- 
- static QemuDisplay qemu_display_cocoa = {
diff --git a/pkgs/applications/virtualization/qemu/revert-ui-cocoa-use-the-standard-about-panel.patch b/pkgs/applications/virtualization/qemu/revert-ui-cocoa-use-the-standard-about-panel.patch
deleted file mode 100644
index 08620da3b9632..0000000000000
--- a/pkgs/applications/virtualization/qemu/revert-ui-cocoa-use-the-standard-about-panel.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-diff --git a/ui/cocoa.m b/ui/cocoa.m
-index 25e0db9dd0..4af0712036 100644
---- a/ui/cocoa.m
-+++ b/ui/cocoa.m
-@@ -93,6 +93,7 @@ static void cocoa_switch(DisplayChangeListener *dcl,
- 
- static void cocoa_refresh(DisplayChangeListener *dcl);
- 
-+static NSWindow *about_window;
- static const DisplayChangeListenerOps dcl_ops = {
-     .dpy_name          = "cocoa",
-     .dpy_gfx_update = cocoa_update,
-@@ -1180,6 +1181,7 @@ - (void)changeDeviceMedia:(id)sender;
- - (BOOL)verifyQuit;
- - (void)openDocumentation:(NSString *)filename;
- - (IBAction) do_about_menu_item: (id) sender;
-+- (void)make_about_window;
- - (void)adjustSpeed:(id)sender;
- @end
- 
-@@ -1227,6 +1229,8 @@ - (id) init
-         [pauseLabel setFont: [NSFont fontWithName: @"Helvetica" size: 90]];
-         [pauseLabel setTextColor: [NSColor blackColor]];
-         [pauseLabel sizeToFit];
-+
-+        [self make_about_window];
-     }
-     return self;
- }
-@@ -1549,29 +1553,92 @@ - (BOOL)verifyQuit
- /* The action method for the About menu item */
- - (IBAction) do_about_menu_item: (id) sender
- {
--    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
--    char *icon_path_c = get_relocated_path(CONFIG_QEMU_ICONDIR "/hicolor/512x512/apps/qemu.png");
--    NSString *icon_path = [NSString stringWithUTF8String:icon_path_c];
--    g_free(icon_path_c);
--    NSImage *icon = [[NSImage alloc] initWithContentsOfFile:icon_path];
--    NSString *version = @"QEMU emulator version " QEMU_FULL_VERSION;
--    NSString *copyright = @QEMU_COPYRIGHT;
--    NSDictionary *options;
--    if (icon) {
--        options = @{
--            NSAboutPanelOptionApplicationIcon : icon,
--            NSAboutPanelOptionApplicationVersion : version,
--            @"Copyright" : copyright,
--        };
--        [icon release];
--    } else {
--        options = @{
--            NSAboutPanelOptionApplicationVersion : version,
--            @"Copyright" : copyright,
--        };
--    }
--    [NSApp orderFrontStandardAboutPanelWithOptions:options];
--    [pool release];
-+    [about_window makeKeyAndOrderFront: nil];
-+}
-+
-+/* Create and display the about dialog */
-+- (void)make_about_window
-+{
-+    /* Make the window */
-+    int x = 0, y = 0, about_width = 400, about_height = 200;
-+    NSRect window_rect = NSMakeRect(x, y, about_width, about_height);
-+    about_window = [[NSWindow alloc] initWithContentRect:window_rect
-+                    styleMask:NSWindowStyleMaskTitled | NSWindowStyleMaskClosable |
-+                    NSWindowStyleMaskMiniaturizable
-+                    backing:NSBackingStoreBuffered
-+                    defer:NO];
-+    [about_window setTitle: @"About"];
-+    [about_window setReleasedWhenClosed: NO];
-+    [about_window center];
-+    NSView *superView = [about_window contentView];
-+
-+    /* Create the dimensions of the picture */
-+    int picture_width = 80, picture_height = 80;
-+    x = (about_width - picture_width)/2;
-+    y = about_height - picture_height - 10;
-+    NSRect picture_rect = NSMakeRect(x, y, picture_width, picture_height);
-+
-+    /* Make the picture of QEMU */
-+    NSImageView *picture_view = [[NSImageView alloc] initWithFrame:
-+                                                     picture_rect];
-+    char *qemu_image_path_c = get_relocated_path(CONFIG_QEMU_ICONDIR "/hicolor/512x512/apps/qemu.png");
-+    NSString *qemu_image_path = [NSString stringWithUTF8String:qemu_image_path_c];
-+    g_free(qemu_image_path_c);
-+    NSImage *qemu_image = [[NSImage alloc] initWithContentsOfFile:qemu_image_path];
-+    [picture_view setImage: qemu_image];
-+    [picture_view setImageScaling: NSImageScaleProportionallyUpOrDown];
-+    [superView addSubview: picture_view];
-+
-+    /* Make the name label */
-+    NSBundle *bundle = [NSBundle mainBundle];
-+    if (bundle) {
-+        x = 0;
-+        y = y - 25;
-+        int name_width = about_width, name_height = 20;
-+        NSRect name_rect = NSMakeRect(x, y, name_width, name_height);
-+        NSTextField *name_label = [[NSTextField alloc] initWithFrame: name_rect];
-+        [name_label setEditable: NO];
-+        [name_label setBezeled: NO];
-+        [name_label setDrawsBackground: NO];
-+        [name_label setAlignment: NSTextAlignmentCenter];
-+        NSString *qemu_name = [[bundle executablePath] lastPathComponent];
-+        [name_label setStringValue: qemu_name];
-+        [superView addSubview: name_label];
-+    }
-+
-+    /* Set the version label's attributes */
-+    x = 0;
-+    y = 50;
-+    int version_width = about_width, version_height = 20;
-+    NSRect version_rect = NSMakeRect(x, y, version_width, version_height);
-+    NSTextField *version_label = [[NSTextField alloc] initWithFrame:
-+                                                      version_rect];
-+    [version_label setEditable: NO];
-+    [version_label setBezeled: NO];
-+    [version_label setAlignment: NSTextAlignmentCenter];
-+    [version_label setDrawsBackground: NO];
-+
-+    /* Create the version string*/
-+    NSString *version_string;
-+    version_string = [[NSString alloc] initWithFormat:
-+    @"QEMU emulator version %s", QEMU_FULL_VERSION];
-+    [version_label setStringValue: version_string];
-+    [superView addSubview: version_label];
-+
-+    /* Make copyright label */
-+    x = 0;
-+    y = 35;
-+    int copyright_width = about_width, copyright_height = 20;
-+    NSRect copyright_rect = NSMakeRect(x, y, copyright_width, copyright_height);
-+    NSTextField *copyright_label = [[NSTextField alloc] initWithFrame:
-+                                                        copyright_rect];
-+    [copyright_label setEditable: NO];
-+    [copyright_label setBezeled: NO];
-+    [copyright_label setDrawsBackground: NO];
-+    [copyright_label setAlignment: NSTextAlignmentCenter];
-+    [copyright_label setStringValue: [NSString stringWithFormat: @"%s",
-+                                     QEMU_COPYRIGHT]];
-+    [superView addSubview: copyright_label];
- }
- 
- /* Used by the Speed menu items */
diff --git a/pkgs/applications/virtualization/quickgui/default.nix b/pkgs/applications/virtualization/quickgui/default.nix
index 244e438626e0a..e60d7949ec3a6 100644
--- a/pkgs/applications/virtualization/quickgui/default.nix
+++ b/pkgs/applications/virtualization/quickgui/default.nix
@@ -1,67 +1,56 @@
-{ stdenvNoCC
+{ fetchFromGitHub
+, makeDesktopItem
+, copyDesktopItems
 , lib
-, fetchurl
-, autoPatchelfHook
-, dpkg
-, wrapGAppsHook3
+, flutter
 , quickemu
-, gnome
+, zenity
 }:
-
-stdenvNoCC.mkDerivation rec {
+flutter.buildFlutterApplication rec {
   pname = "quickgui";
-  version = "1.2.8";
-
-  src = fetchurl {
-    url = "https://github.com/quickemu-project/quickgui/releases/download/v${version}/quickgui_${version}-1_lunar1.0_amd64.deb";
-    sha256 = "sha256-crnV7OWH5UbkMM/TxTIOlXmvqBgjFmQG7RxameMOjH0=";
+  version = "1.2.10";
+  src = fetchFromGitHub {
+    owner = "quickemu-project";
+    repo = "quickgui";
+    rev = version;
+    hash = "sha256-M2Qy66RqsjXg7ZpHwaXCN8qXRIsisnIyaENx3KqmUfQ=";
   };
 
-  nativeBuildInputs = [
-    autoPatchelfHook
-    dpkg
-    wrapGAppsHook3
-  ];
-
-  buildInputs = [
-    quickemu
-    gnome.zenity
-  ];
-
-  strictDeps = true;
-
-  unpackCmd = "dpkg-deb -x $curSrc source";
+  pubspecLock = lib.importJSON ./pubspec.lock.json;
 
-  installPhase = ''
-    runHook preInstall
-
-    mv usr $out
+  gitHashes = {
+    window_size = "sha256-XelNtp7tpZ91QCEcvewVphNUtgQX7xrp5QP0oFo6DgM=";
+  };
 
-    runHook postInstall
-  '';
+  extraWrapProgramArgs = "--prefix PATH : ${lib.makeBinPath [ quickemu zenity ]}";
 
-  preFixup = ''
-    gappsWrapperArgs+=(
-      --prefix PATH : ${lib.makeBinPath [ quickemu gnome.zenity ]}
-    )
-  '';
+  nativeBuildInputs = [ copyDesktopItems ];
 
   postFixup = ''
-    substituteInPlace $out/share/applications/quickgui.desktop \
-      --replace "/usr" $out
-
-    # quickgui PR 88
-    echo "Categories=System;" >> $out/share/applications/quickgui.desktop
+    for SIZE in 16 32 48 64 128 256 512; do
+      mkdir -p $out/share/icons/hicolor/$SIZEx$SIZE/apps/
+      cp -av assets/resources/quickgui_$SIZE.png $out/share/icons/hicolor/$SIZEx$SIZE/apps/quickgui.png
+    done
   '';
 
+  desktopItems = [
+    (makeDesktopItem {
+      name = "quickgui";
+      exec = "quickgui";
+      icon = "quickgui";
+      desktopName = "Quickgui";
+      comment = "An elegant virtual machine manager for the desktop";
+      categories = [ "Development" "System" ];
+    })
+  ];
+
   meta = with lib; {
-    description = "Flutter frontend for quickemu";
+    description = "Elegant virtual machine manager for the desktop";
     homepage = "https://github.com/quickemu-project/quickgui";
-    changelog = "https://github.com/quickemu-project/quickgui/releases/tag/v${version}";
+    changelog = "https://github.com/quickemu-project/quickgui/releases/";
     license = licenses.mit;
-    maintainers = with maintainers; [ heyimnova ];
+    maintainers = with maintainers; [ flexiondotorg heyimnova ];
     platforms = [ "x86_64-linux" ];
-    sourceProvenance = [ sourceTypes.binaryNativeCode ];
     mainProgram = "quickgui";
   };
 }
diff --git a/pkgs/applications/virtualization/quickgui/pubspec.lock.json b/pkgs/applications/virtualization/quickgui/pubspec.lock.json
new file mode 100644
index 0000000000000..7e62ceff8be72
--- /dev/null
+++ b/pkgs/applications/virtualization/quickgui/pubspec.lock.json
@@ -0,0 +1,1189 @@
+{
+  "packages": {
+    "_discoveryapis_commons": {
+      "dependency": "transitive",
+      "description": {
+        "name": "_discoveryapis_commons",
+        "sha256": "f8bb1fdbd77f3d5c1d62b5b0eca75fbf1e41bf4f6c62628f880582e2182ae45d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.6"
+    },
+    "ansicolor": {
+      "dependency": "transitive",
+      "description": {
+        "name": "ansicolor",
+        "sha256": "8bf17a8ff6ea17499e40a2d2542c2f481cd7615760c6d34065cb22bfd22e6880",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.2"
+    },
+    "archive": {
+      "dependency": "transitive",
+      "description": {
+        "name": "archive",
+        "sha256": "cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.6.1"
+    },
+    "args": {
+      "dependency": "transitive",
+      "description": {
+        "name": "args",
+        "sha256": "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.5.0"
+    },
+    "async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "async",
+        "sha256": "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.11.0"
+    },
+    "boolean_selector": {
+      "dependency": "transitive",
+      "description": {
+        "name": "boolean_selector",
+        "sha256": "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.1"
+    },
+    "characters": {
+      "dependency": "transitive",
+      "description": {
+        "name": "characters",
+        "sha256": "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.0"
+    },
+    "charset": {
+      "dependency": "transitive",
+      "description": {
+        "name": "charset",
+        "sha256": "27802032a581e01ac565904ece8c8962564b1070690794f0072f6865958ce8b9",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.1"
+    },
+    "checked_yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "checked_yaml",
+        "sha256": "feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.3"
+    },
+    "cli_util": {
+      "dependency": "transitive",
+      "description": {
+        "name": "cli_util",
+        "sha256": "c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.1"
+    },
+    "clock": {
+      "dependency": "transitive",
+      "description": {
+        "name": "clock",
+        "sha256": "cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.1"
+    },
+    "collection": {
+      "dependency": "transitive",
+      "description": {
+        "name": "collection",
+        "sha256": "ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.18.0"
+    },
+    "console": {
+      "dependency": "transitive",
+      "description": {
+        "name": "console",
+        "sha256": "e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.1.0"
+    },
+    "cross_file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "cross_file",
+        "sha256": "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.3.4+1"
+    },
+    "crypto": {
+      "dependency": "transitive",
+      "description": {
+        "name": "crypto",
+        "sha256": "ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.3"
+    },
+    "cupertino_icons": {
+      "dependency": "direct main",
+      "description": {
+        "name": "cupertino_icons",
+        "sha256": "ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.8"
+    },
+    "dbus": {
+      "dependency": "transitive",
+      "description": {
+        "name": "dbus",
+        "sha256": "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.7.10"
+    },
+    "desktop_notifications": {
+      "dependency": "direct main",
+      "description": {
+        "name": "desktop_notifications",
+        "sha256": "6d92694ad6e9297a862c5ff7dd6b8ff64c819972557754769f819d2209612927",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.6.3"
+    },
+    "dio": {
+      "dependency": "transitive",
+      "description": {
+        "name": "dio",
+        "sha256": "11e40df547d418cc0c4900a9318b26304e665da6fa4755399a9ff9efd09034b5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.4.3+1"
+    },
+    "fake_async": {
+      "dependency": "transitive",
+      "description": {
+        "name": "fake_async",
+        "sha256": "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.1"
+    },
+    "ffi": {
+      "dependency": "transitive",
+      "description": {
+        "name": "ffi",
+        "sha256": "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "file": {
+      "dependency": "transitive",
+      "description": {
+        "name": "file",
+        "sha256": "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.0.0"
+    },
+    "file_picker": {
+      "dependency": "direct main",
+      "description": {
+        "name": "file_picker",
+        "sha256": "824f5b9f389bfc4dddac3dea76cd70c51092d9dff0b2ece7ef4f53db8547d258",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "8.0.6"
+    },
+    "flutter": {
+      "dependency": "direct main",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_app_builder": {
+      "dependency": "transitive",
+      "description": {
+        "name": "flutter_app_builder",
+        "sha256": "74018c0e2da3ae33073e7417b5c8e900fdc7b5ebc3bdacd2dd05244d9b5e54cb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.5"
+    },
+    "flutter_app_packager": {
+      "dependency": "transitive",
+      "description": {
+        "name": "flutter_app_packager",
+        "sha256": "3925c4e2ac53f4a5ce3bae1a5f54966620504d6c28725b112074cfbdf227a36b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.5"
+    },
+    "flutter_app_publisher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "flutter_app_publisher",
+        "sha256": "bbb1953ef723fc98a7f974ae9499194999f570194c6d856182518e6e73b51ff2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.5"
+    },
+    "flutter_distributor": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "flutter_distributor",
+        "sha256": "45d27526a5de93370e322da5314b0a1c07c024b79031a8ad44435046915fa0e8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.5"
+    },
+    "flutter_lints": {
+      "dependency": "direct dev",
+      "description": {
+        "name": "flutter_lints",
+        "sha256": "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.0"
+    },
+    "flutter_localizations": {
+      "dependency": "direct main",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_plugin_android_lifecycle": {
+      "dependency": "transitive",
+      "description": {
+        "name": "flutter_plugin_android_lifecycle",
+        "sha256": "c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.20"
+    },
+    "flutter_svg": {
+      "dependency": "direct main",
+      "description": {
+        "name": "flutter_svg",
+        "sha256": "7b4ca6cf3304575fe9c8ec64813c8d02ee41d2afe60bcfe0678bcb5375d596a2",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.10+1"
+    },
+    "flutter_test": {
+      "dependency": "direct dev",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "flutter_web_plugins": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.0"
+    },
+    "get_it": {
+      "dependency": "transitive",
+      "description": {
+        "name": "get_it",
+        "sha256": "d85128a5dae4ea777324730dc65edd9c9f43155c109d5cc0a69cab74139fbac1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "7.7.0"
+    },
+    "gettext": {
+      "dependency": "direct main",
+      "description": {
+        "name": "gettext",
+        "sha256": "007a3cbd5d8139252118bab34911d24edfc695665b38f91ae244f51b4d71f6b4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "gettext_i18n": {
+      "dependency": "direct main",
+      "description": {
+        "name": "gettext_i18n",
+        "sha256": "1acdb7f6bb7c06aaa69016a248de20123ac9af2e1a29321244012fbf6f2d4bdd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.7"
+    },
+    "gettext_parser": {
+      "dependency": "direct main",
+      "description": {
+        "name": "gettext_parser",
+        "sha256": "9565c9dd1033ec125e1fbc7ccba6c0d2d753dd356122ba1a17e6aa7dc868f34a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.2.0"
+    },
+    "glob": {
+      "dependency": "transitive",
+      "description": {
+        "name": "glob",
+        "sha256": "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "google_identity_services_web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "google_identity_services_web",
+        "sha256": "9482364c9f8b7bd36902572ebc3a7c2b5c8ee57a9c93e6eb5099c1a9ec5265d8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.3.1+1"
+    },
+    "googleapis": {
+      "dependency": "transitive",
+      "description": {
+        "name": "googleapis",
+        "sha256": "864f222aed3f2ff00b816c675edf00a39e2aaf373d728d8abec30b37bee1a81c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "13.2.0"
+    },
+    "googleapis_auth": {
+      "dependency": "transitive",
+      "description": {
+        "name": "googleapis_auth",
+        "sha256": "befd71383a955535060acde8792e7efc11d2fccd03dd1d3ec434e85b68775938",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.6.0"
+    },
+    "http": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http",
+        "sha256": "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "http_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "http_parser",
+        "sha256": "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.2"
+    },
+    "image": {
+      "dependency": "transitive",
+      "description": {
+        "name": "image",
+        "sha256": "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.2.0"
+    },
+    "intl": {
+      "dependency": "transitive",
+      "description": {
+        "name": "intl",
+        "sha256": "d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.19.0"
+    },
+    "io": {
+      "dependency": "transitive",
+      "description": {
+        "name": "io",
+        "sha256": "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "json_annotation": {
+      "dependency": "transitive",
+      "description": {
+        "name": "json_annotation",
+        "sha256": "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.9.0"
+    },
+    "leak_tracker": {
+      "dependency": "transitive",
+      "description": {
+        "name": "leak_tracker",
+        "sha256": "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "10.0.4"
+    },
+    "leak_tracker_flutter_testing": {
+      "dependency": "transitive",
+      "description": {
+        "name": "leak_tracker_flutter_testing",
+        "sha256": "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.3"
+    },
+    "leak_tracker_testing": {
+      "dependency": "transitive",
+      "description": {
+        "name": "leak_tracker_testing",
+        "sha256": "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.1"
+    },
+    "lints": {
+      "dependency": "transitive",
+      "description": {
+        "name": "lints",
+        "sha256": "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.0.0"
+    },
+    "liquid_engine": {
+      "dependency": "transitive",
+      "description": {
+        "name": "liquid_engine",
+        "sha256": "41ae12d5a72451c3efb8d4e7b901cdf0537917597bc7e7376e9b0a237f92df29",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.2.2"
+    },
+    "logging": {
+      "dependency": "transitive",
+      "description": {
+        "name": "logging",
+        "sha256": "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "matcher": {
+      "dependency": "transitive",
+      "description": {
+        "name": "matcher",
+        "sha256": "d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.12.16+1"
+    },
+    "material_color_utilities": {
+      "dependency": "transitive",
+      "description": {
+        "name": "material_color_utilities",
+        "sha256": "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.8.0"
+    },
+    "meta": {
+      "dependency": "transitive",
+      "description": {
+        "name": "meta",
+        "sha256": "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.12.0"
+    },
+    "msix": {
+      "dependency": "transitive",
+      "description": {
+        "name": "msix",
+        "sha256": "519b183d15dc9f9c594f247e2d2339d855cf0eaacc30e19b128e14f3ecc62047",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.16.7"
+    },
+    "mustache_template": {
+      "dependency": "transitive",
+      "description": {
+        "name": "mustache_template",
+        "sha256": "a46e26f91445bfb0b60519be280555b06792460b27b19e2b19ad5b9740df5d1c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.0"
+    },
+    "nested": {
+      "dependency": "transitive",
+      "description": {
+        "name": "nested",
+        "sha256": "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0"
+    },
+    "package_config": {
+      "dependency": "transitive",
+      "description": {
+        "name": "package_config",
+        "sha256": "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.0"
+    },
+    "package_info_plus": {
+      "dependency": "direct main",
+      "description": {
+        "name": "package_info_plus",
+        "sha256": "b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "8.0.0"
+    },
+    "package_info_plus_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "package_info_plus_platform_interface",
+        "sha256": "f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.0"
+    },
+    "parse_app_package": {
+      "dependency": "transitive",
+      "description": {
+        "name": "parse_app_package",
+        "sha256": "69f313fbadf457576015333a8da2e99018763dce88df248febcfb8883da8aedb",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.4.5"
+    },
+    "path": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path",
+        "sha256": "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.9.0"
+    },
+    "path_parsing": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_parsing",
+        "sha256": "e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.1"
+    },
+    "path_provider_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_linux",
+        "sha256": "f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.1"
+    },
+    "path_provider_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_platform_interface",
+        "sha256": "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "path_provider_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "path_provider_windows",
+        "sha256": "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.1"
+    },
+    "petitparser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "petitparser",
+        "sha256": "c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.0.2"
+    },
+    "platform": {
+      "dependency": "transitive",
+      "description": {
+        "name": "platform",
+        "sha256": "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.5"
+    },
+    "plist_parser": {
+      "dependency": "transitive",
+      "description": {
+        "name": "plist_parser",
+        "sha256": "e2a6f9abfa0c45c0253656b7360abb0dfb84af9937bace74605b93d2aad2bf0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.0.11"
+    },
+    "plugin_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "plugin_platform_interface",
+        "sha256": "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.8"
+    },
+    "process_run": {
+      "dependency": "direct main",
+      "description": {
+        "name": "process_run",
+        "sha256": "6052115540ad88715d6bcee60656970f70c68c85846d1948b92e435f0382899e",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.0+1"
+    },
+    "provider": {
+      "dependency": "direct main",
+      "description": {
+        "name": "provider",
+        "sha256": "c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.1.2"
+    },
+    "pub_semver": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pub_semver",
+        "sha256": "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "pubspec_parse": {
+      "dependency": "transitive",
+      "description": {
+        "name": "pubspec_parse",
+        "sha256": "c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.0"
+    },
+    "qiniu_sdk_base": {
+      "dependency": "transitive",
+      "description": {
+        "name": "qiniu_sdk_base",
+        "sha256": "2506c6372512f81cfbddf162ea6da1ad7b1c6521dee1d10e9da6847c92e13349",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.5.2"
+    },
+    "quiver": {
+      "dependency": "direct main",
+      "description": {
+        "name": "quiver",
+        "sha256": "b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.1"
+    },
+    "recase": {
+      "dependency": "transitive",
+      "description": {
+        "name": "recase",
+        "sha256": "e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "4.1.0"
+    },
+    "shared_preferences": {
+      "dependency": "direct main",
+      "description": {
+        "name": "shared_preferences",
+        "sha256": "d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.3"
+    },
+    "shared_preferences_android": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_android",
+        "sha256": "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.2.3"
+    },
+    "shared_preferences_foundation": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_foundation",
+        "sha256": "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.4.0"
+    },
+    "shared_preferences_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_linux",
+        "sha256": "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shared_preferences_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_platform_interface",
+        "sha256": "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shared_preferences_web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_web",
+        "sha256": "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.0"
+    },
+    "shared_preferences_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shared_preferences_windows",
+        "sha256": "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "shell_executor": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shell_executor",
+        "sha256": "9c024546fc96470a6b96be9902f0bc05347a017a7638ed8d93c77e8d77eb3c3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.6"
+    },
+    "shell_uikit": {
+      "dependency": "transitive",
+      "description": {
+        "name": "shell_uikit",
+        "sha256": "03703090807091514ace2f9c8dc5d9b2d18c42a248c767220167825fbc3d2747",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.1.1"
+    },
+    "sky_engine": {
+      "dependency": "transitive",
+      "description": "flutter",
+      "source": "sdk",
+      "version": "0.0.99"
+    },
+    "source_span": {
+      "dependency": "transitive",
+      "description": {
+        "name": "source_span",
+        "sha256": "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.10.0"
+    },
+    "stack_trace": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stack_trace",
+        "sha256": "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.11.1"
+    },
+    "stream_channel": {
+      "dependency": "transitive",
+      "description": {
+        "name": "stream_channel",
+        "sha256": "ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.2"
+    },
+    "string_scanner": {
+      "dependency": "transitive",
+      "description": {
+        "name": "string_scanner",
+        "sha256": "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.0"
+    },
+    "synchronized": {
+      "dependency": "transitive",
+      "description": {
+        "name": "synchronized",
+        "sha256": "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.0+1"
+    },
+    "term_glyph": {
+      "dependency": "transitive",
+      "description": {
+        "name": "term_glyph",
+        "sha256": "a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.2.1"
+    },
+    "test_api": {
+      "dependency": "transitive",
+      "description": {
+        "name": "test_api",
+        "sha256": "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.7.0"
+    },
+    "tuple": {
+      "dependency": "direct main",
+      "description": {
+        "name": "tuple",
+        "sha256": "a97ce2013f240b2f3807bcbaf218765b6f301c3eff91092bcfa23a039e7dd151",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.0.2"
+    },
+    "typed_data": {
+      "dependency": "transitive",
+      "description": {
+        "name": "typed_data",
+        "sha256": "facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.3.2"
+    },
+    "url_launcher": {
+      "dependency": "direct main",
+      "description": {
+        "name": "url_launcher",
+        "sha256": "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.3.0"
+    },
+    "url_launcher_android": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_android",
+        "sha256": "ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.3.3"
+    },
+    "url_launcher_ios": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_ios",
+        "sha256": "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.3.0"
+    },
+    "url_launcher_linux": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_linux",
+        "sha256": "ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "url_launcher_macos": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_macos",
+        "sha256": "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.2.0"
+    },
+    "url_launcher_platform_interface": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_platform_interface",
+        "sha256": "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.2"
+    },
+    "url_launcher_web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_web",
+        "sha256": "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.3.1"
+    },
+    "url_launcher_windows": {
+      "dependency": "transitive",
+      "description": {
+        "name": "url_launcher_windows",
+        "sha256": "ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.1"
+    },
+    "uuid": {
+      "dependency": "transitive",
+      "description": {
+        "name": "uuid",
+        "sha256": "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.7"
+    },
+    "vector_graphics": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_graphics",
+        "sha256": "32c3c684e02f9bc0afb0ae0aa653337a2fe022e8ab064bcd7ffda27a74e288e3",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.11+1"
+    },
+    "vector_graphics_codec": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_graphics_codec",
+        "sha256": "c86987475f162fadff579e7320c7ddda04cd2fdeffbe1129227a85d9ac9e03da",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.11+1"
+    },
+    "vector_graphics_compiler": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_graphics_compiler",
+        "sha256": "12faff3f73b1741a36ca7e31b292ddeb629af819ca9efe9953b70bd63fc8cd81",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.1.11+1"
+    },
+    "vector_math": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vector_math",
+        "sha256": "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "2.1.4"
+    },
+    "version": {
+      "dependency": "direct main",
+      "description": {
+        "name": "version",
+        "sha256": "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.0.2"
+    },
+    "vm_service": {
+      "dependency": "transitive",
+      "description": {
+        "name": "vm_service",
+        "sha256": "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "14.2.1"
+    },
+    "web": {
+      "dependency": "transitive",
+      "description": {
+        "name": "web",
+        "sha256": "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "0.5.1"
+    },
+    "win32": {
+      "dependency": "transitive",
+      "description": {
+        "name": "win32",
+        "sha256": "a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "5.5.1"
+    },
+    "window_size": {
+      "dependency": "direct main",
+      "description": {
+        "path": "plugins/window_size",
+        "ref": "eb3964990cf19629c89ff8cb4a37640c7b3d5601",
+        "resolved-ref": "eb3964990cf19629c89ff8cb4a37640c7b3d5601",
+        "url": "https://github.com/google/flutter-desktop-embedding.git"
+      },
+      "source": "git",
+      "version": "0.1.0"
+    },
+    "xdg_directories": {
+      "dependency": "transitive",
+      "description": {
+        "name": "xdg_directories",
+        "sha256": "faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "1.0.4"
+    },
+    "xml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "xml",
+        "sha256": "b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "6.5.0"
+    },
+    "yaml": {
+      "dependency": "transitive",
+      "description": {
+        "name": "yaml",
+        "sha256": "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5",
+        "url": "https://pub.dev"
+      },
+      "source": "hosted",
+      "version": "3.1.2"
+    }
+  },
+  "sdks": {
+    "dart": ">=3.4.0 <4.0.0",
+    "flutter": ">=3.22.0"
+  }
+}
diff --git a/pkgs/applications/virtualization/runc/default.nix b/pkgs/applications/virtualization/runc/default.nix
index 0a9a802f70f37..ff7fa9f8a3b9b 100644
--- a/pkgs/applications/virtualization/runc/default.nix
+++ b/pkgs/applications/virtualization/runc/default.nix
@@ -14,13 +14,13 @@
 
 buildGoModule rec {
   pname = "runc";
-  version = "1.1.13";
+  version = "1.1.14";
 
   src = fetchFromGitHub {
     owner = "opencontainers";
     repo = "runc";
     rev = "v${version}";
-    hash = "sha256-RQsM8Q7HogDVGbNpen3wxXNGR9lfqmNhkXTRoC+LBk8=";
+    hash = "sha256-7PYbSZqCQLTaeFppuNz5mxDlwEyLkA5zpdMhWy1tWmc=";
   };
 
   vendorHash = null;
diff --git a/pkgs/applications/virtualization/rust-hypervisor-firmware/default.nix b/pkgs/applications/virtualization/rust-hypervisor-firmware/default.nix
index 8b408cc96ed4b..193776fa5ec08 100644
--- a/pkgs/applications/virtualization/rust-hypervisor-firmware/default.nix
+++ b/pkgs/applications/virtualization/rust-hypervisor-firmware/default.nix
@@ -37,7 +37,7 @@ rustPlatform.buildRustPackage rec {
     sha256 = "sha256-hKk5pcop8rb5Q+IVchcl+XhMc3DCBBPn5P+AkAb9XxI=";
   };
 
-  cargoSha256 = "sha256-edi6/Md6KebKM3wHArZe1htUCg0/BqMVZKA4xEH25GI=";
+  cargoHash = "sha256-edi6/Md6KebKM3wHArZe1htUCg0/BqMVZKA4xEH25GI=";
 
   # lld: error: unknown argument '-Wl,--undefined=AUDITABLE_VERSION_INFO'
   # https://github.com/cloud-hypervisor/rust-hypervisor-firmware/issues/249
diff --git a/pkgs/applications/virtualization/rvvm/default.nix b/pkgs/applications/virtualization/rvvm/default.nix
index ce90b686bcb0f..4693999e8f111 100644
--- a/pkgs/applications/virtualization/rvvm/default.nix
+++ b/pkgs/applications/virtualization/rvvm/default.nix
@@ -15,7 +15,7 @@
 
 assert lib.assertMsg (builtins.elem guiBackend ["sdl" "x11" "none"]) "Unsupported GUI backend";
 assert lib.assertMsg (!(enableSDL && enableX11)) "RVVM can have only one GUI backend at a time";
-assert lib.assertMsg (stdenv.isDarwin -> !enableX11) "macOS supports only SDL GUI backend";
+assert lib.assertMsg (stdenv.hostPlatform.isDarwin -> !enableX11) "macOS supports only SDL GUI backend";
 
 stdenv.mkDerivation rec {
   pname = "rvvm";
@@ -38,10 +38,7 @@ stdenv.mkDerivation rec {
 
   makeFlags = [ "PREFIX=$(out)" ]
     ++ lib.optional enableSDL "USE_SDL=2" # Use SDL2 instead of SDL1
-    ++ lib.optional (!enableSDL && !enableX11) "USE_FB=0"
-
-    # work around https://github.com/NixOS/nixpkgs/issues/19098
-    ++ lib.optional (stdenv.cc.isClang && stdenv.isDarwin) "CFLAGS=-fno-lto";
+    ++ lib.optional (!enableSDL && !enableX11) "USE_FB=0";
 
   meta = with lib; {
     homepage = "https://github.com/LekKit/RVVM";
diff --git a/pkgs/applications/virtualization/sail-riscv/default.nix b/pkgs/applications/virtualization/sail-riscv/default.nix
index cda1f5d6cb20f..ba98f6b2cd5a7 100644
--- a/pkgs/applications/virtualization/sail-riscv/default.nix
+++ b/pkgs/applications/virtualization/sail-riscv/default.nix
@@ -61,7 +61,7 @@ stdenv.mkDerivation rec {
     homepage = "https://github.com/riscv/sail-riscv";
     description = "Formal specification of the RISC-V architecture, written in Sail";
     maintainers = with maintainers; [ genericnerdyusername ];
-    broken = stdenv.isDarwin && stdenv.isAarch64;
+    broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
     license = licenses.bsd2;
   };
 }
diff --git a/pkgs/applications/virtualization/singularity/generic.nix b/pkgs/applications/virtualization/singularity/generic.nix
index f27f58fda4876..24e1b3b67b26f 100644
--- a/pkgs/applications/virtualization/singularity/generic.nix
+++ b/pkgs/applications/virtualization/singularity/generic.nix
@@ -70,11 +70,19 @@ in
   # Whether to compile with SUID support
   enableSuid ? false,
   starterSuidPath ? null,
-  # newuidmapPath and newgidmapPath are to support --fakeroot
-  # where those SUID-ed executables are unavailable from the FHS system PATH.
+  # Extra system-wide /**/bin paths to prefix,
+  # useful to specify directories containing binaries with SUID bit set.
+  # The paths take higher precedence over the FHS system PATH specified
+  # inside the upstream source code.
+  # Include "/run/wrappers/bin" by default for the convenience of NixOS users.
+  systemBinPaths ? [ "/run/wrappers/bin" ],
   # Path to SUID-ed newuidmap executable
+  # Deprecated in favour of systemBinPaths
+  # TODO(@ShamrockLee): Remove after Nixpkgs 24.05 branch-off
   newuidmapPath ? null,
   # Path to SUID-ed newgidmap executable
+  # Deprecated in favour of systemBinPaths
+  # TODO(@ShamrockLee): Remove after Nixpkgs 24.05 branch-off
   newgidmapPath ? null,
   # External LOCALSTATEDIR
   externalLocalStateDir ? null,
@@ -99,18 +107,30 @@ in
   vendorHash ? _defaultGoVendorArgs.vendorHash,
   deleteVendor ? _defaultGoVendorArgs.deleteVendor,
   proxyVendor ? _defaultGoVendorArgs.proxyVendor,
-}:
+}@args:
 
 let
+  # Backward compatibility for privileged-un-utils.
+  # TODO(@ShamrockLee): Remove after Nixpkgs 24.05 branch-off.
   privileged-un-utils =
     if ((newuidmapPath == null) && (newgidmapPath == null)) then
       null
     else
-      (runCommandLocal "privileged-un-utils" { } ''
-        mkdir -p "$out/bin"
-        ln -s ${lib.escapeShellArg newuidmapPath} "$out/bin/newuidmap"
-        ln -s ${lib.escapeShellArg newgidmapPath} "$out/bin/newgidmap"
-      '');
+      lib.warn
+        "${pname}: arguments newuidmapPath and newgidmapPath is deprecated in favour of systemBinPaths."
+        (
+          runCommandLocal "privileged-un-utils" { } ''
+            mkdir -p "$out/bin"
+            ln -s ${lib.escapeShellArg newuidmapPath} "$out/bin/newuidmap"
+            ln -s ${lib.escapeShellArg newgidmapPath} "$out/bin/newgidmap"
+          ''
+        );
+
+  # Backward compatibility for privileged-un-utils.
+  # TODO(@ShamrockLee): Remove after Nixpkgs 24.05 branch-off.
+  systemBinPaths =
+    lib.optional (privileged-un-utils != null) (lib.makeBinPath [ privileged-un-utils ])
+    ++ args.systemBinPaths or [ "/run/wrappers/bin" ];
 
   concatMapStringAttrsSep =
     sep: f: attrs:
@@ -196,8 +216,9 @@ in
   # causes redefinition of _FORTIFY_SOURCE
   hardeningDisable = [ "fortify3" ];
 
-  # Packages to prefix to the Apptainer/Singularity container runtime default PATH
-  # Use overrideAttrs to override
+  # Packages to provide fallback bin paths
+  # to the Apptainer/Singularity container runtime default PATHs.
+  # Override with `<pkg>.overrideAttrs`.
   defaultPathInputs = [
     bash
     coreutils
@@ -206,7 +227,6 @@ in
     fuse2fs # Mount ext3 filesystems
     go
     mount # mount
-    privileged-un-utils
     squashfsTools # mksquashfs unsquashfs # Make / unpack squashfs image
     squashfuse # squashfuse_ll squashfuse # Mount (without unpacking) a squashfs image without privileges
   ] ++ lib.optional enableNvidiaContainerCli nvidia-docker;
@@ -228,7 +248,7 @@ in
             lib.concatStringsSep " " [
               "--replace-fail"
               (addShellDoubleQuotes (lib.escapeShellArg originalDefaultPath))
-              (addShellDoubleQuotes ''$inputsDefaultPath''${inputsDefaultPath:+:}${lib.escapeShellArg originalDefaultPath}'')
+              (addShellDoubleQuotes ''$systemDefaultPath''${systemDefaultPath:+:}${lib.escapeShellArg originalDefaultPath}''${inputsDefaultPath:+:}$inputsDefaultPath'')
             ]
           ) originalDefaultPaths
         }
@@ -267,8 +287,11 @@ in
   postFixup = ''
     substituteInPlace "$out/bin/run-singularity" \
       --replace "/usr/bin/env ${projectName}" "$out/bin/${projectName}"
+    # Respect PATH from the environment/the user.
+    # Fallback to bin paths provided by Nixpkgs packages.
     wrapProgram "$out/bin/${projectName}" \
-      --prefix PATH : "$inputsDefaultPath"
+      --suffix PATH : "$systemDefaultPath" \
+      --suffix PATH : "$inputsDefaultPath"
     # Make changes in the config file
     ${lib.optionalString forceNvcCli ''
       substituteInPlace "$out/etc/${projectName}/${projectName}.conf" \
@@ -303,29 +326,27 @@ in
     ''}
   '';
 
-  meta =
-    with lib;
-    {
-      description = "Application containers for linux" + extraDescription;
-      longDescription = ''
-        Singularity (the upstream) renamed themselves to Apptainer
-        to distinguish themselves from a fork made by Sylabs Inc.. See
+  meta = {
+    description = "Application containers for linux" + extraDescription;
+    longDescription = ''
+      Singularity (the upstream) renamed themselves to Apptainer
+      to distinguish themselves from a fork made by Sylabs Inc.. See
 
-        https://sylabs.io/2021/05/singularity-community-edition
-        https://apptainer.org/news/community-announcement-20211130
-      '';
-      license = licenses.bsd3;
-      platforms = platforms.linux;
-      maintainers = with maintainers; [
-        jbedo
-        ShamrockLee
-      ];
-      mainProgram = projectName;
-    }
-    // extraMeta;
+      https://sylabs.io/2021/05/singularity-community-edition
+      https://apptainer.org/news/community-announcement-20211130
+    '';
+    license = lib.licenses.bsd3;
+    platforms = lib.platforms.linux;
+    maintainers = with lib.maintainers; [
+      jbedo
+      ShamrockLee
+    ];
+    mainProgram = projectName;
+  } // extraMeta;
 }).overrideAttrs
   (
     finalAttrs: prevAttrs: {
+      systemDefaultPath = lib.concatStringsSep ":" systemBinPaths;
       inputsDefaultPath = lib.makeBinPath finalAttrs.defaultPathInputs;
       passthru = prevAttrs.passthru or { } // {
         inherit sourceFilesWithDefaultPaths;
diff --git a/pkgs/applications/virtualization/singularity/packages.nix b/pkgs/applications/virtualization/singularity/packages.nix
index f03bdf9631c56..c6cbdc8e2c76e 100644
--- a/pkgs/applications/virtualization/singularity/packages.nix
+++ b/pkgs/applications/virtualization/singularity/packages.nix
@@ -9,14 +9,14 @@ let
     callPackage
       (import ./generic.nix rec {
         pname = "apptainer";
-        version = "1.3.2";
+        version = "1.3.4";
         projectName = "apptainer";
 
         src = fetchFromGitHub {
           owner = "apptainer";
           repo = "apptainer";
           rev = "refs/tags/v${version}";
-          hash = "sha256-NseigaPmRKDsBk8v7RpYf+uoEGvQHVnqOMO49kP0mQ8=";
+          hash = "sha256-eByF0OpL1OKGq0wY7kw8Sv9sZuVE0K3TGIm4Chk9PC4=";
         };
 
         # Update by running
@@ -47,20 +47,20 @@ let
     callPackage
       (import ./generic.nix rec {
         pname = "singularity-ce";
-        version = "4.1.3";
+        version = "4.2.1";
         projectName = "singularity";
 
         src = fetchFromGitHub {
           owner = "sylabs";
           repo = "singularity";
           rev = "refs/tags/v${version}";
-          hash = "sha256-pR8zyMr23wcbDCXAysVEgGUDHkrfhLoVF3fjMLgZFYs=";
+          hash = "sha256-Go4um/bIgq2lCZvjJ2GR81XpA/JvjPholi1PzNG9Hz8=";
         };
 
         # Update by running
         # nix-prefetch -E "{ sha256 }: ((import ./. { }).singularity.override { vendorHash = sha256; }).goModules"
         # at the root directory of the Nixpkgs repository
-        vendorHash = "sha256-332GFL04aE6B6vxgtJJH4TeI6YJCDBpCClJ3sc5gN3A=";
+        vendorHash = "sha256-CRZ42NdmJhAkV6bkl5n7rEV4Tu/h65qF5qaQ4W5wQ3w=";
 
         # Do not build conmon and squashfuse from the Git submodule sources,
         # Use Nixpkgs provided version
diff --git a/pkgs/applications/virtualization/spike/default.nix b/pkgs/applications/virtualization/spike/default.nix
index 1712685048115..d0e79c4f9812d 100644
--- a/pkgs/applications/virtualization/spike/default.nix
+++ b/pkgs/applications/virtualization/spike/default.nix
@@ -1,30 +1,21 @@
-{ lib, stdenv, fetchFromGitHub, fetchpatch, dtc, pkgsCross }:
+{ lib, stdenv, fetchFromGitHub, dtc, pkgsCross }:
 
 stdenv.mkDerivation rec {
   pname = "spike";
-  version = "1.1.0";
+  version = "1.1.0-unstable-2024-09-21";
 
   src = fetchFromGitHub {
     owner = "riscv";
     repo = "riscv-isa-sim";
-    rev = "v${version}";
-    sha256 = "sha256-4D2Fezej0ioOOupw3kgMT5VLs+/jXQjwvek6v0AVMzI=";
+    rev = "de5094a1a901d77ff44f89b38e00fefa15d4018e";
+    sha256 = "sha256-mAgR2VzDgeuIdmPEgrb+MaA89BnWfmNanOVidqn0cgc=";
   };
 
-  patches = [
-    (fetchpatch {
-      name = "fesvr-fix-compilation-with-gcc-13.patch";
-      url = "https://github.com/riscv-software-src/riscv-isa-sim/commit/0a7bb5403d0290cea8b2356179d92e4c61ffd51d.patch";
-      hash = "sha256-JUMTbGawvLkoOWKkruzLzUFQytVR3wqTlGu/eegRFEE=";
-    })
-  ];
-
   nativeBuildInputs = [ dtc ];
   enableParallelBuilding = true;
 
   postPatch = ''
     patchShebangs scripts/*.sh
-    patchShebangs tests/ebreak.py
   '';
 
   doCheck = true;
diff --git a/pkgs/applications/virtualization/stratovirt/default.nix b/pkgs/applications/virtualization/stratovirt/default.nix
index d927c8430a1ec..a1f3fb53e0430 100644
--- a/pkgs/applications/virtualization/stratovirt/default.nix
+++ b/pkgs/applications/virtualization/stratovirt/default.nix
@@ -6,16 +6,15 @@
 
 rustPlatform.buildRustPackage rec {
   pname = "stratovirt";
-  version = "2.3.0";
+  version = "2.4.0";
 
   src = fetchgit {
     url = "https://gitee.com/openeuler/stratovirt.git";
     rev = "v${version}";
-    sha256 = "sha256-f5710f7Lz7ul1DYrC0CAfDR+7e1NrE9ESPdB8nlVUKw=";
+    hash = "sha256-1Ex6ahKBoVRikSqrgHGYaBFzWkPFDm8bGVyB7KmO8tI=";
   };
-  patches = [ ./micro_vm-allow-SYS_clock_gettime.patch ];
 
-  cargoSha256 = "sha256-prs7zkPAKQ99gjW7gy+4+CgEgGhaTTCLPTbLk/ZHdts=";
+  cargoHash = "sha256-uuZCbmt3eIlKurwMOV7LezVSjOVG/90OdT2PC8YLi3I=";
 
   nativeBuildInputs = [
     pkg-config
diff --git a/pkgs/applications/virtualization/stratovirt/micro_vm-allow-SYS_clock_gettime.patch b/pkgs/applications/virtualization/stratovirt/micro_vm-allow-SYS_clock_gettime.patch
deleted file mode 100644
index 11d2a0e88e194..0000000000000
--- a/pkgs/applications/virtualization/stratovirt/micro_vm-allow-SYS_clock_gettime.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-From c5ef87eb831f7f77c0564dd1dce92a579e7c4747 Mon Sep 17 00:00:00 2001
-From: Astro <astro@spaceboyz.net>
-Date: Sun, 18 Jun 2023 23:10:23 +0200
-Subject: [PATCH] micro_vm: allow SYS_clock_gettime
-
----
- machine/src/micro_vm/syscall.rs | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/machine/src/micro_vm/syscall.rs b/machine/src/micro_vm/syscall.rs
-index c37d3f4e..f9e7cce2 100644
---- a/machine/src/micro_vm/syscall.rs
-+++ b/machine/src/micro_vm/syscall.rs
-@@ -125,6 +125,8 @@ pub fn syscall_whitelist() -> Vec<BpfRule> {
-         BpfRule::new(libc::SYS_readlink),
-         BpfRule::new(libc::SYS_getrandom),
-         BpfRule::new(libc::SYS_fallocate),
-+        #[cfg(target_env = "gnu")]
-+        BpfRule::new(libc::SYS_clock_gettime),
-         madvise_rule(),
-     ]
- }
--- 
-2.41.0
-
diff --git a/pkgs/applications/virtualization/tart/default.nix b/pkgs/applications/virtualization/tart/default.nix
index d0f2f3a0127e1..fb5f28325260b 100644
--- a/pkgs/applications/virtualization/tart/default.nix
+++ b/pkgs/applications/virtualization/tart/default.nix
@@ -10,11 +10,11 @@
 }:
 stdenvNoCC.mkDerivation (finalAttrs: {
   pname = "tart";
-  version = "2.12.0";
+  version = "2.18.2";
 
   src = fetchurl {
       url = "https://github.com/cirruslabs/tart/releases/download/${finalAttrs.version}/tart-arm64.tar.gz";
-      hash = "sha256-+33Z7M9Y8fWFfCBNJrXHljwoAn7p70+yvTmBwx1X68M=";
+      hash = "sha256-0057/lRisAw3fzh2LNqHUx72PR/67mW/cqm7hU34GAU=";
   };
   sourceRoot = ".";
 
@@ -39,7 +39,7 @@ stdenvNoCC.mkDerivation (finalAttrs: {
     description = "macOS VMs on Apple Silicon to use in CI and other automations";
     homepage = "https://tart.run";
     license = licenses.fairsource09;
-    maintainers = with maintainers; [ emilytrau Enzime aduh95 ];
+    maintainers = with maintainers; [ emilytrau aduh95 ];
     mainProgram = finalAttrs.pname;
     platforms = [ "aarch64-darwin" ];
     sourceProvenance = with sourceTypes; [ binaryNativeCode ];
diff --git a/pkgs/applications/virtualization/umoci/default.nix b/pkgs/applications/virtualization/umoci/default.nix
index 5dc9ae5028e80..acf03a96c747d 100644
--- a/pkgs/applications/virtualization/umoci/default.nix
+++ b/pkgs/applications/virtualization/umoci/default.nix
@@ -3,7 +3,6 @@
 , buildGoModule
 , go-md2man
 , installShellFiles
-, bash
 }:
 
 buildGoModule rec {
diff --git a/pkgs/applications/virtualization/virt-manager/default.nix b/pkgs/applications/virtualization/virt-manager/default.nix
index c8bedb1e95690..2b230a95b5040 100644
--- a/pkgs/applications/virtualization/virt-manager/default.nix
+++ b/pkgs/applications/virtualization/virt-manager/default.nix
@@ -1,6 +1,6 @@
 { lib, fetchFromGitHub, python3, intltool, file, wrapGAppsHook3, gtk-vnc
 , vte, avahi, dconf, gobject-introspection, libvirt-glib, system-libvirt
-, gsettings-desktop-schemas, gst_all_1, libosinfo, gnome, gtksourceview4, docutils, cpio
+, gsettings-desktop-schemas, gst_all_1, libosinfo, adwaita-icon-theme, gtksourceview4, docutils, cpio
 , e2fsprogs, findutils, gzip, cdrtools, xorriso, fetchpatch
 , desktopToDarwinBundle, stdenv
 , spiceSupport ? true, spice-gtk ? null
@@ -33,6 +33,11 @@ python3.pkgs.buildPythonApplication rec {
       url = "https://github.com/virt-manager/virt-manager/commit/cc4a39ea94f42bc92765eb3bb56e2b7f9198be67.patch";
       hash = "sha256-dw6yrMaAOnTh8Z6xJQQKmYelOkOl6EBAOfJQU9vQ8Ws=";
     })
+    # fix xml test output mismatch
+    (fetchpatch {
+      url = "https://github.com/virt-manager/virt-manager/commit/8b6db203f726965529567459b302aab1c68c70eb.patch";
+      hash = "sha256-FghrSyP4NaTkJhvyqlc2uDNWKaeiylKnaiqkl5Ax6yE=";
+    })
   ];
 
   nativeBuildInputs = [
@@ -40,12 +45,12 @@ python3.pkgs.buildPythonApplication rec {
     gobject-introspection # for setup hook populating GI_TYPELIB_PATH
     docutils
     wrapGAppsHook3
-  ] ++ lib.optional stdenv.isDarwin desktopToDarwinBundle;
+  ] ++ lib.optional stdenv.hostPlatform.isDarwin desktopToDarwinBundle;
 
   buildInputs = [
     gst_all_1.gst-plugins-base
     gst_all_1.gst-plugins-good
-    libvirt-glib vte dconf gtk-vnc gnome.adwaita-icon-theme avahi
+    libvirt-glib vte dconf gtk-vnc adwaita-icon-theme avahi
     gsettings-desktop-schemas libosinfo gtksourceview4
   ] ++ lib.optional spiceSupport spice-gtk;
 
diff --git a/pkgs/applications/virtualization/virt-viewer/default.nix b/pkgs/applications/virtualization/virt-viewer/default.nix
index 8c621271e757a..2c368db8da945 100644
--- a/pkgs/applications/virtualization/virt-viewer/default.nix
+++ b/pkgs/applications/virtualization/virt-viewer/default.nix
@@ -32,9 +32,6 @@
 , vte
 , wrapGAppsHook3
 }:
-
-with lib;
-
 stdenv.mkDerivation rec {
   pname = "virt-viewer";
   version = "11.0";
@@ -76,18 +73,18 @@ stdenv.mkDerivation rec {
     libvirt-glib
     libxml2
     vte
-  ] ++ optionals ovirtSupport [
+  ] ++ lib.optionals ovirtSupport [
     libgovirt
-  ] ++ optionals spiceSupport ([
+  ] ++ lib.optionals spiceSupport ([
     gdbm
     spice-gtk
     spice-protocol
-  ] ++ optionals stdenv.isLinux [
+  ] ++ lib.optionals stdenv.hostPlatform.isLinux [
     libcap
   ]);
 
   # Required for USB redirection PolicyKit rules file
-  propagatedUserEnvPkgs = optional spiceSupport spice-gtk;
+  propagatedUserEnvPkgs = lib.optional spiceSupport spice-gtk;
 
   mesonFlags = [
     (lib.mesonEnable "ovirt" ovirtSupport)
@@ -99,7 +96,7 @@ stdenv.mkDerivation rec {
     patchShebangs build-aux/post_install.py
   '';
 
-  meta = {
+  meta = with lib; {
     description = "Viewer for remote virtual machines";
     maintainers = with maintainers; [ raskin atemu ];
     platforms = with platforms; linux ++ darwin;
diff --git a/pkgs/applications/virtualization/virt-what/default.nix b/pkgs/applications/virtualization/virt-what/default.nix
index e11b265a9e3c0..3d553acd48ffb 100644
--- a/pkgs/applications/virtualization/virt-what/default.nix
+++ b/pkgs/applications/virtualization/virt-what/default.nix
@@ -2,11 +2,11 @@
 
 stdenv.mkDerivation rec {
   pname = "virt-what";
-  version = "1.25";
+  version = "1.26";
 
   src = fetchurl {
     url = "https://people.redhat.com/~rjones/virt-what/files/${pname}-${version}.tar.gz";
-    sha256 = "sha256-1Py0I2Irr75eK7zYS32SrU1YP0d4siW3LEqBrp/Dxz0=";
+    sha256 = "sha256-qoap0xO1yQSK+a2aA4fkr/I4uw6kLzuDARTotQzTFTU=";
   };
 
   meta = with lib; {
diff --git a/pkgs/applications/virtualization/virtualbox/default.nix b/pkgs/applications/virtualization/virtualbox/default.nix
index dd9b99f7f9bc9..437ceba29ce07 100644
--- a/pkgs/applications/virtualization/virtualbox/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/default.nix
@@ -13,7 +13,7 @@
 , javaBindings ? true, jdk # Almost doesn't affect closure size
 , pythonBindings ? false, python3
 , extensionPack ? null, fakeroot
-, pulseSupport ? config.pulseaudio or stdenv.isLinux, libpulseaudio
+, pulseSupport ? config.pulseaudio or stdenv.hostPlatform.isLinux, libpulseaudio
 , enableHardening ? false
 , headless ? false
 , enable32bitGuests ? true
@@ -22,9 +22,6 @@
 , extraConfigureFlags ? ""
 }:
 
-# See https://github.com/cyberus-technology/virtualbox-kvm/issues/12
-assert enableKvm -> !enableHardening;
-
 # The web services use Java infrastructure.
 assert enableWebService -> javaBindings;
 
@@ -32,11 +29,11 @@ let
   buildType = "release";
   # Use maintainers/scripts/update.nix to update the version and all related hashes or
   # change the hashes in extpack.nix and guest-additions/default.nix as well manually.
-  virtualboxVersion = "7.0.18";
-  virtualboxSha256 = "d999513533631674a024762668de999411d8197060c51e68c5faf0a2c0eea1a5";
+  virtualboxVersion = "7.0.20";
+  virtualboxSha256 = "5cf5979bef66ebab3fcd495796b215a940e8a07c469d4bc56d064de44222dd02";
 
-  kvmPatchVersion = "20240515";
-  kvmPatchHash = "sha256-Kh/tlPScdf7CbEEpL54iqMpeUIdmnJL2r/mxnlEzLd0=";
+  kvmPatchVersion = "20240828";
+  kvmPatchHash = "sha256-g0esJbB1IGyLGZMLFJIY8ZYdHWuiM5IZtLMHZvCY6bs=";
 
   # The KVM build is not compatible to VirtualBox's kernel modules. So don't export
   # modsrc at all.
diff --git a/pkgs/applications/virtualization/virtualbox/extpack.nix b/pkgs/applications/virtualization/virtualbox/extpack.nix
index 089ab4856c0d0..365c635a17aef 100644
--- a/pkgs/applications/virtualization/virtualbox/extpack.nix
+++ b/pkgs/applications/virtualization/virtualbox/extpack.nix
@@ -1,7 +1,4 @@
 { fetchurl, lib, virtualbox }:
-
-with lib;
-
 let
   inherit (virtualbox) version;
 in
@@ -12,10 +9,10 @@ fetchurl rec {
     # Manually sha256sum the extensionPack file, must be hex!
     # Thus do not use `nix-prefetch-url` but instead plain old `sha256sum`.
     # Checksums can also be found at https://www.virtualbox.org/download/hashes/${version}/SHA256SUMS
-    let value = "cab1abad478679fc34a0c5cb4a6d3566edc20e3c54cbed39c8e895d8cfad3ee2";
+    let value = "d750fb17688d70e0cb2d7b06f1ad3a661303793f4d1ac39cfa9a54806b89da25";
     in assert (builtins.stringLength value) == 64; value;
 
-  meta = {
+  meta = with lib; {
     description = "Oracle Extension pack for VirtualBox";
     license = licenses.virtualbox-puel;
     homepage = "https://www.virtualbox.org/";
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix b/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
index 9529c980475da..f59dcc25f4c20 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions-iso/default.nix
@@ -5,7 +5,7 @@ let
 in
 fetchurl {
   url = "http://download.virtualbox.org/virtualbox/${version}/VBoxGuestAdditions_${version}.iso";
-  sha256 = "4469bab0f59c62312b0a1b67dcf9c07a8a971afad339fa2c3eb80e209e099ef9";
+  sha256 = "4c7523fa6d17436e3b7788f62956674270572cfefa340d03111b85f8517d5981";
   meta = {
     description = "Guest additions ISO for VirtualBox";
     longDescription = ''
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions/builder.nix b/pkgs/applications/virtualization/virtualbox/guest-additions/builder.nix
index 72c0af9626f72..00d0d555c60ad 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions/builder.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions/builder.nix
@@ -1,7 +1,7 @@
-{ config, stdenv, kernel, fetchurl, lib, pam, libxslt
-, libX11, libXext, libXcursor, libXmu
+{ stdenv, kernel, fetchurl, lib, pam, libxslt
+, libXext, libXcursor, libXmu
 , glib, libXrandr, dbus, xz
-, pkg-config, which, zlib, xorg
+, pkg-config, which, xorg
 , yasm, patchelf, makeself
 , linuxHeaders, openssl}:
 
@@ -10,11 +10,11 @@ let
 
 in stdenv.mkDerivation (finalAttrs: {
   pname = "VirtualBox-GuestAdditions-builder-${kernel.version}";
-  version = "7.0.18";
+  version = "7.0.20";
 
   src = fetchurl {
     url = "https://download.virtualbox.org/virtualbox/${finalAttrs.version}/VirtualBox-${finalAttrs.version}.tar.bz2";
-    sha256 = "d999513533631674a024762668de999411d8197060c51e68c5faf0a2c0eea1a5";
+    sha256 = "5cf5979bef66ebab3fcd495796b215a940e8a07c469d4bc56d064de44222dd02";
   };
 
   env.NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration";
@@ -37,7 +37,6 @@ in stdenv.mkDerivation (finalAttrs: {
   '';
 
   patches = [
-    #../gcc-13.patch
     ## https://www.virtualbox.org/changeset/100258/vbox
     ./no-legacy-xorg.patch
   ];
diff --git a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
index ac867ce9ce720..f3eea8a5c1713 100644
--- a/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
+++ b/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
@@ -1,10 +1,6 @@
-{ config, stdenv, kernel, callPackage, lib, dbus
-, libX11, libXext, libXcursor, libXmu, xorg
-, which, zlib, patchelf, makeWrapper
+{ stdenv, kernel, callPackage, lib, dbus
+, xorg, zlib, patchelf, makeWrapper
 }:
-
-with lib;
-
 let
   virtualBoxNixGuestAdditionsBuilder = callPackage ./builder.nix { };
 
@@ -104,7 +100,7 @@ in stdenv.mkDerivation {
         host/guest clipboard support.
       '';
       sourceProvenance = with lib.sourceTypes; [ fromSource ];
-      license = licenses.gpl2;
+      license = lib.licenses.gpl2;
       maintainers = [ lib.maintainers.sander lib.maintainers.friedrichaltheide ];
       platforms = [ "i686-linux" "x86_64-linux" ];
       broken = stdenv.hostPlatform.is32bit && (kernel.kernelAtLeast "5.10");
diff --git a/pkgs/applications/virtualization/vmware-workstation/default.nix b/pkgs/applications/virtualization/vmware-workstation/default.nix
index 83d2361a99900..b60875c381295 100644
--- a/pkgs/applications/virtualization/vmware-workstation/default.nix
+++ b/pkgs/applications/virtualization/vmware-workstation/default.nix
@@ -79,20 +79,6 @@ let
     sha256 = "sha256-JSEW1gqQuLGRkathlwZU/TnG6dL/xWKW4//SfE+kO0A=";
   };
 
-  gdbm3 = gdbm.overrideAttrs (old: rec {
-    version = "1.8.3";
-
-    src = fetchurl {
-      url = "mirror://gnu/gdbm/gdbm-${version}.tar.gz";
-      sha256 = "sha256-zDQDOKLii0AFirnrU1SiHVP4ihWC6iG6C7GFw3ooHck=";
-    };
-
-    installPhase = ''
-      mkdir -p $out/lib
-      cp .libs/libgdbm*.so* $out/lib/
-    '';
-  });
-
   vmware-unpack-env = buildFHSEnv rec {
     name = "vmware-unpack-env";
     targetPkgs = pkgs: [ zlib ];
@@ -114,7 +100,7 @@ stdenv.mkDerivation rec {
     libxslt
     libxml2
     libuuid
-    gdbm3
+    gdbm
     readline
     xz
     cups
@@ -156,7 +142,7 @@ stdenv.mkDerivation rec {
     ''}
   '';
 
-  patchPhase = lib.optionalString enableMacOSGuests ''
+  postPatch = lib.optionalString enableMacOSGuests ''
     cp -R "${unlockerSrc}" unlocker/
 
     substituteInPlace unlocker/unlocker.py --replace \
@@ -167,6 +153,8 @@ stdenv.mkDerivation rec {
   '';
 
   installPhase = ''
+    runHook preInstall
+
     mkdir -p \
       $out/bin \
       $out/etc/vmware \
@@ -338,7 +326,7 @@ stdenv.mkDerivation rec {
     sed -i -e "s,/sbin/modprobe,${kmod}/bin/modprobe," $out/bin/vmplayer
     sed -i -e "s,@@BINARY@@,$out/bin/vmplayer," $out/share/applications/vmware-player.desktop
 
-    ## VMware OVF Tool compoment
+    ## VMware OVF Tool component
     echo "Installing VMware OVF Tool for Linux"
     unpacked="unpacked/vmware-ovftool"
     mkdir -p $out/lib/vmware-ovftool/
@@ -404,7 +392,7 @@ stdenv.mkDerivation rec {
 
     chmod +x $out/bin/* $out/lib/vmware/bin/* $out/lib/vmware/setup/*
 
-    # Harcoded pkexec hack
+    # Hardcoded pkexec hack
     for lib in "lib/vmware/lib/libvmware-mount.so/libvmware-mount.so" "lib/vmware/lib/libvmwareui.so/libvmwareui.so" "lib/vmware/lib/libvmware-fuseUI.so/libvmware-fuseUI.so"
     do
       sed -i -e "s,/usr/local/sbin,/run/vmware/bin," "$out/$lib"
@@ -419,6 +407,8 @@ stdenv.mkDerivation rec {
     wrapProgram $out/lib/vmware/bin/vmware-vmx
     rm $out/lib/vmware/bin/vmware-vmx
     ln -s /run/wrappers/bin/vmware-vmx $out/lib/vmware/bin/vmware-vmx
+
+    runHook postInstall
   '';
 
   meta = with lib; {
diff --git a/pkgs/applications/virtualization/vpcs/default.nix b/pkgs/applications/virtualization/vpcs/default.nix
deleted file mode 100644
index 15f769ef96981..0000000000000
--- a/pkgs/applications/virtualization/vpcs/default.nix
+++ /dev/null
@@ -1,60 +0,0 @@
-{ lib
-, stdenv
-, fetchFromGitHub
-, testers
-, vpcs
-}:
-
-stdenv.mkDerivation (finalAttrs: {
-  pname = "vpcs";
-  version = "0.8.3";
-
-  src = fetchFromGitHub {
-    owner = "GNS3";
-    repo = "vpcs";
-    rev = "v${finalAttrs.version}";
-    hash = "sha256-OKi4sC4fmKtkJkkpHZ6OfeIDaBafVrJXGXh1R6gLPFY=";
-  };
-
-  sourceRoot = "${finalAttrs.src.name}/src";
-
-  buildPhase = ''
-    runHook preBuild
-
-    MKOPT="CC=${stdenv.cc.targetPrefix}cc" ./mk.sh ${stdenv.buildPlatform.linuxArch}
-
-    runHook postBuild
-  '';
-
-  installPhase = ''
-    runHook preInstall
-
-    install -D -m555 vpcs $out/bin/vpcs
-    install -D -m444 ../man/vpcs.1 $out/share/man/man1/vpcs.1
-
-    runHook postInstall
-  '';
-
-  enableParallelBuilding = true;
-
-  passthru = {
-    tests.version = testers.testVersion {
-      package = vpcs;
-      command = "vpcs -v";
-    };
-  };
-
-  meta = with lib; {
-    description = "Simple virtual PC simulator";
-    longDescription = ''
-      The VPCS (Virtual PC Simulator) can simulate up to 9 PCs. You can
-      ping/traceroute them, or ping/traceroute the other hosts/routers from the
-      VPCS when you study the Cisco routers in the dynamips.
-    '';
-    inherit (finalAttrs.src.meta) homepage;
-    license = licenses.bsd2;
-    platforms = platforms.linux ++ platforms.darwin;
-    mainProgram = "vpcs";
-    maintainers = with maintainers; [ anthonyroussel ];
-  };
-})
diff --git a/pkgs/applications/virtualization/x11docker/default.nix b/pkgs/applications/virtualization/x11docker/default.nix
index 840c9d648b941..1e400088693b3 100644
--- a/pkgs/applications/virtualization/x11docker/default.nix
+++ b/pkgs/applications/virtualization/x11docker/default.nix
@@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
     description = "Run graphical applications with Docker";
     homepage = "https://github.com/mviereck/x11docker";
     license = lib.licenses.mit;
-    maintainers = with lib.maintainers; [ ];
+    maintainers = [ ];
     platforms = lib.platforms.linux;
     mainProgram = "x11docker";
   };
diff --git a/pkgs/applications/virtualization/xen/0000-fix-install-python.4.15.patch b/pkgs/applications/virtualization/xen/0000-fix-install-python.4.15.patch
deleted file mode 100644
index 5fc5a6012ee30..0000000000000
--- a/pkgs/applications/virtualization/xen/0000-fix-install-python.4.15.patch
+++ /dev/null
@@ -1,16 +0,0 @@
-tools/python/install-wrap script brakes shebangs patching, disable
-
-diff --git a/tools/Rules.mk b/tools/Rules.mk
-index 444e5bacdd..c99ea959ff 100644
---- a/tools/Rules.mk
-+++ b/tools/Rules.mk
-@@ -135,8 +135,7 @@ CFLAGS += $(CFLAGS-y)
- 
- CFLAGS += $(EXTRA_CFLAGS_XEN_TOOLS)
- 
--INSTALL_PYTHON_PROG = \
--	$(XEN_ROOT)/tools/python/install-wrap "$(PYTHON_PATH)" $(INSTALL_PROG)
-+INSTALL_PYTHON_PROG = $(INSTALL_PROG)
- 
- %.opic: %.c
- 	$(CC) $(CPPFLAGS) -DPIC $(CFLAGS) $(CFLAGS_$*.opic) -fPIC -c -o $@ $< $(APPEND_CFLAGS)
diff --git a/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch b/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch
deleted file mode 100644
index 339972a2cdeb1..0000000000000
--- a/pkgs/applications/virtualization/xen/0000-qemu-seabios-enable-ATA_DMA.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -uNr a/src/Kconfig b/src/Kconfig
---- a/src/Kconfig	2015-08-31 10:15:13.231134858 +0200
-+++ b/src/Kconfig	2015-08-31 10:14:24.039180178 +0200
-@@ -144,13 +144,13 @@
-     config ATA_DMA
-         depends on ATA
-         bool "ATA DMA"
--        default n
-+        default y
-         help
-             Detect and try to use ATA bus mastering DMA controllers.
-     config ATA_PIO32
-         depends on ATA
-         bool "ATA 32bit PIO"
--        default n
-+        default y
-         help
-             Use 32bit PIO accesses on ATA (minor optimization on PCI transfers).
-     config AHCI
diff --git a/pkgs/applications/virtualization/xen/0004-makefile-use-efi-ld.4.15.patch b/pkgs/applications/virtualization/xen/0004-makefile-use-efi-ld.4.15.patch
deleted file mode 100644
index c64ec52315c92..0000000000000
--- a/pkgs/applications/virtualization/xen/0004-makefile-use-efi-ld.4.15.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
-index b6567c4127..83defeee95 100644
---- a/xen/arch/x86/Makefile
-+++ b/xen/arch/x86/Makefile
-@@ -124,11 +124,11 @@ ifneq ($(efi-y),)
- export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
- # Check if the linker supports PE.
- EFI_LDFLAGS = $(patsubst -m%,-mi386pep,$(XEN_LDFLAGS)) --subsystem=10 --strip-debug
--XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(LD) $(EFI_LDFLAGS) -o efi/check.efi efi/check.o 2>/dev/null && echo y))
-+XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(shell $(EFI_LD) $(EFI_LDFLAGS) -o efi/check.efi efi/check.o 2>/dev/null && echo y))
- CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
- # Check if the linker produces fixups in PE by default (we need to disable it doing so for now).
- XEN_NO_PE_FIXUPS := $(if $(XEN_BUILD_EFI), \
--                         $(shell $(LD) $(EFI_LDFLAGS) --disable-reloc-section -o efi/check.efi efi/check.o 2>/dev/null && \
-+                         $(shell $(EFI_LD) $(EFI_LDFLAGS) --disable-reloc-section -o efi/check.efi efi/check.o 2>/dev/null && \
-                                  echo --disable-reloc-section))
- endif
- 
-@@ -217,20 +217,20 @@ note_file_option ?= $(note_file)
- ifeq ($(XEN_BUILD_PE),y)
- $(TARGET).efi: prelink-efi.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
- 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
--	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< efi/relocs-dummy.o \
-+	          $(EFI_LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< efi/relocs-dummy.o \
- 	                $(BASEDIR)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
- 	efi/mkreloc $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
- 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
- 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
- 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
- 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
--	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
-+	          $(EFI_LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
- 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
- 	efi/mkreloc $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
- 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
- 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
- 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
--	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
-+	$(EFI_LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
- 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
- 	$(NM) -pa --format=sysv $(@D)/$(@F) \
- 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
diff --git a/pkgs/applications/virtualization/xen/0005-makefile-fix-efi-mountdir-use.4.15.patch b/pkgs/applications/virtualization/xen/0005-makefile-fix-efi-mountdir-use.4.15.patch
deleted file mode 100644
index 8f07c1a8e29ff..0000000000000
--- a/pkgs/applications/virtualization/xen/0005-makefile-fix-efi-mountdir-use.4.15.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-EFI_MOUNTPOINT is conventionally /boot/efi or /boot/EFI or something
-like that, and (on my machine) has directories within that called
-{Boot, nixos, gummiboot}.
-
-This patch does two things:
-
-1) Xen apparently wants to put files in
-$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR) - we remove the duplicate 'efi' name
-because I can't see why we have it
-
-2) Ensures the said directory exists
-
-
-diff --git a/xen/Makefile b/xen/Makefile
-index acb2d28891..d0763fbbe7 100644
---- a/xen/Makefile
-+++ b/xen/Makefile
-@@ -289,7 +289,9 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX)
- 		ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi; \
- 		ln -sf $(T)-$(XEN_FULLVERSION).efi $(D)$(EFI_DIR)/$(T).efi; \
- 		if [ -n '$(EFI_MOUNTPOINT)' -a -n '$(EFI_VENDOR)' ]; then \
--			$(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi; \
-+			[ -d $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR) ] || \
-+			  $(INSTALL_DIR) $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR) ;\
-+			$(INSTALL_DATA) $(TARGET).efi $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi; \
- 		elif [ "$(D)" = "$(patsubst $(shell cd $(XEN_ROOT) && pwd)/%,%,$(D))" ]; then \
- 			echo 'EFI installation only partially done (EFI_VENDOR not set)' >&2; \
- 		fi; \
-@@ -319,7 +321,7 @@ _uninstall:
- 	rm -f $(D)$(DEBUG_DIR)/$(T)-$(XEN_FULLVERSION).efi.map
- 	rm -f $(D)$(EFI_DIR)/$(T)-$(XEN_VERSION).efi
- 	rm -f $(D)$(EFI_DIR)/$(T).efi
--	rm -f $(D)$(EFI_MOUNTPOINT)/efi/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi
-+	rm -f $(D)$(EFI_MOUNTPOINT)/$(EFI_VENDOR)/$(T)-$(XEN_FULLVERSION).efi
- 
- .PHONY: _debug
- _debug:
diff --git a/pkgs/applications/virtualization/xen/4.15.nix b/pkgs/applications/virtualization/xen/4.15.nix
deleted file mode 100644
index d4905088ae1e3..0000000000000
--- a/pkgs/applications/virtualization/xen/4.15.nix
+++ /dev/null
@@ -1,183 +0,0 @@
-{ lib, callPackage, fetchurl, fetchpatch, fetchgit
-, ocaml-ng
-, withInternalQemu ? true
-, withInternalTraditionalQemu ? true
-, withInternalSeabios ? true
-, withSeabios ? !withInternalSeabios, seabios
-, withInternalOVMF ? false # FIXME: tricky to build
-, withOVMF ? false, OVMF
-, withLibHVM ? false
-
-# xen
-, python3Packages
-
-# qemu
-, udev, pciutils, xorg, SDL, pixman, acl, glusterfs, spice-protocol, usbredir
-, alsa-lib, glib, python3
-, ... } @ args:
-
-assert withInternalSeabios -> !withSeabios;
-assert withInternalOVMF -> !withOVMF;
-assert !withLibHVM;
-
-with lib;
-
-# Patching XEN? Check the XSAs at
-# https://xenbits.xen.org/xsa/
-# and try applying all the ones we don't have yet.
-
-let
-  xsa = import ./xsa-patches.nix { inherit fetchpatch; };
-
-  qemuMemfdBuildFix = fetchpatch {
-    name = "xen-4.8-memfd-build-fix.patch";
-    url = "https://github.com/qemu/qemu/commit/75e5b70e6b5dcc4f2219992d7cffa462aa406af0.patch";
-    sha256 = "0gaz93kb33qc0jx6iphvny0yrd17i8zhcl3a9ky5ylc2idz0wiwa";
-  };
-
-  qemuDeps = [
-    udev pciutils xorg.libX11 SDL pixman acl glusterfs spice-protocol usbredir
-    alsa-lib glib python3
-  ];
-in
-
-callPackage (import ./generic.nix (rec {
-  version = "4.15.1";
-
-  src = fetchurl {
-    url = "https://downloads.xenproject.org/release/xen/${version}/xen-${version}.tar.gz";
-    sha256 = "1rmc7gb72xwhr3h9rc3bkac41s8kjjzz45miwdq6yalyq7j7vss5";
-  };
-
-  # Sources needed to build tools and firmwares.
-  xenfiles = optionalAttrs withInternalQemu {
-    qemu-xen = {
-      src = fetchgit {
-        url = "https://xenbits.xen.org/git-http/qemu-xen.git";
-        # rev = "refs/tags/qemu-xen-${version}";
-        # use revision hash - reproducible but must be updated with each new version
-        rev = "e2af2d050338c99e8436e251ad67aafb3ebbd501";
-        sha256 = "sha256-gVykPtzAA7tmpe6iVvnulaW+b0jD3gwL1JXC5yeIA7M=";
-      };
-      buildInputs = qemuDeps;
-      postPatch = ''
-        # needed in build but /usr/bin/env is not available in sandbox
-        substituteInPlace scripts/tracetool.py \
-          --replace "/usr/bin/env python" "${python3}/bin/python"
-      '';
-      meta.description = "Xen's fork of upstream Qemu";
-    };
-  } // optionalAttrs withInternalTraditionalQemu {
-    # TODO 4.15: something happened with traditional in this release?
-    qemu-xen-traditional = {
-      src = fetchgit {
-        url = "https://xenbits.xen.org/git-http/qemu-xen-traditional.git";
-        # rev = "refs/tags/xen-${version}";
-        # use revision hash - reproducible but must be updated with each new version
-        rev = "3d273dd05e51e5a1ffba3d98c7437ee84e8f8764";
-        sha256 = "1dc6dhjp4y2irmi9yiyw1kzmm1habyy8j1s2zkf6qyak850krqj7";
-      };
-      buildInputs = qemuDeps;
-      patches = [
-      ];
-      postPatch = ''
-        substituteInPlace xen-hooks.mak \
-          --replace /usr/include/pci ${pciutils}/include/pci
-      '';
-      meta.description = "Xen's fork of upstream Qemu that uses old device model";
-    };
-  } // optionalAttrs withInternalSeabios {
-    "firmware/seabios-dir-remote" = {
-      src = fetchgit {
-        url = "https://xenbits.xen.org/git-http/seabios.git";
-        rev = "155821a1990b6de78dde5f98fa5ab90e802021e0";
-        sha256 = "sha256-F3lzr00CMAObJtpz0eZFT/rwjFx+bvlI37/JtHXP5Eo=";
-      };
-      patches = [ ./0000-qemu-seabios-enable-ATA_DMA.patch ];
-      meta.description = "Xen's fork of Seabios";
-    };
-  } // optionalAttrs withInternalOVMF {
-    "firmware/ovmf-dir-remote" = {
-      src = fetchgit {
-        url = "https://xenbits.xen.org/git-http/ovmf.git";
-        rev = "a3741780fe3535e19e02efa869a7cac481891129";
-        sha256 = "0000000000000000000000000000000000000000000000000000";
-      };
-      meta.description = "Xen's fork of OVMF";
-    };
-  } // {
-    # TODO: patch Xen to make this optional?
-    "firmware/etherboot/ipxe.git" = {
-      src = fetchgit {
-        url = "https://git.ipxe.org/ipxe.git";
-        rev = "988d2c13cdf0f0b4140685af35ced70ac5b3283c";
-        sha256 = "1pkf1n1c0rdlzfls8fvjvi1sd9xjd9ijqlyz3wigr70ijcv6x8i9";
-      };
-      meta.description = "Xen's fork of iPXE";
-    };
-  };
-
-  configureFlags = []
-    ++ optional (!withInternalQemu) "--with-system-qemu" # use qemu from PATH
-    ++ optional (withInternalTraditionalQemu) "--enable-qemu-traditional"
-    ++ optional (!withInternalTraditionalQemu) "--disable-qemu-traditional"
-
-    ++ optional (withSeabios) "--with-system-seabios=${seabios}/share/seabios"
-    ++ optional (!withInternalSeabios && !withSeabios) "--disable-seabios"
-
-    ++ optional (withOVMF) "--with-system-ovmf=${OVMF.firmware}"
-    ++ optional (withInternalOVMF) "--enable-ovmf";
-
-  NIX_CFLAGS_COMPILE = toString [
-    # TODO 4.15: drop unneeded ones
-    # Fix build on Glibc 2.24.
-    "-Wno-error=deprecated-declarations"
-    # Fix build with GCC 8
-    "-Wno-error=maybe-uninitialized"
-    "-Wno-error=stringop-truncation"
-    "-Wno-error=format-truncation"
-    "-Wno-error=array-bounds"
-    # Fix build with GCC 9
-    "-Wno-error=address-of-packed-member"
-    "-Wno-error=format-overflow"
-    "-Wno-error=absolute-value"
-    # Fix build with GCC 10
-    "-Wno-error=enum-conversion"
-    "-Wno-error=zero-length-bounds"
-    # Fix build with GCC 12
-    # xentoollog_stubs.c:57: error: "Some_val" redefined [-Werror]
-    "-Wno-error"
-  ];
-
-  patches = with xsa; flatten [
-    ./0000-fix-ipxe-src.4.15.patch
-    ./0000-fix-install-python.4.15.patch
-    ./0004-makefile-use-efi-ld.4.15.patch
-    ./0005-makefile-fix-efi-mountdir-use.4.15.patch
-
-    XSA_386
-  ];
-
-  postPatch = ''
-    # Avoid a glibc >= 2.25 deprecation warnings that get fatal via -Werror.
-    sed 1i'#include <sys/sysmacros.h>' \
-      -i tools/libs/light/libxl_device.c
-
-    # Fix missing pkg-config dir
-    mkdir -p tools/pkg-config
-  '';
-
-  preBuild = ''
-    # PKG_CONFIG env var collides with variables used in tools Makefiles.
-    unset PKG_CONFIG
-  '';
-
-  passthru = {
-    qemu-system-i386 = if withInternalQemu
-      then "lib/xen/bin/qemu-system-i386"
-      else throw "this xen has no qemu builtin";
-  };
-
-})) ({
-  ocamlPackages = ocaml-ng.ocamlPackages_4_14;
-} // args)
diff --git a/pkgs/applications/virtualization/xen/4.17/default.nix b/pkgs/applications/virtualization/xen/4.17/default.nix
new file mode 100644
index 0000000000000..d270c37f2ce83
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/4.17/default.nix
@@ -0,0 +1,56 @@
+{
+  lib,
+  fetchpatch,
+  callPackage,
+  ocaml-ng,
+  ...
+}@genericDefinition:
+
+let
+  upstreamPatches = import ../generic/patches.nix {
+    inherit lib;
+    inherit fetchpatch;
+  };
+
+  upstreamPatchList = lib.lists.flatten (
+    with upstreamPatches;
+    [
+      QUBES_REPRODUCIBLE_BUILDS
+      XSA_462
+    ]
+  );
+in
+
+callPackage (import ../generic/default.nix {
+  pname = "xen";
+  branch = "4.17";
+  version = "4.17.5";
+  latest = false;
+  pkg = {
+    xen = {
+      rev = "430ce6cd936546ad883ecd1c85ddea32d790604b";
+      hash = "sha256-UoMdXRW0yWSaQPPV0rgoTZVO2ghdnqWruBHn7+ZjKzI=";
+      patches = [ ] ++ upstreamPatchList;
+    };
+    qemu = {
+      rev = "ffb451126550b22b43b62fb8731a0d78e3376c03";
+      hash = "sha256-G0hMPid9d3fd1jAY7CiZ33xUZf1hdy96T1VUKFGeHSk=";
+      patches = [ ];
+    };
+    seaBIOS = {
+      rev = "d239552ce7220e448ae81f41515138f7b9e3c4db";
+      hash = "sha256-UKMceJhIprN4/4Xe4EG2EvKlanxVcEi5Qcrrk3Ogiik=";
+      patches = [ ];
+    };
+    ovmf = {
+      rev = "7b4a99be8a39c12d3a7fc4b8db9f0eab4ac688d5";
+      hash = "sha256-Qq2RgktCkJZBsq6Ch+6tyRHhme4lfcN7d2oQfxwhQt8=";
+      patches = [ ];
+    };
+    ipxe = {
+      rev = "1d1cf74a5e58811822bee4b3da3cff7282fcdfca";
+      hash = "sha256-8pwoPrmkpL6jIM+Y/C0xSvyrBM/Uv0D1GuBwNm+0DHU=";
+      patches = [ ];
+    };
+  };
+}) ({ ocamlPackages = ocaml-ng.ocamlPackages_4_14; } // genericDefinition)
diff --git a/pkgs/applications/virtualization/xen/4.18/default.nix b/pkgs/applications/virtualization/xen/4.18/default.nix
new file mode 100644
index 0000000000000..21d6de13f1b03
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/4.18/default.nix
@@ -0,0 +1,56 @@
+{
+  lib,
+  fetchpatch,
+  callPackage,
+  ocaml-ng,
+  ...
+}@genericDefinition:
+
+let
+  upstreamPatches = import ../generic/patches.nix {
+    inherit lib;
+    inherit fetchpatch;
+  };
+
+  upstreamPatchList = lib.lists.flatten (
+    with upstreamPatches;
+    [
+      QUBES_REPRODUCIBLE_BUILDS
+      XSA_462
+    ]
+  );
+in
+
+callPackage (import ../generic/default.nix {
+  pname = "xen";
+  branch = "4.18";
+  version = "4.18.3";
+  latest = false;
+  pkg = {
+    xen = {
+      rev = "bd51e573a730efc569646379cd59ccba967cde97";
+      hash = "sha256-OFiFdpPCXR+sWjzFHCORtY4DkWyggvxkcsGdgEyO1ts=";
+      patches = [ ] ++ upstreamPatchList;
+    };
+    qemu = {
+      rev = "0df9387c8983e1b1e72d8c574356f572342c03e6";
+      hash = "sha256-BX+LXfNzwdUMALwwI1ZDW12dJ357oynjnrboLHREDGQ=";
+      patches = [ ];
+    };
+    seaBIOS = {
+      rev = "ea1b7a0733906b8425d948ae94fba63c32b1d425";
+      hash = "sha256-J2FuT+FXn9YoFLSfxDOxyKZvKrys59a6bP1eYvEXVNU=";
+      patches = [ ];
+    };
+    ovmf = {
+      rev = "ba91d0292e593df8528b66f99c1b0b14fadc8e16";
+      hash = "sha256-htOvV43Hw5K05g0SF3po69HncLyma3BtgpqYSdzRG4s=";
+      patches = [ ];
+    };
+    ipxe = {
+      rev = "1d1cf74a5e58811822bee4b3da3cff7282fcdfca";
+      hash = "sha256-8pwoPrmkpL6jIM+Y/C0xSvyrBM/Uv0D1GuBwNm+0DHU=";
+      patches = [ ];
+    };
+  };
+}) ({ ocamlPackages = ocaml-ng.ocamlPackages_4_14; } // genericDefinition)
diff --git a/pkgs/applications/virtualization/xen/4.19/default.nix b/pkgs/applications/virtualization/xen/4.19/default.nix
new file mode 100644
index 0000000000000..a1b1337042855
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/4.19/default.nix
@@ -0,0 +1,58 @@
+{
+  lib,
+  fetchpatch,
+  callPackage,
+  ocaml-ng,
+  ...
+}@genericDefinition:
+
+let
+  upstreamPatches = import ../generic/patches.nix {
+    inherit lib;
+    inherit fetchpatch;
+  };
+
+  upstreamPatchList = lib.lists.flatten (
+    with upstreamPatches;
+    [
+      QUBES_REPRODUCIBLE_BUILDS
+      XSA_460
+      XSA_461
+      XSA_462
+    ]
+  );
+in
+
+callPackage (import ../generic/default.nix {
+  pname = "xen";
+  branch = "4.19";
+  version = "4.19.0";
+  latest = true;
+  pkg = {
+    xen = {
+      rev = "026c9fa29716b0ff0f8b7c687908e71ba29cf239";
+      hash = "sha256-Q6x+2fZ4ITBz6sKICI0NHGx773Rc919cl+wzI89UY+Q=";
+      patches = [ ] ++ upstreamPatchList;
+    };
+    qemu = {
+      rev = "0df9387c8983e1b1e72d8c574356f572342c03e6";
+      hash = "sha256-BX+LXfNzwdUMALwwI1ZDW12dJ357oynjnrboLHREDGQ=";
+      patches = [ ];
+    };
+    seaBIOS = {
+      rev = "a6ed6b701f0a57db0569ab98b0661c12a6ec3ff8";
+      hash = "sha256-hWemj83cxdY8p+Jhkh5GcPvI0Sy5aKYZJCsKDjHTUUk=";
+      patches = [ ];
+    };
+    ovmf = {
+      rev = "ba91d0292e593df8528b66f99c1b0b14fadc8e16";
+      hash = "sha256-htOvV43Hw5K05g0SF3po69HncLyma3BtgpqYSdzRG4s=";
+      patches = [ ];
+    };
+    ipxe = {
+      rev = "1d1cf74a5e58811822bee4b3da3cff7282fcdfca";
+      hash = "sha256-8pwoPrmkpL6jIM+Y/C0xSvyrBM/Uv0D1GuBwNm+0DHU=";
+      patches = [ ];
+    };
+  };
+}) ({ ocamlPackages = ocaml-ng.ocamlPackages_4_14; } // genericDefinition)
diff --git a/pkgs/applications/virtualization/xen/README.md b/pkgs/applications/virtualization/xen/README.md
new file mode 100644
index 0000000000000..07087e2fee230
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/README.md
@@ -0,0 +1,209 @@
+<p align="center">
+  <a href="https://xenproject.org/">
+    <picture>
+      <source
+        media="(prefers-color-scheme: light)"
+        srcset="https://downloads.xenproject.org/Branding/Logos/Green+Black/xen_project_logo_dualcolor_2000x832.png">
+      <source
+        media="(prefers-color-scheme: dark)"
+        srcset="https://xenproject.org/wp-content/uploads/sites/79/2018/09/logo_xenproject.png">
+      <img
+        src="https://downloads.xenproject.org/Branding/Logos/Green+Black/xen_project_logo_dualcolor_2000x832.png"
+        width="512px"
+        alt="Xen Project Logo">
+    </picture>
+  </a>
+</p>
+
+# Xen Project Hypervisor <a href="https://xenproject.org/"><img src="https://downloads.xenproject.org/Branding/Mascots/Xen-Fu-Panda-2000px.png" width="48px" align="top" alt="Xen Fu Panda"></a>
+
+This directory includes the build recipes for the [Xen Project Hypervisor](https://xenproject.org/).
+
+Some other notable packages that compose the Xen Project Ecosystem include:
+
+- `ocamlPackages.xenstore`: Mirage's `oxenstore` implementation.
+- `ocamlPackages.vchan`: Mirage's `xen-vchan` implementation.
+- `ocamlPackages.xenstore-tool`: XAPI's `oxenstore` utilities.
+- `xen-guest-agent`: Guest drivers for UNIX domUs.
+- `win-pvdrivers`: Guest drivers for Windows domUs.
+- `xtf`: The Xen Test Framework.
+
+## Updating
+
+### Automatically
+
+An automated update script is available in this directory. To produce up-to-date
+files for all supported Xen branches, simply run `./update.sh`, and follow the
+instructions given to you by the script. Notably, it will request that you verify
+the Xen Project code signing PGP key. This README understands that the fingerprint
+of that key is [`23E3 222C 145F 4475 FA80 60A7 83FE 14C9 57E8 2BD9`](https://keys.openpgp.org/search?q=pgp%40xen.org),
+but you should verify this information by seeking the fingerprint from other trusted
+sources, as this document may be compromised. Once the PGP key is verified, it will
+use `git verify-tag` to ascertain the validity of the cloned Xen sources.
+
+After the script is done, follow the steps in
+[**For Both Update Methods**](#for-both-update-methods) below.
+
+#### Downstream Patch Names
+
+The script expects local patch names to follow a certain specification.
+Please name any required patches using the template below:
+
+```console
+0000-project-description-branch.patch
+```
+
+Where:
+
+1. The first four numbers define the patch order.
+   **0001** will be applied after **0000**, and so on.
+1. `project` means the name of the source the patch should be applied to.
+   - If you are applying patches to the main Xen sources, use `xen`.
+   - For the pre-fetched QEMU, use `qemu`.
+   - For SeaBIOS, use `seabios`.
+   - For OVMF, use `ovmf`.
+   - For iPXE, use `ipxe`.
+1. `description` is a string with uppercase and lowercase letters, numbers and
+   dashes. It describes the patch name and what it does to the upstream code.
+1. `branch` is the branch for which this patch is supposed to patch.
+   It should match the name of the directory it is in.
+
+For example, a patch fixing `xentop`'s output in the 4.15 branch should have
+the following name: `0000-xen-xentop-output-4.15.patch`, and it should be added
+to the `4.15/` directory.
+
+### Manually
+
+The script is not infallible, and it may break in the future. If that happens,
+open a PR fixing the script, and update Xen manually:
+
+1. Check the support matrix to see which branches are security-supported.
+1. Create one directory per branch.
+1. [Update](https://xenbits.xenproject.org/gitweb/) the `default.nix` files for
+   the branches that already exist and copy a new one to any branches that do
+   not yet exist in Nixpkgs.
+   - Do not forget to set the `branch`, `version`, and `latest` attributes for
+     each of the `default.nix` files.
+   - The revisions are preferably commit hashes, but tag names are acceptable
+     as well.
+
+### For Both Update Methods
+
+1. Update `packages.nix` and `../../../top-level/all-packages.nix` with the new
+   versions. Don't forget the `slim` packages!
+1. Make sure all branches build. (Both the `standard` and `slim` versions)
+1. Use the NixOS module to test if dom0 boots successfully on all new versions.
+1. Make sure the `meta` attributes evaluate to something that makes sense. The
+   following one-line command is useful for testing this:
+
+   ```console
+   xenToEvaluate=xen; echo -e "\033[1m$(nix eval .#"$xenToEvaluate".meta.description --raw 2> /dev/null)\033[0m\n\n$(nix eval .#"$xenToEvaluate".meta.longDescription --raw 2> /dev/null)"
+   ```
+
+   Change the value of `xenToEvaluate` to evaluate all relevant Xen packages.
+1. Run `xtf --all --host` as root when booted into the Xen update, and make
+   sure no tests fail.
+1. Clean up your changes and commit them, making sure to follow the
+   [Nixpkgs Contribution Guidelines](../../../../CONTRIBUTING.md).
+1. Open a PR and await a review from the current maintainers.
+
+## Features
+
+### Pre-fetched Sources
+
+On a typical Xen build, the Xen Makefiles will fetch more required sources with
+`git` and `wget`. Due to the Nix Sandbox, build-time fetching will fail, so we
+pre-fetch the required sources before building.[^1] To accomplish this, we have
+a `prefetchedSources` attribute that contains the required derivations, if they
+are requested by the main Xen build.
+
+### EFI
+
+Building `xen.efi` requires an `ld` with PE support.[^2]
+
+We use a `makeFlag` to override the `$LD` environment variable to point to our
+patched `efiBinutils`. For more information, see the comment in `./generic/default.nix`.
+
+> [!TIP]
+> If you are certain you will not be running Xen in an x86 EFI environment, disable
+the `withEFI` flag with an [override](https://nixos.org/manual/nixpkgs/stable/#chap-overrides)
+to save you the need to compile `efiBinutils`.
+
+### Default Overrides
+
+By default, Xen also builds
+[QEMU](https://www.qemu.org/),
+[SeaBIOS](https://www.seabios.org/SeaBIOS),
+[OVMF](https://github.com/tianocore/tianocore.github.io/wiki/OVMF) and
+[iPXE](https://ipxe.org/).
+
+- QEMU is used for stubdomains and handling devices.
+- SeaBIOS is the default legacy BIOS ROM for HVM domains.
+- OVMF is the default UEFI ROM for HVM domains.
+- iPXE provides a PXE boot environment for HVMs.
+
+However, those packages are already available on Nixpkgs, and Xen does not
+necessarily need to build them into the main hypervisor build. For this reason,
+we also have the `withInternal<Component>` flags, which enables and disables
+building those built-in components. The two most popular Xen configurations will
+be the default build, with all built-in components, and a `slim` build, with none
+of those components. To simplify this process, the `./packages.nix` file includes
+the `xen-slim` package overrides that have all `withInternal<Component>` flags
+disabled. See the `meta.longDescription` attribute for the `xen-slim` packages
+for more information.
+
+## Security
+
+We aim to support all **security-supported** versions of Xen at any given time.
+See the [Xen Support Matrix](https://xenbits.xen.org/docs/unstable/support-matrix.html)
+for a list of versions. As soon as a version is no longer **security-supported**,
+it should be removed from Nixpkgs.
+
+> [!CAUTION]
+> Pull requests that introduce XSA patches
+should have the `1.severity: security` label.
+
+### Maintainers
+
+Xen is a particularly complex piece of software, so we are always looking for new
+maintainers. Help out by [making and triaging issues](https://github.com/NixOS/nixpkgs/issues/new/choose),
+[sending build fixes and improvements through PRs](https://github.com/NixOS/nixpkgs/compare),
+updating the branches, and [patching security flaws](https://xenbits.xenproject.org/xsa/).
+
+We are also looking for testers, particularly those who can test Xen on AArch64
+machines. Open issues for any build failures or runtime errors you find!
+
+## Tests
+
+So far, we only have had one simple automated test that checks for
+the correct `pkg-config` output files.
+
+Due to Xen's nature as a type-1 hypervisor, it is not a trivial matter to design
+new tests, as even basic functionality requires a machine booted in a dom0
+kernel. For this reason, most testing done with this package must be done
+manually in a NixOS machine with `virtualisation.xen.enable` set to `true`.
+
+Another unfortunate thing is that none of the Xen commands have a `--version`
+flag. This means that `testers.testVersion` cannot ascertain the Xen version.
+The only way to verify that you have indeed built the correct version is to
+boot into the freshly built Xen kernel and run `xl info`.
+
+<p align="center">
+  <a href="https://xenproject.org/">
+    <img
+      src="https://downloads.xenproject.org/Branding/Mascots/Xen%20Big%20Panda%204242x3129.png"
+      width="96px"
+      alt="Xen Fu Panda">
+  </a>
+</p>
+
+[^1]: We also produce fake `git`, `wget` and `hostname` binaries that do nothing,
+      to prevent the build from failing because Xen cannot fetch the sources that
+      were already fetched by Nix.
+[^2]: From the [Xen Documentation](https://xenbits.xenproject.org/docs/unstable/misc/efi.html):
+      > For x86, building `xen.efi` requires `gcc` 4.5.x or above (4.6.x or newer
+      recommended, as 4.5.x was probably never really tested for this purpose)
+      and `binutils` 2.22 or newer. Additionally, the `binutils` build must be
+      configured to include support for the x86_64-pep emulation (i.e.
+      `--enable-targets=x86_64-pep` or an option of equivalent effect should be
+      passed to the configure script).
diff --git a/pkgs/applications/virtualization/xen/generic.nix b/pkgs/applications/virtualization/xen/generic.nix
deleted file mode 100644
index 826cd8a3d9d84..0000000000000
--- a/pkgs/applications/virtualization/xen/generic.nix
+++ /dev/null
@@ -1,265 +0,0 @@
-config:
-{ lib, stdenv, cmake, pkg-config, which
-
-# Xen
-, bison, bzip2, checkpolicy, dev86, figlet, flex, gettext, glib
-, acpica-tools, libaio, libiconv, libuuid, ncurses, openssl, perl
-, xz, yajl, zlib
-, python3Packages
-
-# Xen Optional
-, ocamlPackages
-
-# Scripts
-, coreutils, gawk, gnused, gnugrep, diffutils, multipath-tools
-, iproute2, inetutils, iptables, bridge-utils, openvswitch, nbd, drbd
-, util-linux, procps, systemd
-
-# Documentation
-# python3Packages.markdown
-, fig2dev, ghostscript, texinfo, pandoc
-
-, binutils-unwrapped
-
-, ...} @ args:
-
-with lib;
-
-let
-  #TODO: fix paths instead
-  scriptEnvPath = concatMapStringsSep ":" (x: "${x}/bin") [
-    which perl
-    coreutils gawk gnused gnugrep diffutils util-linux multipath-tools
-    iproute2 inetutils iptables bridge-utils openvswitch nbd drbd
-  ];
-
-  withXenfiles = f: concatStringsSep "\n" (mapAttrsToList f config.xenfiles);
-
-  withTools = a: f: withXenfiles (name: x: optionalString (hasAttr a x) ''
-    echo "processing ${name}"
-    __do() {
-      cd "tools/${name}"
-      ${f name x}
-    }
-    ( __do )
-  '');
-
-  # We don't want to use the wrapped version, because this version of ld is
-  # only used for linking the Xen EFI binary, and the build process really
-  # needs control over the LDFLAGS used
-  efiBinutils = binutils-unwrapped.overrideAttrs (oldAttrs: {
-    name = "efi-binutils";
-    configureFlags = oldAttrs.configureFlags ++ [
-      "--enable-targets=x86_64-pep"
-    ];
-    doInstallCheck = false; # We get a spurious failure otherwise, due to host/target mis-match
-  });
-in
-
-stdenv.mkDerivation (rec {
-  inherit (config) version;
-
-  name = "xen-${version}";
-
-  dontUseCmakeConfigure = true;
-
-  hardeningDisable = [ "stackprotector" "fortify" "pic" ];
-
-  nativeBuildInputs = [ pkg-config cmake ];
-  buildInputs = [
-    which
-
-    # Xen
-    bison bzip2 checkpolicy dev86 figlet flex gettext glib acpica-tools libaio
-    libiconv libuuid ncurses openssl perl python3Packages.python xz yajl zlib
-
-    # oxenstored
-    ocamlPackages.findlib ocamlPackages.ocaml systemd
-
-    # Python fixes
-    python3Packages.wrapPython
-
-    # Documentation
-    python3Packages.markdown fig2dev ghostscript texinfo pandoc
-
-    # Others
-  ] ++ (concatMap (x: x.buildInputs or []) (attrValues config.xenfiles))
-    ++ (config.buildInputs or []);
-
-  prePatch = ''
-    ### Generic fixes
-
-    # Xen's stubdoms, tools and firmwares need various sources that
-    # are usually fetched at build time using wget and git. We can't
-    # have that, so we prefetch them in nix-expression and setup
-    # fake wget and git for debugging purposes.
-
-    mkdir fake-bin
-
-    # Fake git: just print what it wants and die
-    cat > fake-bin/wget << EOF
-    #!${stdenv.shell} -e
-    echo ===== FAKE WGET: Not fetching \$*
-    [ -e \$3 ]
-    EOF
-
-    # Fake git: just print what it wants and die
-    cat > fake-bin/git << EOF
-    #!${stdenv.shell}
-    echo ===== FAKE GIT: Not cloning \$*
-    [ -e \$3 ]
-    EOF
-
-    chmod +x fake-bin/*
-    export PATH=$PATH:$PWD/fake-bin
-
-    # Remove in-tree qemu stuff in case we build from a tar-ball
-    rm -rf tools/qemu-xen tools/qemu-xen-traditional
-
-    # Fix shebangs, mainly for build-scripts
-    # We want to do this before getting prefetched stuff to speed things up
-    # (prefetched stuff has lots of files)
-    find . -type f | xargs sed -i 's@/usr/bin/\(python\|perl\)@/usr/bin/env \1@g'
-    find . -type f -not -path "./tools/hotplug/Linux/xendomains.in" \
-      | xargs sed -i 's@/bin/bash@${stdenv.shell}@g'
-
-    # Get prefetched stuff
-    ${withXenfiles (name: x: ''
-      echo "${x.src} -> tools/${name}"
-      cp -r ${x.src} tools/${name}
-      chmod -R +w tools/${name}
-    '')}
-  '';
-
-  patches = [
-  ] ++ (config.patches or []);
-
-  postPatch = ''
-    ### Hacks
-
-    # Work around a bug in our GCC wrapper: `gcc -MF foo -v' doesn't
-    # print the GCC version number properly.
-    substituteInPlace xen/Makefile \
-      --replace '$(CC) $(CFLAGS) -v' '$(CC) -v'
-
-    # Hack to get `gcc -m32' to work without having 32-bit Glibc headers.
-    mkdir -p tools/include/gnu
-    touch tools/include/gnu/stubs-32.h
-
-    ### Fixing everything else
-
-    substituteInPlace tools/libfsimage/common/fsimage_plugin.c \
-      --replace /usr $out
-
-    substituteInPlace tools/misc/xenpvnetboot \
-      --replace /usr/sbin/mount ${util-linux}/bin/mount \
-      --replace /usr/sbin/umount ${util-linux}/bin/umount
-
-    substituteInPlace tools/xenmon/xenmon.py \
-      --replace /usr/bin/pkill ${procps}/bin/pkill
-
-    ${optionalString (builtins.compareVersions config.version "4.8" >= 0) ''
-      substituteInPlace tools/hotplug/Linux/launch-xenstore.in \
-        --replace /bin/mkdir mkdir
-    ''}
-
-    ${optionalString (builtins.compareVersions config.version "4.6" < 0) ''
-      # TODO: use this as a template and support our own if-up scripts instead?
-      substituteInPlace tools/hotplug/Linux/xen-backend.rules.in \
-        --replace "@XEN_SCRIPT_DIR@" $out/etc/xen/scripts
-
-      # blktap is not provided by xen, but by xapi
-      sed -i '/blktap/d' tools/hotplug/Linux/xen-backend.rules.in
-    ''}
-
-    ${withTools "patches" (name: x: ''
-      ${concatMapStringsSep "\n" (p: ''
-        echo "# Patching with ${p}"
-        patch -p1 < ${p}
-      '') x.patches}
-    '')}
-
-    ${withTools "postPatch" (name: x: x.postPatch)}
-
-    ${config.postPatch or ""}
-  '';
-
-  postConfigure = ''
-    substituteInPlace tools/hotplug/Linux/xendomains \
-      --replace /bin/ls ls
-  '';
-
-  EFI_LD = "${efiBinutils}/bin/ld";
-  EFI_VENDOR = "nixos";
-
-  # TODO: Flask needs more testing before enabling it by default.
-  #makeFlags = [ "XSM_ENABLE=y" "FLASK_ENABLE=y" "PREFIX=$(out)" "CONFIG_DIR=/etc" "XEN_EXTFILES_URL=\\$(XEN_ROOT)/xen_ext_files" ];
-  makeFlags = [ "PREFIX=$(out) CONFIG_DIR=/etc" "XEN_SCRIPT_DIR=/etc/xen/scripts" ]
-           ++ (config.makeFlags or []);
-
-  preBuild = ''
-    ${config.preBuild or ""}
-  '';
-
-  buildFlags = [ "xen" "tools" ];
-
-  postBuild = ''
-    make -C docs man-pages
-
-    ${withTools "buildPhase" (name: x: x.buildPhase)}
-  '';
-
-  installPhase = ''
-    mkdir -p $out $out/share $out/share/man
-    cp -prvd dist/install/nix/store/*/* $out/
-    cp -prvd dist/install/boot $out/boot
-    cp -prvd dist/install/etc $out
-    cp -dR docs/man1 docs/man5 $out/share/man/
-
-    ${withTools "installPhase" (name: x: x.installPhase)}
-
-    # Hack
-    substituteInPlace $out/etc/xen/scripts/hotplugpath.sh \
-      --replace SBINDIR=\"$out/sbin\" SBINDIR=\"$out/bin\"
-
-    wrapPythonPrograms
-    # We also need to wrap pygrub, which lies in lib
-    wrapPythonProgramsIn "$out/lib" "$out $pythonPath"
-
-    shopt -s extglob
-    for i in $out/etc/xen/scripts/!(*.sh); do
-      sed -i "2s@^@export PATH=$out/bin:${scriptEnvPath}\n@" $i
-    done
-  '';
-
-  enableParallelBuilding = true;
-
-  # TODO(@oxij): Stop referencing args here
-  meta = {
-    homepage = "http://www.xen.org/";
-    description = "Xen hypervisor and related components"
-                + optionalString (args ? meta && args.meta ? description)
-                                 " (${args.meta.description})";
-    longDescription = (args.meta.longDescription or "")
-                    + "\nIncludes:\n"
-                    + withXenfiles (name: x: "* ${name}: ${x.meta.description or "(No description)"}.");
-    platforms = [ "x86_64-linux" ];
-    maintainers = [ ];
-    license = lib.licenses.gpl2;
-    knownVulnerabilities = [
-      # https://www.openwall.com/lists/oss-security/2023/03/21/1
-      # Affects 3.2 (at *least*) - 4.17
-      "CVE-2022-42332"
-      # https://www.openwall.com/lists/oss-security/2023/03/21/2
-      # Affects 4.11 - 4.17
-      "CVE-2022-42333"
-      "CVE-2022-42334"
-      # https://www.openwall.com/lists/oss-security/2023/03/21/3
-      # Affects 4.15 - 4.17
-      "CVE-2022-42331"
-    # https://xenbits.xen.org/docs/unstable/support-matrix.html
-    ] ++ lib.optionals (lib.versionOlder version "4.15") [
-      "This version of Xen has reached its end of life. See https://xenbits.xen.org/docs/unstable/support-matrix.html"
-    ];
-  } // (config.meta or {});
-} // removeAttrs config [ "xenfiles" "buildInputs" "patches" "postPatch" "meta" ])
diff --git a/pkgs/applications/virtualization/xen/0000-fix-ipxe-src.4.15.patch b/pkgs/applications/virtualization/xen/generic/0000-xen-ipxe-src-generic.patch
index 08e9aa5ad2fb9..d96023d1946ae 100644
--- a/pkgs/applications/virtualization/xen/0000-fix-ipxe-src.4.15.patch
+++ b/pkgs/applications/virtualization/xen/generic/0000-xen-ipxe-src-generic.patch
@@ -1,21 +1,21 @@
-hack to make etherboot use prefetched ipxe
+Hack to make etherboot use pre-fetched iPXE.
 
 diff --git a/tools/firmware/etherboot/Makefile b/tools/firmware/etherboot/Makefile
 index ed9e11305f..979a3acea8 100644
 --- a/tools/firmware/etherboot/Makefile
 +++ b/tools/firmware/etherboot/Makefile
 @@ -16,6 +16,7 @@ IPXE_TARBALL_URL ?= $(XEN_EXTFILES_URL)/ipxe-git-$(IPXE_GIT_TAG).tar.gz
- 
+
  D=ipxe
  T=ipxe.tar.gz
 +G=ipxe.git
- 
+
  ROMS = $(addprefix $D/src/bin/, $(addsuffix .rom, $(ETHERBOOT_NICS)))
  ROM = $D/src/bin/ipxe.bin
 @@ -41,9 +42,9 @@ $T:
  	fi
  	mv _$T $T
- 
+
 -$D/src/arch/i386/Makefile: $T Config
 -	rm -rf $D
 -	gzip -dc $T | tar xf -
diff --git a/pkgs/applications/virtualization/xen/generic/default.nix b/pkgs/applications/virtualization/xen/generic/default.nix
new file mode 100644
index 0000000000000..d4d0d235eef21
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/generic/default.nix
@@ -0,0 +1,728 @@
+versionDefinition:
+{
+  lib,
+  stdenv,
+  autoPatchelfHook,
+  cmake,
+  ninja,
+  pkg-config,
+  testers,
+  which,
+
+  fetchgit,
+  fetchFromGitHub,
+
+  # Xen
+  acpica-tools,
+  bison,
+  bzip2,
+  dev86,
+  e2fsprogs,
+  flex,
+  libnl,
+  libuuid,
+  lzo,
+  ncurses,
+  ocamlPackages,
+  perl,
+  python3Packages,
+  systemdMinimal,
+  xz,
+  yajl,
+  zlib,
+  zstd,
+
+  # Xen Optional
+  withInternalQEMU ? true,
+  pixman,
+  glib,
+
+  withInternalSeaBIOS ? true,
+  withSeaBIOS ? !withInternalSeaBIOS,
+  seabios,
+
+  withInternalOVMF ? true,
+  withOVMF ? !withInternalOVMF,
+  OVMF,
+  nasm,
+
+  withInternalIPXE ? true,
+  withIPXE ? !withInternalIPXE,
+  ipxe,
+
+  withFlask ? false,
+  checkpolicy,
+
+  efiVendor ? "nixos", # Allow downstreams with custom branding to quickly override the EFI Vendor string.
+  withEFI ? true,
+  binutils-unwrapped,
+
+  # Documentation
+  pandoc,
+
+  # Scripts
+  bridge-utils,
+  coreutils,
+  diffutils,
+  gawk,
+  gnugrep,
+  gnused,
+  inetutils,
+  iproute2,
+  iptables,
+  multipath-tools,
+  nbd,
+  openvswitch,
+  util-linux,
+  ...
+}@packageDefinition:
+
+let
+  #TODO: fix paths instead.
+  scriptEnvPath = lib.strings.makeSearchPathOutput "out" "bin" [
+    bridge-utils
+    coreutils
+    diffutils
+    gawk
+    gnugrep
+    gnused
+    inetutils
+    iproute2
+    iptables
+    multipath-tools
+    nbd
+    openvswitch
+    perl
+    util-linux.bin
+    which
+  ];
+
+  # Inherit attributes from a versionDefinition.
+  inherit (versionDefinition)
+    pname
+    branch
+    version
+    latest
+    pkg
+    ;
+
+  # Mark versions older than minSupportedVersion as EOL.
+  minSupportedVersion = "4.17";
+
+  ## Pre-fetched Source Handling ##
+
+  # Main attribute set for sources needed to build tools and firmwares.
+  # Each source takes in:
+  # * A `src` attribute, which contains the actual fetcher,
+  # * A 'patches` attribute, which is a list of patches that need to be applied in the source.
+  # * A `path` attribute, which is the destination of the source inside the Xen tree.
+  prefetchedSources =
+    lib.attrsets.optionalAttrs withInternalQEMU {
+      qemu = {
+        src = fetchgit {
+          url = "https://xenbits.xenproject.org/git-http/qemu-xen.git";
+          fetchSubmodules = true;
+          inherit (pkg.qemu) rev hash;
+        };
+        patches = lib.lists.optionals (lib.attrsets.hasAttrByPath [ "patches" ] pkg.qemu) pkg.qemu.patches;
+        path = "tools/qemu-xen";
+      };
+    }
+    // lib.attrsets.optionalAttrs withInternalSeaBIOS {
+      seaBIOS = {
+        src = fetchgit {
+          url = "https://xenbits.xenproject.org/git-http/seabios.git";
+          inherit (pkg.seaBIOS) rev hash;
+        };
+        patches = lib.lists.optionals (lib.attrsets.hasAttrByPath [
+          "patches"
+        ] pkg.seaBIOS) pkg.seaBIOS.patches;
+        path = "tools/firmware/seabios-dir-remote";
+      };
+    }
+    // lib.attrsets.optionalAttrs withInternalOVMF {
+      ovmf = {
+        src = fetchgit {
+          url = "https://xenbits.xenproject.org/git-http/ovmf.git";
+          fetchSubmodules = true;
+          inherit (pkg.ovmf) rev hash;
+        };
+        patches = lib.lists.optionals (lib.attrsets.hasAttrByPath [ "patches" ] pkg.ovmf) pkg.ovmf.patches;
+        path = "tools/firmware/ovmf-dir-remote";
+      };
+    }
+    // lib.attrsets.optionalAttrs withInternalIPXE {
+      ipxe = {
+        src = fetchFromGitHub {
+          owner = "ipxe";
+          repo = "ipxe";
+          inherit (pkg.ipxe) rev hash;
+        };
+        patches = lib.lists.optionals (lib.attrsets.hasAttrByPath [ "patches" ] pkg.ipxe) pkg.ipxe.patches;
+        path = "tools/firmware/etherboot/ipxe.git";
+      };
+    };
+
+  # Gets a list containing the names of the top-level attribute for each pre-fetched
+  # source, to be used in the map functions below.
+  prefetchedSourcesList = lib.attrsets.mapAttrsToList (name: value: name) prefetchedSources;
+
+  # Produces bash commands that will copy each pre-fetched source.
+  copyPrefetchedSources =
+    # Finish the deployment by concatnating the list of commands together.
+    lib.strings.concatLines (
+      # Iterate on each pre-fetched source.
+      builtins.map (
+        source:
+        # Only produce a copy command if patches exist.
+        lib.strings.optionalString (lib.attrsets.hasAttrByPath [ "${source}" ] prefetchedSources)
+          # The actual copy command. `src` is always an absolute path to a fetcher output
+          # inside the /nix/store, and `path` is always a path relative to the Xen root.
+          # We need to `mkdir -p` the target directory first, and `chmod +w` the contents last,
+          # as the copied files will still be edited by the postPatchPhase.
+          ''
+            echo "Copying ${prefetchedSources.${source}.src} -> ${prefetchedSources.${source}.path}"
+            mkdir --parents ${prefetchedSources.${source}.path}
+            cp --recursive --no-target-directory ${prefetchedSources.${source}.src} ${
+              prefetchedSources.${source}.path
+            }
+            chmod --recursive +w ${prefetchedSources.${source}.path}
+          ''
+      ) prefetchedSourcesList
+    );
+
+  # Produces strings with `patch` commands to be ran on postPatch.
+  # These deploy the .patch files for each pre-fetched source.
+  deployPrefetchedSourcesPatches =
+    # Finish the deployment by concatnating the list of commands together.
+    lib.strings.concatLines (
+      # The double map functions create a list of lists. Flatten it so we can concatnate it.
+      lib.lists.flatten (
+        # Iterate on each pre-fetched source.
+        builtins.map (
+          source:
+          # Iterate on each available patch.
+          (builtins.map (
+            patch:
+            # Only produce a patch command if patches exist.
+            lib.strings.optionalString
+              (lib.attrsets.hasAttrByPath [
+                "${source}"
+                "patches"
+              ] prefetchedSources)
+              # The actual patch command. It changes directories to the correct source each time.
+              ''
+                echo "Applying patch ${patch} to ${source}."
+                patch --directory ${prefetchedSources.${source}.path} --strip 1 < ${patch}
+              ''
+          ) prefetchedSources.${source}.patches)
+        ) prefetchedSourcesList
+      )
+    );
+
+  ## XSA Patches Description Builder ##
+
+  # Sometimes patches are sourced through a path, like ./0000-xen.patch.
+  # This would break the patch attribute parser functions, so we normalise
+  # all patches sourced through paths by setting them to a { type = "path"; }
+  # attribute set.
+  # Patches from fetchpatch are already attribute sets.
+  normalisedPatchList = builtins.map (
+    patch:
+    if !builtins.isAttrs patch then
+      if builtins.isPath patch then
+        { type = "path"; }
+      else
+        throw "xen/generic/default.nix: normalisedPatchList attempted to normalise something that is not a Path or an Attribute Set."
+    else
+      patch
+  ) pkg.xen.patches;
+
+  # Simple counter for the number of attrsets (patches) in the patches list after normalisation.
+  numberOfPatches = lib.lists.count (patch: builtins.isAttrs patch) normalisedPatchList;
+
+  # builtins.elemAt's index begins at 0, so we subtract 1 from the number of patches in order to
+  # produce the range that will be used in the following builtin.map calls.
+  availablePatchesToTry = lib.lists.range 0 (numberOfPatches - 1);
+
+  # Takes in an attrByPath input, and outputs the attribute value for each patch in a list.
+  # If a patch does not have a given attribute, returns `null`. Use lib.lists.remove null
+  # to remove these junk values, if necessary.
+  retrievePatchAttributes =
+    attributeName:
+    builtins.map (
+      x: lib.attrsets.attrByPath attributeName null (builtins.elemAt normalisedPatchList x)
+    ) availablePatchesToTry;
+
+  # Produces a list of newline-separated strings that lists the vulnerabilities this
+  # Xen is NOT affected by, due to the applied Xen Security Advisory patches. This is
+  # then used in meta.longDescription, to let users know their Xen is patched against
+  # known vulnerabilities, as the package version isn't always the best indicator.
+  #
+  # Produces something like this: (one string for each XSA)
+  #  * [Xen Security Advisory #1](https://xenbits.xenproject.org/xsa/advisory-1.html): **Title for XSA.**
+  #  >Description of issue in XSA
+  #Extra lines
+  #are not indented,
+  #but markdown should be
+  #fine with it.
+  #  Fixes:
+  #  * [CVE-1999-00001](https://www.cve.org/CVERecord?id=CVE-1999-00001)
+  #  * [CVE-1999-00002](https://www.cve.org/CVERecord?id=CVE-1999-00002)
+  #  * [CVE-1999-00003](https://www.cve.org/CVERecord?id=CVE-1999-00003)
+  writeAdvisoryDescription =
+    if (lib.lists.remove null (retrievePatchAttributes [ "xsa" ]) != [ ]) then
+      lib.lists.zipListsWith (a: b: a + b)
+        (lib.lists.zipListsWith (a: b: a + "**" + b + ".**\n  >")
+          (lib.lists.zipListsWith (a: b: "* [Xen Security Advisory #" + a + "](" + b + "): ")
+            (lib.lists.remove null (retrievePatchAttributes [ "xsa" ]))
+            (
+              lib.lists.remove null (retrievePatchAttributes [
+                "meta"
+                "homepage"
+              ])
+            )
+          )
+          (
+            lib.lists.remove null (retrievePatchAttributes [
+              "meta"
+              "description"
+            ])
+          )
+        )
+        (
+          lib.lists.remove null (retrievePatchAttributes [
+            "meta"
+            "longDescription"
+          ])
+        )
+    else
+      [ ];
+
+  ## Binutils Override ##
+
+  # Originally, there were two versions of binutils being used: the standard one and
+  # this patched one. Unfortunately, that required patches to the Xen Makefiles, and
+  # quickly became too complex to maintain. The new solution is to simply build this
+  # efi-binutils derivation and use it for the whole build process, except if
+  # enableEFI is disabled; it'll then use `binutils`.
+  efiBinutils = binutils-unwrapped.overrideAttrs (oldAttrs: {
+    name = "efi-binutils";
+    configureFlags = oldAttrs.configureFlags ++ [ "--enable-targets=x86_64-pep" ];
+    doInstallCheck = false; # We get a spurious failure otherwise, due to a host/target mismatch.
+    meta.mainProgram = "ld"; # We only really care for `ld`.
+  });
+in
+
+stdenv.mkDerivation (finalAttrs: {
+  inherit pname version;
+
+  outputs = [
+    "out" # TODO: Split $out in $bin for binaries and $lib for libraries.
+    "man" # Manual pages for Xen userspace utilities.
+    "doc" # The full Xen documentation in HTML format.
+    "dev" # Development headers.
+    "boot" # xen.gz kernel, policy file if Flask is enabled, xen.efi if EFI is enabled.
+    # TODO: Python package to be in separate output/package.
+  ];
+
+  # Main Xen source.
+  src = fetchgit {
+    url = "https://xenbits.xenproject.org/git-http/xen.git";
+    inherit (pkg.xen) rev hash;
+  };
+
+  patches =
+    # Generic Xen patches that apply to all Xen versions.
+    [ ./0000-xen-ipxe-src-generic.patch ]
+    # Gets the patches from the pkg.xen.patches attribute from the versioned files.
+    ++ lib.lists.optionals (lib.attrsets.hasAttrByPath [ "patches" ] pkg.xen) pkg.xen.patches;
+
+  nativeBuildInputs =
+    [
+      autoPatchelfHook
+      bison
+      cmake
+      flex
+      pandoc
+      pkg-config
+      python3Packages.setuptools
+    ]
+    ++ lib.lists.optionals withInternalQEMU [
+      ninja
+      python3Packages.sphinx
+    ];
+  buildInputs =
+    [
+      # Xen
+      acpica-tools
+      bzip2
+      dev86
+      e2fsprogs.dev
+      libnl
+      libuuid
+      lzo
+      ncurses
+      perl
+      python3Packages.python
+      xz
+      yajl
+      zlib
+      zstd
+
+      # oxenstored
+      ocamlPackages.findlib
+      ocamlPackages.ocaml
+
+      # Python Fixes
+      python3Packages.wrapPython
+    ]
+    ++ lib.lists.optionals withInternalQEMU [
+      glib
+      pixman
+    ]
+    ++ lib.lists.optional withInternalOVMF nasm
+    ++ lib.lists.optional withFlask checkpolicy
+    ++ lib.lists.optional (lib.strings.versionOlder version "4.19") systemdMinimal;
+
+  configureFlags =
+    [
+      "--enable-systemd"
+      "--disable-qemu-traditional"
+    ]
+    ++ lib.lists.optional (!withInternalQEMU) "--with-system-qemu"
+
+    ++ lib.lists.optional withSeaBIOS "--with-system-seabios=${seabios}/share/seabios"
+    ++ lib.lists.optional (!withInternalSeaBIOS && !withSeaBIOS) "--disable-seabios"
+
+    ++ lib.lists.optional withOVMF "--with-system-ovmf=${OVMF.firmware}"
+    ++ lib.lists.optional withInternalOVMF "--enable-ovmf"
+
+    ++ lib.lists.optional withIPXE "--with-system-ipxe=${ipxe}"
+    ++ lib.lists.optional withInternalIPXE "--enable-ipxe"
+
+    ++ lib.lists.optional withFlask "--enable-xsmpolicy";
+
+  makeFlags =
+    [
+      "PREFIX=$(out)"
+      "CONFIG_DIR=/etc"
+      "XEN_SCRIPT_DIR=$(CONFIG_DIR)/xen/scripts"
+      "BASH_COMPLETION_DIR=$(PREFIX)/share/bash-completion/completions"
+    ]
+    ++ lib.lists.optionals withEFI [
+      "EFI_VENDOR=${efiVendor}"
+      "INSTALL_EFI_STRIP=1"
+      "LD=${lib.meta.getExe efiBinutils}" # See the comment in the efiBinutils definition above.
+    ]
+    # These flags set the CONFIG_* options in /boot/xen.config
+    # and define if the default policy file is built. However,
+    # the Flask binaries always get compiled by default.
+    ++ lib.lists.optionals withFlask [
+      "XSM_ENABLE=y"
+      "FLASK_ENABLE=y"
+    ]
+    ++ (pkg.xen.makeFlags or [ ]);
+
+  buildFlags = [
+    "xen" # Build the Xen Hypervisor.
+    "tools" # Build the userspace tools, such as `xl`.
+    "docs" # Build the Xen Documentation
+  ];
+
+  enableParallelBuilding = true;
+
+  env.NIX_CFLAGS_COMPILE = builtins.toString (
+    [
+      "-Wno-error=maybe-uninitialized"
+      "-Wno-error=array-bounds"
+    ]
+    ++ lib.lists.optionals withInternalOVMF [
+      "-Wno-error=format-security"
+      "-Wno-error=use-after-free"
+      "-Wno-error=vla-parameter"
+      "-Wno-error=dangling-pointer"
+      "-Wno-error=stringop-overflow"
+    ]
+  );
+
+  dontUseCmakeConfigure = true;
+  dontUseNinjaBuild = withInternalQEMU;
+
+  prePatch =
+    # Xen's stubdoms, tools and firmwares need various sources that
+    # are usually fetched at build time using wget and git. We can't
+    # have that, so we pre-fetch them in the versioned Nix expressions,
+    # and produce fake wget and git executables for debugging purposes.
+    #
+    # We also produce a fake hostname executable to prevent spurious
+    # command-not-found errors during compilation.
+    #
+    # The snippet below produces executables that simply print in stdout
+    # what they were supposed to fetch, and exit gracefully.
+    ''
+      mkdir fake-bin
+
+      cat > fake-bin/wget << EOF
+      #!${stdenv.shell} -e
+      echo ===== FAKE WGET: Not fetching \$*
+      [ -e \$3 ]
+      EOF
+
+      cat > fake-bin/git << EOF
+      #!${stdenv.shell}
+      echo ===== FAKE GIT: Not cloning \$*
+      [ -e \$3 ]
+      EOF
+
+      cat > fake-bin/hostname << EOF
+      #!${stdenv.shell}
+      echo ${efiVendor}
+      [ -e \$3 ]
+      EOF
+
+      chmod +x fake-bin/*
+      export PATH=$PATH:$PWD/fake-bin
+    ''
+
+    # Remove in-tree QEMU sources, as we either pre-fetch them through
+    # the versioned Nix expressions if withInternalQEMU is true, or we
+    # don't build QEMU at all if withInternalQEMU is false.
+    + ''
+      rm --recursive --force tools/qemu-xen tools/qemu-xen-traditional
+    ''
+
+    # Call copyPrefetchedSources, which copies all aviable sources to their correct positions.
+    + ''
+      ${copyPrefetchedSources}
+    '';
+
+  postPatch =
+    # The following patch forces Xen to install xen.efi on $out/boot
+    # instead of $out/boot/efi/efi/nixos, as the latter directory
+    # would otherwise need to be created manually. This also creates
+    # a more consistent output for downstreams who override the
+    # efiVendor attribute above.
+    ''
+      substituteInPlace xen/Makefile \
+        --replace-fail "\$(D)\$(EFI_MOUNTPOINT)/efi/\$(EFI_VENDOR)/\$(T)-\$(XEN_FULLVERSION).efi" \
+                  "\$(D)\$(BOOT_DIR)/\$(T)-\$(XEN_FULLVERSION).efi"
+    ''
+
+    # The following patch fixes the call to /bin/mkdir on the
+    # launch_xenstore.sh helper script.
+    + ''
+      substituteInPlace tools/hotplug/Linux/launch-xenstore.in \
+        --replace-fail "/bin/mkdir" "${coreutils}/bin/mkdir"
+    ''
+
+    # The following expression fixes the paths called by Xen's systemd
+    # units, so we can use them in the NixOS module.
+    + ''
+      substituteInPlace \
+        tools/hotplug/Linux/systemd/{xen-init-dom0,xen-qemu-dom0-disk-backend,xenconsoled,xendomains,xenstored}.service.in \
+        --replace-fail /bin/grep ${gnugrep}/bin/grep
+      substituteInPlace \
+       tools/hotplug/Linux/systemd/{xen-qemu-dom0-disk-backend,xenconsoled}.service.in \
+        --replace-fail "/bin/mkdir" "${coreutils}/bin/mkdir"
+    ''
+
+    # # Call deployPrefetchedSourcesPatches, which patches all pre-fetched sources with their specified patchlists.
+    + ''
+      ${deployPrefetchedSourcesPatches}
+    ''
+    # Patch shebangs for QEMU and OVMF build scripts.
+    + lib.strings.optionalString withInternalQEMU ''
+      patchShebangs --build tools/qemu-xen/scripts/tracetool.py
+    ''
+    + lib.strings.optionalString withInternalOVMF ''
+      patchShebangs --build tools/firmware/ovmf-dir-remote/OvmfPkg/build.sh tools/firmware/ovmf-dir-remote/BaseTools/BinWrappers/PosixLike/{AmlToC,BrotliCompress,build,GenFfs,GenFv,GenFw,GenSec,LzmaCompress,TianoCompress,Trim,VfrCompile}
+    '';
+
+  installPhase =
+    let
+      cpFlags = builtins.toString [
+        "--preserve=mode,ownership,timestamps,link"
+        "--recursive"
+        "--verbose"
+        "--no-dereference"
+      ];
+    in
+    # Run the preInstall tasks.
+    ''
+      runHook preInstall
+    ''
+
+    # Create $out directories and copy build output.
+    + ''
+      mkdir --parents $out $out/share $boot
+      cp ${cpFlags} dist/install/nix/store/*/* $out/
+      cp ${cpFlags} dist/install/etc $out
+      cp ${cpFlags} dist/install/boot $boot
+    ''
+
+    # Run the postInstall tasks.
+    + ''
+      runHook postInstall
+    '';
+
+  postInstall =
+    # Wrap xencov_split, xenmon and xentrace_format.
+    ''
+      wrapPythonPrograms
+    ''
+
+    # We also need to wrap pygrub, which lies in $out/libexec/xen/bin.
+    + ''
+      wrapPythonProgramsIn "$out/libexec/xen/bin" "$out $pythonPath"
+    ''
+
+    # Fix shebangs in Xen's various scripts.
+    #TODO: Remove any and all usage of `sed` and replace these complicated magic runes with readable code.
+    + ''
+      shopt -s extglob
+      for i in $out/etc/xen/scripts/!(*.sh); do
+        sed --in-place "2s@^@export PATH=$out/bin:${scriptEnvPath}\n@" $i
+      done
+    '';
+
+  postFixup =
+    # Fix binaries in $out/libexec/xen/bin.
+    ''
+      addAutoPatchelfSearchPath $out/lib
+      autoPatchelf $out/libexec/xen/bin
+    ''
+    # Flask is particularly hard to disable. Even after
+    # setting the make flags to `n`, it still gets compiled.
+    # If withFlask is disabled, delete the extra binaries.
+    + lib.strings.optionalString (!withFlask) ''
+      rm -f $out/bin/flask-*
+    '';
+
+  passthru = {
+    efi =
+      if withEFI then "boot/xen-${version}.efi" else throw "This Xen was compiled without an EFI binary.";
+    flaskPolicy =
+      if withFlask then
+        "boot/xenpolicy-${version}"
+      else
+        throw "This Xen was compiled without FLASK support.";
+    qemu-system-i386 =
+      if withInternalQEMU then
+        "libexec/xen/bin/qemu-system-i386"
+      else
+        throw "This Xen was compiled without a built-in QEMU.";
+    # This test suite is very simple, as Xen's userspace
+    # utilities require the hypervisor to be booted.
+    tests = {
+      pkg-config = testers.hasPkgConfigModules {
+        package = finalAttrs.finalPackage;
+        moduleNames = [
+          "xencall"
+          "xencontrol"
+          "xendevicemodel"
+          "xenevtchn"
+          "xenforeignmemory"
+          "xengnttab"
+          "xenguest"
+          "xenhypfs"
+          "xenlight"
+          "xenstat"
+          "xenstore"
+          "xentoolcore"
+          "xentoollog"
+          "xenvchan"
+          "xlutil"
+        ];
+      };
+    };
+  };
+
+  meta =
+    if
+      !(lib.attrsets.hasAttrByPath [
+        "meta"
+      ] versionDefinition)
+    then
+      {
+        inherit branch;
+
+        # Short description for Xen.
+        description =
+          "Xen Project Hypervisor"
+          # The "and related components" addition is automatically hidden if said components aren't being built.
+          + lib.strings.optionalString (prefetchedSources != { }) " and related components"
+          # To alter the description inside the paranthesis, edit ./packages.nix.
+          + lib.strings.optionalString (lib.attrsets.hasAttrByPath [
+            "meta"
+            "description"
+          ] packageDefinition) " (${packageDefinition.meta.description})";
+
+        # Long description for Xen.
+        longDescription =
+          # Starts with the longDescription from ./packages.nix.
+          (packageDefinition.meta.longDescription or "")
+          + lib.strings.optionalString (!withInternalQEMU) (
+            "\nUse with `qemu_xen_${lib.strings.stringAsChars (x: if x == "." then "_" else x) branch}`"
+            + lib.strings.optionalString latest " or `qemu_xen`"
+            + ".\n"
+          )
+          # Then, if any of the optional with* components are being built, add the "Includes:" string.
+          +
+            lib.strings.optionalString
+              (
+                withInternalQEMU
+                || withInternalSeaBIOS
+                || withInternalOVMF
+                || withInternalIPXE
+                || withEFI
+                || withFlask
+              )
+              (
+                "\nIncludes:"
+                # Originally, this was a call for the complicated withPrefetchedSources. Since there aren't
+                # that many optional components, we just use lib.strings.optionalString, because it's simpler.
+                # Optional components that aren't being built are automatically hidden.
+                + lib.strings.optionalString withEFI "\n* `xen.efi`: The Xen Project's [EFI binary](https://xenbits.xenproject.org/docs/${branch}-testing/misc/efi.html), available on the `boot` output of this package."
+                + lib.strings.optionalString withFlask "\n* `xsm-flask`: The [FLASK Xen Security Module](https://wiki.xenproject.org/wiki/Xen_Security_Modules_:_XSM-FLASK). The `xenpolicy-${version}` file is available on the `boot` output of this package."
+                + lib.strings.optionalString withInternalQEMU "\n* `qemu-xen`: The Xen Project's mirror of [QEMU](https://www.qemu.org/)."
+                + lib.strings.optionalString withInternalSeaBIOS "\n* `seabios-xen`: The Xen Project's mirror of [SeaBIOS](https://www.seabios.org/SeaBIOS)."
+                + lib.strings.optionalString withInternalOVMF "\n* `ovmf-xen`: The Xen Project's mirror of [OVMF](https://github.com/tianocore/tianocore.github.io/wiki/OVMF)."
+                + lib.strings.optionalString withInternalIPXE "\n* `ipxe-xen`: The Xen Project's pinned version of [iPXE](https://ipxe.org/)."
+              )
+          # Finally, we write a notice explaining which vulnerabilities this Xen is NOT vulnerable to.
+          # This will hopefully give users the peace of mind that their Xen is secure, without needing
+          # to search the source code for the XSA patches.
+          + lib.strings.optionalString (writeAdvisoryDescription != [ ]) (
+            "\n\nThis Xen Project Hypervisor (${version}) has been patched against the following known security vulnerabilities:\n"
+            + lib.strings.removeSuffix "\n" (lib.strings.concatLines writeAdvisoryDescription)
+          );
+
+        homepage = "https://xenproject.org/";
+        downloadPage = "https://downloads.xenproject.org/release/xen/${version}/";
+        changelog = "https://wiki.xenproject.org/wiki/Xen_Project_${branch}_Release_Notes";
+
+        license = with lib.licenses; [
+          # Documentation.
+          cc-by-40
+          # Most of Xen is licensed under the GPL v2.0.
+          gpl2Only
+          # Xen Libraries and the `xl` command-line utility.
+          lgpl21Only
+          # Development headers in $dev/include.
+          mit
+        ];
+
+        # This automatically removes maintainers from EOL versions of Xen, so we aren't bothered about versions we don't explictly support.
+        maintainers = lib.lists.optionals (lib.strings.versionAtLeast version minSupportedVersion) lib.teams.xen.members;
+        knownVulnerabilities = lib.lists.optional (lib.strings.versionOlder version minSupportedVersion) "The Xen Project Hypervisor version ${version} is no longer supported by the Xen Project Security Team. See https://xenbits.xenproject.org/docs/unstable/support-matrix.html";
+
+        mainProgram = "xl";
+
+        # Evaluates to x86_64-linux.
+        platforms = lib.lists.intersectLists lib.platforms.linux lib.platforms.x86_64;
+
+      }
+    else
+      versionDefinition.meta;
+})
diff --git a/pkgs/applications/virtualization/xen/generic/patches.nix b/pkgs/applications/virtualization/xen/generic/patches.nix
new file mode 100644
index 0000000000000..4bb58d5a42160
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/generic/patches.nix
@@ -0,0 +1,159 @@
+# Patching Xen? Check the XSAs at https://xenbits.xen.org/xsa/
+# and try applying all the ones we haven't gotten around to
+# yet, if any are necessary. Patches from other downstreams
+# are also welcome if they fix important issues with vanilla Xen.
+
+{ lib, fetchpatch }:
+
+let
+  xsaPatch =
+    {
+      id,
+      title,
+      description,
+      type ? "xsa",
+      hash ? "",
+      cve ? null,
+    }:
+    (fetchpatch {
+      name =
+        "XSA-" + id + lib.strings.optionalString (cve != null) ("-" + builtins.concatStringsSep "+" cve);
+      url = "https://xenbits.xen.org/xsa/xsa${id}.patch";
+      inherit hash;
+      passthru = {
+        xsa = id;
+        inherit type;
+      };
+      meta = {
+        description = title;
+        longDescription =
+          description
+          + "\n"
+          + (
+            if (cve == null) then
+              # Why the two spaces preceding these CVE messages?
+              # This is parsed by writeAdvisoryDescription in generic.nix,
+              # and doing this was easier than messing with lib.strings even more.
+              "  _No CVE was assigned to this XSA._"
+            else
+              "  Fixes:${
+                  lib.strings.concatMapStrings (
+                    x: "\n  * [" + x + "](https://www.cve.org/CVERecord?id=" + x + ")"
+                  ) cve
+                }"
+          );
+        homepage = "https://xenbits.xenproject.org/xsa/advisory-${id}.html";
+      };
+    });
+  qubesPatch =
+    {
+      name,
+      tag,
+      type ? "qubes",
+      hash ? "",
+    }:
+    (fetchpatch {
+      inherit name;
+      url = "https://raw.githubusercontent.com/QubesOS/qubes-vmm-xen/v${tag}/${name}.patch";
+      inherit hash;
+      passthru.type = type;
+    });
+in
+{
+  # Example patches:
+  #
+  # "XSA_100" = xsaPatch {
+  #   id = "100";
+  #   title = "Verbatim Title of XSA";
+  #   description = ''
+  #     Verbatim description of XSA.
+  #   '';
+  #   cve = [ "CVE-1999-0001" "CVE-1999-0002" ]; # Not all XSAs have CVEs. This attribute is optional.
+  #   hash = "sha256-0000000000000000000000000000000000000000000000000000";
+  # };
+  #
+  # "QUBES_libxl-fix-all-issues" = qubesPatch {
+  #   name = "1000-libxl-fix-all-issues";
+  #   tag = "4.20.0-1";
+  #   hash = "sha256-0000000000000000000000000000000000000000000000000000";
+  # };
+
+  # Build reproducibility patches for Xen.
+  # Qubes OS has not updated them to later versions of Xen yet,
+  # but they appear to work on Xen 4.17.4 - 4.19.0.
+  QUBES_REPRODUCIBLE_BUILDS = [
+    (qubesPatch {
+      name = "1100-Define-build-dates-time-based-on-SOURCE_DATE_EPOCH";
+      tag = "4.17.4-5";
+      hash = "sha256-OwKA9oPTwhRcSmiOb+PxzifbO/IG8IHWlvddFh/nP6s=";
+    })
+    (qubesPatch {
+      name = "1101-docs-rename-DATE-to-PANDOC_REL_DATE-and-allow-to-spe";
+      tag = "4.17.4-5";
+      hash = "sha256-BUtYt0mM3bURVaGv4oDznzxx1Wo4sfOpGV5GB8qc5Ns=";
+    })
+    (qubesPatch {
+      name = "1102-docs-xen-headers-use-alphabetical-sorting-for-incont";
+      tag = "4.17.4-5";
+      hash = "sha256-mQUp2w9lUb7KDq5MuPQjs6y7iuMDeXoZjDjlXfa5z44=";
+    })
+  ];
+
+  # Xen Security Advisory #460: (4.16.6 - 4.19.0)
+  "XSA_460" = xsaPatch {
+    id = "460";
+    title = "Error handling in x86 IOMMU identity mapping";
+    description = ''
+      Certain PCI devices in a system might be assigned Reserved Memory
+      Regions (specified via Reserved Memory Region Reporting, "RMRR") for
+      Intel VT-d or Unity Mapping ranges for AMD-Vi.  These are typically used
+      for platform tasks such as legacy USB emulation.
+      Since the precise purpose of these regions is unknown, once a device
+      associated with such a region is active, the mappings of these regions
+      need to remain continuouly accessible by the device.  In the logic
+      establishing these mappings, error handling was flawed, resulting in
+      such mappings to potentially remain in place when they should have been
+      removed again.  Respective guests would then gain access to memory
+      regions which they aren't supposed to have access to.
+    '';
+    cve = [ "CVE-2024-31145" ];
+    hash = "sha256-3q4nAP2xGEptX6BIpSlALOt2r0kjj1up5pF3xCFp+l0=";
+  };
+  # Xen Security Advisory #461: (4.16.6 - 4.19.0)
+  "XSA_461" = xsaPatch {
+    id = "461";
+    title = "PCI device pass-through with shared resources";
+    description = ''
+      When multiple devices share resources and one of them is to be passed
+      through to a guest, security of the entire system and of respective
+      guests individually cannot really be guaranteed without knowing
+      internals of any of the involved guests.  Therefore such a configuration
+      cannot really be security-supported, yet making that explicit was so far
+      missing.
+    '';
+    cve = [ "CVE-2024-31146" ];
+    hash = "sha256-JQWoqf47hy9WXNkVC/LgmjUhkxN0SBF6w8PF4aFZxhM=";
+  };
+  # Xen Security Advisory #462: (4.16.6 - 4.19.0)
+  "XSA_462" = xsaPatch {
+    id = "462";
+    title = "x86: Deadlock in vlapic_error()";
+    description = ''
+      In x86's APIC (Advanced Programmable Interrupt Controller) architecture,
+      error conditions are reported in a status register.  Furthermore, the OS
+      can opt to receive an interrupt when a new error occurs.
+
+      It is possible to configure the error interrupt with an illegal vector,
+      which generates an error when an error interrupt is raised.
+
+      This case causes Xen to recurse through vlapic_error().  The recursion
+      itself is bounded; errors accumulate in the the status register and only
+      generate an interrupt when a new status bit becomes set.
+
+      However, the lock protecting this state in Xen will try to be taken
+      recursively, and deadlock.
+    '';
+    cve = [ "CVE-2024-45817" ];
+    hash = "sha256-01lzjaT2f69UfEdTUCkm92DDOmd+Mo8sNPZsHJfgJEM=";
+  };
+}
diff --git a/pkgs/applications/virtualization/xen/packages.nix b/pkgs/applications/virtualization/xen/packages.nix
index c55a719995c0b..fe759709770ff 100644
--- a/pkgs/applications/virtualization/xen/packages.nix
+++ b/pkgs/applications/virtualization/xen/packages.nix
@@ -1,58 +1,71 @@
-{ callPackage
-
+{
+  python3Packages,
+  python311Packages,
+  callPackage,
 }:
-
-# TODO(@oxij) on new Xen version: generalize this to generate [vanilla slim
-# light] for each ./<version>.nix.
-
-rec {
-  xen_4_15-vanilla = callPackage ./4.15.nix {
+let
+  standard = {
+    # Broken with python 3.12+ when using internal QEMU due to https://github.com/NixOS/nixpkgs/issues/253751
+    python3Packages = python311Packages;
     meta = {
-      description = "vanilla";
+      description = "Standard";
       longDescription = ''
-        Vanilla version of Xen. Uses forks of Qemu and Seabios bundled
-        with Xen. This gives vanilla experince, but wastes space and
-        build time: typical NixOS setup that runs lots of VMs will
-        build three different versions of Qemu when using this (two
-        forks and upstream).
+        Standard version of the Xen Project Hypervisor. Uses forks of QEMU, SeaBIOS,
+        OVMF and iPXE provided by the Xen Project. This provides the vanilla Xen
+        experience, but wastes space and build time. A typical NixOS setup that runs
+        lots of VMs will usually need to build two different versions of QEMU when using
+        this Xen derivation (one fork and upstream).
       '';
     };
   };
-
-  xen_4_15-slim = xen_4_15-vanilla.override {
-    withInternalQemu = false;
-    withInternalTraditionalQemu = true;
-    withInternalSeabios = false;
-    withSeabios = true;
-
+  slim = {
+    inherit python3Packages;
     meta = {
-      description = "slim";
+      description = "Without Internal Components";
       longDescription = ''
-        Slimmed-down version of Xen that reuses nixpkgs packages as
-        much as possible. Different parts may get out of sync, but
-        this builds faster and uses less space than vanilla. Use with
-        `qemu_xen` from nixpkgs.
+        Slimmed-down version of the Xen Project Hypervisor that reuses nixpkgs packages
+        as much as possible. Instead of using the Xen Project forks for various internal
+        components, this version uses `seabios`, `ovmf` and `ipxe` from Nixpkgs. These
+        components may ocasionally get out of sync with the hypervisor itself, but this
+        builds faster and uses less space than the default derivation.
       '';
     };
   };
+in
+# TODO: generalise this to automatically generate both Xen variants for each ./<version>/default.nix.
+rec {
+  xen_4_19 = callPackage ./4.19/default.nix {
+    inherit (standard) meta python3Packages;
+  };
+  xen_4_19-slim = xen_4_19.override {
+    withInternalQEMU = false;
+    withInternalSeaBIOS = false;
+    withInternalOVMF = false;
+    withInternalIPXE = false;
+    inherit (slim) meta python3Packages;
+  };
 
-  xen_4_15-light = xen_4_15-vanilla.override {
-    withInternalQemu = false;
-    withInternalTraditionalQemu = false;
-    withInternalSeabios = false;
-    withSeabios = true;
-
-    meta = {
-      description = "light";
-      longDescription = ''
-        Slimmed-down version of Xen without `qemu-traditional` (you
-        don't need it if you don't know what it is). Use with
-        `qemu_xen-light` from nixpkgs.
-      '';
-    };
+  xen_4_18 = callPackage ./4.18/default.nix {
+    inherit (standard) meta python3Packages;
+  };
+  xen_4_18-slim = xen_4_18.override {
+    withInternalQEMU = false;
+    withInternalSeaBIOS = false;
+    withInternalOVMF = false;
+    withInternalIPXE = false;
+    inherit (slim) meta python3Packages;
   };
 
-  xen-vanilla = xen_4_15-vanilla;
-  xen-slim = xen_4_15-slim;
-  xen-light = xen_4_15-light;
+  xen_4_17 = callPackage ./4.17/default.nix {
+    inherit (standard) meta python3Packages;
+  };
+  xen_4_17-slim = xen_4_17.override {
+    withInternalQEMU = false;
+    withInternalSeaBIOS = false;
+    withInternalOVMF = false;
+    withInternalIPXE = false;
+    inherit (slim) meta;
+    # Broken with python 3.12+ due to distutils missing.
+    python3Packages = python311Packages;
+  };
 }
diff --git a/pkgs/applications/virtualization/xen/update.sh b/pkgs/applications/virtualization/xen/update.sh
new file mode 100755
index 0000000000000..e5012768b4e85
--- /dev/null
+++ b/pkgs/applications/virtualization/xen/update.sh
@@ -0,0 +1,202 @@
+#!/usr/bin/env nix-shell
+#!nix-shell -i bash -p gitMinimal curl gnupg nix-prefetch-git nixfmt-rfc-style
+# shellcheck disable=SC2206,SC2207 shell=bash
+set -o errexit
+set -o pipefail
+set -o nounset
+
+#TODO: Use `jq` instead of `sed`.
+#TODO: Accept the small security drawback and make this script runnable by r-ryantm.
+
+# This script expects to be called in an interactive terminal somewhere inside Nixpkgs.
+echo "Preparing..."
+nixpkgs=$(git rev-parse --show-toplevel)
+xenPath="$nixpkgs/pkgs/applications/virtualization/xen"
+rm -rf /tmp/xenUpdateScript
+mkdir /tmp/xenUpdateScript
+
+# Import and verify PGP key.
+curl --silent --output /tmp/xenUpdateScript/xen.asc https://keys.openpgp.org/vks/v1/by-fingerprint/23E3222C145F4475FA8060A783FE14C957E82BD9
+gpg --homedir /tmp/xenUpdateScript/.gnupg --quiet --import /tmp/xenUpdateScript/xen.asc
+fingerprint="$(gpg --homedir /tmp/xenUpdateScript/.gnupg --with-colons --fingerprint "pgp@xen.org" 2>/dev/null | awk -F: '/^pub:.*/ { getline; print $10}')"
+echo -e "Please ascertain through multiple external sources that the \e[1;32mXen Project PGP Key Fingerprint\e[0m is indeed \e[1;33m$fingerprint\e[0m. If that is not the case, \e[1;31mexit immediately\e[0m."
+read -r -p $'Press \e[1;34menter\e[0m to continue with a pre-filled expected fingerprint, or input an arbitrary PGP fingerprint to match with the key\'s fingerprint: ' userInputFingerprint
+userInputFingerprint=${userInputFingerprint:-"23E3222C145F4475FA8060A783FE14C957E82BD9"}
+
+# Clone xen.git.
+echo -e "Cloning \e[1;34mxen.git\e[0m..."
+git clone --quiet https://xenbits.xenproject.org/git-http/xen.git /tmp/xenUpdateScript/xen
+cd /tmp/xenUpdateScript/xen
+
+# Get list of versions and branches.
+versionList="$(git tag --list "RELEASE-*" | sed s/RELEASE-//g | sed s/4.1.6.1//g | sort --numeric-sort)"
+latestVersion=$(echo "$versionList" | tr ' ' '\n' | tail --lines=1)
+branchList=($(echo "$versionList" | tr ' ' '\n' | sed s/\.[0-9]*$//g | awk '!seen[$0]++'))
+
+# Figure out which versions we're actually going to install.
+minSupportedBranch="$(grep "  minSupportedVersion = " "$xenPath"/generic/default.nix | sed s/'  minSupportedVersion = "'//g | sed s/'";'//g)"
+supportedBranches=($(for version in "${branchList[@]}"; do if [ "$(printf '%s\n' "$minSupportedBranch" "$version" | sort -V | head -n1)" = "$minSupportedBranch" ]; then echo "$version"; fi; done))
+supportedVersions=($(for version in "${supportedBranches[@]}"; do echo "$versionList" | tr ' ' '\n' | grep "$version" | tail --lines=1; done))
+
+echo -e "\e[1mNOTE\e[0m: As we're also pre-fetching the submodules, QEMU and OVMF may take a very long time to fetch."
+
+# Main loop that installs every supportedVersion.
+for version in "${supportedVersions[@]}"; do
+    echo -e "\n------------------------------------------------"
+    branch=${version/%.[0-9]/}
+    if [[ "$version" == "$latestVersion" ]]; then
+        latest=true
+        echo -e "\nFound \e[1;34mlatest\e[0m release: \e[1;32mXen $version\e[0m in branch \e[1;36m$branch\e[0m."
+    else
+        latest=false
+        echo -e "\nFound \e[1;33msecurity-supported\e[0m release: \e[1;32mXen $version\e[0m in branch \e[1;36m$branch\e[0m."
+    fi
+
+    # Verify PGP key automatically. If the fingerprint matches what the user specified, or the default fingerprint, then we consider it trusted.
+    cd /tmp/xenUpdateScript/xen
+    if [[ "$fingerprint" = "$userInputFingerprint" ]]; then
+        echo "$fingerprint:6:" | gpg --homedir /tmp/xenUpdateScript/.gnupg --quiet --import-ownertrust
+        (git verify-tag RELEASE-"$version" 2>/dev/null && echo -e "\n\e[1;32mSuccessfully authenticated Xen $version.\e[0m") || (echo -e "\e[1;31merror:\e[0m Unable to verify tag \e[1;32mRELEASE-$version\e[0m.\n- It is possible that \e[1;33mthis script has broken\e[0m, the Xen Project has \e[1;33mcycled their PGP keys\e[0m, or a \e[1;31msupply chain attack is in progress\e[0m.\n\n\e[1;31mPlease update manually.\e[0m" && exit 1)
+    else
+        echo -e "\e[1;31merror:\e[0m Unable to verify \e[1;34mpgp@xen.org\e[0m's fingerprint.\n- It is possible that \e[1;33mthis script has broken\e[0m, the Xen Project has \e[1;33mcycled their PGP keys\e[0m, or an \e[1;31mimpersonation attack is in progress\e[0m.\n\n\e[1;31mPlease update manually.\e[0m" && exit 1
+    fi
+
+    git switch --quiet --detach RELEASE-"$version"
+
+    # Originally we told people to go check the Makefile themselves.
+    echo -e -n "\nDetermining source versions from Xen Makefiles..."
+    qemuVersion="$(grep "QEMU_UPSTREAM_REVISION ?=" /tmp/xenUpdateScript/xen/Config.mk | sed s/"QEMU_UPSTREAM_REVISION ?= "//g)"
+    seaBIOSVersion="$(grep "SEABIOS_UPSTREAM_REVISION ?= rel-" /tmp/xenUpdateScript/xen/Config.mk | sed s/"SEABIOS_UPSTREAM_REVISION ?= "//g)"
+    ovmfVersion="$(grep "OVMF_UPSTREAM_REVISION ?=" /tmp/xenUpdateScript/xen/Config.mk | sed s/"OVMF_UPSTREAM_REVISION ?= "//g)"
+    miniOSVersion="$(grep "MINIOS_UPSTREAM_REVISION ?=" /tmp/xenUpdateScript/xen/Config.mk | sed s/"MINIOS_UPSTREAM_REVISION ?= "//g)"
+    ipxeVersion="$(grep "IPXE_GIT_TAG :=" /tmp/xenUpdateScript/xen/tools/firmware/etherboot/Makefile | sed s/"IPXE_GIT_TAG := "//g)"
+    echo "done!"
+
+    # Use `nix-prefetch-git` to fetch `rev`s and `hash`es.
+    echo "Pre-fetching sources and determining hashes..."
+    echo -e -n "  \e[1;32mXen\e[0m..."
+    fetchXen=$(nix-prefetch-git --url https://xenbits.xenproject.org/git-http/xen.git --rev RELEASE-"$version" --quiet)
+    finalVersion="$(echo "$fetchXen" | tr ', ' '\n ' | grep -ie rev | sed s/'  "rev": "'//g | sed s/'"'//g)"
+    hash="$(echo "$fetchXen" | tr ', ' '\n ' | grep -ie hash | sed s/'  "hash": "'//g | sed s/'"'//g)"
+    echo "done!"
+    echo -e -n "  \e[1;36mQEMU\e[0m..."
+    fetchQEMU=$(nix-prefetch-git --url https://xenbits.xenproject.org/git-http/qemu-xen.git --rev "$qemuVersion" --quiet --fetch-submodules)
+    finalQEMUVersion="$(echo "$fetchQEMU" | tr ', ' '\n ' | grep -ie rev | sed s/'  "rev": "'//g | sed s/'"'//g)"
+    qemuHash="$(echo "$fetchQEMU" | tr ', ' '\n ' | grep -ie hash | sed s/'  "hash": "'//g | sed s/'"'//g)"
+    echo "done!"
+    echo -e -n "  \e[1;36mSeaBIOS\e[0m..."
+    fetchSeaBIOS=$(nix-prefetch-git --url https://xenbits.xenproject.org/git-http/seabios.git --rev "$seaBIOSVersion" --quiet)
+    finalSeaBIOSVersion="$(echo "$fetchSeaBIOS" | tr ', ' '\n ' | grep -ie rev | sed s/'  "rev": "'//g | sed s/'"'//g)"
+    seaBIOSHash="$(echo "$fetchSeaBIOS" | tr ', ' '\n ' | grep -ie hash | sed s/'  "hash": "'//g | sed s/'"'//g)"
+    echo "done!"
+    echo -e -n "  \e[1;36mOVMF\e[0m..."
+    ovmfHash="$(nix-prefetch-git --url https://xenbits.xenproject.org/git-http/ovmf.git --rev "$ovmfVersion" --quiet --fetch-submodules | grep -ie hash | sed s/'  "hash": "'//g | sed s/'",'//g)"
+    echo "done!"
+    echo -e -n "  \e[1;36miPXE\e[0m..."
+    ipxeHash="$(nix-prefetch-git --url https://github.com/ipxe/ipxe.git --rev "$ipxeVersion" --quiet | grep -ie hash | sed s/'  "hash": "'//g | sed s/'",'//g)"
+    echo "done!"
+
+    cd "$xenPath"
+
+    echo -e "\nFound the following revisions:\n  \e[1;32mXen\e[0m:     \e[1;33m$finalVersion\e[0m (\e[1;33m$hash\e[0m)\n  \e[1;36mQEMU\e[0m:    \e[1;33m$finalQEMUVersion\e[0m (\e[1;33m$qemuHash\e[0m)\n  \e[1;36mSeaBIOS\e[0m: \e[1;33m$finalSeaBIOSVersion\e[0m (\e[1;33m$seaBIOSHash\e[0m)\n  \e[1;36mOVMF\e[0m:    \e[1;33m$ovmfVersion\e[0m (\e[1;33m$ovmfHash\e[0m)\n  \e[1;36miPXE\e[0m:    \e[1;33m$ipxeVersion\e[0m (\e[1;33m$ipxeHash\e[0m)"
+
+    # Set OCaml Version
+    read -r -p $'\nEnter the corresponding \e[1;33mOCaml\e[0m version for \e[1;32mXen '"$version"$'\e[0m, or press \e[1;34menter\e[0m for the default value of \e[1;32m4_14\e[0m: ' ocamlVersion
+    ocamlVersion=${ocamlVersion:-"4_14"}
+
+    mkdir -p "$branch"/
+    rm -f "$branch"/default.nix
+
+    # Prepare any .patch files that are called by Nix through a path value.
+    echo -e "\nPlease add any required patches to version \e[1;32m$branch\e[0m in \e[1;34m$branch/\e[0m, and press \e[1;34menter\e[0m when done."
+    read -r -p $'Remember to follow the naming specification as defined in \e[1;34m./README.md\e[0m.'
+
+    echo -e "\nDiscovering patches..."
+    discoveredXenPatches="$(find "$branch"/ -type f -name "[0-9][0-9][0-9][0-9]-xen-*-$branch.patch" -printf "./%f ")"
+    discoveredQEMUPatches="$(find "$branch"/ -type f -name "[0-9][0-9][0-9][0-9]-qemu-*-$branch.patch" -printf "./%f ")"
+    discoveredSeaBIOSPatches="$(find "$branch"/ -type f -name "[0-9][0-9][0-9][0-9]-seabios-*-$branch.patch" -printf "./%f ")"
+    discoveredOVMFPatches="$(find "$branch"/ -type f -name "[0-9][0-9][0-9][0-9]-ovmf-*-$branch.patch" -printf "./%f ")"
+    discoveredIPXEPatches="$(find "$branch"/ -type f -name "[0-9][0-9][0-9][0-9]-ipxe-*-$branch.patch" -printf "./%f ")"
+
+    discoveredXenPatchesEcho=${discoveredXenPatches:-"\e[1;31mNone found!\e[0m"}
+    discoveredQEMUPatchesEcho=${discoveredQEMUPatches:-"\e[1;31mNone found!\e[0m"}
+    discoveredSeaBIOSPatchesEcho=${discoveredSeaBIOSPatches:-"\e[1;31mNone found!\e[0m"}
+    discoveredOVMFPatchesEcho=${discoveredOVMFPatches:-"\e[1;31mNone found!\e[0m"}
+    discoveredIPXEPatchesEcho=${discoveredIPXEPatches:-"\e[1;31mNone found!\e[0m"}
+
+    echo -e "Found the following patches:\n  \e[1;32mXen\e[0m:     \e[1;33m$discoveredXenPatchesEcho\e[0m\n  \e[1;36mQEMU\e[0m:    \e[1;33m$discoveredQEMUPatchesEcho\e[0m\n  \e[1;36mSeaBIOS\e[0m: \e[1;33m$discoveredSeaBIOSPatchesEcho\e[0m\n  \e[1;36mOVMF\e[0m:    \e[1;33m$discoveredOVMFPatchesEcho\e[0m\n  \e[1;36miPXE\e[0m:    \e[1;33m$discoveredIPXEPatchesEcho\e[0m"
+
+    # Prepare patches that are called in ./patches.nix.
+    defaultPatchListInit=("QUBES_REPRODUCIBLE_BUILDS" "XSA_460" "XSA_461" )
+    read -r -a defaultPatchList -p $'\nWould you like to override the \e[1;34mupstreamPatches\e[0m list for \e[1;32mXen '"$version"$'\e[0m? If no, press \e[1;34menter\e[0m to use the default patch list: [ \e[1;34m'"${defaultPatchListInit[*]}"$' \e[0m]: '
+    defaultPatchList=(${defaultPatchList[@]:-${defaultPatchListInit[@]}})
+    upstreamPatches=${defaultPatchList[*]}
+
+    # Write and format default.nix file.
+    echo -e -n "\nWriting updated \e[1;34mversionDefinition\e[0m..."
+    cat >"$branch"/default.nix <<EOF
+{
+  lib,
+  fetchpatch,
+  callPackage,
+  ocaml-ng,
+  ...
+}@genericDefinition:
+
+let
+  upstreamPatches = import ../generic/patches.nix {
+    inherit lib;
+    inherit fetchpatch;
+  };
+
+  upstreamPatchList = lib.lists.flatten (with upstreamPatches; [
+    $upstreamPatches
+  ]);
+in
+
+callPackage (import ../generic/default.nix {
+  pname = "xen";
+  branch = "$branch";
+  version = "$version";
+  latest = $latest;
+  pkg = {
+    xen = {
+      rev = "$finalVersion";
+      hash = "$hash";
+      patches = [ $discoveredXenPatches ] ++ upstreamPatchList;
+    };
+    qemu = {
+      rev = "$finalQEMUVersion";
+      hash = "$qemuHash";
+      patches = [ $discoveredQEMUPatches ];
+    };
+    seaBIOS = {
+      rev = "$finalSeaBIOSVersion";
+      hash = "$seaBIOSHash";
+      patches = [ $discoveredSeaBIOSPatches ];
+    };
+    ovmf = {
+      rev = "$ovmfVersion";
+      hash = "$ovmfHash";
+      patches = [ $discoveredOVMFPatches ];
+    };
+    ipxe = {
+      rev = "$ipxeVersion";
+      hash = "$ipxeHash";
+      patches = [ $discoveredIPXEPatches ];
+    };
+  };
+}) ({ ocamlPackages = ocaml-ng.ocamlPackages_$ocamlVersion; } // genericDefinition)
+EOF
+echo done!
+
+    echo -n "Formatting..."
+    nixfmt "$branch"/default.nix
+    echo done!
+
+    echo -e "\n\e[1;32mSuccessfully produced $branch/default.nix.\e[0m"
+done
+
+echo -e -n "\nCleaning up..."
+rm -rf /tmp/xenUpdateScript
+echo done!
diff --git a/pkgs/applications/virtualization/xen/xsa-patches.nix b/pkgs/applications/virtualization/xen/xsa-patches.nix
deleted file mode 100644
index d789697a55991..0000000000000
--- a/pkgs/applications/virtualization/xen/xsa-patches.nix
+++ /dev/null
@@ -1,493 +0,0 @@
-{ fetchpatch }:
-
-let
-  xsaPatch = { name , sha256 }: (fetchpatch {
-    url = "https://xenbits.xen.org/xsa/xsa${name}.patch";
-    inherit sha256;
-  });
-in {
-  # 4.5
-  XSA_190 = (xsaPatch {
-    name = "190-4.5";
-    sha256 = "0f8pw38kkxky89ny3ic5h26v9zsjj9id89lygx896zc3w1klafqm";
-  });
-
-  # 4.5
-  XSA_191 = (xsaPatch {
-    name = "191-4.6";
-    sha256 = "1wl1ndli8rflmc44pkp8cw4642gi8z7j7gipac8mmlavmn3wdqhg";
-  });
-
-  # 4.5
-  XSA_192 = (xsaPatch {
-    name = "192-4.5";
-    sha256 = "0m8cv0xqvx5pdk7fcmaw2vv43xhl62plyx33xqj48y66x5z9lxpm";
-  });
-
-  # 4.5
-  XSA_193 = (xsaPatch {
-    name = "193-4.5";
-    sha256 = "0k9mykhrpm4rbjkhv067f6s05lqmgnldcyb3vi8cl0ndlyh66lvr";
-  });
-
-  # 4.5
-  XSA_195 = (xsaPatch {
-    name = "195";
-    sha256 = "0m0g953qnjy2knd9qnkdagpvkkgjbk3ydgajia6kzs499dyqpdl7";
-  });
-
-  # 4.5
-  XSA_196 = [
-    (xsaPatch {
-      name = "196-0001-x86-emul-Correct-the-IDT-entry-calculation-in-inject";
-      sha256 = "0z53nzrjvc745y26z1qc8jlg3blxp7brawvji1hx3s74n346ssl6";
-    })
-    (xsaPatch {
-      name = "196-0002-x86-svm-Fix-injection-of-software-interrupts";
-      sha256 = "11cqvr5jn2s92wsshpilx9qnfczrd9hnyb5aim6qwmz3fq3hrrkz";
-    })
-  ];
-
-  # 4.5
-  XSA_198 = (xsaPatch {
-    name = "198";
-    sha256 = "0d1nndn4p520c9xa87ixnyks3mrvzcri7c702d6mm22m8ansx6d9";
-  });
-
-  # 4.5
-  XSA_200 = (xsaPatch {
-    name = "200-4.6";
-    sha256 = "0k918ja83470iz5k4vqi15293zjvz2dipdhgc9sy9rrhg4mqncl7";
-  });
-
-  # 4.5
-  XSA_202_45 = (xsaPatch {
-    name = "202-4.6";
-    sha256 = "0nnznkrvfbbc8z64dr9wvbdijd4qbpc0wz2j5vpmx6b32sm7932f";
-  });
-
-  # 4.5
-  XSA_204_45 = (xsaPatch {
-    name = "204-4.5";
-    sha256 = "083z9pbdz3f532fnzg7n2d5wzv6rmqc0f4mvc3mnmkd0rzqw8vcp";
-  });
-
-  # 4.5
-  XSA_206_45 = [
-    (xsaPatch {
-      name = "206-4.5/0001-xenstored-apply-a-write-transaction-rate-limit";
-      sha256 = "07vsm8mlbxh2s01ny2xywnm1bqhhxas1az31fzwb6f1g14vkzwm4";
-    })
-    (xsaPatch {
-      name = "206-4.5/0002-xenstored-Log-when-the-write-transaction-rate-limit-";
-      sha256 = "17pnvxjmhny22abwwivacfig4vfsy5bqlki07z236whc2y7yzbsx";
-    })
-    (xsaPatch {
-      name = "206-4.5/0003-oxenstored-refactor-putting-response-on-wire";
-      sha256 = "0xf566yicnisliy82cydb2s9k27l3bxc43qgmv6yr2ir3ixxlw5s";
-    })
-    (xsaPatch {
-      name = "206-4.5/0004-oxenstored-remove-some-unused-parameters";
-      sha256 = "16cqx9i0w4w3x06qqdk9rbw4z96yhm0kbc32j40spfgxl82d1zlk";
-    })
-    (xsaPatch {
-      name = "206-4.5/0005-oxenstored-refactor-request-processing";
-      sha256 = "1g2hzlv7w03sqnifbzda85mwlz3bw37rk80l248180sv3k7k6bgv";
-    })
-    (xsaPatch {
-      name = "206-4.5/0006-oxenstored-keep-track-of-each-transaction-s-operatio";
-      sha256 = "0n65yfxvpfd4cz95dpbwqj3nablyzq5g7a0klvi2y9zybhch9cmg";
-    })
-    (xsaPatch {
-      name = "206-4.5/0007-oxenstored-move-functions-that-process-simple-operat";
-      sha256 = "0qllvbc9rnj7jhhlslxxs35gvphvih0ywz52jszj4irm23ka5vnz";
-    })
-    (xsaPatch {
-      name = "206-4.5/0008-oxenstored-replay-transaction-upon-conflict";
-      sha256 = "0lixkxjfzciy9l0f980cmkr8mcsx14c289kg0mn5w1cscg0hb46g";
-    })
-    (xsaPatch {
-      name = "206-4.5/0009-oxenstored-log-request-and-response-during-transacti";
-      sha256 = "09ph8ddcx0k7rndd6hx6kszxh3fhxnvdjsq13p97n996xrpl1x7b";
-    })
-    (xsaPatch {
-      name = "206-4.5/0010-oxenstored-allow-compilation-prior-to-OCaml-3.12.0";
-      sha256 = "1y0m7sqdz89z2vs4dfr45cyvxxas323rxar0xdvvvivgkgxawvxj";
-    })
-    (xsaPatch {
-      name = "206-4.5/0011-oxenstored-comments-explaining-some-variables";
-      sha256 = "1d3n0y9syya4kaavrvqn01d3wsn85gmw7qrbylkclznqgkwdsr2p";
-    })
-    (xsaPatch {
-      name = "206-4.5/0012-oxenstored-handling-of-domain-conflict-credit";
-      sha256 = "12zgid5y9vrhhpk2syxp0x01lzzr6447fa76n6rjmzi1xgdzpaf8";
-    })
-    (xsaPatch {
-      name = "206-4.5/0013-oxenstored-ignore-domains-with-no-conflict-credit";
-      sha256 = "0v3g9pm60w6qi360hdqjcw838s0qcyywz9qpl8gzmhrg7a35avxl";
-    })
-    (xsaPatch {
-      name = "206-4.5/0014-oxenstored-add-transaction-info-relevant-to-history-";
-      sha256 = "0vv3w0h5xh554i9v2vbc8gzm8wabjf2vzya3dyv5yzvly6ygv0sb";
-    })
-    (xsaPatch {
-      name = "206-4.5/0015-oxenstored-support-commit-history-tracking";
-      sha256 = "1iv2vy29g437vj73x9p33rdcr5ln2q0kx1b3pgxq202ghbc1x1zj";
-    })
-    (xsaPatch {
-      name = "206-4.5/0016-oxenstored-only-record-operations-with-side-effects-";
-      sha256 = "1cjkw5ganbg6lq78qsg0igjqvbgph3j349faxgk1p5d6nr492zzy";
-    })
-    (xsaPatch {
-      name = "206-4.5/0017-oxenstored-discard-old-commit-history-on-txn-end";
-      sha256 = "0lm15lq77403qqwpwcqvxlzgirp6ffh301any9g401hs98f9y4ps";
-    })
-    (xsaPatch {
-      name = "206-4.5/0018-oxenstored-track-commit-history";
-      sha256 = "1jh92p6vjhkm3bn5vz260npvsjji63g2imsxflxs4f3r69sz1nkd";
-    })
-    (xsaPatch {
-      name = "206-4.5/0019-oxenstored-blame-the-connection-that-caused-a-transa";
-      sha256 = "17k264pk0fvsamj85578msgpx97mw63nmj0j9v5hbj4bgfazvj4h";
-    })
-    (xsaPatch {
-      name = "206-4.5/0020-oxenstored-allow-self-conflicts";
-      sha256 = "15z3rd49q0pa72si0s8wjsy2zvbm613d0hjswp4ikc6nzsnsh4qy";
-    })
-    (xsaPatch {
-      name = "206-4.5/0021-oxenstored-do-not-commit-read-only-transactions";
-      sha256 = "04wpzazhv90lg3228z5i6vnh1z4lzd08z0d0fvc4br6pkd0w4va8";
-    })
-    (xsaPatch {
-      name = "206-4.5/0022-oxenstored-don-t-wake-to-issue-no-conflict-credit";
-      sha256 = "1shbrn0w68rlywcc633zcgykfccck1a77igmg8ydzwjsbwxsmsjy";
-    })
-    (xsaPatch {
-      name = "206-4.5/0023-oxenstored-transaction-conflicts-improve-logging";
-      sha256 = "1086y268yh8047k1vxnxs2nhp6izp7lfmq01f1gq5n7jiy1sxcq7";
-    })
-    (xsaPatch {
-      name = "206-4.5/0024-oxenstored-trim-history-in-the-frequent_ops-function";
-      sha256 = "014zs6i4gzrimn814k5i7gz66vbb0adkzr2qyai7i4fxc9h9r7w8";
-    })
-  ];
-
-  # 4.5 - 4.8
-  XSA_207 = (xsaPatch {
-    name = "207";
-    sha256 = "0wdlhijmw9mdj6a82pyw1rwwiz605dwzjc392zr3fpb2jklrvibc";
-  });
-
-  # 4.5 - 4.8
-  XSA_212 = (xsaPatch {
-    name = "212";
-    sha256 = "1ggjbbym5irq534a3zc86md9jg8imlpc9wx8xsadb9akgjrr1r8d";
-  });
-
-  # 4.5
-  XSA_213_45 = (xsaPatch {
-    name = "213-4.5";
-    sha256 = "1vnqf89ydacr5bq3d6z2r33xb2sn5vsd934rncyc28ybc9rvj6wm";
-  });
-
-  # 4.5 - 4.8
-  XSA_214 = (xsaPatch {
-    name = "214";
-    sha256 = "0qapzx63z0yl84phnpnglpkxp6b9sy1y7cilhwjhxyigpfnm2rrk";
-  });
-
-  # 4.5
-  XSA_215 = (xsaPatch {
-    name = "215";
-    sha256 = "0sv8ccc5xp09f1w1gj5a9n3mlsdsh96sdb1n560vh31f4kkd61xs";
-  });
-
-  # 4.5
-  XSA_217_45 = (xsaPatch {
-    name = "217-4.5";
-    sha256 = "067pgsfrb9py2dhm1pk9g8f6fs40vyfrcxhj8c12vzamb6svzmn4";
-  });
-
-  # 4.5
-  XSA_218_45 = [
-    (xsaPatch {
-      name = "218-4.5/0001-IOMMU-handle-IOMMU-mapping-and-unmapping-failures";
-      sha256 = "00y6j3yjxw0igpldsavikmhlxw711k2jsj1qx0s05w2k608gadkq";
-    })
-    (xsaPatch {
-      name = "218-4.5/0002-gnttab-fix-unmap-pin-accounting-race";
-      sha256 = "0qbbfnnjlpdcd29mzmacfmi859k92c213l91q7w1rg2k6pzx928k";
-    })
-    (xsaPatch {
-      name = "218-4.5/0003-gnttab-Avoid-potential-double-put-of-maptrack-entry";
-      sha256 = "1cndzvyhf41mk4my6vh3bk9jvh2y4gpmqdhvl9zhxhmppszslqkc";
-    })
-    (xsaPatch {
-      name = "218-4.5/0004-gnttab-correct-maptrack-table-accesses";
-      sha256 = "02zpb0ffigijacqvyyjylwx3qpgibwslrka7mbxwnclf4s9c03a2";
-    })
-  ];
-
-  # 4.5
-  XSA_219_45 = (xsaPatch {
-    name = "219-4.5";
-    sha256 = "003msr5vhsc66scmdpgn0lp3p01g4zfw5vj86y5lw9ajkbaywdsm";
-  });
-
-  # 4.5
-  XSA_220_45 = (xsaPatch {
-    name = "220-4.5";
-    sha256 = "1dj9nn6lzxlipjb3nb7b9m4337fl6yn2bd7ap1lqrjn8h9zkk1pp";
-  });
-
-  # 4.5 - 4.8
-  XSA_221 = (xsaPatch {
-    name = "221";
-    sha256 = "1mcr1nqgxyjrkywdg7qhlfwgz7vj2if1dhic425vgd41p9cdgl26";
-  });
-
-  # 4.5
-  XSA_222_45 = [
-    (xsaPatch {
-      name = "222-1-4.6";
-      sha256 = "1g4dqm5qx4wqlv1520jpfiscph95vllcp4gqp1rdfailk8xi0mcf";
-    })
-    (xsaPatch {
-      name = "222-2-4.5";
-      sha256 = "1hw8rhc7q4v309f4w11gxfsn5x1pirvxkg7s4kr711fnmvp9hkzd";
-    })
-  ];
-
-  # 4.5 - 4.8
-  XSA_223 = (xsaPatch {
-    name = "223";
-    sha256 = "0803gjgcbq9vaz2mq0v5finf1fq8iik1g4hqsjqhjxvspn8l70c5";
-  });
-
-  # 4.5
-  XSA_224_45 = [
-    (xsaPatch {
-      name = "224-4.5/0001-gnttab-Fix-handling-of-dev_bus_addr-during-unmap";
-      sha256 = "1aislj66ss4cb3v2bh12mrqsyrf288d4h54rj94jjq7h1hnycw7h";
-    })
-    (xsaPatch {
-      name = "224-4.5/0002-gnttab-never-create-host-mapping-unless-asked-to";
-      sha256 = "1j6fgm1ccb07gg0mi5qmdr0vqwwc3n12z433g1jrija2gbk1x8aq";
-    })
-    (xsaPatch {
-      name = "224-4.5/0003-gnttab-correct-logic-to-get-page-references-during-m";
-      sha256 = "166kmicwx280fjqjvgigbmhabjksa0hhvqx5h4v6kjlcjpmxqy08";
-    })
-    (xsaPatch {
-      name = "224-4.5/0004-gnttab-__gnttab_unmap_common_complete-is-all-or-noth";
-      sha256 = "1skc0yj1zsn8xgyq1y57bdc0scvvlmd0ynrjwwf1zkias1wlilav";
-    })
-  ];
-
-  # 4.5
-  XSA_226_45 = [
-    (xsaPatch {
-      name = "226-4.5/0001-gnttab-dont-use-possibly-unbounded-tail-calls";
-      sha256 = "1hx47ppv5q33cw4dwp82lgvv4fp28gx7rxijw0iaczsv8bvb8vcg";
-    })
-    (xsaPatch {
-      name = "226-4.5/0002-gnttab-fix-transitive-grant-handling";
-      sha256 = "1gzp8m2zfihwlk71c3lqyd0ajh9h11pvkhzhw0mawckxy0qksvlc";
-    })
-  ];
-
-  # 4.5
-  XSA_227_45 = (xsaPatch {
-    name = "227-4.5";
-    sha256 = "1qfjfisgqm4x98qw54x2qrvgjnvvzizx9p1pjhcnsps9q6g1y3x8";
-  });
-
-  # 4.5 - 4.9
-  XSA_230 = (xsaPatch {
-    name = "230";
-    sha256 = "10x0j7wmzkrwycs1ng89fgjzvzh8vsdd4c5nb68b3j1azdx4ld83";
-  });
-
-  # 4.5
-  XSA_231_45 = (xsaPatch {
-    name = "231-4.5";
-    sha256 = "06gwx2f1lg51dfk2b4zxp7wv9c4pxdi87pg2asvmxqc78ir7l5s6";
-  });
-
-  # 4.5 - 4.9
-  XSA_232 = (xsaPatch {
-    name = "232";
-    sha256 = "0n6irjpmraa3hbxxm64a1cplc6y6g07x7v2fmlpvn70ql3fs0220";
-  });
-
-  # 4.5 - 4.9
-  XSA_233 = (xsaPatch {
-    name = "233";
-    sha256 = "1w3m8349cqav56av63w6jzvlsv4jw5rimwvskr9pq2rcbk2dx8kf";
-  });
-
-  # 4.5
-  XSA_234_45 = (xsaPatch {
-    name = "234-4.5";
-    sha256 = "1ji6hbgybb4gbgz5l5fis9midnvjbddzam8d63377rkzdyb3yz9f";
-  });
-
-  # 4.5
-  XSA_235_45 = (xsaPatch {
-    name = "235-4.5";
-    sha256 = "0hhgnql2gji111020z4wiyzg23wqs6ymanb67rg11p4qad1fp3ff";
-  });
-
-  # 4.5
-  XSA_236_45 = (xsaPatch {
-    name = "236-4.5";
-    sha256 = "0hcla86x81wykssd2967gblp7fzx61290p4ls4v0hcyxdg2bs2yz";
-  });
-
-  # 4.5
-  XSA_237_45 = [
-    (xsaPatch {
-      name = "237-4.5/0001-x86-dont-allow-MSI-pIRQ-mapping-on-unowned-device";
-      sha256 = "0hjxs20jhls4i0iph45a0qpw4znkm04gv74jmwhw84gy4hrhzq3b";
-    })
-    (xsaPatch {
-      name = "237-4.5/0002-x86-enforce-proper-privilege-when-mapping-pIRQ-s";
-      sha256 = "0ki8nmbc2g1l9wnqsph45a2k4c6dk5s7jvdlxg3zznyiyxjcv8yn";
-    })
-    (xsaPatch {
-      name = "237-4.5/0003-x86-MSI-disallow-redundant-enabling";
-      sha256 = "1hdz83qrjaqnihz8ji186dypxiblbfpgyb01j9m5alhk4whjqvp1";
-    })
-    (xsaPatch {
-      name = "237-4.5/0004-x86-IRQ-conditionally-preserve-irq-pirq-mapping-on-error";
-      sha256 = "0csdfn9kzn1k94pg3fcwsgqw14wcd4myi1jkcq5alj1fmkhw4wmk";
-    })
-    (xsaPatch {
-      name = "237-4.5/0005-x86-FLASK-fix-unmap-domain-IRQ-XSM-hook";
-      sha256 = "14b73rkvbkd1a2gh9kp0zrvv2d3kfwkiv24fg9agh4hrf2w3nx7y";
-    })
-  ];
-
-  # 4.5
-  XSA_238_45 = (xsaPatch {
-    name = "238-4.5";
-    sha256 = "1x2fg5vfv5jc084h5gjm6fq0nxjpzvi96px3sqzz4pvsvy4y4i1z";
-  });
-
-  # 4.5
-  XSA_239_45 = (xsaPatch {
-    name = "239-4.5";
-    sha256 = "06bi8q3973yajxsdj7pcqarvb56q2gisxdiy0cpbyffbmpkfv3h6";
-  });
-
-  # 4.5
-  XSA_240_45 = [
-    (xsaPatch {
-      name = "240-4.5/0001-x86-limit-linear-page-table-use-to-a-single-level";
-      sha256 = "0pmf10mbnmb88y7mly8s2l0j88cg0ayhkcnmj1zbjrkjmpccv395";
-    })
-    (xsaPatch {
-      name = "240-4.5/0002-x86-mm-Disable-PV-linear-pagetables-by-default";
-      sha256 = "19f096ra3xndvzkjjasx73p2g25hfkm905px0p3yakwll0qzd029";
-    })
-  ];
-
-  # 4.5 - 4.8
-  XSA_241 = (xsaPatch {
-    name = "241-4.8";
-    sha256 = "16zb75kzs98f4mdxhbyczk5mbh9dvn6j3yhfafki34x1dfdnq4pj";
-  });
-
-  # 4.5 - 4.9
-  XSA_242 = (xsaPatch {
-    name = "242-4.9";
-    sha256 = "0yx3x0i2wybsm7lzdffxa2mm866bjl4ipbb9vipnw77dyg705zpr";
-  });
-
-  # 4.5
-  XSA_243_45 = [
-    (xsaPatch {
-      name = "243-4.6-1";
-      sha256 = "1cqanpyysa7px0j645z4jw9yqsvv6cbh7yq1b86ap134axfifcan";
-    })
-    (xsaPatch {
-      name = "243-4.5-2";
-      sha256 = "0wbcgw4m0nzm2902jnda2020l7bd5adkq8j5myi1zmsfzbq03hwn";
-    })
-  ];
-
-  # 4.5
-  XSA_244_45 = (xsaPatch {
-    name = "244-4.5";
-    sha256 = "05ci3vdl1ywfjpzcvsy1k52whxjk8pxzj7dh3r94yqasr56i5v2l";
-  });
-
-  # 4.5 - 4.9
-  XSA_245 = [
-    (xsaPatch {
-      name = "245/0001-xen-page_alloc-Cover-memory-unreserved-after-boot-in";
-      sha256 = "12brsgbn7xwakalsn10afykgqmx119mqg6vjj3v2b1pnmf4ss0w8";
-    })
-    (xsaPatch {
-      name = "245/0002-xen-arm-Correctly-report-the-memory-region-in-the-du";
-      sha256 = "1k6z5r7wnrswsczn2j3a1mc4nvxqm4ydj6n6rvgqizk2pszdkqg8";
-    })
-  ];
-
-  # 4.5 - 4.7
-  XSA_246_45 = [
-    (xsaPatch {
-      name = "246-4.7";
-      sha256 = "13rad4k8z3bq15d67dhgy96kdbrjiq9sy8px0jskbpx9ygjdahkn";
-    })
-  ];
-
-  # 4.5
-  XSA_247_45 = [
-    (xsaPatch {
-      name = "247-4.5/0001-p2m-Always-check-to-see-if-removing-a-p2m-entry-actu";
-      sha256 = "0h1mp5s9si8aw2gipds317f27h9pi7bgnhj0bcmw11p0ch98sg1m";
-    })
-    (xsaPatch {
-      name = "247-4.5/0002-p2m-Check-return-value-of-p2m_set_entry-when-decreas";
-      sha256 = "0vjjybxbcm4xl26wbqvcqfiyvvlayswm4f98i1fr5a9abmljn5sb";
-    })
-  ];
-
-  # 4.5
-  XSA_248_45 = [
-    (xsaPatch {
-      name = "248-4.5";
-      sha256 = "0csxg6h492ddsa210b45av28iqf7cn2dfdqk4zx10zwf1pv2shyn";
-    })
-  ];
-
-  # 4.5 .. 4.9
-  XSA_249 = [
-   (xsaPatch {
-      name = "249";
-      sha256 = "0v6ngzqhkz7yv4n83xlpxfbkr2qyg5b1cds7ikkinm86hiqy6agl";
-    })
-  ];
-
-  # 4.5
-  XSA_250_45 = [
-   (xsaPatch {
-      name = "250-4.5";
-      sha256 = "0pqldl6qnl834gvfp90z247q9xcjh3835s2iffnajz7jhjb2145d";
-    })
-  ];
-
-  # 4.5
-  XSA_251_45 = [
-   (xsaPatch {
-      name = "251-4.5";
-      sha256 = "0lc94cx271z09r0mhxaypyd9d4740051p28idf5calx5228dqjgm";
-    })
-  ];
-
-  XSA_386 = (xsaPatch {
-    name = "386";
-    sha256 = "sha256-pAuLgt3sDeL73NSDqZCWxRGZk1tWaYlDbh7cUcJ4s+w=";
-  });
-}
diff --git a/pkgs/applications/virtualization/xhyve/default.nix b/pkgs/applications/virtualization/xhyve/default.nix
index 2d66f8351411f..a9119975a7ae3 100644
--- a/pkgs/applications/virtualization/xhyve/default.nix
+++ b/pkgs/applications/virtualization/xhyve/default.nix
@@ -34,6 +34,6 @@ stdenv.mkDerivation rec {
     license = licenses.bsd2;
     platforms = platforms.darwin;
     # never built on aarch64-darwin since first introduction in nixpkgs
-    broken = stdenv.isDarwin && stdenv.isAarch64;
+    broken = stdenv.hostPlatform.isDarwin && stdenv.hostPlatform.isAarch64;
   };
 }
diff --git a/pkgs/applications/virtualization/youki/default.nix b/pkgs/applications/virtualization/youki/default.nix
deleted file mode 100644
index d63fa87238e45..0000000000000
--- a/pkgs/applications/virtualization/youki/default.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ lib
-, rustPlatform
-, fetchFromGitHub
-, pkg-config
-, installShellFiles
-, dbus
-, libseccomp
-, systemd
-}:
-
-rustPlatform.buildRustPackage rec {
-  pname = "youki";
-  version = "0.3.2";
-
-  src = fetchFromGitHub {
-    owner = "containers";
-    repo = pname;
-    rev = "v${version}";
-    hash = "sha256-/cc+gHnakxC446MxErvgCDvc1gMWNi45h6fZ1Cd1Pj0=";
-  };
-
-  cargoPatches = [
-    ./fix-cargo-lock.patch
-  ];
-
-  nativeBuildInputs = [ pkg-config installShellFiles ];
-
-  buildInputs = [ dbus libseccomp systemd ];
-
-  postInstall = ''
-    installShellCompletion --cmd youki \
-      --bash <($out/bin/youki completion -s bash) \
-      --fish <($out/bin/youki completion -s fish) \
-      --zsh <($out/bin/youki completion -s zsh)
-  '';
-
-  cargoBuildFlags = [ "-p" "youki" ];
-  cargoTestFlags = [ "-p" "youki" ];
-
-  cargoHash = "sha256-PKn448fOCnyMC42NtQnLt8kvZIBautsq4Fw/bRvwmpw=";
-
-  meta = with lib; {
-    description = "Container runtime written in Rust";
-    homepage = "https://containers.github.io/youki/";
-    changelog = "https://github.com/containers/youki/releases/tag/v${version}";
-    license = licenses.asl20;
-    maintainers = [];
-    platforms = platforms.linux;
-    mainProgram = "youki";
-  };
-}
diff --git a/pkgs/applications/virtualization/youki/fix-cargo-lock.patch b/pkgs/applications/virtualization/youki/fix-cargo-lock.patch
deleted file mode 100644
index 07f44a9e91a4c..0000000000000
--- a/pkgs/applications/virtualization/youki/fix-cargo-lock.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-diff --git a/Cargo.lock b/Cargo.lock
-index cfef78c0..7cad3faa 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -1879,7 +1879,7 @@ checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
- 
- [[package]]
- name = "libcgroups"
--version = "0.3.1"
-+version = "0.3.2"
- dependencies = [
-  "anyhow",
-  "clap",
-@@ -1904,7 +1904,7 @@ dependencies = [
- 
- [[package]]
- name = "libcontainer"
--version = "0.3.1"
-+version = "0.3.2"
- dependencies = [
-  "anyhow",
-  "bitflags 2.4.2",
-@@ -1947,7 +1947,7 @@ dependencies = [
- 
- [[package]]
- name = "liboci-cli"
--version = "0.3.1"
-+version = "0.3.2"
- dependencies = [
-  "clap",
- ]
-@@ -5712,7 +5712,7 @@ dependencies = [
- 
- [[package]]
- name = "youki"
--version = "0.3.1"
-+version = "0.3.2"
- dependencies = [
-  "anyhow",
-  "caps",