{
  config,
  lib,
  ...
}:
{
  config.hm.options = {
    quickServices =
      with lib;
      mkOption {
        type = with types; attrsOf str;
        default = { };
      };

    quickOneShots =
      with lib;
      mkOption {
        type = with types; attrsOf str;
        default = { };
      };
    # for specifying an additional systemd target
    extraTarget =
      with lib;
      mkOption {
        type = with types; listOf str;
        default = [ ];
      };
  };

  config.hm.config = {
    systemd.user.services =
      builtins.mapAttrs (name: cmd: {
        Unit = {
          Description = "${name}";
          Requires = [ "graphical-session.target" ] ++ config.hm.extraTarget;
          After = [ "graphical-session.target" ] ++ config.hm.extraTarget;
        };
        Service = {
          ExecStart = cmd;
        };
        Install = {
          WantedBy = [ "graphical-session.target" ] ++ config.hm.extraTarget;
        };
      }) config.hm.quickServices
      // builtins.mapAttrs (name: cmd: {
        Unit = {
          Description = "${name}";
          After = [ "graphical-session.target" ] ++ config.extraTarget;
        };
        Service = {
          ExecStart = cmd;
          Type = "oneshot";
        };
        Install = {
          WantedBy = [ "graphical-session.target" ] ++ config.extraTarget;
        };
      }) config.hm.quickOneShots;
  };
}
