From d3d3987f86822f154e688dc44faae8ebd89b2463 Mon Sep 17 00:00:00 2001 From: alexion Date: Fri, 28 Aug 2026 22:52:11 -0400 Subject: [PATCH] refactor(guest): assemble guest modules --- flake/default.nix | 20 +++++++++----------- flake/guest.nix | 26 ++++++++++++++++++++------ flake/host.nix | 32 +++++++++++++++----------------- guests/actualbudget.nix | 19 ++++++------------- guests/copyparty.nix | 34 +++++++++++++--------------------- guests/reverse-proxy.nix | 10 ++-------- modules/default.nix | 3 +-- modules/network/vlans.nix | 4 ++-- 8 files changed, 68 insertions(+), 80 deletions(-) diff --git a/flake/default.nix b/flake/default.nix index e6788d1..58c9e1f 100644 --- a/flake/default.nix +++ b/flake/default.nix @@ -14,27 +14,23 @@ let root = self + "/modules"; }; + guestModules = guests.mkGuests { + root = self + "/guests"; + }; + #---------------------------------------------------------- - guestFiles = util.collectNixFiles (self + "/guests"); collectedRegistry = registryAssembly.collect { hosts = self.nixosConfigurations; }; specialArgs = { inherit - flake inputs self + util ; registry = collectedRegistry; }; - flake = { - inherit (hosts) mkHosts; - inherit (guests) mkGuest; - - inherit util; - }; - guests = import ./guest.nix { inherit inputs @@ -51,10 +47,12 @@ let inputs lib specialArgs - guestFiles + guestModules registryAssembly ; repositoryModules = modules; }; in -flake +{ + inherit (hosts) mkHosts; +} diff --git a/flake/guest.nix b/flake/guest.nix index f658d6d..9464f03 100644 --- a/flake/guest.nix +++ b/flake/guest.nix @@ -6,12 +6,9 @@ registryAssembly, util, }: -{ +let mkGuest = - { - name, - interior ? { }, - }: + name: { config, lib, ... }: let cfg = config.guests.${name}; @@ -131,6 +128,11 @@ Mounts are read-write unless `readOnly` is set. ''; }; + interior = lib.mkOption { + type = lib.types.deferredModule; + default = { }; + description = "NixOS module imported into the guest interior."; + }; limits = { memory = lib.mkOption { type = lib.types.nullOr lib.types.str; @@ -246,7 +248,7 @@ repositoryModules registryAssembly.module - interior + cfg.interior { modules.guest.enable = true; @@ -265,4 +267,16 @@ }; }; }; +in +{ + mkGuests = + { root }: + let + files = util.collectNixFiles root; + guestFiles = lib.filterAttrs (file: type: type == "regular" && lib.hasSuffix ".nix" file) (builtins.readDir root); + names = map (file: lib.removeSuffix ".nix" file) (lib.attrNames guestFiles); + in + { + imports = files ++ map mkGuest names; + }; } diff --git a/flake/host.nix b/flake/host.nix index 2627cc2..3345fd1 100644 --- a/flake/host.nix +++ b/flake/host.nix @@ -4,8 +4,7 @@ specialArgs, repositoryModules, - # TODO refactor guests - guestFiles, + guestModules, # TODO refactor registry registryAssembly, }: @@ -17,24 +16,23 @@ let }: lib.nixosSystem { inherit specialArgs; - modules = - guestFiles - ++ [ - inputs.chaotic.nixosModules.default - inputs.disko.nixosModules.disko - inputs.sops-nix.nixosModules.sops - inputs.stylix.nixosModules.stylix + modules = [ + inputs.chaotic.nixosModules.default + inputs.disko.nixosModules.disko + inputs.sops-nix.nixosModules.sops + inputs.stylix.nixosModules.stylix - repositoryModules + repositoryModules + guestModules - # TODO: refactor - registryAssembly.module (root + "/${name}") + # TODO: refactor + registryAssembly.module (root + "/${name}") - { - networking.hostName = name; - modules.host.enable = true; - } - ]; + { + networking.hostName = name; + modules.host.enable = true; + } + ]; }; in { diff --git a/guests/actualbudget.nix b/guests/actualbudget.nix index 10d95ed..4310651 100644 --- a/guests/actualbudget.nix +++ b/guests/actualbudget.nix @@ -1,7 +1,6 @@ { config, lib, - flake, ... }: let @@ -9,18 +8,6 @@ let dataDir = "/data"; in { - imports = [ - (flake.mkGuest { - name = "actualbudget"; - interior = { - modules.services.actualbudget = { - enable = true; - inherit dataDir; - }; - }; - }) - ]; - options.guests.actualbudget = { dataPath = lib.mkOption { type = lib.types.nullOr lib.types.str; @@ -39,6 +26,12 @@ in ]; guests.actualbudget = { + interior = { + modules.services.actualbudget = { + enable = true; + inherit dataDir; + }; + }; mounts.${dataDir}.directory = cfg.dataPath; limits = { memory = lib.mkDefault "2G"; diff --git a/guests/copyparty.nix b/guests/copyparty.nix index 8e2de69..4b79572 100644 --- a/guests/copyparty.nix +++ b/guests/copyparty.nix @@ -1,7 +1,6 @@ { config, lib, - flake, ... }: let @@ -34,26 +33,6 @@ let }; in { - imports = [ - (flake.mkGuest { - name = "copyparty"; - interior = { - modules.services.copyparty = { - enable = true; - inherit (cfg) accountName stateDir; - passwordFile = "/run/secrets/${cfg.passwordSecret}"; - reverseProxy = { - enable = cfg.reverseProxy.enable; - inherit (cfg.reverseProxy) trustedSources; - }; - volumes = lib.mapAttrs (_urlPath: volume: { - inherit (volume) path access flags; - }) cfg.volumes; - }; - }; - }) - ]; - options.guests.copyparty = { accountName = lib.mkOption { type = lib.types.str; @@ -106,6 +85,19 @@ in ]; guests.copyparty = { + interior.modules.services.copyparty = { + enable = true; + inherit (cfg) accountName stateDir; + passwordFile = "/run/secrets/${cfg.passwordSecret}"; + reverseProxy = { + enable = cfg.reverseProxy.enable; + inherit (cfg.reverseProxy) trustedSources; + }; + volumes = lib.mapAttrs (_urlPath: volume: { + inherit (volume) path access flags; + }) cfg.volumes; + }; + mounts = { ${cfg.stateDir} = { diff --git a/guests/reverse-proxy.nix b/guests/reverse-proxy.nix index b71d316..27eb287 100644 --- a/guests/reverse-proxy.nix +++ b/guests/reverse-proxy.nix @@ -1,16 +1,14 @@ { config, lib, - flake, ... }: let giteaSshBackend = "10.23.20.45:2022"; in { - imports = [ - (flake.mkGuest { - name = "reverse-proxy"; + config = lib.mkIf config.guests.reverse-proxy.enable { + guests.reverse-proxy = { interior = { modules.services.reverse-proxy.enable = true; @@ -66,11 +64,7 @@ in } ''; }; - }) - ]; - config = lib.mkIf config.guests.reverse-proxy.enable { - guests.reverse-proxy = { limits = { memory = lib.mkDefault "1G"; cpu = lib.mkDefault "100%"; diff --git a/modules/default.nix b/modules/default.nix index ca7f6bc..43489f2 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,7 +1,6 @@ { config, lib, - flake, pkgs, inputs, ... @@ -64,7 +63,7 @@ in useGlobalPkgs = true; useUserPackages = true; extraSpecialArgs = { - inherit flake inputs; + inherit inputs; }; users.${user.name} = { home.username = user.name; diff --git a/modules/network/vlans.nix b/modules/network/vlans.nix index dc4124c..dc79b05 100644 --- a/modules/network/vlans.nix +++ b/modules/network/vlans.nix @@ -1,14 +1,14 @@ { config, lib, - flake, + util, ... }: # The host networking foundation: per-VLAN bridges over a tagged trunk. let cfg = config.modules.network.vlans; - inherit (flake.util) bridgeName; + inherit (util) bridgeName; vlanName = id: "${cfg.trunk}.${toString id}"; in