return { "lewis6991/gitsigns.nvim", event = { "BufReadPre", "BufNewFile" }, opts = { signs = { add = { text = "▎" }, change = { text = "▎" }, delete = { text = "" }, topdelete = { text = "" }, changedelete = { text = "▎" }, untracked = { text = "▎" }, }, on_attach = function(buffer) local gs = package.loaded.gitsigns local function map(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc }) end map("n", "gh", gs.prev_hunk, "Previous hunk") map("n", "gl", gs.next_hunk, "Next hunk") -- Git actions map("n", "ga", gs.stage_hunk, "Add/stage hunk") map("n", "gr", gs.reset_hunk, "Reset hunk") map("n", "gA", gs.stage_buffer, "Add/stage all") map("n", "gR", gs.reset_buffer, "Reset all") map("n", "gu", gs.undo_stage_hunk, "Undo stage") map("n", "gp", gs.preview_hunk, "Preview hunk") map("n", "gb", function() gs.blame_line({ full = true }) end, "Blame line") map("n", "gd", gs.diffthis, "Diff this") map("n", "gD", function() gs.diffthis("~") end, "Diff this ~") map("n", "gt", gs.toggle_deleted, "Toggle deleted") -- Visual mode map("v", "ga", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Add/stage") map("v", "gr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Reset") -- Text object map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "Select hunk") end, }, }