{ pkgs, home-manager, mkHomeRole, ... }:

{
  mkUser = { name, roles ? [ ] }:
    let
      roles_mod = (map (r: mkHomeRole r) roles);
    in
    {
      fileSystems."/home/${name}/Downloads" = {
        device = "tmpfs";
        fsType = "tmpfs";
        options = [ "size=3G" ];
      };

      users = {
        users.${name} = {
          isNormalUser = name != "root";
          extraGroups = [ "wheel" "plugdev" ];
          shell = pkgs.zsh;
        };
      };

      programs.zsh.enable = true;

      home-manager.users.${name}.imports = [
        (mkHomeRole "common")
        (mkHomeRole "zsh")
      ] ++ roles_mod;
    };

  mkHMUser = { name, roles ? [ ] }:
    let
      roles_mod = (map (r: mkHomeRole r) roles);
    in
    home-manager.lib.homeManagerConfiguration {
      inherit pkgs;
      modules = [
        {
          home = {
            username = name;
            homeDirectory =
              if pkgs.stdenv.isLinux then "/home/${name}" else "/Users/${name}";
          };
        }
        (mkHomeRole "common")
      ] ++ roles_mod;
    };
}