return { { "sindrets/diffview.nvim", cmd = { "DiffviewLog", "DiffviewOpen", "DiffviewClose", "DiffviewRefresh", "DiffviewFocusFiles", "DiffviewFileHistory", "DiffviewToggleFiles", }, }, { "NeogitOrg/neogit", dependencies = { "nvim-lua/plenary.nvim", "sindrets/diffview.nvim", }, cmd = "Neogit", opts = { integrations = { diffview = true, }, }, }, { "lewis6991/gitsigns.nvim", dependencies = { "folke/which-key.nvim" }, event = { "BufReadPre", "BufNewFile" }, opts = { on_attach = function(bufnr) local gs = require("gitsigns") local wk = require("which-key") wk.register({ ["]c"] = { function() if vim.wo.diff then return "]c" end vim.schedule(gs.next_hunk) return "" end, "Next hunk", }, ["[c"] = { function() if vim.wo.diff then return "[c" end vim.schedule(gs.prev_hunk) return "" end, "Previous hunk", }, }, {expr=true}) wk.register({ ["h"] = { name = "+Gitsigns", s = { gs.stage_hunk, "Stage hunk" }, r = { gs.reset_hunk, "Reset hunk" }, S = { gs.stage_buffer, "Stage buffer" }, u = { gs.undo_stage_hunk, "Undo stage hunk" }, R = { gs.reset_buffer, "Reset buffer" }, p = { gs.preview_hunk, "Preview hunk" }, b = { function() gs.blame_line({full=true}) end, "Blame line" }, B = { gs.toggle_current_line_blame, "Toggle current line blame" }, d = { gs.diffthis, "Diff current buffer" }, D = { function() gs.diffthis("~") end, "TODO" }, x = { gs.toggle_deleted, "Toggle deleted" }, }, }) wk.register({ ["h"] = { name = "+Gitsigns", s = { function() gs.stage_hunk({vim.fn.line("."), vim.fn.line("v")}) end, "Stage selected lines", }, r = { function() gs.reset_hunk({vim.fn.line("."), vim.fn.line("v")}) end, "Reset selected lines", }, }, }, {mode="v"}) wk.register({ ["ih"] = { ":Gitsigns select_hunk", "Select hunk" }, }, {mode={ "o", "x" }}) end, }, }, }