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      standaloneFedora ? false,
 18      system ? "x86_64-linux",
 19    }:
 20    let
 21      globals = import ../globals.nix {
 22        inherit (inputs.nixpkgs) lib;
 23        inherit hostname;
 24      };
 25    in
 26    inputs.home-manager.lib.homeManagerConfiguration {
 27      pkgs = import inputs.nixpkgs {
 28        inherit system;
 29        config.allowUnfree = true;
 30        overlays = [
 31          # Our own flake exports (from overlays and pkgs dir)
 32          outputs.overlays.additions
 33          outputs.overlays.modifications
 34          outputs.overlays.unstable-packages
 35
 36          # And from other flakes
 37          inputs.emacs-overlay.overlay
 38          outputs.overlays.emacs-31
 39          inputs.chapeau-rouge.overlays.openshift
 40          inputs.chick-group.overlays.default
 41          inputs.go-org-readwise.overlays.default
 42          inputs.radian.overlays.default
 43          inputs.llm-agents.overlays.shared-nixpkgs
 44
 45          # Inline overlays (same as systems/default.nix)
 46          (_: _prev: {
 47            inherit (inputs.buildkit-tekton.packages.${system}) tkn-local;
 48            inherit (inputs.pass-run.packages.${system}) pass-run;
 49          })
 50        ];
 51      };
 52      extraSpecialArgs = {
 53        inherit
 54          self
 55          inputs
 56          outputs
 57          stateVersion
 58          hostname
 59          desktop
 60          standaloneFedora
 61          globals
 62          username
 63          system
 64          ;
 65        libx = import ./functions.nix { inherit (inputs.nixpkgs) lib; };
 66      };
 67      modules = [
 68        ../home
 69      ];
 70    };
 71
 72  # Function for generating host configs
 73  mkHost =
 74    {
 75      hostname,
 76      desktop ? null,
 77      hardwareType ? "",
 78      system ? "x86_64-linux",
 79      pkgsInput ? inputs.nixpkgs,
 80      homeInput ? inputs.home-manager,
 81      agenixInput ? inputs.agenix,
 82    }:
 83    let
 84      globals = import ../globals.nix {
 85        inherit (pkgsInput) lib;
 86        inherit hostname;
 87      };
 88      specialArgs = {
 89        inherit
 90          self
 91          inputs
 92          outputs
 93          stateVersion
 94          hostname
 95          desktop
 96          hardwareType
 97          system
 98          globals
 99          ;
100        libx = import ./functions.nix { inherit (pkgsInput) lib; };
101        monitoring = import ./monitoring.nix { inherit (pkgsInput) lib; };
102      };
103    in
104    pkgsInput.lib.nixosSystem {
105      inherit specialArgs;
106      inherit system;
107      modules = [
108        self.nixosModules.wireguard-client
109        self.nixosModules.wireguard-server
110        self.nixosModules.govanityurl
111        self.nixosModules.gosmee
112        self.nixosModules.rsync-replica
113        self.nixosModules.praetorian
114        agenixInput.nixosModules.default
115        inputs.disko.nixosModules.disko
116        inputs.lanzaboote.nixosModules.lanzaboote
117        homeInput.nixosModules.home-manager
118        {
119          home-manager.extraSpecialArgs = specialArgs;
120          home-manager.useGlobalPkgs = true;
121          home-manager.useUserPackages = true;
122        }
123        ../systems
124      ];
125    };
126
127}