From 3dc7f49a9c481ec888cba33c37d88e5106463f9b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicolas=20=E2=80=9CNiols=E2=80=9D=20Jeannerod?=
 <nicolas.jeannerod@moduscreate.com>
Date: Fri, 21 Feb 2025 19:26:18 +0100
Subject: [PATCH] Add the disko configuration to all VMs

---
 infra/common/nixos/hardware.nix | 38 +++++++++++++++++++++++++++++
 infra/fedi300/default.nix       | 40 ++++++++++++++++++-------------
 infra/vm02116/default.nix       | 42 +++++++++++++++++++--------------
 infra/vm02179/default.nix       | 32 +++++++++++++++----------
 infra/vm02186/default.nix       | 32 +++++++++++++++----------
 infra/vm02187/default.nix       | 40 ++++++++++++++++++-------------
 6 files changed, 146 insertions(+), 78 deletions(-)

diff --git a/infra/common/nixos/hardware.nix b/infra/common/nixos/hardware.nix
index 3410294f..c01ced2f 100644
--- a/infra/common/nixos/hardware.nix
+++ b/infra/common/nixos/hardware.nix
@@ -21,4 +21,42 @@
       kernelModules = [ "dm-snapshot" ];
     };
   };
+
+  disko.devices.disk.main = {
+    device = "/dev/sda";
+    type = "disk";
+
+    content = {
+      type = "gpt";
+
+      partitions = {
+        MBR = {
+          priority = 0;
+          size = "1M";
+          type = "EF02";
+        };
+
+        ESP = {
+          priority = 1;
+          size = "500M";
+          type = "EF00";
+          content = {
+            type = "filesystem";
+            format = "vfat";
+            mountpoint = "/boot";
+          };
+        };
+
+        root = {
+          priority = 2;
+          size = "100%";
+          content = {
+            type = "filesystem";
+            format = "ext4";
+            mountpoint = "/";
+          };
+        };
+      };
+    };
+  };
 }
diff --git a/infra/fedi300/default.nix b/infra/fedi300/default.nix
index 0ebd3310..4f70ca98 100644
--- a/infra/fedi300/default.nix
+++ b/infra/fedi300/default.nix
@@ -12,23 +12,29 @@
     };
   };
 
-  nixos.module = {
-    imports = [
-      ./forgejo-actions-runner.nix
-    ];
-
-    fileSystems."/" = {
-      device = "/dev/disk/by-uuid/cbcfaf6b-39bd-4328-9f53-dea8a9d32ecc";
-      fsType = "ext4";
-    };
-
-    fileSystems."/boot" = {
-      device = "/dev/disk/by-uuid/1A4E-07F4";
-      fsType = "vfat";
-      options = [
-        "fmask=0022"
-        "dmask=0022"
+  nixos.module =
+    { lib, ... }:
+    {
+      imports = [
+        ./forgejo-actions-runner.nix
       ];
+
+      ## NOTE: This VM was created manually, which requires us to override the
+      ## default disko-based `fileSystems` definition.
+      fileSystems = lib.mkForce {
+        "/" = {
+          device = "/dev/disk/by-uuid/cbcfaf6b-39bd-4328-9f53-dea8a9d32ecc";
+          fsType = "ext4";
+        };
+
+        "/boot" = {
+          device = "/dev/disk/by-uuid/1A4E-07F4";
+          fsType = "vfat";
+          options = [
+            "fmask=0022"
+            "dmask=0022"
+          ];
+        };
+      };
     };
-  };
 }
diff --git a/infra/vm02116/default.nix b/infra/vm02116/default.nix
index cf5940a3..387a5bad 100644
--- a/infra/vm02116/default.nix
+++ b/infra/vm02116/default.nix
@@ -4,25 +4,31 @@
     ipv6.address = "2a00:51c0:12:1201::20";
   };
 
-  nixos.module = {
-    imports = [
-      ./forgejo.nix
-    ];
+  nixos.module =
+    { lib, ... }:
+    {
+      imports = [
+        ./forgejo.nix
+      ];
 
-    ## vm02116 is running on old hardware based on a Xen VM environment, so it
-    ## needs these extra options. Once the VM gets moved to a newer node, these
-    ## two options can safely be removed.
-    boot.initrd.availableKernelModules = [ "xen_blkfront" ];
-    services.xe-guest-utilities.enable = true;
+      ## vm02116 is running on old hardware based on a Xen VM environment, so it
+      ## needs these extra options. Once the VM gets moved to a newer node, these
+      ## two options can safely be removed.
+      boot.initrd.availableKernelModules = [ "xen_blkfront" ];
+      services.xe-guest-utilities.enable = true;
 
-    fileSystems."/" = {
-      device = "/dev/disk/by-uuid/3802a66d-e31a-4650-86f3-b51b11918853";
-      fsType = "ext4";
+      ## NOTE: This VM was created manually, which requires us to override the
+      ## default disko-based `fileSystems` definition.
+      fileSystems = lib.mkForce {
+        "/" = {
+          device = "/dev/disk/by-uuid/3802a66d-e31a-4650-86f3-b51b11918853";
+          fsType = "ext4";
+        };
+
+        "/boot" = {
+          device = "/dev/disk/by-uuid/2CE2-1173";
+          fsType = "vfat";
+        };
+      };
     };
-
-    fileSystems."/boot" = {
-      device = "/dev/disk/by-uuid/2CE2-1173";
-      fsType = "vfat";
-    };
-  };
 }
diff --git a/infra/vm02179/default.nix b/infra/vm02179/default.nix
index 6839d5cd..3ff8de5b 100644
--- a/infra/vm02179/default.nix
+++ b/infra/vm02179/default.nix
@@ -4,19 +4,25 @@
     ipv6.address = "2a00:51c0:12:1201::179";
   };
 
-  nixos.module = {
-    fileSystems."/" = {
-      device = "/dev/disk/by-uuid/119863f8-55cf-4e2f-ac17-27599a63f241";
-      fsType = "ext4";
-    };
+  nixos.module =
+    { lib, ... }:
+    {
+      ## NOTE: This VM was created manually, which requires us to override the
+      ## default disko-based `fileSystems` definition.
+      fileSystems = lib.mkForce {
+        "/" = {
+          device = "/dev/disk/by-uuid/119863f8-55cf-4e2f-ac17-27599a63f241";
+          fsType = "ext4";
+        };
 
-    fileSystems."/boot" = {
-      device = "/dev/disk/by-uuid/D9F4-9BF0";
-      fsType = "vfat";
-      options = [
-        "fmask=0022"
-        "dmask=0022"
-      ];
+        "/boot" = {
+          device = "/dev/disk/by-uuid/D9F4-9BF0";
+          fsType = "vfat";
+          options = [
+            "fmask=0022"
+            "dmask=0022"
+          ];
+        };
+      };
     };
-  };
 }
diff --git a/infra/vm02186/default.nix b/infra/vm02186/default.nix
index 7811cc5d..7e6c4148 100644
--- a/infra/vm02186/default.nix
+++ b/infra/vm02186/default.nix
@@ -4,19 +4,25 @@
     ipv6.address = "2a00:51c0:12:1201::186";
   };
 
-  nixos.module = {
-    fileSystems."/" = {
-      device = "/dev/disk/by-uuid/833ac0f9-ad8c-45ae-a9bf-5844e378c44a";
-      fsType = "ext4";
-    };
+  nixos.module =
+    { lib, ... }:
+    {
+      ## NOTE: This VM was created manually, which requires us to override the
+      ## default disko-based `fileSystems` definition.
+      fileSystems = lib.mkForce {
+        "/" = {
+          device = "/dev/disk/by-uuid/833ac0f9-ad8c-45ae-a9bf-5844e378c44a";
+          fsType = "ext4";
+        };
 
-    fileSystems."/boot" = {
-      device = "/dev/disk/by-uuid/B4D5-3AF9";
-      fsType = "vfat";
-      options = [
-        "fmask=0022"
-        "dmask=0022"
-      ];
+        "/boot" = {
+          device = "/dev/disk/by-uuid/B4D5-3AF9";
+          fsType = "vfat";
+          options = [
+            "fmask=0022"
+            "dmask=0022"
+          ];
+        };
+      };
     };
-  };
 }
diff --git a/infra/vm02187/default.nix b/infra/vm02187/default.nix
index a1620197..18e9a29f 100644
--- a/infra/vm02187/default.nix
+++ b/infra/vm02187/default.nix
@@ -4,23 +4,29 @@
     ipv6.address = "2a00:51c0:12:1201::187";
   };
 
-  nixos.module = {
-    imports = [
-      ./wiki.nix
-    ];
-
-    fileSystems."/" = {
-      device = "/dev/disk/by-uuid/a46a9c46-e32b-4216-a4aa-8819b2cd0d49";
-      fsType = "ext4";
-    };
-
-    fileSystems."/boot" = {
-      device = "/dev/disk/by-uuid/6AB5-4FA8";
-      fsType = "vfat";
-      options = [
-        "fmask=0022"
-        "dmask=0022"
+  nixos.module =
+    { lib, ... }:
+    {
+      imports = [
+        ./wiki.nix
       ];
+
+      ## NOTE: This VM was created manually, which requires us to override the
+      ## default disko-based `fileSystems` definition.
+      fileSystems = lib.mkForce {
+        "/" = {
+          device = "/dev/disk/by-uuid/a46a9c46-e32b-4216-a4aa-8819b2cd0d49";
+          fsType = "ext4";
+        };
+
+        "/boot" = {
+          device = "/dev/disk/by-uuid/6AB5-4FA8";
+          fsType = "vfat";
+          options = [
+            "fmask=0022"
+            "dmask=0022"
+          ];
+        };
+      };
     };
-  };
 }