{ inputs, outputs, stateVersion, hmStateVersion, ... }: {
  
  # Helper function for generating home-manager configs
  mkHome = { 
    hostname, 
    username ? "albert",
    desktop  ? null, 
    platform ? "x86_64-linux", 
    theme    ? "default" 
  }: inputs.home-manager.lib.homeManagerConfiguration {
    pkgs = inputs.nixpkgs.legacyPackages.${platform};
    extraSpecialArgs = { inherit inputs outputs desktop hostname platform username hmStateVersion theme; };
    modules = [ 
      ../home-manager 
    ];
  };

  # Helper function for generating host configs
  mkHost = { 
    hostname, 
    username  ? "albert",
    desktop   ? null, 
    gpu       ? null, 
    platform  ? "x86_64-linux", 
    theme     ? "default"
  }: inputs.nixpkgs.lib.nixosSystem {
    specialArgs = { inherit inputs outputs desktop hostname username stateVersion gpu platform theme; };
    modules = [
        ../nixos
        inputs.sops-nix.nixosModules.sops
        inputs.lanzaboote.nixosModules.lanzaboote
    ];
  };

  # Combines mkHost and mkHome for image building
  mkImage = {
    hostname  , 
    username  ? "albert",
    desktop   ? null, 
    platform  ? "x86_64-linux",
    gpu       ? null, 
    theme     ? "default",
    format
  }: 
  inputs.nixos-generators.nixosGenerate {
    specialArgs = { inherit inputs outputs desktop hostname username stateVersion hmStateVersion gpu platform theme format; };
    format = format;
    system = platform;

    modules = [
      ../nixos
      ../nixos/common/modules/installer.nix
      inputs.sops-nix.nixosModules.sops
      inputs.lanzaboote.nixosModules.lanzaboote
      inputs.home-manager.nixosModules.home-manager {
        home-manager.extraSpecialArgs  = { inherit inputs outputs desktop hostname username hmStateVersion stateVersion gpu platform theme format; };
        home-manager.users."${username}" = import ../home-manager;
      }
    ];
  };

  # Combines mkHost and mkHome for image building
  mkMinImage = {
    hostname  , 
    username  ? "albert",
    desktop   ? null, 
    platform  ? "x86_64-linux",
    gpu       ? null, 
    theme     ? "default",
    format
  }: 
  inputs.nixos-generators.nixosGenerate {
    specialArgs = { inherit inputs outputs desktop hostname username stateVersion hmStateVersion gpu platform theme format; };
    format = format;
    system = platform;

    modules = [
      ../nixos/minimal.nix
      ../nixos/common/modules/installer.nix
      inputs.sops-nix.nixosModules.sops
      inputs.lanzaboote.nixosModules.lanzaboote
    ];
  };

  forAllSystems = inputs.nixpkgs.lib.genAttrs [
    "aarch64-linux"
    "x86_64-linux"
  ];
}