{
  hostname,
  inputs,
  users ? [ ],
  modules ? [ ],
  overlays ? [ ],
}:
let
  mkHome = import ./mkHome.nix;
  usersHomes = builtins.listToAttrs (
    map (username: {
      name = username;
      value = mkHome {
        inherit username hostname;
      };
    }) users
  );
  usersSystemsConfigs = map (username: ../users/${username}/system.nix) users;
in
{
  deployment = {
    allowLocalDeployment = true;
    tags = [ hostname ];
  };
  imports = [
    {
      _module.args = {
        inherit inputs;
        inherit hostname;
      };
      nixpkgs.overlays = overlays;
    }
    ../hosts/${hostname}
    ../hosts/common
    inputs.home-manager.nixosModules.home-manager
    {
      home-manager = {
        useGlobalPkgs = true;
        extraSpecialArgs = {
          inherit inputs;
          inherit hostname;
        };
        users = usersHomes;
      };
    }
  ]
  ++ modules
  ++ usersSystemsConfigs;
}
