{
  config,
  lib,
  ...
}: {
  options.ar.users = let
    mkUser = user: {
      enable = lib.mkEnableOption "${user}.";

      password = lib.mkOption {
        description = "Hashed password for ${user}.";
        type = lib.types.str;
      };
    };
  in {
    defaultGroups = lib.mkOption {
      description = "Default groups for desktop users.";
      default = [
        "dialout"
        "docker"
        "libvirtd"
        "lp"
        "networkmanager"
        "scanner"
        "transmission"
        "video"
        "wheel"
      ];
    };

    aly =
      mkUser "aly"
      // {
        syncthing = {
          enable = lib.mkEnableOption "Syncthing sync service.";

          certFile = lib.mkOption {
            description = "Syncthing cert file.";
            type = lib.types.nonEmptyStr;
          };

          keyFile = lib.mkOption {
            description = "Syncthing key file.";
            type = lib.types.nonEmptyStr;
          };

          musicPath = lib.mkOption {
            description = "Whether to sync music folder.";
            default = "/home/aly/music";
            type = lib.types.str;
          };

          syncMusic = lib.mkOption {
            description = "Whether to sync music folder.";
            default = config.ar.users.aly.syncthing.enable;
            type = lib.types.bool;
          };
        };
      };

    dustin = mkUser "dustin";
  };
}
