{ flake, flakeInputs, path, userName, config, lib, utils, ... }:

with lib;

{
  config = {
    users.users.${userName} = {}; # Just make sure the user is created

    home-manager.useUserService = true;
    home-manager.extraSpecialArgs = { inherit flake flakeInputs path; };
    home-manager.users.${userName} = {
      imports = lib.attrValues flake.homeModules;

      config = {
        manual.manpages.enable = true;
        systemd.user.startServices = "sd-switch";

        programs.ssh.internallyManaged = mkForce true;
      };
    };

    systemd.services."home-manager-${utils.escapeSystemdPath userName}" = lib.mkIf (!config.home-manager.enableSystemd) {
      restartIfChanged = false; # only run once on startup, deploy to running system with deploy-rs
    };
  };
}