{lib, ...}: let
  inherit (lib) mkEnableOption mkMappingOption mkOption types;
in {
  options.vim.treesitter = {
    enable = mkEnableOption "treesitter, also enabled automatically through language options";

    fold = mkEnableOption "fold with treesitter";

    autotagHtml = mkEnableOption "autoclose and rename html tag";

    mappings = {
      incrementalSelection = {
        init = mkMappingOption "Init selection [treesitter]" "gnn";
        incrementByNode = mkMappingOption "Increment selection by node [treesitter]" "grn";
        incrementByScope = mkMappingOption "Increment selection by scope [treesitter]" "grc";
        decrementByNode = mkMappingOption "Decrement selection by node [treesitter]" "grm";
      };
    };

    grammars = mkOption {
      type = with types; listOf package;
      default = [];
      description = ''
        List of treesitter grammars to install. For supported languages
        use the `vim.language.<lang>.treesitter` option
      '';
    };
  };
}