diff --git a/lib/deploy/default.nix b/lib/deploy/default.nix
new file mode 100644
index 0000000..1eaa186
--- /dev/null
+++ b/lib/deploy/default.nix
@@ -0,0 +1,60 @@
+# SPDX-FileCopyrightText: 2024 Auxolotl Infrastructure Contributors
+# SPDX-FileCopyrightText: 2024 Clicks Codes
+#
+# SPDX-License-Identifier: GPL-3.0-only
+
+{ lib, inputs }:
+let
+  inherit (inputs) deploy-rs;
+in
+rec {
+  ## Create deployment configuration for use with deploy-rs.
+  ##
+  ## ```nix
+  ## mkDeploy {
+  ##   inherit self;
+  ##   overrides = {
+  ##     my-host.system.sudo = "doas -u";
+  ##   };
+  ## }
+  ## ```
+  ##
+  #@ { self: Flake, overrides: Attrs ? {} } -> Attrs
+  mkDeploy =
+    {
+      self,
+      overrides ? { },
+    }:
+    let
+      hosts = self.nixosConfigurations or { };
+      names = builtins.attrNames hosts;
+      nodes = lib.foldl (
+        result: name:
+        let
+          host = hosts.${name};
+          user = host.config.users.infra or null;
+          inherit (host.pkgs) system;
+        in
+        result
+        // {
+          ${name} = (overrides.${name} or { }) // {
+            hostname = overrides.${name}.hostname or "${name}";
+            profiles = (overrides.${name}.profiles or { }) // {
+              system =
+                (overrides.${name}.profiles.system or { })
+                // {
+                  path = deploy-rs.lib.${system}.activate.nixos host;
+                }
+                // {
+                  user = "root";
+                }
+                // lib.optionalAttrs host.config.clicks.security.doas.enable { sudo = "doas -u"; };
+            };
+          };
+        }
+      ) { } names;
+    in
+    {
+      inherit nodes;
+    };
+}
