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 = import inputs.nixpkgs {
 27        inherit system;
 28        config.allowUnfree = true;
 29        overlays = [
 30          # Our own flake exports (from overlays and pkgs dir)
 31          outputs.overlays.additions
 32          outputs.overlays.modifications
 33          outputs.overlays.unstable-packages
 34
 35          # And from other flakes
 36          inputs.emacs-overlay.overlay
 37          outputs.overlays.emacs-31
 38          inputs.chapeau-rouge.overlays.openshift
 39          inputs.chick-group.overlays.default
 40          inputs.go-org-readwise.overlays.default
 41          inputs.radian.overlays.default
 42          inputs.llm-agents.overlays.shared-nixpkgs
 43
 44          # Inline overlays (same as systems/default.nix)
 45          (_: _prev: {
 46            inherit (inputs.buildkit-tekton.packages.${system}) tkn-local;
 47            inherit (inputs.pass-run.packages.${system}) pass-run;
 48          })
 49        ];
 50      };
 51      extraSpecialArgs = {
 52        inherit
 53          self
 54          inputs
 55          outputs
 56          stateVersion
 57          hostname
 58          desktop
 59          globals
 60          username
 61          system
 62          ;
 63        libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 64      };
 65      modules = [
 66        ../home
 67      ];
 68    };
 69
 70  # Function for generating host configs
 71  mkHost =
 72    {
 73      hostname,
 74      desktop ? null,
 75      hardwareType ? "",
 76      system ? "x86_64-linux",
 77      pkgsInput ? inputs.nixpkgs,
 78      homeInput ? inputs.home-manager,
 79      agenixInput ? inputs.agenix,
 80    }:
 81    let
 82      globals = import ../globals.nix {
 83        inherit (pkgsInput) lib;
 84        inherit hostname;
 85      };
 86      specialArgs = {
 87        inherit
 88          self
 89          inputs
 90          outputs
 91          stateVersion
 92          hostname
 93          desktop
 94          hardwareType
 95          system
 96          globals
 97          ;
 98        libx = import ./functions.nix { inherit (pkgsInput) lib; };
 99        monitoring = import ./monitoring.nix { inherit (pkgsInput) lib; };
100      };
101    in
102    pkgsInput.lib.nixosSystem {
103      inherit specialArgs;
104      inherit system;
105      modules = [
106        self.nixosModules.wireguard-client
107        self.nixosModules.wireguard-server
108        self.nixosModules.govanityurl
109        self.nixosModules.gosmee
110        self.nixosModules.rsync-replica
111        self.nixosModules.praetorian
112        agenixInput.nixosModules.default
113        inputs.disko.nixosModules.disko
114        inputs.lanzaboote.nixosModules.lanzaboote
115        homeInput.nixosModules.home-manager
116        {
117          home-manager.extraSpecialArgs = specialArgs;
118          home-manager.useGlobalPkgs = true;
119          home-manager.useUserPackages = true;
120        }
121        ../systems
122      ];
123    };
124
125  # Function to create a system manager
126  mkSystemManager =
127    {
128      system ? "x86_64-linux",
129      hostname,
130      desktop ? null,
131      pkgsInput ? inputs.nixpkgs,
132      homeInput ? inputs.home-manager,
133    }:
134    let
135      globals = import ../globals.nix {
136        inherit (pkgsInput) lib;
137        inherit hostname;
138      };
139      extraSpecialArgs = {
140        inherit
141          self
142          inputs
143          outputs
144          stateVersion
145          hostname
146          desktop
147          globals
148          ;
149        libx = import ./functions.nix { inherit (pkgsInput) lib; };
150        monitoring = import ./monitoring.nix { inherit (pkgsInput) lib; };
151      };
152    in
153    inputs.system-manager.lib.makeSystemConfig {
154      inherit extraSpecialArgs;
155      modules = [
156        # self.nixosModules.wireguard-client
157        # inputs.agenix.nixosModules.default
158        homeInput.nixosModules.home-manager
159        {
160          config = {
161            nixpkgs.hostPlatform = system;
162            system-manager.allowAnyDistro = true;
163          };
164        }
165        ../systems/system-manager.nix
166      ];
167    };
168}