{ inputs, ... }: {
  generate = { host }:
    let
      syscfg = import ./systems/${host}/cfg.nix;
      nameValuePair = name: value: { inherit name value; };
    in ({
      "nixos" = inputs.nixpkgs.lib.nixosSystem {
        system = "x86_64-linux";
        specialArgs = { inherit inputs; };
        modules = [
          ./modules/shared/syscfg
          ./modules/shared/sops
          ./modules/nixos
          syscfg
          ./systems/${host}
          inputs.sops-nix.nixosModules.sops
          inputs.home-manager.nixosModules.home-manager

          inputs.nixos-wsl.nixosModules.wsl
          inputs.vscode-server.nixosModules.default

          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.extraSpecialArgs = { inherit inputs; };
            home-manager.users = builtins.listToAttrs (map (userConfig:
              nameValuePair userConfig.username {
                imports = [
                  ./modules/shared/syscfg
                  ./modules/shared/colors
                  ./modules/home
                  syscfg
                  { usercfg = userConfig; }
                  inputs.nix-colors.homeManagerModule
                  inputs.sops-nix.homeManagerModules.sops
                ];
              }) syscfg.syscfg.users);
          }
        ];
      };

      "macos" = inputs.darwin.lib.darwinSystem {
        system = "x86_64-darwin";
        modules = [
          ./modules/shared/syscfg
          ./modules/shared/sops
          syscfg
          ./systems/${host}
          inputs.sops-nix.nixosModules.sops
          inputs.home-manager.darwinModules.home-manager
          {
            home-manager.useGlobalPkgs = true;
            home-manager.useUserPackages = true;
            home-manager.extraSpecialArgs = { inherit inputs; };
            home-manager.users = builtins.listToAttrs (map (userConfig:
              nameValuePair userConfig.username {
                imports = [
                  inputs.nix-colors.homeManagerModule
                  inputs.sops-nix.homeManagerModules.sops
                ];
              }) syscfg.syscfg.users);
          }
        ];
      };
      "home" = inputs.home-manager.lib.homeManagerConfiguration {
        modules = [ ./modules/home ];
      };
      _ = throw "Unsupported system";
    }.${syscfg.syscfg.type});
}
