diff --git a/deployment/default.nix b/deployment/default.nix
new file mode 100644
index 00000000..c98d5675
--- /dev/null
+++ b/deployment/default.nix
@@ -0,0 +1,155 @@
+## `makeMakeDeployment` -- Function to help hosting providers make a
+## `makeDeployment` function.
+##
+## https://factoryfactoryfactory.net/
+
+## Generic utilities used in this function, eg. nixpkgs, NixOps4 providers, etc.
+## REVIEW: We should maybe be more specific than just `inputs`.
+{
+  lib,
+  nixops4,
+  nixops4-nixos,
+  fediversity,
+}:
+
+## Information on the hosting provider's infrastructure. This is where we inform
+## this function of where it can find eg. Proxmox.
+{
+  ## Four NixOS configuration resource modules for four services. Those are VMs
+  ## that are already deployed and on which we will push our configurations.
+  ##
+  ## - Ultimately, we just want a pool of VMs, or even just a Proxmox.
+  ## - Each machine is flagged for a certain use case until we control DNS.
+  garageResourceModule,
+  mastodonResourceModule,
+  peertubeResourceModule,
+  pixelfedResourceModule,
+}:
+
+## From the hosting provider's perspective, the function is meant to be
+## partially applied only until here.
+
+## Information on the specific deployment that we request. This is the
+## information that will come from the FediPanel.
+{
+  domain,
+  enableMastodon,
+  enablePeertube,
+  enablePixelfed,
+}:
+
+let
+  inherit (lib) mkMerge mkIf;
+
+in
+
+## Regular arguments of a NixOps4 deployment module.
+{ providers, ... }:
+
+{
+  providers = { inherit (nixops4.modules.nixops4Provider) local; };
+
+  resources =
+    let
+      ## NOTE: All of these secrets are publicly available in this source file
+      ## and will end up in the Nix store. We don't care as they are only ever
+      ## used for testing anyway.
+      ##
+      ## FIXME: Generate and store in NixOps4's state.
+      mastodonS3KeyConfig =
+        { pkgs, ... }:
+        {
+          s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GK3515373e4c851ebaad366558";
+          s3SecretKeyFile = pkgs.writeText "s3SecretKey" "7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34";
+        };
+      peertubeS3KeyConfig =
+        { pkgs, ... }:
+        {
+          s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GK1f9feea9960f6f95ff404c9b";
+          s3SecretKeyFile = pkgs.writeText "s3SecretKey" "7295c4201966a02c2c3d25b5cea4a5ff782966a2415e3a196f91924631191395";
+        };
+      pixelfedS3KeyConfig =
+        { pkgs, ... }:
+        {
+          s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GKb5615457d44214411e673b7b";
+          s3SecretKeyFile = pkgs.writeText "s3SecretKey" "5be6799a88ca9b9d813d1a806b64f15efa49482dbe15339ddfaf7f19cf434987";
+        };
+
+      makeConfigurationResource = resourceModule: config: {
+        type = providers.local.exec;
+        imports = [
+          nixops4-nixos.modules.nixops4Resource.nixos
+          resourceModule
+          { nixos.module = config; }
+          { nixos.module = fediversity; }
+        ];
+      };
+
+    in
+
+    mkMerge [
+
+      (mkIf (enableMastodon || enablePeertube || enablePixelfed) {
+        garage-config = makeConfigurationResource garageResourceModule (
+          { pkgs, ... }:
+          {
+            fediversity = {
+              inherit domain;
+              garage.enable = true;
+              pixelfed = pixelfedS3KeyConfig { inherit pkgs; };
+              mastodon = mastodonS3KeyConfig { inherit pkgs; };
+              peertube = peertubeS3KeyConfig { inherit pkgs; };
+            };
+          }
+        );
+      })
+
+      (mkIf enableMastodon {
+        mastodon-config = makeConfigurationResource mastodonResourceModule (
+          { pkgs, ... }:
+          {
+            fediversity = {
+              inherit domain;
+              mastodon = mastodonS3KeyConfig { inherit pkgs; } // {
+                enable = true;
+              };
+
+              temp.cores = 1; # FIXME: should come from NixOps4 eventually
+            };
+          }
+        );
+      })
+
+      (mkIf enablePeertube {
+        peertube-config = makeConfigurationResource peertubeResourceModule (
+          { pkgs, ... }:
+          {
+            fediversity = {
+              inherit domain;
+              peertube = peertubeS3KeyConfig { inherit pkgs; } // {
+                enable = true;
+                ## NOTE: Only ever used for testing anyway.
+                ##
+                ## FIXME: Generate and store in NixOps4's state.
+                secretsFile = pkgs.writeText "secret" "574e093907d1157ac0f8e760a6deb1035402003af5763135bae9cbd6abe32b24";
+              };
+            };
+          }
+        );
+      })
+
+      (mkIf enablePixelfed {
+        pixelfed-config = makeConfigurationResource pixelfedResourceModule (
+          { pkgs, ... }:
+          {
+            fediversity = {
+              inherit domain;
+              pixelfed = pixelfedS3KeyConfig { inherit pkgs; } // {
+                enable = true;
+              };
+            };
+          }
+        );
+      })
+    ];
+}
diff --git a/infra/flake-part.nix b/infra/flake-part.nix
index 64c4aa32..969cb7d5 100644
--- a/infra/flake-part.nix
+++ b/infra/flake-part.nix
@@ -6,12 +6,12 @@
 }:
 
 let
-  inherit (builtins) readDir;
+  inherit (builtins) readDir readFile fromJSON;
   inherit (lib)
     attrNames
     mkOption
     evalModules
-    mapAttrs
+    filterAttrs
     ;
   inherit (lib.attrsets) genAttrs;
 
@@ -53,23 +53,30 @@ let
   ## NixOS configuration module), make a deployment with those machines'
   ## configurations as resources.
   makeTestDeployment =
-    vmConfigs:
-    { providers, ... }:
-    {
-      providers.local = inputs.nixops4.modules.nixops4Provider.local;
-      resources = mapAttrs (vmName: vmConfig: {
-        type = providers.local.exec;
-        imports = [
-          inputs.nixops4-nixos.modules.nixops4Resource.nixos
-          (makeResourceModule {
-            inherit vmName;
-            isTestVm = false;
-          })
-          { nixos.module = vmConfig; }
-          { nixos.module = self.nixosModules.fediversity; }
-        ];
-      }) vmConfigs;
-    };
+    (import ../deployment)
+      {
+        inherit lib;
+        inherit (inputs) nixops4 nixops4-nixos;
+        inherit (self.nixosModules) fediversity;
+      }
+      {
+        garageResourceModule = makeResourceModule {
+          vmName = "test01";
+          isTestVm = true;
+        };
+        mastodonResourceModule = makeResourceModule {
+          vmName = "test02";
+          isTestVm = true;
+        };
+        peertubeResourceModule = makeResourceModule {
+          vmName = "test03";
+          isTestVm = true;
+        };
+        pixelfedResourceModule = makeResourceModule {
+          vmName = "test04";
+          isTestVm = true;
+        };
+      };
 
   nixops4ResourceNixosMockOptions = {
     ## NOTE: We allow the use of a few options from
@@ -116,8 +123,10 @@ let
       ;
   };
 
-  machines = attrNames (readDir ./machines);
-  testMachineConfigurations = import ./test-machines/configuration.nix;
+  listSubdirectories = path: attrNames (filterAttrs (_: type: type == "directory") (readDir path));
+
+  machines = listSubdirectories ./machines;
+  testMachines = listSubdirectories ./test-machines;
 
 in
 {
@@ -130,12 +139,12 @@ in
   ## - We add a “test” deployment with all test machines.
   nixops4Deployments = genAttrs machines makeDeployment' // {
     default = makeDeployment machines;
-    test = makeTestDeployment testMachineConfigurations;
+    test = makeTestDeployment (fromJSON (readFile ./test-machines/configuration.json));
   };
   flake.nixosConfigurations =
     genAttrs machines (makeConfiguration false)
-    // genAttrs (attrNames testMachineConfigurations) (makeConfiguration true);
+    // genAttrs testMachines (makeConfiguration true);
   flake.vmOptions =
     genAttrs machines (makeVmOptions false)
-    // genAttrs (attrNames testMachineConfigurations) (makeVmOptions true);
+    // genAttrs testMachines (makeVmOptions true);
 }
diff --git a/infra/test-machines/configuration.json b/infra/test-machines/configuration.json
new file mode 100644
index 00000000..3b2cc6dd
--- /dev/null
+++ b/infra/test-machines/configuration.json
@@ -0,0 +1,6 @@
+{
+  "domain": "abundos.eu",
+  "enableMastodon": false,
+  "enablePeertube": false,
+  "enablePixelfed": false
+}
diff --git a/infra/test-machines/configuration.nix b/infra/test-machines/configuration.nix
deleted file mode 100644
index e1a52b5a..00000000
--- a/infra/test-machines/configuration.nix
+++ /dev/null
@@ -1,74 +0,0 @@
-let
-  ## NOTE: All of these secrets are publicly available in this source file
-  ## and will end up in the Nix store. We don't care as they are only ever
-  ## used for testing anyway.
-  mastodonS3KeyConfig =
-    { pkgs, ... }:
-    {
-      s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GK3515373e4c851ebaad366558";
-      s3SecretKeyFile = pkgs.writeText "s3SecretKey" "7d37d093435a41f2aab8f13c19ba067d9776c90215f56614adad6ece597dbb34";
-    };
-  peertubeS3KeyConfig =
-    { pkgs, ... }:
-    {
-      s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GK1f9feea9960f6f95ff404c9b";
-      s3SecretKeyFile = pkgs.writeText "s3SecretKey" "7295c4201966a02c2c3d25b5cea4a5ff782966a2415e3a196f91924631191395";
-    };
-  pixelfedS3KeyConfig =
-    { pkgs, ... }:
-    {
-      s3AccessKeyFile = pkgs.writeText "s3AccessKey" "GKb5615457d44214411e673b7b";
-      s3SecretKeyFile = pkgs.writeText "s3SecretKey" "5be6799a88ca9b9d813d1a806b64f15efa49482dbe15339ddfaf7f19cf434987";
-    };
-
-in
-{
-  test01 =
-    { pkgs, ... }:
-    {
-      fediversity = {
-        domain = "abundos.eu";
-        garage.enable = true;
-        pixelfed = pixelfedS3KeyConfig { inherit pkgs; };
-        mastodon = mastodonS3KeyConfig { inherit pkgs; };
-        peertube = peertubeS3KeyConfig { inherit pkgs; };
-      };
-    };
-
-  test02 =
-    { pkgs, ... }:
-    {
-      fediversity = {
-        domain = "abundos.eu";
-        mastodon = mastodonS3KeyConfig { inherit pkgs; } // {
-          enable = true;
-        };
-
-        temp.cores = 1; # FIXME: should come from NixOps4 eventually
-      };
-    };
-
-  test03 =
-    { pkgs, ... }:
-    {
-      fediversity = {
-        domain = "abundos.eu";
-        peertube = peertubeS3KeyConfig { inherit pkgs; } // {
-          enable = true;
-          ## NOTE: Only ever used for testing anyway.
-          secretsFile = pkgs.writeText "secret" "574e093907d1157ac0f8e760a6deb1035402003af5763135bae9cbd6abe32b24";
-        };
-      };
-    };
-
-  test04 =
-    { pkgs, ... }:
-    {
-      fediversity = {
-        domain = "abundos.eu";
-        pixelfed = pixelfedS3KeyConfig { inherit pkgs; } // {
-          enable = true;
-        };
-      };
-    };
-}