diff --git a/modules/outputs.nix b/modules/outputs.nix
index da5cdac8..6da7daaa 100644
--- a/modules/outputs.nix
+++ b/modules/outputs.nix
@@ -14,6 +14,7 @@ in
     ./outputs/squashfs.nix
     ./outputs/vmroot.nix
     ./outputs/boot-extlinux.nix
+    ./outputs/boot-fit.nix
     ./outputs/uimage.nix
     ./outputs/updater
   ];
diff --git a/modules/outputs/boot-fit.nix b/modules/outputs/boot-fit.nix
new file mode 100644
index 00000000..cf998ba3
--- /dev/null
+++ b/modules/outputs/boot-fit.nix
@@ -0,0 +1,27 @@
+{
+  config
+, pkgs
+, lib
+, ...
+}:
+let
+  inherit (lib) mkIf mkEnableOption mkOption types concatStringsSep;
+  inherit (pkgs.pseudofile) dir symlink;
+  cfg = config.boot.loader.fit;
+  o = config.system.outputs;
+  cmdline = concatStringsSep " " config.boot.commandLine;
+  wantsDtb = config.hardware.dts ? src && config.hardware.dts.src != null;
+in {
+  options.boot.loader.fit.enable = mkEnableOption "FIT in /boot";
+
+  config = mkIf cfg.enable {
+    system.outputs.bootfiles = pkgs.runCommand "boot-fit" {} ''
+      mkdir $out
+      cd $out
+      cp ${o.uimage} fit
+    '';
+    filesystem = dir {
+      boot = symlink config.system.outputs.bootfiles;
+    };
+  };
+}