diff --git a/flake.lock b/flake.lock
index e0246ab..85be38f 100644
--- a/flake.lock
+++ b/flake.lock
@@ -20,11 +20,11 @@
     },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1749285348,
-        "narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=",
+        "lastModified": 1739020877,
+        "narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "3e3afe5174c561dee0df6f2c2b2236990146329f",
+        "rev": "a79cfe0ebd24952b580b1cf08cd906354996d547",
         "type": "github"
       },
       "original": {
diff --git a/flake.nix b/flake.nix
index 884349e..9e92cc8 100644
--- a/flake.nix
+++ b/flake.nix
@@ -15,82 +15,67 @@
     flake-utils.lib.eachDefaultSystem (
       system:
       let
+        pkgs = import nixpkgs { inherit system; };
+        patosPkgs = self.packages.${system};
         version = "0.0.1";
-        secureBoot = "false";
-        microcode = "intel";
         updateUrl = "http://10.0.2.2:8000/";
-
-        overlay = import ./overlays { inherit version; };
-        pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; };
-        pkgsCross = import nixpkgs {
-          inherit system;
-          overlays = [ overlay ];
-          crossSystem = {
-            config = "aarch64-unknown-linux-gnu";
-          };
-        };
       in
       {
         packages = {
-          default = self.packages.${system}.image;
-
-          image = pkgs.callPackage ./pkgs/image { inherit version updateUrl microcode secureBoot; };
-          image-aarch64 = pkgsCross.callPackage ./pkgs/image { inherit version updateUrl secureBoot; };
+          default = patosPkgs.image;
+          image = pkgs.callPackage ./pkgs/image { inherit patosPkgs version updateUrl; };
+          rootfs = pkgs.callPackage ./pkgs/rootfs/mkrootfs.nix { inherit patosPkgs version; };
+          initrd = pkgs.callPackage ./pkgs/rootfs/mkinitrd.nix { inherit patosPkgs version; };
+          kernel = pkgs.callPackage ./pkgs/kernel { };
+          glibc = pkgs.callPackage ./pkgs/glibc { };
+          busybox = pkgs.callPackage ./pkgs/busybox { };
+          openssl = pkgs.callPackage ./pkgs/openssl { };
+          cert = pkgs.callPackage ./pkgs/cert { };
+          kexec = pkgs.callPackage ./pkgs/kexec-tools { };
+          lvm2 = pkgs.callPackage ./pkgs/lvm2 { };
+          tpm2-tools = pkgs.callPackage ./pkgs/tpm2-tools { inherit patosPkgs; };
+          tpm2-tss = pkgs.callPackage ./pkgs/tpm2-tss { };
+          systemd = pkgs.callPackage ./pkgs/systemd { };
+          dbus-broker = pkgs.callPackage ./pkgs/dbus-broker { };
 
           qemu-uefi-tpm = pkgs.callPackage ./utils/qemu-uefi-tpm.nix { };
-          qemu-aarch64-uefi-tpm = pkgs.callPackage ./utils/qemu-aarch64-uefi-tpm.nix { };
-
-          firewall-sysext = pkgs.callPackage ./lib/make-sysext.nix {
-            name = "firewall-tools";
-            version = "0.0.1";
-            packages = [
-              # network/firewalling
-              { drv = pkgs.iproute2; path = "bin/"; }
-              { drv = pkgs.nftables; path = "bin/"; }
-              { drv = pkgs.wireguard-tools; path = "bin/.wg-wrapped"; destpath = "bin/wg"; }
-              # deps
-              { drv = pkgs.nftables; path = "lib/"; }
-              { drv = pkgs.libnftnl; path = "lib/"; }
-              { drv = pkgs.iptables; path = "lib/"; }
-              { drv = pkgs.libgcc.lib; path = "lib/"; }
-              { drv = pkgs.libgcc; path = "lib/"; }
-              { drv = pkgs.libmnl; path = "lib/"; }
-              { drv = pkgs.gmp; path = "lib/"; }
-              { drv = pkgs.jansson.out; path = "lib/"; }
-              { drv = pkgs.ncurses.out; path = "lib/"; }
-              { drv = pkgs.libedit; path = "lib/"; }
-            ];
-          };
 
           debug-tools-sysext = pkgs.callPackage ./lib/make-sysext.nix {
             name = "debug-tools";
             version = "0.0.1";
             packages = [
-              { drv = pkgs.curl; path = "bin/"; }
-              { drv = pkgs.bash; path = "bin/"; }
-              { drv = pkgs.keyutils; path = "bin/"; }
-              { drv = pkgs.gnutar; path = "bin/"; }
-              { drv = pkgs.strace; path = "bin/"; }
-              { drv = pkgs.cryptsetup; path = "bin/"; }
-              { drv = pkgs.erofs-utils; path = "bin/"; }
-              { drv = pkgs.binutils-unwrapped; path = "bin/"; }
-              { drv = pkgs.binutils-unwrapped.lib; path = "lib/"; }
-              { drv = pkgs.util-linuxMinimal; path = "bin/"; }
-              { drv = pkgs.util-linuxMinimal.mount; path = "bin/"; }
-              { drv = pkgs.util-linuxMinimal.login; path = "bin/"; }
-              { drv = pkgs.util-linuxMinimal.swap; path = "bin/"; }
-              { drv = pkgs.patos.glibc; path = "bin/ldd"; }
-              { drv = pkgs.patos.tpm2-tools; path = "bin/tpm2"; }
-              { drv = pkgs.patos.openssl; path = "bin/openssl"; }
-              # shared lib required for mkfs.erofs
-              { drv = pkgs.lz4.lib; path = "lib/"; }
+              { drv = pkgs.curl; path = "bin/curl"; }
+              { drv = pkgs.bash; path = "bin/bash"; }
+              { drv = patosPkgs.glibc; path = "bin/ldd"; }
+              { drv = pkgs.keyutils; path = "bin/keyctl"; }
+              { drv = pkgs.gnutar; path = "bin/tar"; }
+              { drv = pkgs.binutils-unwrapped; path = "bin/strings"; }
+              { drv = pkgs.strace; path = "bin/strace"; }
+              { drv = patosPkgs.tpm2-tools; path = "bin/tpm2"; }
+              { drv = patosPkgs.openssl; path = "bin/openssl"; }
+              { drv = pkgs.cryptsetup; path = "bin/cryptsetup"; }
+              { drv = pkgs.cryptsetup; path = "bin/veritysetup"; }
+              { drv = pkgs.erofs-utils; path = "bin/mkfs.erofs"; }
               # shared lib required for cryptsetup
-              { drv = pkgs.popt; path = "lib/"; }
+              { drv = pkgs.popt; path = "lib/libpopt.so.0.0.2"; }
+              { drv = pkgs.popt; path = "lib/libpopt.so.0"; }
+              { drv = pkgs.popt; path = "lib/libpopt.so"; }
+              # shared lib required for mkfs.erofs
+              { drv = pkgs.lz4.lib; path = "lib/liblz4.so.1.10.0"; }
+              { drv = pkgs.lz4.lib; path = "lib/liblz4.so.1"; }
+              { drv = pkgs.lz4.lib; path = "lib/liblz4.so"; }
+              # shared lib required for binutils
+              { drv = pkgs.binutils-unwrapped.lib; path = "lib/libsframe.so.1.0.0"; }
+              { drv = pkgs.binutils-unwrapped.lib; path = "lib/libsframe.so.1"; }
+              { drv = pkgs.binutils-unwrapped.lib; path = "lib/libbfd-2.43.1.so"; }
+              { drv = pkgs.binutils-unwrapped.lib; path = "lib/libbfd.so"; }
               # shared lib required for strace
-              { drv = pkgs.elfutils.out; path = "lib/"; }
-              # shared lib required for bash
-              { drv = pkgs.readline.out; path = "lib/"; }
-              { drv = pkgs.ncurses.out; path = "lib/"; }
+              { drv = pkgs.elfutils.out; path = "lib/libdw-0.192.so"; }
+              { drv = pkgs.elfutils.out; path = "lib/libdw.so.1"; }
+              { drv = pkgs.elfutils.out; path = "lib/libdw.so"; }
+              { drv = pkgs.elfutils.out; path = "lib/libelf-0.192.so"; }
+              { drv = pkgs.elfutils.out; path = "lib/libelf.so.1"; }
+              { drv = pkgs.elfutils.out; path = "lib/libelf.so"; }
             ];
           };
         };
@@ -109,7 +94,7 @@
             just
             nixd
             nixfmt-rfc-style
-            self.packages.${system}.qemu-uefi-tpm
+            patosPkgs.qemu-uefi-tpm
           ];
         };
 
diff --git a/lib/make-sysext.nix b/lib/make-sysext.nix
index 70ed570..6de1e63 100644
--- a/lib/make-sysext.nix
+++ b/lib/make-sysext.nix
@@ -46,7 +46,6 @@ runCommand name
 
   }
   ''
-    set -ex -o pipefail
     do_copy () {
       local prefix="$1"
       local drv="$2"
@@ -61,25 +60,6 @@ runCommand name
       destdir="$(dirname -- "$destfile")"
 
       mkdir -pv "$destdir"
-
-      # recursively copy if ending with /
-      if [[ "$destfile" =~ /$ ]]; then
-        basedir="$(dirname -- "$destfile")"
-        chmod -R 755 "$basedir"
-        # remove if exists
-        for f in $srcfile/*; do
-          basename="$(basename -- "$f")"
-          rm -rf "$destfile/$basename"
-        done
-        cp -rPv "$srcfile" "$basedir"
-        chmod -R 755 "$basedir"
-        for f in $destfile/*; do
-          patchelf --set-interpreter /lib/ld-linux-x86-64.so.2 $f || true
-          patchelf --set-rpath /usr/lib $f || true
-        done
-        return
-      fi
-
       cp -Pv "$srcfile" "$destfile"
 
       chmod 755 "$destfile"
@@ -99,7 +79,7 @@ runCommand name
 
     pushd $out
     find tree -type d -exec chmod 0755 {} \;
-    mkfs.erofs -zlz4hc,12 -C1048576 -Efragments,dedupe,ztailpacking --all-root $name.raw tree/
+    mkfs.erofs --all-root $name.raw tree/
     veritysetup format --root-hash-file $name.roothash $name.raw $name.verity
     # TODO: pcks7 signature
     # openssl smime -sign -nocerts -noattr -binary -in ${name}.roothash \
diff --git a/overlays/default.nix b/overlays/default.nix
deleted file mode 100644
index 2c2cdce..0000000
--- a/overlays/default.nix
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-  version
-}:
-
-final: prev: {
-  patos = prev.lib.makeScope prev.newScope (self: {
-    kernel = final.callPackage ../pkgs/kernel { };
-    glibc = final.callPackage ../pkgs/glibc { };
-    busybox = final.callPackage ../pkgs/busybox { };
-    openssl = final.callPackage ../pkgs/openssl { };
-    kexec = final.callPackage ../pkgs/kexec-tools { };
-    lvm2 = final.callPackage ../pkgs/lvm2 { };
-    tpm2-tools = final.callPackage ../pkgs/tpm2-tools { };
-    tpm2-tss = final.callPackage ../pkgs/tpm2-tss { };
-    systemd = final.callPackage ../pkgs/systemd { };
-    dbus-broker = final.callPackage ../pkgs/dbus-broker { };
-
-    rootfs = final.callPackage ../pkgs/rootfs/mkrootfs.nix { inherit version; };
-    initrd = final.callPackage ../pkgs/rootfs/mkinitrd.nix { inherit version; };
-  });
-}
diff --git a/pkgs/busybox/default.nix b/pkgs/busybox/default.nix
index 6f22641..e318d8a 100644
--- a/pkgs/busybox/default.nix
+++ b/pkgs/busybox/default.nix
@@ -1,7 +1,6 @@
 {
   stdenv,
   lib,
-  pkgs,
   buildPackages,
   fetchurl,
   fetchpatch,
@@ -58,12 +57,15 @@ in
 
 stdenv.mkDerivation rec {
   pname = "busybox";
-  version = pkgs.busybox.version;
+  version = "1.36.1";
 
   # Note to whoever is updating busybox: please verify that:
   # nix-build pkgs/stdenv/linux/make-bootstrap-tools.nix -A test
   # still builds after the update.
-  src = pkgs.busybox.src;
+  src = fetchurl {
+    url = "https://busybox.net/downloads/${pname}-${version}.tar.bz2";
+    sha256 = "sha256-uMwkyVdNgJ5yecO+NJeVxdXOtv3xnKcJ+AzeUOR94xQ=";
+  };
 
   hardeningDisable = [
     "format"
diff --git a/pkgs/dbus-broker/default.nix b/pkgs/dbus-broker/default.nix
index 0002d9c..809f3ce 100644
--- a/pkgs/dbus-broker/default.nix
+++ b/pkgs/dbus-broker/default.nix
@@ -100,9 +100,14 @@ in
 
 stdenv.mkDerivation (finalAttrs: {
   pname = "dbus-broker";
-  version = pkgs.dbus-broker.version;
+  version = "36";
 
-  src = pkgs.dbus-broker.src;
+  src = fetchFromGitHub {
+    owner = "bus1";
+    repo = "dbus-broker";
+    rev = "v${finalAttrs.version}";
+    hash = "sha256-5dAMKjybqrHG57vArbtWEPR/svSj2ION75JrjvnnpVM=";
+  };
 
   nativeBuildInputs = with pkgs; [
     docutils
diff --git a/pkgs/image/default.nix b/pkgs/image/default.nix
index 863c795..7407df1 100644
--- a/pkgs/image/default.nix
+++ b/pkgs/image/default.nix
@@ -1,258 +1,286 @@
 {
   lib,
   pkgs,
+  patosPkgs,
   version,
   runCommand,
   updateUrl,
-  microcode ? "",
-  secureBoot ? "false"
 }:
 let
   pname = "patos-image";
-in
-runCommand pname {
-  inherit version microcode updateUrl secureBoot;
 
-  mcode = lib.optionalString (microcode == "amd") "--microcode ${pkgs.microcode-amd}/amd-ucode.img"
-      + lib.optionalString (microcode == "intel") "--microcode ${pkgs.microcode-intel}/intel-ucode.img";
+  writeConf =
+    name: attrs:
+    pkgs.writeTextFile {
+      name = name;
+      text = lib.generators.toINI {
+        mkKeyValue = lib.generators.mkKeyValueDefault {
+          mkValueString =
+            v:
+            if v == true then
+              ''"yes"''
+            else if v == false then
+              ''"no"''
+            else if lib.isString v then
+              ''"${v}"''
+            else
+              lib.generators.mkValueStringDefault { } v;
+        } "=";
+      } attrs;
+    };
 
-  nativeBuildInputs = with pkgs; [
-    erofs-utils
-    dosfstools
-    mtools
-    jq
-  ];
+  secureBootImportKeys = writeConf "secure-boot-import-keys.service" {
+    Unit = {
+      Description = "Import Secure Boot keys";
+      DefaultDependencies = false;
+      RequiresMountsFor = "/var/lib/sbctl /boot";
+      ConditionPathExists = "/boot/sbctl/keys";
+      After = "local-fs.target";
+    };
 
-  env = {
-    # vfat options won't efi won't find the fs otherwise.
-    SYSTEMD_REPART_MKFS_OPTIONS_VFAT = "-S 512 -c";
-    SYSTEMD_REPART_MKFS_OPTIONS_EROFS = "--all-root -zlz4hc,12 -C1048576 -Efragments,dedupe,ztailpacking";
+    Service = {
+      Type = "oneshot";
+      RemainAfterExit = true;
+      ExecStart = "sbctl import-keys -d /boot/sbctl/keys";
+      ExecStartPost = "rm -rf /boot/sbctl";
+    };
   };
 
-  kernelCmdLine = "systemd.journald.forward_to_console=1 console=ttyS0 patos.secureboot=${secureBoot}";
-}
-''
-mkdir -p $out/init.repart.d $out/final.repart.d
-pushd $out
+  ukiTransfer = writeConf "10-uki.transfer" {
+    Source = {
+      Path = updateUrl;
+      MatchPattern = "patos_@v.efi";
+      Type = "url-file";
+    };
 
-mkdir rootfs
-cp -prP ${pkgs.patos.rootfs}/* rootfs/
-find rootfs/ -type d -exec chmod 755 {} \;
+    Target = {
+      InstancesMax = 2;
+      MatchPattern = "patos_@v+@l-@d.efi patos_@v+@l.efi patos_@v.efi";
+      Mode = "0444";
+      Path = "/EFI/Linux";
+      PathRelativeTo = "esp";
+      TriesDone = 0;
+      TriesLeft = 3;
+      Type = "regular-file";
+    };
 
-# package kernel modules as sysext (will reduce the image size a little bit (~3MB))
-mkdir rootfs/etc/extensions
-rm -rf rootfs/usr/lib/modules
-cp ${pkgs.patos.kernel}/patos-kernel-modules* rootfs/etc/extensions/
+    Transfer = {
+      Verify = false;
+    };
+  };
 
-# set default target to multi-user
-ln -sf multi-user.target rootfs/usr/lib/systemd/system/default.target
+  rootVerityTransfer = writeConf "22-root-verity.transfer" {
+    Source = {
+      Type = "url-file";
+      Path = updateUrl;
+      MatchPattern = "patos_@v_@u.verity";
+    };
 
-# enable dbus
-ln -sf ../dbus.service rootfs/usr/lib/systemd/system/multi-user.target.wants/dbus.service
-ln -sf ../dbus.socket rootfs/usr/lib/systemd/system/sockets.target.wants/dbus.socket
+    Target = {
+      Type = "partition";
+      Path = "auto";
+      MatchPattern = "verity-@v";
+      MatchPartitionType = "root-verity";
+      ReadOnly = "1";
+    };
 
-# enable network services
-ln -sf ../systemd-networkd.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-networkd.service
-ln -sf ../systemd-resolved.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-resolved.service
-ln -sf ../systemd-timesyncd.service rootfs/usr/lib/systemd/system/multi-user.target.wants/systemd-timesyncd.service
-# enable default network config
-mv rootfs/usr/lib/systemd/network/89-ethernet.network.example rootfs/usr/lib/systemd/network/89-ethernet.network
+    Transfer = {
+      Verify = false;
+    };
+  };
 
-# enable confext/sysext services
-ln -sf ../systemd-confext.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-confext.service
-ln -sf ../systemd-sysext.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-sysext.service
+  rootTransfer = writeConf "22-root.transfer" {
+    Source = {
+      Type = "url-file";
+      Path = updateUrl;
+      MatchPattern = "patos_@v_@u.root";
+    };
 
-cat <<EOF > rootfs/usr/lib/systemd/system/secure-boot-import-keys.service
-[Unit]
-Description=Import Secure Boot keys
-DefaultDependencies=no
-RequiresMountsFor=/var/lib/sbctl /boot
-ConditionPathExists=/boot/sbctl/keys
-After=local-fs.target
+    Target = {
+      Type = "partition";
+      Path = "auto";
+      MatchPattern = "root-@v";
+      MatchPartitionType = "root";
+      ReadOnly = 1;
+    };
+    Transfer = {
+      Verify = false;
+    };
+  };
+in
+runCommand pname
+  {
+    inherit version;
+    inherit updateUrl;
 
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=sbctl import-keys -d /boot/sbctl/keys
-ExecStartPost=rm -rf /boot/sbctl
-EOF
-ln -sf ../secure-boot-import-keys.service rootfs/usr/lib/systemd/system/sysinit.target.wants/secure-boot-import-keys.service
+    buildInputs = with pkgs; [
+      erofs-utils
+      dosfstools
+      mtools
+      jq
+    ];
 
-# sysupdate
-mkdir -p rootfs/etc/sysupdate.d
-cat <<EOF > rootfs/etc/sysupdate.d/10-uki.transfer
-[Source]
-Path=${updateUrl}
-MatchPattern=patos_@v.efi
-Type=url-file
+    env = {
+      # vfat options won't efi won't find the fs otherwise.
+      SYSTEMD_REPART_MKFS_OPTIONS_VFAT = "-S 512 -c";
+      SYSTEMD_REPART_MKFS_OPTIONS_EROFS = "--all-root -zlz4hc,12 -C1048576 -Efragments,dedupe,ztailpacking";
+    };
 
-[Target]
-InstancesMax=2
-MatchPattern=patos_@v+@l-@d.efi patos_@v+@l.efi patos_@v.efi
-Mode=0444
-Path=/EFI/Linux
-PathRelativeTo=esp
-TriesDone=0
-TriesLeft=3
-Type=regular-file
+    kernelCmdLine = "console=ttyS0 patos.secureboot=false";
+  }
+  ''
+    mkdir -p $out/init.repart.d $out/final.repart.d
+    pushd $out
 
-[Transfer]
-Verify=no
-EOF
+    mkdir rootfs
+    cp -prP ${patosPkgs.rootfs}/* rootfs/
+    find rootfs/ -type d -exec chmod 755 {} \;
 
-cat <<EOF > rootfs/etc/sysupdate.d/20-root-verity.transfer
-[Source]
-Type=url-file
-Path=${updateUrl}
-MatchPattern=patos_@v_@u.verity
+    # package kernel modules as sysext (will reduce the image size a little bit (~3MB))
+    mkdir rootfs/etc/extensions
+    rm -rf rootfs/usr/lib/modules
+    cp ${patosPkgs.kernel}/patos-kernel-modules* rootfs/etc/extensions/
 
-[Target]
-Type=partition
-Path=auto
-MatchPattern=verity-@v
-MatchPartitionType=root-verity
-ReadOnly=1
+    # set default target to multi-user
+    ln -sf multi-user.target rootfs/usr/lib/systemd/system/default.target
 
-[Transfer]
-Verify=no
-EOF
+    # enable dbus
+    ln -sf ../dbus.service rootfs/usr/lib/systemd/system/multi-user.target.wants/dbus.service
+    ln -sf ../dbus.socket rootfs/usr/lib/systemd/system/sockets.target.wants/dbus.socket
 
-cat <<EOF > rootfs/etc/sysupdate.d/22-root.transfer
-[Source]
-Type=url-file
-Path=${updateUrl}
-MatchPattern=patos_@v_@u.root
+    # enable network services
+    ln -sf ../systemd-networkd.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-networkd.service
+    ln -sf ../systemd-resolved.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-resolved.service
+    ln -sf ../systemd-timesyncd.service rootfs/usr/lib/systemd/system/multi-user.target.wants/systemd-timesyncd.service
+    # enable default network config
+    mv rootfs/usr/lib/systemd/network/89-ethernet.network.example rootfs/usr/lib/systemd/network/89-ethernet.network
 
-[Target]
-Type=partition
-Path=auto
-MatchPattern=root-@v
-MatchPartitionType=root
-ReadOnly=1
+    # enable confext/sysext services
+    ln -sf ../systemd-confext.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-confext.service
+    ln -sf ../systemd-sysext.service rootfs/usr/lib/systemd/system/sysinit.target.wants/systemd-sysext.service
 
-[Transfer]
-Verify=no
-EOF
+    cp ${secureBootImportKeys} rootfs/usr/lib/systemd/system/secure-boot-import-keys.service
+    ln -sf ../secure-boot-import-keys.service rootfs/usr/lib/systemd/system/sysinit.target.wants/secure-boot-import-keys.service
 
-# Initial partitioning
-cat <<EOF > init.repart.d/10-root.conf
-[Partition]
-Type=root
-Format=erofs
-Minimize=best
-AddValidateFS=false
-CopyFiles=/rootfs:/
-Verity=data
-VerityMatchKey=root
-SplitName=root
-EOF
+    # sysupdate
+    mkdir -p rootfs/etc/sysupdate.d
+    cp ${rootTransfer} ${rootVerityTransfer} ${ukiTransfer} rootfs/etc/sysupdate.d/
 
-cat <<EOF > init.repart.d/20-root-verity.conf
-[Partition]
-Type=root-verity
-Verity=hash
-VerityMatchKey=root
-AddValidateFS=false
-Minimize=best
-SplitName=verity
-EOF
+    # Initial partitioning
+    cat <<EOF > init.repart.d/10-root.conf
+    [Partition]
+    Type=root
+    Format=erofs
+    Minimize=best
+    CopyFiles=/rootfs:/
+    Verity=data
+    VerityMatchKey=root
+    SplitName=root
+    EOF
 
-#TODO: Add verity signature partition
+    cat <<EOF > init.repart.d/20-root-verity.conf
+    [Partition]
+    Type=root-verity
+    Verity=hash
+    VerityMatchKey=root
+    Minimize=best
+    SplitName=verity
+    EOF
 
-${pkgs.patos.systemd}/usr/bin/systemd-repart \
-  --no-pager \
-  --empty=create \
-  --size=auto \
-  --definitions=$out/init.repart.d \
-  --split=true \
-  --json=pretty \
-  --root=$out \
-  patos_$version.raw > init-repart-output.json
+    #TODO: Add verity signature partition
 
-rm -f patos_$version.raw
+    ${patosPkgs.systemd}/usr/bin/systemd-repart \
+      --no-pager \
+      --empty=create \
+      --size=auto \
+      --definitions=./init.repart.d \
+      --split=true \
+      --json=pretty \
+      --root=$out \
+      patos_$version.raw > init-repart-output.json && rm -f patos_$version.raw
 
-roothash=$(jq -r '.[0].roothash' init-repart-output.json)
-rootPart=$(jq -r '.[0].split_path' init-repart-output.json)
-rootUuid=$(jq -r '.[0].uuid' init-repart-output.json)
+    roothash=$(jq -r '.[0].roothash' init-repart-output.json)
+    rootPart=$(jq -r '.[0].split_path' init-repart-output.json)
+    rootUuid=$(jq -r '.[0].uuid' init-repart-output.json)
 
-verityPart=$(jq -r '.[1].split_path' init-repart-output.json)
-verityUuid=$(jq -r '.[1].uuid' init-repart-output.json)
+    verityPart=$(jq -r '.[1].split_path' init-repart-output.json)
+    verityUuid=$(jq -r '.[1].uuid' init-repart-output.json)
 
-ln -sf patos_$version.verity.raw patos_${version}_$verityUuid.verity
-ln -sf patos_$version.root.raw patos_${version}_$rootUuid.root
+    ln -sf patos_$version.verity.raw patos_${version}_$verityUuid.verity
+    ln -sf patos_$version.root.raw patos_${version}_$rootUuid.root
 
-${pkgs.patos.systemd}/usr/bin/ukify build \
-  --linux ${pkgs.patos.kernel}/bzImage \
-  --initrd ${pkgs.patos.initrd}/initrd.xz \
-  $mcode \
-  --os-release @rootfs/etc/os-release \
-  --cmdline "$kernelCmdLine roothash=$roothash" \
-  -o patos_${version}.efi
+    ${patosPkgs.systemd}/usr/bin/ukify build \
+      --linux ${patosPkgs.kernel}/bzImage \
+      --initrd ${patosPkgs.initrd}/initrd.xz \
+      --os-release @rootfs/etc/os-release \
+      --cmdline "$kernelCmdLine roothash=$roothash" \
+      -o patos_${version}.efi
 
-# install ESP
-SYSTEMD_RELAX_ESP_CHECKS=1 ${pkgs.patos.systemd}/usr/bin/bootctl install --root ./rootfs --esp-path /boot
+    # install ESP
+    SYSTEMD_RELAX_ESP_CHECKS=1 ${patosPkgs.systemd}/usr/bin/bootctl install --root ./rootfs --esp-path /boot
 
-# setup factory reset
-mkdir -p rootfs/boot/EFI/tools
-cp ${pkgs.edk2-uefi-shell}/shell.efi rootfs/boot/EFI/tools/
+    # setup factory reset
+    mkdir -p rootfs/boot/EFI/tools
+    cp ${pkgs.edk2-uefi-shell}/shell.efi rootfs/boot/EFI/tools/
 
-cat <<EOF > rootfs/boot/EFI/tools/factoryreset.nsh
-setvar FactoryReset -guid 8cf2644b-4b0b-428f-9387-6d876050dc67 -nv -rt =%1
-reset
-EOF
+    cat <<EOF > rootfs/boot/EFI/tools/factoryreset.nsh
+    setvar FactoryReset -guid 8cf2644b-4b0b-428f-9387-6d876050dc67 -nv -rt =%1
+    reset
+    EOF
 
-cat <<EOF > rootfs/boot/loader/entries/factoryreset.conf
-title Enable Factory Reset
-options -nostartup -nomap
-options \EFI\tools\factoryreset.nsh L"t"
-efi EFI/tools/shell.efi
-EOF
+    cat <<EOF > rootfs/boot/loader/entries/factoryreset.conf
+    title Enable Factory Reset
+    options -nostartup -nomap
+    options \EFI\tools\factoryreset.nsh L"t"
+    efi EFI/tools/shell.efi
+    EOF
 
-echo "timeout 2" > rootfs/boot/loader/loader.conf
+    echo "timeout 2" > rootfs/boot/loader/loader.conf
 
-# install UKI
-cp patos_${version}.efi rootfs/boot/EFI/Linux
+    # install UKI
+    cp patos_${version}.efi rootfs/boot/EFI/Linux
 
-# Final partitioning
-cat <<EOF > final.repart.d/10-esp.conf
-[Partition]
-Type=esp
-Format=vfat
-SizeMinBytes=128M
-SizeMaxBytes=128M
-CopyFiles=$out/rootfs/boot:/
-EOF
+    # Final partitioning
+    cat <<EOF > final.repart.d/10-esp.conf
+    [Partition]
+    Type=esp
+    Format=vfat
+    SizeMinBytes=128M
+    SizeMaxBytes=128M
+    CopyFiles=/rootfs/boot:/
+    EOF
 
-cat <<EOF > final.repart.d/20-root.conf
-[Partition]
-Type=root
-Label=root-${version}
-CopyBlocks=$out/$rootPart
-UUID=$rootUuid
-SizeMinBytes=64M
-SizeMaxBytes=64M
-ReadOnly=1
-EOF
+    cat <<EOF > final.repart.d/20-root.conf
+    [Partition]
+    Type=root
+    Label=root-${version}
+    CopyBlocks=/$rootPart
+    UUID=$rootUuid
+    SizeMinBytes=64M
+    SizeMaxBytes=64M
+    ReadOnly=1
+    EOF
 
-cat <<EOF > final.repart.d/22-root-verity.conf
-[Partition]
-Type=root-verity
-Label=verity-${version}
-CopyBlocks=$out/$verityPart
-UUID=$verityUuid
-ReadOnly=1
-EOF
+    cat <<EOF > final.repart.d/22-root-verity.conf
+    [Partition]
+    Type=root-verity
+    Label=verity-${version}
+    CopyBlocks=/$verityPart
+    UUID=$verityUuid
+    ReadOnly=1
+    EOF
 
-# finalize image ready for boot
-${pkgs.patos.systemd}/usr/bin/systemd-repart \
-  --no-pager \
-  --empty=create \
-  --size=auto \
-  --definitions=./final.repart.d \
-  patos_${version}.img > final-repart-output.json
+    # finalize image ready for boot
+    ${patosPkgs.systemd}/usr/bin/systemd-repart \
+      --no-pager \
+      --empty=create \
+      --size=auto \
+      --definitions=./final.repart.d \
+      --root=$out \
+      patos_${version}.img > final-repart-output.json
 
-rm -rf rootfs init.repart.d final.repart.d *.json
-sha256sum *.root *.verity *.efi *.tar.xz > SHA256SUMS
+    rm -rf rootfs init.repart.d final.repart.d *.json
+    sha256sum *.root *.verity *.efi *.tar.xz > SHA256SUMS
 
-popd
-''
+    popd
+  ''
diff --git a/pkgs/kernel/default.nix b/pkgs/kernel/default.nix
index 2a86881..a5f24db 100644
--- a/pkgs/kernel/default.nix
+++ b/pkgs/kernel/default.nix
@@ -1,7 +1,7 @@
 { pkgs }:
 let
-  version = "6.15.2";
-  hash = "sha256-NFjNamxQjhYdvFQG5yuZ1dvfkp+vcEpn25ukbQdRSFg=";
+  version = "6.13.7";
+  hash = "sha256-Ojm2IDi3rC9D0mofhLQoPhl4BOHoF61jfpo9h0xHgB0=";
 in
 (pkgs.callPackage ./manual-config.nix { }) {
   version = "${version}-patos1";
diff --git a/pkgs/kexec-tools/default.nix b/pkgs/kexec-tools/default.nix
index b83a6a6..4ba15ba 100644
--- a/pkgs/kexec-tools/default.nix
+++ b/pkgs/kexec-tools/default.nix
@@ -4,7 +4,6 @@
   buildPackages,
   fetchFromGitHub,
   autoconf,
-  autoreconfHook,
   zlib,
 }:
 
@@ -15,8 +14,8 @@ stdenv.mkDerivation {
   src = fetchFromGitHub {
     owner = "horms";
     repo = "kexec-tools";
-    rev = "v2.0.31";
-    hash = "sha256-Tgmc8mFlmzzRj7tEaBes7Udw4fRl6cSfe76iPNa3Ffs=";
+    rev = "a7fcd424c4c80dea5a2fd5ffa274ffeb8129c790";
+    hash = "sha256-QKE+KCkueA21zNunTMidP9OuZaw0IG5tFDF4UJITTTQ=";
   };
 
   dontPatchShebangs = true;
@@ -28,27 +27,20 @@ stdenv.mkDerivation {
     "pie"
   ];
 
-  preAutoreconf = "./bootstrap";
-
-  configurePlatforms = [
-    "build"
-    "host"
-  ];
-
-  configureFlags = [ "BUILD_CC=${buildPackages.stdenv.cc.targetPrefix}cc" "--prefix=/"];
-  depsBuildBuild = [ buildPackages.stdenv.cc ];
-
-  installPhase = ''
-      make DESTDIR=$out install
+  buildCommand = ''
+    unpackPhase
+    mkdir -p $out
+    cd source
+    ./bootstrap
+    ./configure --prefix=/
+    make DESTDIR=$out install
   '';
 
-  nativeBuildInputs = [
-    autoconf
-    autoreconfHook
-  ];
+  depsBuildBuild = [ buildPackages.stdenv.cc ];
 
   buildInputs = [
     zlib
+    autoconf
   ];
 
   enableParallelBuilding = true;
diff --git a/pkgs/lvm2/default.nix b/pkgs/lvm2/default.nix
index 8d18663..f211e26 100644
--- a/pkgs/lvm2/default.nix
+++ b/pkgs/lvm2/default.nix
@@ -1,6 +1,5 @@
 {
   stdenv,
-  pkgs,
   fetchurl,
   lib,
   pkg-config,
@@ -8,11 +7,17 @@
   udev,
 }:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "lvm2";
-  version = pkgs.lvm2.version;
+  version = "2.03.30";
 
-  src = pkgs.lvm2.src;
+  src = fetchurl {
+    urls = [
+      "https://mirrors.kernel.org/sourceware/lvm2/LVM2.${version}.tgz"
+      "ftp://sourceware.org/pub/lvm2/LVM2.${version}.tgz"
+    ];
+    hash = "sha256-rXar7LjciHcz4GxEnLmt0Eo1BvnweAwSiBem4aF87AU=";
+  };
 
   nativeBuildInputs = [
     pkg-config
diff --git a/pkgs/openssl/default.nix b/pkgs/openssl/default.nix
index 08c1309..bc833cc 100644
--- a/pkgs/openssl/default.nix
+++ b/pkgs/openssl/default.nix
@@ -1,6 +1,5 @@
 {
   lib,
-  pkgs,
   stdenv,
   fetchurl,
   perl,
@@ -19,9 +18,13 @@
 
 stdenv.mkDerivation rec {
     pname = "openssl";
-    version = pkgs.openssl.version;
+    version = "3.4.1";
+    hash = "sha256-ACotazC1i/S+pGxDvdljZar42qbEKHgqpP7uBtoZffM=";
 
-    src = pkgs.openssl.src;
+    src = fetchurl {
+      url = "https://github.com/openssl/openssl/releases/download/openssl-${version}/openssl-${version}.tar.gz";
+      hash = hash;
+    };
 
     outputs = [ "out" ];
 
diff --git a/pkgs/rootfs/mkinitrd.nix b/pkgs/rootfs/mkinitrd.nix
index 0691e7b..c46ed9d 100644
--- a/pkgs/rootfs/mkinitrd.nix
+++ b/pkgs/rootfs/mkinitrd.nix
@@ -1,5 +1,6 @@
 {
   pkgs,
+  patosPkgs,
   runCommand,
   ...
 }:
@@ -9,7 +10,7 @@ in
 runCommand "patos-initrd" {
   inherit secureBootEnroll;
 
-  nativeBuildInputs = with pkgs; [
+  buildInputs = with pkgs; [
     cpio
     xz
   ];
@@ -20,7 +21,7 @@ mkdir -p $out/root
 pushd $out/root
 
 ### copy rootfs
-cp -prP ${pkgs.patos.rootfs}/* .
+cp -prP ${patosPkgs.rootfs}/* .
 find . -type d -exec chmod 755 {} \;
 mkdir sysroot
 
diff --git a/pkgs/rootfs/mkrootfs.nix b/pkgs/rootfs/mkrootfs.nix
index ed34662..235a70a 100644
--- a/pkgs/rootfs/mkrootfs.nix
+++ b/pkgs/rootfs/mkrootfs.nix
@@ -1,5 +1,6 @@
 {
   pkgs,
+  patosPkgs,
   version,
   runCommand,
 }:
@@ -11,9 +12,7 @@ runCommand "patos-rootfs"
 {
   inherit version;
 
-  nativeBuildInputs = with pkgs; [
-    stdenv.cc
-    patchelf
+  buildInputs = with pkgs;[
     glibc
     binutils
   ];
@@ -22,20 +21,20 @@ runCommand "patos-rootfs"
 ''
 ### create directory structure
 mkdir -p $out/etc/repart.d $out/dev $out/proc $out/sys \
-  $out/tmp $out/root $out/run $out/boot $out/mnt $out/home $out/srv $out/var
+  $out/tmp $out/root $out/run $out/boot $out/mnt $out/home $out/srv $out/var/tmp
 ln -sf /usr/bin $out/bin
 ln -sf /usr/bin $out/sbin
 ln -sf /usr/lib $out/lib
 ln -sf /usr/lib $out/lib64
-ln -sf /tmp $out/var/tmp
 ln -sf ../proc/self/mounts $out/etc/mtab
 
 ### install systemd
-cp -Pr ${pkgs.patos.systemd}/* $out/
+cp -Pr ${patosPkgs.systemd}/* $out/
 find $out -type d -exec chmod 755 {} \;
 rm -rf $out/usr/include
 rm -rf $out/usr/sbin
 ln -sf /usr/bin $out/usr/sbin
+rm -f $out/usr/lib/systemd/system/sysinit.target.wants/systemd-firstboot.service
 # enable in ramdisk instead
 rm -f $out/usr/lib/systemd/system/sysinit.target.wants/systemd-repart.service
 rm -f $out/usr/lib/systemd/system/initrd-root-fs.target.wants/systemd-repart.service
@@ -136,33 +135,33 @@ ManagerEnvironment=PATH=/bin:/sbin:/usr/bin SYSTEMD_CRYPTTAB=/run/crypttab SYSTE
 EOF
 
 ### install PatOS glibc
-cp -P ${pkgs.patos.glibc}/lib/*.so* $out/usr/lib/
+cp -P ${patosPkgs.glibc}/lib/*.so* $out/usr/lib/
 
 ### install openssl
-cp -P ${pkgs.patos.openssl}/lib/*.so* $out/usr/lib/
-cp -Pr ${pkgs.patos.openssl}/etc/ssl $out/etc/
+cp -P ${patosPkgs.openssl}/lib/*.so* $out/usr/lib/
+cp -Pr ${patosPkgs.openssl}/etc/ssl $out/etc/
 
 ### install busybox
-cp ${pkgs.patos.busybox}/bin/busybox $out/usr/bin/
+cp ${patosPkgs.busybox}/bin/busybox $out/usr/bin/
 $out/usr/bin/busybox --list | xargs -I {} ln -sf busybox $out/usr/bin/{}
 
 ### install dbus broker
-cp -r ${pkgs.patos.dbus-broker}/* $out/
+cp -r ${patosPkgs.dbus-broker}/* $out/
 
 ### install kexec
-cp -Pr ${pkgs.patos.kexec}/sbin/kexec $out/usr/bin/
+cp -Pr ${patosPkgs.kexec}/sbin/kexec $out/usr/bin/
 
 ### install dmsetup udev rules
-cp -P ${pkgs.patos.lvm2}/usr/bin/dmsetup $out/usr/bin/
-cp -P ${pkgs.patos.lvm2}/lib/libdevmapper.so* $out/usr/lib/
-cp -P ${pkgs.patos.lvm2}/lib/udev/rules.d/* $out/usr/lib/udev/rules.d/
+cp -P ${patosPkgs.lvm2}/usr/bin/dmsetup $out/usr/bin/
+cp -P ${patosPkgs.lvm2}/lib/libdevmapper.so* $out/usr/lib/
+cp -P ${patosPkgs.lvm2}/lib/udev/rules.d/* $out/usr/lib/udev/rules.d/
 
 ### install btrfs progs
 cp -Pr ${pkgs.btrfs-progs}/bin/* $out/usr/bin/
 cp -Pr ${pkgs.btrfs-progs}/lib/* $out/usr/lib/
 
 ### install tpm2 libs
-cp -P ${pkgs.patos.tpm2-tss}/lib/*.so* $out/usr/lib/
+cp -P ${patosPkgs.tpm2-tss}/lib/*.so* $out/usr/lib/
 
 ### install lib kmod
 cp -P ${pkgs.kmod.lib}/lib/*.so* $out/usr/lib/
@@ -193,22 +192,20 @@ ln -sf ../cert.pem $out/etc/ssl/certs/ca-bundle.crt
 rm -rf $out/usr/lib/pkgconfig
 
 # setup default files
-${pkgs.patos.systemd}/usr/bin/systemd-hwdb --root=$out --usr update
-${pkgs.patos.systemd}/usr/bin/systemd-tmpfiles --root=$out $out/usr/lib/tmpfiles.d/etc.conf --create
+${patosPkgs.systemd}/usr/bin/systemd-hwdb --root=$out --usr update
+${patosPkgs.systemd}/usr/bin/systemd-tmpfiles --root=$out $out/usr/lib/tmpfiles.d/etc.conf --create
 cp $out/usr/share/factory/etc/nsswitch.conf $out/etc/
 cp $out/usr/share/factory/etc/locale.conf $out/etc/
 cp $out/usr/share/factory/etc/vconsole.conf $out/etc/
 # install sys users
 mkdir creds
 echo -n ${defaultPassword} > creds/passwd.plaintext-password.root
-CREDENTIALS_DIRECTORY=$PWD/creds SYSTEMD_CRYPT_PREFIX='$6$' ${pkgs.patos.systemd}/usr/bin/systemd-sysusers --root=$out rootfs/usr/lib/sysusers.d/*.conf
+CREDENTIALS_DIRECTORY=$PWD/creds SYSTEMD_CRYPT_PREFIX='$6$' ${patosPkgs.systemd}/usr/bin/systemd-sysusers --root=$out rootfs/usr/lib/sysusers.d/*.conf
 chmod 600 $out/etc/shadow
 rm -rf creds
 
 # Ephemeral machine-id until registration
-# ln -sf /run/machine-id $out/etc/machine-id
-# FIXME: above line does not work in systemd > 257
-${pkgs.patos.systemd}/usr/bin/systemd-machine-id-setup --root=$out
+ln -sf /run/machine-id $out/etc/machine-id
 
 ### Find and install all shared libs
 find $out -type f -executable -exec ldd {} \; | awk '{print $3}' | \
@@ -218,17 +215,15 @@ find $out -type f -executable -exec ldd {} \; | awk '{print $3}' | \
 find $out -type f -executable -exec chmod 755 {} \;
 
 # patch ELFs
-interpreter=$(patchelf --print-interpreter $out/usr/bin/busybox)
-ldLinux=$(basename $interpreter)
 find $out -type f -executable -exec patchelf --set-rpath /lib:/usr/lib:/usr/lib/systemd:/usr/lib/cryptsetup {} \;
-find $out -type f -executable -exec patchelf --set-interpreter /lib/$ldLinux {} \;
-patchelf --remove-rpath $out/usr/lib/$ldLinux
+find $out -type f -executable -exec patchelf --set-interpreter /lib/ld-linux-x86-64.so.2 {} \;
+patchelf --remove-rpath $out/usr/lib/ld-linux-x86-64.so.2
 
 # strip binaries
-find $out -type f -executable -exec $STRIP {} \;
+find $out -type f -executable -exec strip {} \;
 find $out -type d -exec chmod 755 {} \;
 
 # install kernel modules
-cp -r ${pkgs.patos.kernel}/lib/modules $out/usr/lib/
+cp -r ${patosPkgs.kernel}/lib/modules $out/usr/lib/
 find $out/usr/lib/modules -type d -exec chmod 755 {} \;
 ''
diff --git a/pkgs/systemd/default.nix b/pkgs/systemd/default.nix
index dfe506c..a1cb314 100644
--- a/pkgs/systemd/default.nix
+++ b/pkgs/systemd/default.nix
@@ -7,7 +7,7 @@
   ...
 }:
 let
-  version = "devel";
+  version = "257.4";
 
   # Use the command below to update `releaseTimestamp` on every (major) version
   # change. More details in the commentary at mesonFlags.
@@ -26,8 +26,8 @@ stdenv.mkDerivation (finalAttrs: {
   src = fetchFromGitHub {
     owner = "systemd";
     repo = "systemd";
-    rev = "959d7f1759d67994e3bed7b9d2f23e063475a872"; # main
-    hash = "sha256-IxGg0t/0GEllU4EPHqY2bwMDYwrQ5KWyE2QhwhTxqGs=";
+    rev = "v${version}";
+    hash = "sha256-6rxJUYRq785U6aik5VhQRqG+Ss67lBB6T3eQF+tkyhk=";
   };
 
   patches = [ ./skip-verify-esp.patch ];
@@ -137,10 +137,6 @@ stdenv.mkDerivation (finalAttrs: {
     ''
       substituteInPlace meson.build \
         --replace "find_program('clang'" "find_program('${stdenv.cc.targetPrefix}clang'"
-    '' +
-    ''
-      substituteInPlace src/test/meson.build \
-        --replace "test_env.set('SYSTEMD_LANGUAGE_FALLBACK_MAP', language_fallback_map)" ""
     ''
     + ''
       substituteInPlace src/ukify/ukify.py \
diff --git a/pkgs/tpm2-tools/default.nix b/pkgs/tpm2-tools/default.nix
index 4bb14c1..f447fe6 100644
--- a/pkgs/tpm2-tools/default.nix
+++ b/pkgs/tpm2-tools/default.nix
@@ -1,6 +1,5 @@
 {
   stdenv,
-  pkgs,
   fetchurl,
   lib,
   pandoc,
@@ -11,17 +10,19 @@
   libuuid,
 }:
 
-stdenv.mkDerivation {
+stdenv.mkDerivation rec {
   pname = "tpm2-tools";
-  version = pkgs.tpm2-tools.version;
+  version = "5.7";
 
-  src = pkgs.tpm2-tools.src;
+  src = fetchurl {
+    url = "https://github.com/tpm2-software/${pname}/releases/download/${version}/${pname}-${version}.tar.gz";
+    sha256 = "sha256-OBDTa1B5JW9PL3zlUuIiE9Q7EDHBMVON+KLbw8VwmDo=";
+  };
 
   nativeBuildInputs = [
     pandoc
     pkg-config
   ];
-
   buildInputs = [
     curl
     openssl
diff --git a/pkgs/tpm2-tss/default.nix b/pkgs/tpm2-tss/default.nix
index 5a6477a..5e23100 100644
--- a/pkgs/tpm2-tss/default.nix
+++ b/pkgs/tpm2-tss/default.nix
@@ -1,6 +1,5 @@
 {
   stdenv,
-  pkgs,
   lib,
   fetchFromGitHub,
   autoreconfHook,
@@ -20,9 +19,14 @@
 
 stdenv.mkDerivation rec {
   pname = "tpm2-tss";
-  version = pkgs.tpm2-tss.version;
+  version = "4.1.3";
 
-  src = pkgs.tpm2-tss.src;
+  src = fetchFromGitHub {
+    owner = "tpm2-software";
+    repo = pname;
+    rev = version;
+    hash = "sha256-BP28utEUI9g1VNv3lCXuiKrDtEImFQxxZfIjLiE3Wr8=";
+  };
 
   patches = [
     ./no-shadow.patch
diff --git a/utils/qemu-aarch64-uefi-tpm.nix b/utils/qemu-aarch64-uefi-tpm.nix
deleted file mode 100644
index 87c9d69..0000000
--- a/utils/qemu-aarch64-uefi-tpm.nix
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-  pkgs,
-  ...
-}:
-pkgs.writeShellApplication {
-  name = "qemu-aarch64-uefi-tpm";
-
-  runtimeInputs = with pkgs; [
-    qemu
-    swtpm
-  ];
-
-  text =
-    let
-      tpmOVMF = pkgs.OVMF.override {
-        tpmSupport = true;
-        secureBoot = true;
-      };
-    in
-    ''
-      set -ex
-      state="/tmp/patos-qemu-$USER"
-      rm -rf "$state"
-      mkdir -m 700 "$state"
-      qemu-img create -f qcow2 -F raw -b "$(readlink -e "$1")" "$state/disk.qcow2" 2G
-
-      OVMF_FD=$(nix-build '<nixpkgs>' --no-out-link -A OVMF.fd --system aarch64-linux)
-      cp "$OVMF_FD/AAVMF/vars-template-pflash.raw" "$state/vars-pflash.raw"
-      chmod u+w "$state/vars-pflash.raw"
-
-      # swtpm socket -d --tpmstate dir="$state" \
-      #   --ctrl type=unixio,path="$state/swtpm-sock" \
-      #   --tpm2 \
-      #   --log file="$state/swtpm.log",level=20
-
-      qemu-system-aarch64 \
-        -machine virt,gic-version=max \
-        -cpu max \
-        -smp 8 \
-        -m 4G \
-        -display none \
-        -serial stdio \
-        -drive "if=pflash,format=raw,unit=0,readonly=on,file=$OVMF_FD/AAVMF/QEMU_EFI-pflash.raw" \
-        -drive "if=pflash,format=raw,unit=1,file=$state/vars-pflash.raw" \
-        -device virtio-scsi-pci \
-        -device virtio-gpu-pci \
-        -device virtio-net-pci,netdev=wan \
-        -netdev user,id=wan \
-        -device virtio-rng-pci,rng=rng0 \
-        -object rng-random,filename=/dev/urandom,id=rng0 \
-        -device virtio-serial-pci \
-        -drive "format=qcow2,file=$state/disk.qcow2"
-    '';
-}