{ pkgs, lib, ... }:
let inherit (lib) mkOption types;
in {
  options.imapnotify = {
    enable = lib.mkEnableOption "imapnotify";

    onNotify = mkOption {
      type = with types; either str (attrsOf str);
      default = "";
      example = "\${pkgs.isync}/bin/mbsync test-%s";
      description = "Shell commands to run on any event.";
    };

    onNotifyPost = mkOption {
      type = with types; either str (attrsOf str);
      default = "";
      example = {
        mail =
          "\${pkgs.notmuch}/bin/notmuch new && \${pkgs.libnotify}/bin/notify-send 'New mail arrived'";
      };
      description = "Shell commands to run after onNotify event.";
    };

    boxes = mkOption {
      type = types.listOf types.str;
      default = [ ];
      example = [ "Inbox" "[Gmail]/MyLabel" ];
      description = "IMAP folders to watch.";
    };

    extraArgs = mkOption {
      type = types.listOf types.str;
      default = [ ];
      example = [ "-wait 1" ];
      description = "Extra arguments to pass to goimapnotify.";
    };

    extraConfig = mkOption {
      type = let jsonFormat = pkgs.formats.json { }; in jsonFormat.type;
      default = { };
      description = "Additional configuration to add for this account.";
    };
  };
}