diff --git a/nix/modules/machine/root.nix b/nix/modules/machine/root.nix new file mode 100644 index 0000000..98c1120 --- /dev/null +++ b/nix/modules/machine/root.nix @@ -0,0 +1,100 @@ +{ + config, + lib, + inputs, + ... +}: +let + inherit (lib.modules) mkMerge mkIf mkAfter; +in +{ + flake.modules.nixos.default = + { hostName, ... }: + let + inherit (config.flake.manifest.hosts.nixos.${hostName}.machine) root; + in + { + imports = [ inputs.disko.nixosModules.disko ]; + config = mkMerge [ + { + # BTRFS - may add more later on + boot.initrd.kernelModules = [ "dm-snapshot" ]; + disko.devices.disk.main = { + device = root.drive; + content.type = "gpt"; + content.partitions = { + boot = { + name = "boot"; + size = "1M"; + type = "EF02"; + }; + esp = { + name = "ESP"; + size = "500M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + }; + }; + swap = { + size = "4G"; + content = { + type = "swap"; + resumeDevice = true; + }; + }; + root = { + name = "root"; + size = "100%"; + content = { + type = "lvm_pv"; + vg = "root_vg"; + }; + }; + }; + }; + + disko.devices.lvm_vg.root_vg = { + type = "lvm_vg"; + lvs.root = { + size = "100%FREE"; + content = { + type = "btrfs"; + extraArgs = [ "-f" ]; + subvolumes = { + "/root".mountpoint = "/"; + "/persist" = { + mountpoint = "/persist"; + mountOptions = [ + "subvol=persist" + "noatime" + ]; + }; + "/nix" = { + mountpoint = "/nix"; + mountOptions = [ + "subvol=nix" + "noatime" + ]; + }; + }; + }; + }; + }; + } + # Ephemeral by default - assumes btrfs + (mkIf (config.flake.manifest.hosts.nixos.${hostName}.machine.root.ephemeral or true) { + boot.initrd.postDeviceCommands = mkAfter '' + mkdir /btrfs_tmp + mount /dev/root_vg/root /btrfs_tmp + + if [[ -e /btrfs_tmp/root ]]; then + btrfs subvolume delete "/btrfs_tmp/root" + fi + ''; + }) + ]; + }; +} diff --git a/nix/modules/machine/root/drive.nix b/nix/modules/machine/root/drive.nix deleted file mode 100644 index 45ecac6..0000000 --- a/nix/modules/machine/root/drive.nix +++ /dev/null @@ -1,75 +0,0 @@ -{ config, inputs, ... }: -{ - flake.modules.nixos.default = - { hostName, ... }: - { - imports = [ inputs.disko.nixosModules.disko ]; - boot.initrd.kernelModules = [ "dm-snapshot" ]; - # BTRFS - may add more later on - disko.devices.disk.main = { - device = config.flake.manifest.hosts.nixos.${hostName}.machine.root.drive; - type = "disk"; - content.type = "gpt"; - content.partitions = { - boot = { - name = "boot"; - size = "1M"; - type = "EF02"; - }; - esp = { - name = "ESP"; - size = "500M"; - type = "EF00"; - content = { - type = "filesystem"; - format = "vfat"; - mountpoint = "/boot"; - }; - }; - swap = { - size = "4G"; - content = { - type = "swap"; - resumeDevice = true; - }; - }; - root = { - name = "root"; - size = "100%"; - content = { - type = "lvm_pv"; - vg = "root_vg"; - }; - }; - }; - }; - - disko.devices.lvm_vg.root_vg = { - type = "lvm_vg"; - lvs.root = { - size = "100%FREE"; - content = { - type = "btrfs"; - extraArgs = [ "-f" ]; - subvolumes = { - "/root".mountpoint = "/"; - "/persist" = { - mountpoint = "/persist"; - mountOptions = [ - "subvol=persist" - "noatime" - ]; - }; - "/nix" = { - mountpoint = "/nix"; - mountOptions = [ - "subvol=nix" - "noatime" - ]; - }; - }; - }; - }; - }; - }; -} diff --git a/nix/modules/machine/root/ephemeral.nix b/nix/modules/machine/root/ephemeral.nix deleted file mode 100644 index 0b9657f..0000000 --- a/nix/modules/machine/root/ephemeral.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, lib, ... }: -let - inherit (lib.modules) mkMerge mkIf mkAfter; -in -{ - flake.modules.nixos.default = - { hostName, ... }: - { - config = mkMerge [ - # Ephemeral by default - assumes btrfs - (mkIf (config.flake.manifest.hosts.nixos.${hostName}.machine.root.ephemeral or true) { - boot.initrd.postDeviceCommands = mkAfter '' - mkdir /btrfs_tmp - mount /dev/root_vg/root /btrfs_tmp - - if [[ -e /btrfs_tmp/root ]]; then - btrfs subvolume delete "/btrfs_tmp/root" - fi - ''; - }) - ]; - }; -}