diff --git a/nix/configurations.nix b/nix/configurations.nix index 9375b15..645e60e 100644 --- a/nix/configurations.nix +++ b/nix/configurations.nix @@ -7,14 +7,7 @@ let inherit (lib) nixosSystem; inherit (lib.attrsets) mapAttrs; - inherit (cfg.lib.modules) forAllUsers'; cfg = config.flake; - globalCfg = { - useGlobalPkgs = true; - useUserPackages = true; - sharedModules = [ cfg.modules.homeManager.default ]; - users = forAllUsers' (name: _: cfg.homes.${name}); - }; hosts = cfg.manifest.hosts or { }; mkConfigurations = class: hosts: @@ -22,11 +15,13 @@ let name: value: if class == "nixos" then nixosSystem { - specialArgs.hostName = name; + specialArgs = { + inherit inputs; + inherit (cfg) manifest; + hostName = name; + }; modules = [ cfg.modules.nixos.default - inputs.home-manager.nixosModules.home-manager - { home-manager = globalCfg; } (value.extraCfg or { }) ]; } @@ -35,6 +30,5 @@ let ) hosts; in { - imports = [ inputs.home-manager.flakeModules.home-manager ]; flake.nixosConfigurations = mkConfigurations "nixos" hosts.nixos; } diff --git a/nix/modules/home-manager.nix b/nix/modules/home-manager.nix new file mode 100644 index 0000000..e33893c --- /dev/null +++ b/nix/modules/home-manager.nix @@ -0,0 +1,18 @@ +{ inputs, config, ... }: +let + inherit (cfg.lib.modules) forAllUsers'; + cfg = config.flake; + hm = inputs.home-manager; + globalCfg = { + useGlobalPkgs = true; + useUserPackages = true; + extraSpecialArgs = { inherit (cfg) manifest; }; + sharedModules = [ cfg.modules.homeManager.default ]; + users = forAllUsers' (name: _: cfg.homes.${name}); + }; +in +{ + imports = [ hm.flakeModules.home-manager ]; + flake.modules.nixos.default.imports = [ hm.nixosModules.home-manager ]; + flake.modules.nixos.default.config.home-manager = globalCfg; +} diff --git a/nix/modules/machine/root.nix b/nix/modules/machine/root.nix deleted file mode 100644 index 98c1120..0000000 --- a/nix/modules/machine/root.nix +++ /dev/null @@ -1,100 +0,0 @@ -{ - 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 new file mode 100644 index 0000000..45ecac6 --- /dev/null +++ b/nix/modules/machine/root/drive.nix @@ -0,0 +1,75 @@ +{ 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 new file mode 100644 index 0000000..729f1cc --- /dev/null +++ b/nix/modules/machine/root/ephemeral.nix @@ -0,0 +1,30 @@ +{ 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 + ''; + persistFiles = [ + #TODO: move to ssh config + "/etc/ssh/ssh_host_ed25519_key" + "/etc/ssh/ssh_host_ed25519_key.pub" + "/etc/ssh/ssh_host_rsa_key" + "/etc/ssh/ssh_host_rsa_key.pub" + ]; + }) + ]; + }; +} diff --git a/nix/modules/ssh.nix b/nix/modules/ssh.nix deleted file mode 100644 index 4c8fde2..0000000 --- a/nix/modules/ssh.nix +++ /dev/null @@ -1,10 +0,0 @@ -{ - flake.modules.nixos.default = { - persistFiles = [ - "/etc/ssh/ssh_host_ed25519_key" - "/etc/ssh/ssh_host_ed25519_key.pub" - "/etc/ssh/ssh_host_rsa_key" - "/etc/ssh/ssh_host_rsa_key.pub" - ]; - }; -}