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