return { { "lewis6991/gitsigns.nvim", event = { "BufReadPost", "BufWritePost", "BufNewFile" }, opts = { signs = { add = { text = "▕" }, change = { 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", "]h", gs.next_hunk, "Next Hunk") map("n", "[h", gs.prev_hunk, "Prev Hunk") map({ "n", "v" }, "ga", ":Gitsigns stage_hunk", "Add Hunk") map({ "n", "v" }, "gr", ":Gitsigns reset_hunk", "Reset Hunk") map("n", "gu", gs.undo_stage_hunk, "Unstage Hunk") map("n", "gA", gs.stage_buffer, "Add buffer") map("n", "gR", gs.reset_buffer, "Reset Buffer") map("n", "gp", gs.preview_hunk, "Preview Hunk") map({ "o", "x" }, "ih", ":Gitsigns select_hunk", "Git Select Hunk") map({ "o", "x" }, "ah", ":Gitsigns select_hunk", "Git Select Hunk") end, }, }, { "akinsho/git-conflict.nvim", event = "VeryLazy", keys = { { "gxo", "(git-conflict-ours)", desc = "Accept ours" }, { "gxt", "(git-conflict-theirs)", desc = "Accept theirs" }, { "gxb", "(git-conflict-both)", desc = "Accept both" }, { "gx0", "(git-conflict-none)", desc = "Accept none" }, { "[x", "(git-conflict-prev-conflict)", desc = "Previous conflict" }, { "]x", "(git-conflict-next-conflict)", desc = "Next conflict" }, }, opts = { default_mappings = false, }, init = function() vim.keymap.del("n", "gx") end }, { -- "FabijanZulj/blame.nvim", "zoriya/blame.nvim", -- dev = true, keys = { { "gb", "ToggleBlame window", desc = "Git blame" }, }, cmd = "ToggleBlame", opts = { date_format = "%Y/%m/%d", width = 50, commit_detail_view = "current", format = function(blame) if string.sub(blame.hash, 0, 8) == "00000000" then return "Not Committed Yet" end return string.format("%s %s %s", blame.author, blame.date, blame.summary) end, }, }, { "ruifm/gitlinker.nvim", dependencies = { "nvim-lua/plenary.nvim" }, config = true, keys = { { "gy", mode = { "n", "v" }, desc = "Yank remote git url" }, { "go", function() require("gitlinker").get_buf_range_url("n", { action_callback = require "gitlinker.actions".open_in_browser }) end, mode = "n", desc = "Open in browser" }, { "go", function() require("gitlinker").get_buf_range_url("v", { action_callback = require "gitlinker.actions".open_in_browser }) end, mode = "v", desc = "Open in browser" }, }, }, { "echasnovski/mini-git", main = 'mini.git', config = true, cmd = "Git", keys = { { "gi", function() require("mini.git").show_at_cursor({}) end, desc = "Show info at cursor", mode = { "n", "x" }, }, }, init = function() vim.api.nvim_create_autocmd("FileType", { group = vim.api.nvim_create_augroup("MiniGit", { clear = true }), pattern = "git", callback = function() vim.bo.foldexpr = "v:lua.MiniGit.diff_foldexpr()" end, }) end }, }