From a8692f85463ce5855bbb63e4596b776edef4fd6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lars=20Sj=C3=B6strom?= <lars@radicore.se>
Date: Mon, 17 Feb 2025 15:15:24 +0100
Subject: [PATCH] silly uki image with the systemd-ukify tooling

---
 flake.nix           | 20 +++++++++++++++++++-
 systemd/default.nix |  2 +-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/flake.nix b/flake.nix
index 6a4e60f..195b76f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -21,10 +21,28 @@
         packages = {
           default = self.packages.${system}.image;
           image = pkgs.writeShellScriptBin "image" ''
-            echo "make image here..."
+            echo "make UKI..."
+            ${self.packages.${system}.systemd.out}/bin/ukify build \
+            --linux ${self.packages.${system}.kernel.kernel}/bzImage \
+            --initrd ./out/initrd.gz \
+            --cmdline "console=ttyS0" \
+            -o patos.uki
           '';
 
           kernel = pkgs.callPackage ./kernel { };
+          initrd = pkgs.writeShellScriptBin "mkinitrd" ''
+            echo "make initrd..."
+            mkdir -p out/lib
+            # copy systemd
+            cp -r ${self.packages.${system}.systemd.out}/* out/
+
+            # get shared libs
+            pushd out
+            find . -type f -executable | xargs ldd | awk '{print $3}' | grep -v systemd | sort -u | xargs cp -t lib
+
+            # gen initrd
+            find . -print0 | ${pkgs.lib.getExe pkgs.cpio} --null --owner=root:root -o --format=newc | ${pkgs.lib.getExe pkgs.gzip} -9 > initrd.gz
+          '';
           systemd = pkgs.callPackage ./systemd { };
         };
 
diff --git a/systemd/default.nix b/systemd/default.nix
index 99e4684..05aeba4 100644
--- a/systemd/default.nix
+++ b/systemd/default.nix
@@ -150,7 +150,7 @@ stdenv.mkDerivation (finalAttrs: {
         "'${targetPackages.stdenv.cc.bintools.targetPrefix}readelf'" \
         --replace \
         "/usr/lib/systemd/boot/efi" \
-        "$out/lib/systemd/boot/efi"
+        "$out/usr/lib/systemd/boot/efi"
     ''
     # Finally, patch shebangs in scripts used at build time. This must not patch
     # scripts that will end up in the output, to avoid build platform references