summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorSoispha <soispha@vhack.eu>2023-07-03 15:04:48 +0200
committerSoispha <soispha@vhack.eu>2023-07-05 21:34:07 +0200
commitd176a33b04e9c0254b42850255d2a864f22424e4 (patch)
tree512ddbb90c391d3c6001b03cab87a4efed14e266
parentStyle(system/fs_layouts): Merge attrsets (diff)
downloadnixos-server-d176a33b04e9c0254b42850255d2a864f22424e4.tar.gz
nixos-server-d176a33b04e9c0254b42850255d2a864f22424e4.zip
Feat(system/disks): Add disko
-rw-r--r--flake.lock21
-rw-r--r--flake.nix8
-rw-r--r--hosts/server1/configuration.nix4
-rw-r--r--system/default.nix2
-rw-r--r--system/disks/default.nix65
-rw-r--r--system/disks/impermanence.nix (renamed from system/file_system_layouts/impermanence.nix)0
-rw-r--r--system/file_system_layouts/default.nix44
7 files changed, 97 insertions, 47 deletions
diff --git a/flake.lock b/flake.lock
index b4b2b61..270c99e 100644
--- a/flake.lock
+++ b/flake.lock
@@ -16,6 +16,26 @@
         "type": "gitlab"
       }
     },
+    "disko": {
+      "inputs": {
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1688544596,
+        "narHash": "sha256-/rbDM71Qpj4gMp54r9mQ2AdD10jEMtnrQ3b2Xf+HYTU=",
+        "owner": "nix-community",
+        "repo": "disko",
+        "rev": "fc3c3817c9f1fcd405463c6a7f0f98baab97c692",
+        "type": "github"
+      },
+      "original": {
+        "owner": "nix-community",
+        "repo": "disko",
+        "type": "github"
+      }
+    },
     "flake-compat": {
       "flake": false,
       "locked": {
@@ -115,6 +135,7 @@
     },
     "root": {
       "inputs": {
+        "disko": "disko",
         "flake-utils": "flake-utils",
         "impermanence": "impermanence",
         "nixpkgs": "nixpkgs",
diff --git a/flake.nix b/flake.nix
index edfb3c4..0cf5609 100644
--- a/flake.nix
+++ b/flake.nix
@@ -11,6 +11,12 @@
     };
 
     # modules
+    disko = {
+      url = "github:nix-community/disko";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+      };
+    };
     impermanence = {
       url = "github:nix-community/impermanence";
       inputs = {
@@ -30,6 +36,7 @@
     # modules
     simple-nixos-mailserver,
     impermanence,
+    disko,
     ...
   } @ attrs: let
     system = "x86_64-linux";
@@ -41,6 +48,7 @@
       modules = [
         ./hosts/server1/configuration.nix
         simple-nixos-mailserver.nixosModule
+        disko.nixosModules.default
         impermanence.nixosModules.impermanence
       ];
     };
diff --git a/hosts/server1/configuration.nix b/hosts/server1/configuration.nix
index 78eacee..d40e749 100644
--- a/hosts/server1/configuration.nix
+++ b/hosts/server1/configuration.nix
@@ -1,4 +1,4 @@
-{pkgs, ...}: {
+{...}: {
   imports = [
     ./networking.nix # network configuration that just works
     ./hardware.nix
@@ -11,7 +11,7 @@
   networking.hostName = "server1";
   networking.domain = "vhack.eu";
 
-  system.fileSystemLayouts.mainDisk = "/dev/disk/by-uuid/7d960eb9-9334-4aef-9f7c-9a908a91a6db";
+  system.disks.disk = "/dev/disk/by-id/ata-QEMU_DVD-ROM_QM00003";
 
   system.stateVersion = "22.11";
 }
diff --git a/system/default.nix b/system/default.nix
index 4b52b79..79b5403 100644
--- a/system/default.nix
+++ b/system/default.nix
@@ -1,6 +1,6 @@
 {...}: {
   imports = [
-    ./file_system_layouts
+    ./disks
     ./packages
     ./services
     ./users
diff --git a/system/disks/default.nix b/system/disks/default.nix
new file mode 100644
index 0000000..b5e53e4
--- /dev/null
+++ b/system/disks/default.nix
@@ -0,0 +1,65 @@
+{
+  config,
+  lib,
+  ...
+}:
+with lib; let
+  cfg = config.system.disks;
+  defaultMountOptions = ["compress-force=zstd:15"];
+in {
+  imports = [ ./impermanence.nix];
+
+  options.system.disks = {
+    disk = mkOption {
+      type = lib.types.path;
+      example = literalExpression "/dev/disk/by-id/ata-WDC_WD10SDRW-11A0XS0_WD-WXP2A901KJN5";
+      description = lib.mdDoc "Path to the disk";
+    };
+  };
+
+  config = {
+    disko.devices = {
+      disk.main = {
+        device = cfg.disk;
+        content = {
+          type = "btrfs";
+          extraArgs = ["-f" "--label nixos"]; # f: Override existing partitions
+          subvolumes = {
+            "nix" = {
+              mountpoint = "/nix";
+              mountOptions = defaultMountOptions;
+            };
+            "persistent-storage" = {
+              mountpoint = "/srv";
+              mountOptions = defaultMountOptions;
+            };
+            "persistent-storage@snapshots" = {
+              mountpoint = "/srv/.snapshots";
+              mountOptions = defaultMountOptions;
+            };
+            "boot" = {
+              mountpoint = "/boot";
+              mountOptions = defaultMountOptions;
+            };
+          };
+        };
+      };
+      nodev = {
+        "/" = {
+          fsType = "tmpfs";
+          mountOptions = ["defaults" "size=2G" "mode=755"];
+        };
+      };
+    };
+    fileSystems = {
+      "/srv" = {
+        neededForBoot = true;
+      };
+      "/boot" = {
+        neededForBoot = true;
+      };
+    };
+  };
+}
+# vim: ts=2
+
diff --git a/system/file_system_layouts/impermanence.nix b/system/disks/impermanence.nix
index 32ad9f7..32ad9f7 100644
--- a/system/file_system_layouts/impermanence.nix
+++ b/system/disks/impermanence.nix
diff --git a/system/file_system_layouts/default.nix b/system/file_system_layouts/default.nix
deleted file mode 100644
index d038632..0000000
--- a/system/file_system_layouts/default.nix
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-  config,
-  lib,
-  ...
-}:
-with lib; let
-  cfg = config.system.fileSystemLayouts;
-in {
-  imports = [
-    ./impermanence.nix
-  ];
-
-  options.system.fileSystemLayouts = {
-    mainDisk = mkOption {
-      type = lib.types.path;
-      example = literalExpression "/dev/disk/by-uuid/0442cb6d-f13a-4635-b487-fa76189774c5";
-      description = lib.mdDoc "Path to the main disk";
-    };
-  };
-  config = {
-    fileSystems = {
-      "/" = {
-        device = "tmpfs";
-        fsType = "tmpfs";
-        options = ["defaults" "size=2G" "mode=755"];
-      };
-      "/nix" = {
-        device = cfg.mainDisk;
-        fsType = "btrfs";
-        options = ["subvol=nix" "compress-force=zstd"];
-      };
-      "/srv" = {
-        device = cfg.mainDisk;
-        fsType = "btrfs";
-        options = ["subvol=storage" "compress-force=zstd"];
-        neededForBoot = true;
-      };
-      "/boot" = {
-        device = cfg.mainDisk;
-        options = ["subvol=boot" "compress-force=zstd"];
-      };
-    };
-  };
-}