return { { "tpope/vim-fugitive", config = function() local myFugitive = vim.api.nvim_create_augroup("myFugitive", {}) local autocmd = vim.api.nvim_create_autocmd autocmd("BufWinEnter", { group = myFugitive, pattern = "*", callback = function() if vim.bo.ft ~= "fugitive" then return end local bufnr = vim.api.nvim_get_current_buf() local opts = {buffer = bufnr, remap = false} vim.keymap.set("n", "P", function() vim.cmd.Git('push') end, opts) -- NOTE: rebase always vim.keymap.set("n", "p", function() vim.cmd.Git({'pull', '--rebase'}) end, opts) -- NOTE: easy set up branch that wasn't setup properly vim.keymap.set("n", "t", ":Git push -u origin", opts); end }) vim.keymap.set("n", "gg", vim.cmd.Git) end }, { "lewis6991/gitsigns.nvim", event = { "BufReadPre", "BufNewFile" }, opts = { on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, desc) vim.keymap.set(mode, l, r, { buffer = bufnr, desc = desc}) end -- Actions map("n", "gs", gs.stage_hunk, "Stage hunk") map("n", "gr", gs.reset_hunk, "Reset hunk") map("v", "gs", function() -- stage selected hunk gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Stage hunk") map("v", "gr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, "Reset hunk") map("n", "gS", gs.stage_buffer, "Stage buffer") -- stage whole buffer map("n", "gR", gs.reset_buffer, "Reset buffer") -- unstage whole buffer map("n", "gu", gs.undo_stage_hunk, "Undo stage hunk") map("n", "gbl", function() gs.blame_line({ full = true }) end, "Blame line") map("n", "gB", gs.toggle_current_line_blame, "Toggle line blame") map("n", "gd", gs.diffthis, "Diff this") map("n", "gD", function() gs.diffthis("~") end, "Diff this ~") -- Navigation map("n", "]h", gs.next_hunk, "Next Hunk") map("n", "[h", gs.prev_hunk, "Prev Hunk") map({"o", "x" }, "ih", ":Gitsigns select_hunk", "Gitsigns select hunk") end } } }