main
  1{
  2  self,
  3  inputs,
  4  outputs,
  5  stateVersion,
  6  ...
  7}:
  8{
  9  libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 10  monitoring = import ./monitoring.nix { inherit (inputs.nixpkgs) lib; };
 11  # Function for generating home-manage configs
 12  mkHome =
 13    {
 14      hostname,
 15      username,
 16      desktop ? null,
 17      system ? "x86_64-linux",
 18    }:
 19    let
 20      globals = import ../globals.nix {
 21        inherit (inputs.nixpkgs) lib;
 22        inherit hostname;
 23      };
 24    in
 25    inputs.home-manager.lib.homeManagerConfiguration {
 26      pkgs = inputs.nixpkgs.legacyPackages.${system};
 27      extraSpecialArgs = {
 28        inherit
 29          self
 30          inputs
 31          outputs
 32          stateVersion
 33          hostname
 34          desktop
 35          globals
 36          username
 37          ;
 38        libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 39      };
 40      modules = [
 41        ../home
 42      ];
 43    };
 44
 45  # Function for generating host configs
 46  mkHost =
 47    {
 48      hostname,
 49      desktop ? null,
 50      hardwareType ? "",
 51      system ? "x86_64-linux",
 52      pkgsInput ? inputs.nixpkgs,
 53      homeInput ? inputs.home-manager,
 54      agenixInput ? inputs.agenix,
 55    }:
 56    let
 57      globals = import ../globals.nix {
 58        inherit (pkgsInput) lib;
 59        inherit hostname;
 60      };
 61      specialArgs = {
 62        inherit
 63          self
 64          inputs
 65          outputs
 66          stateVersion
 67          hostname
 68          desktop
 69          hardwareType
 70          system
 71          globals
 72          ;
 73        libx = import ./functions.nix { inherit (pkgsInput) lib; };
 74        monitoring = import ./monitoring.nix { inherit (pkgsInput) lib; };
 75      };
 76    in
 77    pkgsInput.lib.nixosSystem {
 78      inherit specialArgs;
 79      inherit system;
 80      modules = [
 81        self.nixosModules.wireguard-client
 82        self.nixosModules.wireguard-server
 83        self.nixosModules.govanityurl
 84        self.nixosModules.gosmee
 85        self.nixosModules.rsync-replica
 86        agenixInput.nixosModules.default
 87        inputs.disko.nixosModules.disko
 88        inputs.lanzaboote.nixosModules.lanzaboote
 89        homeInput.nixosModules.home-manager
 90        {
 91          home-manager.extraSpecialArgs = specialArgs;
 92          home-manager.useGlobalPkgs = true;
 93          home-manager.useUserPackages = true;
 94        }
 95        ../systems
 96      ];
 97    };
 98
 99  # Function to create a system manager
100  mkSystemManager =
101    {
102      system ? "x86_64-linux",
103      hostname,
104      desktop ? null,
105      pkgsInput ? inputs.nixpkgs,
106      homeInput ? inputs.home-manager,
107    }:
108    let
109      globals = import ../globals.nix {
110        inherit (pkgsInput) lib;
111        inherit hostname;
112      };
113      extraSpecialArgs = {
114        inherit
115          self
116          inputs
117          outputs
118          stateVersion
119          hostname
120          desktop
121          globals
122          ;
123        libx = import ./functions.nix { inherit (pkgsInput) lib; };
124        monitoring = import ./monitoring.nix { inherit (pkgsInput) lib; };
125      };
126    in
127    inputs.system-manager.lib.makeSystemConfig {
128      inherit extraSpecialArgs;
129      modules = [
130        # self.nixosModules.wireguard-client
131        # inputs.agenix.nixosModules.default
132        homeInput.nixosModules.home-manager
133        {
134          config = {
135            nixpkgs.hostPlatform = system;
136            system-manager.allowAnyDistro = true;
137          };
138        }
139        ../systems/system-manager.nix
140      ];
141    };
142}