system-manager-wakasu
  1{
  2  self,
  3  inputs,
  4  outputs,
  5  stateVersion,
  6  ...
  7}:
  8{
  9  libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 10  # Function for generating home-manage configs
 11  mkHome =
 12    {
 13      hostname,
 14      user,
 15      desktop ? null,
 16      system ? "x86_64-linux",
 17    }:
 18    let
 19      globals = import ../globals.nix {
 20        inherit (inputs.nixpkgs) lib;
 21        inherit hostname;
 22      };
 23    in
 24    inputs.home-manager.lib.homeManagerConfiguration {
 25      pkgs = inputs.nixpkgs.legacyPackages.${system};
 26      extraSpecialArgs = {
 27        inherit
 28          self
 29          inputs
 30          outputs
 31          stateVersion
 32          hostname
 33          desktop
 34          globals
 35          ;
 36        username = user;
 37        libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 38      };
 39      modules = [
 40        ../home
 41      ];
 42    };
 43
 44  newMkHost =
 45    {
 46      hostname,
 47      system ? "x86_64-linux",
 48      pkgsInput ? inputs.nixpkgs,
 49    }:
 50    let
 51      globals = import ../globals.nix {
 52        inherit (pkgsInput) lib;
 53        inherit hostname;
 54      };
 55      specialArgs = {
 56        inherit
 57          self
 58          inputs
 59          outputs
 60          stateVersion
 61          hostname
 62          globals
 63          system
 64          ;
 65        libx = import ./functions.nix { inherit (pkgsInput) lib; };
 66      };
 67    in
 68    pkgsInput.lib.nixosSystem {
 69      inherit specialArgs;
 70      inherit system;
 71      modules = [
 72        self.nixosModules.wireguard-client
 73        self.nixosModules.wireguard-server
 74        self.nixosModules.govanityurl
 75        self.nixosModules.gosmee
 76        inputs.agenix.nixosModules.default
 77        ../systems/new.nix
 78      ];
 79    };
 80
 81  # Function for generating host configs
 82  mkHost =
 83    {
 84      hostname,
 85      desktop ? null,
 86      hardwareType ? "",
 87      system ? "x86_64-linux",
 88      pkgsInput ? inputs.nixpkgs,
 89      homeInput ? inputs.home-manager,
 90    }:
 91    let
 92      globals = import ../globals.nix {
 93        inherit (pkgsInput) lib;
 94        inherit hostname;
 95      };
 96      specialArgs = {
 97        inherit
 98          self
 99          inputs
100          outputs
101          stateVersion
102          hostname
103          desktop
104          hardwareType
105          system
106          globals
107          ;
108        libx = import ./functions.nix { inherit (pkgsInput) lib; };
109      };
110    in
111    pkgsInput.lib.nixosSystem {
112      inherit specialArgs;
113      inherit system;
114      modules = [
115        self.nixosModules.wireguard-client
116        self.nixosModules.wireguard-server
117        self.nixosModules.govanityurl
118        self.nixosModules.gosmee
119        inputs.agenix.nixosModules.default
120        inputs.lanzaboote.nixosModules.lanzaboote
121        homeInput.nixosModules.home-manager
122        {
123          home-manager.extraSpecialArgs = specialArgs;
124          home-manager.useGlobalPkgs = true;
125          home-manager.useUserPackages = true;
126        }
127        ../systems
128      ];
129    };
130
131  # Function for generating host configs
132  mkRPIHost =
133    {
134      hostname,
135      desktop ? null,
136      hardwareType ? "",
137      pkgsInput ? inputs.nixpkgs-25_05,
138      homeInput ? inputs.home-manager-25_05,
139      nixos-raspberrypi ? inputs.nixos-raspberrypi,
140    }:
141    let
142      system = "aarch64-linux";
143      globals = import ../globals.nix {
144        inherit (pkgsInput) lib;
145        inherit hostname;
146      };
147      specialArgs = {
148        inherit
149          self
150          inputs
151          outputs
152          stateVersion
153          hostname
154          desktop
155          hardwareType
156          system
157          globals
158          nixos-raspberrypi
159          ;
160        libx = import ./functions.nix { inherit (pkgsInput) lib; };
161      };
162    in
163    inputs.nixos-raspberrypi.lib.nixosSystemFull {
164      inherit specialArgs;
165      inherit system;
166      modules = [
167        (
168          { ... }:
169          {
170            imports = with inputs.nixos-raspberrypi.nixosModules; [
171              raspberry-pi-5.base
172              raspberry-pi-5.bluetooth
173              raspberry-pi-5.page-size-16k
174              raspberry-pi-5.display-vc4
175            ];
176          }
177        )
178        self.nixosModules.wireguard-client
179        self.nixosModules.wireguard-server
180        self.nixosModules.govanityurl
181        self.nixosModules.gosmee
182        inputs.agenix.nixosModules.default
183        inputs.lanzaboote.nixosModules.lanzaboote
184        homeInput.nixosModules.home-manager
185        {
186          home-manager.extraSpecialArgs = specialArgs;
187          home-manager.useGlobalPkgs = true;
188          home-manager.useUserPackages = true;
189        }
190        ../systems
191      ];
192    };
193
194  # Function to create a system manager
195  mkSystemManager =
196    {
197      system ? "x86_64-linux",
198      hostname,
199      desktop ? null,
200      pkgsInput ? inputs.nixpkgs,
201      homeInput ? inputs.home-manager,
202    }:
203    let
204      globals = import ../globals.nix {
205        inherit (pkgsInput) lib;
206        inherit hostname;
207      };
208      extraSpecialArgs = {
209        inherit
210          self
211          inputs
212          outputs
213          stateVersion
214          hostname
215          desktop
216          globals
217          ;
218        libx = import ./functions.nix { inherit (pkgsInput) lib; };
219      };
220    in
221    inputs.system-manager.lib.makeSystemConfig {
222      inherit extraSpecialArgs;
223      modules = [
224        ../modules/system-manager-firewall-stub.nix
225        ../modules/system-manager-syncthing.nix
226        ../modules/system-manager-wireguard.nix
227        # inputs.agenix.nixosModules.default
228        homeInput.nixosModules.home-manager
229        {
230          config = {
231            nixpkgs.hostPlatform = system;
232            system-manager.allowAnyDistro = true;
233          };
234        }
235        ../systems/system-manager.nix
236      ];
237    };
238}