{
  config,
  lib,
  ...
}:
with lib;
with builtins; {
  options.vim.presence.presence-nvim = {
    enable = mkEnableOption "presence.nvim plugin for discord rich presence";

    image_text = mkOption {
      type = types.str;
      default = "The One True Text Editor";
      description = "Text displayed when hovering over the Neovim image";
    };

    main_image = mkOption {
      type = types.str;
      default = "neovim";
      description = "Main image to be displayed";
    };

    client_id = mkOption {
      type = types.str;
      default = "79327144129396737";
      description = "Client ID of the application";
    };

    auto_update = mkOption {
      type = types.bool;
      default = true;
      description = "Automatically update the presence";
    };

    enable_line_number = mkOption {
      type = types.bool;
      default = false;
      description = "Show line number on the RPC item";
    };

    buttons = mkOption {
      type = types.bool;
      default = true;
      description = "Show buttons on the RPC item";
    };

    show_time = mkOption {
      type = types.bool;
      default = true;
      description = "Show time on the RPC item";
    };

    rich_presence = {
      editing_text = mkOption {
        type = types.str;
        default = "Editing %s";
        description = "Text displayed when editing a file";
      };

      file_explorer_text = mkOption {
        type = types.str;
        default = "Browsing %s";
        description = "Text displayed when browsing files";
      };

      git_commit_text = mkOption {
        type = types.str;
        default = "Committing changes";
        description = "Text displayed when committing changes";
      };

      plugin_manager_text = mkOption {
        type = types.str;
        default = "Managing plugins";
        description = "Text displayed when managing plugins";
      };

      reading_text = mkOption {
        type = types.str;
        default = "Reading %s";
        description = "Text displayed when reading a file";
      };

      workspace_text = mkOption {
        type = types.str;
        default = "Working on %s";
        description = "Text displayed when working on a project";
      };

      line_number_text = mkOption {
        type = types.str;
        default = "Line %s out of %s";
        description = "Text displayed when showing line number";
      };
    };
  };
}