name:
{
  user ? { },
  hm ? { },
  modules ? [ ],
  config,
  usesContainers ? false,
  ...
}:

{
  inputs,
  pkgs,
  lib,
  home-manager,
  ...
}:
{
  imports = [ home-manager.nixosModules.home-manager ];

  users.users."${name}" = {
    isNormalUser = true;
    shell = pkgs.zsh;

    # increase sub{u,g}id range for container user namespaces
    subUidRanges = lib.optionals usesContainers [
      {
        startUid = 100000;
        count = 60000000;
      }
    ];
    subGidRanges = lib.optionals usesContainers [
      {
        startGid = 100000;
        count = 60000000;
      }
    ];
  } // user;

  home-manager = {
    useUserPackages = true;
    useGlobalPkgs = true;
    backupFileExtension = "backup";
    users."${name}" = lib.mkMerge [
      { imports = modules; }
      (import config)
    ];
    extraSpecialArgs = {
      inherit inputs;
    };
  } // hm;
}