diff --git a/pkgs/image/default.nix b/pkgs/image/default.nix
index 05d9c72..86c3708 100644
--- a/pkgs/image/default.nix
+++ b/pkgs/image/default.nix
@@ -30,7 +30,7 @@ runCommand pname {
     SYSTEMD_REPART_MKFS_OPTIONS_EROFS = "--all-root -zlz4hc,12 -C1048576 -Efragments,dedupe,ztailpacking";
   };
 
-  kernelCmdLine = "console=ttyS0 patos.secureboot=${secureBoot}";
+  kernelCmdLine = "systemd.journald.forward_to_console=1 console=ttyS0 patos.secureboot=${secureBoot}";
 }
 ''
 mkdir -p $out/init.repart.d $out/final.repart.d
@@ -141,6 +141,7 @@ cat <<EOF > init.repart.d/10-root.conf
 Type=root
 Format=erofs
 Minimize=best
+AddValidateFS=false
 CopyFiles=/rootfs:/
 Verity=data
 VerityMatchKey=root
@@ -152,6 +153,7 @@ cat <<EOF > init.repart.d/20-root-verity.conf
 Type=root-verity
 Verity=hash
 VerityMatchKey=root
+AddValidateFS=false
 Minimize=best
 SplitName=verity
 EOF
@@ -162,11 +164,13 @@ ${patosPkgs.systemd}/usr/bin/systemd-repart \
   --no-pager \
   --empty=create \
   --size=auto \
-  --definitions=./init.repart.d \
+  --definitions=$out/init.repart.d \
   --split=true \
   --json=pretty \
   --root=$out \
-  patos_$version.raw > init-repart-output.json && rm -f patos_$version.raw
+  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)
@@ -217,14 +221,14 @@ Type=esp
 Format=vfat
 SizeMinBytes=128M
 SizeMaxBytes=128M
-CopyFiles=/rootfs/boot:/
+CopyFiles=$out/rootfs/boot:/
 EOF
 
 cat <<EOF > final.repart.d/20-root.conf
 [Partition]
 Type=root
 Label=root-${version}
-CopyBlocks=/$rootPart
+CopyBlocks=$out/$rootPart
 UUID=$rootUuid
 SizeMinBytes=64M
 SizeMaxBytes=64M
@@ -235,7 +239,7 @@ cat <<EOF > final.repart.d/22-root-verity.conf
 [Partition]
 Type=root-verity
 Label=verity-${version}
-CopyBlocks=/$verityPart
+CopyBlocks=$out/$verityPart
 UUID=$verityUuid
 ReadOnly=1
 EOF
@@ -246,7 +250,6 @@ ${patosPkgs.systemd}/usr/bin/systemd-repart \
   --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
diff --git a/pkgs/rootfs/mkrootfs.nix b/pkgs/rootfs/mkrootfs.nix
index bda4c7d..bdc0ba1 100644
--- a/pkgs/rootfs/mkrootfs.nix
+++ b/pkgs/rootfs/mkrootfs.nix
@@ -35,7 +35,6 @@ 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
@@ -206,7 +205,9 @@ chmod 600 $out/etc/shadow
 rm -rf creds
 
 # Ephemeral machine-id until registration
-ln -sf /run/machine-id $out/etc/machine-id
+# ln -sf /run/machine-id $out/etc/machine-id
+# FIXME: above line does not work in systemd > 257
+${patosPkgs.systemd}/usr/bin/systemd-machine-id-setup --root=$out
 
 ### Find and install all shared libs
 find $out -type f -executable -exec ldd {} \; | awk '{print $3}' | \
diff --git a/pkgs/systemd/default.nix b/pkgs/systemd/default.nix
index fea417a..dfe506c 100644
--- a/pkgs/systemd/default.nix
+++ b/pkgs/systemd/default.nix
@@ -7,7 +7,7 @@
   ...
 }:
 let
-  version = "257.6";
+  version = "devel";
 
   # 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 = "v${version}";
-    hash = "sha256-mn/JB/nrOz2TOobu2d+XBH2dVH3vn/HPvWN4Zz6s+SM=";
+    rev = "959d7f1759d67994e3bed7b9d2f23e063475a872"; # main
+    hash = "sha256-IxGg0t/0GEllU4EPHqY2bwMDYwrQ5KWyE2QhwhTxqGs=";
   };
 
   patches = [ ./skip-verify-esp.patch ];
@@ -137,6 +137,10 @@ 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 \