{lib, ...}: let
  inherit (lib) mkEnableOption mkMappingOption;
in {
  options.vim.git = {
    enable = mkEnableOption "git tools via gitsigns";

    gitsigns = {
      enable = mkEnableOption "gitsigns";

      mappings = {
        nextHunk = mkMappingOption "Next hunk [Gitsigns]" "]c";
        previousHunk = mkMappingOption "Previous hunk [Gitsigns]" "[c";

        stageHunk = mkMappingOption "Stage hunk [Gitsigns]" "<leader>hs";
        undoStageHunk = mkMappingOption "Undo stage hunk [Gitsigns]" "<leader>hu";
        resetHunk = mkMappingOption "Reset hunk [Gitsigns]" "<leader>hr";

        stageBuffer = mkMappingOption "Stage buffer [Gitsigns]" "<leader>hS";
        resetBuffer = mkMappingOption "Reset buffer [Gitsigns]" "<leader>hR";

        previewHunk = mkMappingOption "Preview hunk [Gitsigns]" "<leader>hP";

        blameLine = mkMappingOption "Blame line [Gitsigns]" "<leader>hb";
        toggleBlame = mkMappingOption "Toggle blame [Gitsigns]" "<leader>tb";

        diffThis = mkMappingOption "Diff this [Gitsigns]" "<leader>hd";
        diffProject = mkMappingOption "Diff project [Gitsigns]" "<leader>hD";

        toggleDeleted = mkMappingOption "Toggle deleted [Gitsigns]" "<leader>td";
      };

      codeActions = mkEnableOption "gitsigns codeactions through null-ls";
    };
  };
}