return { { "vim-fugitive", auto_enable = { "vim-fugitive", "vim-rhubarb", }, keys = { { "gg", "G", desc = "Open git" } }, cmd = { "G", "Git", "Gdiffsplit", "Gvdiffsplit", "Gedit", "Gread", "Gwrite", "Ggrep", "GMove", "Glgrep", "GRename", "GDelete", "GRemove", "GBrowse", "DiffviewOpen", "DiffviewClose", "DiffviewToggleFiles", "DiffviewFocusFiles", "DiffviewRefresh", "DiffviewFileHistory", }, load = function(name) nixInfo.lze.loaders.multi({ name, "vim-rhubarb", "diffview.nvim", }) end, }, { "neogit", auto_enable = true, keys = { { "gg", "Neogit", desc = "Open git" } }, cmd = { "Neogit" }, after = function(_) require("neogit").setup() end, }, { "codediff.nvim", auto_enable = true, dep_of = { "neogit" }, cmd = "CodeDiff", after = function() require("codediff").setup() end, }, { "mini.diff", auto_enable = true, event = "DeferredUIEnter", after = function(_) require("mini.diff").setup({ view = { style = "sign", signs = { add = "│", change = "~", delete = "-" }, priority = 9, }, mappings = { apply = "", reset = "", textobject = "", goto_first = "", goto_prev = "", goto_next = "", goto_last = "", }, }) end, }, { "gitsigns.nvim", auto_enable = true, event = "DeferredUIEnter", after = function(_) require("gitsigns").setup({ -- See `:help gitsigns.txt` signs = { add = { text = "+" }, change = { text = "~" }, delete = { text = "_" }, topdelete = { text = "‾" }, changedelete = { text = "~" }, }, on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end -- Navigation map({ "n", "v" }, "]c", function() if vim.wo.diff then return "]c" end vim.schedule(function() gs.next_hunk() end) return "" end, { expr = true, desc = "Jump to next hunk" }) map({ "n", "v" }, "[c", function() if vim.wo.diff then return "[c" end vim.schedule(function() gs.prev_hunk() end) return "" end, { expr = true, desc = "Jump to previous hunk" }) -- Actions -- visual mode map("v", "hs", function() gs.stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "stage git hunk" }) map("v", "hr", function() gs.reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) end, { desc = "reset git hunk" }) -- normal mode map("n", "gs", gs.stage_hunk, { desc = "git stage hunk" }) map("n", "gr", gs.reset_hunk, { desc = "git reset hunk" }) map("n", "gS", gs.stage_buffer, { desc = "git Stage buffer" }) map("n", "gu", gs.undo_stage_hunk, { desc = "undo stage hunk" }) map("n", "gR", gs.reset_buffer, { desc = "git Reset buffer" }) map("n", "gp", gs.preview_hunk, { desc = "preview git hunk" }) map("n", "gb", function() gs.blame_line({ full = false }) end, { desc = "git blame line" }) -- map('n', 'gd', gs.diffthis, { desc = 'git diff against index' }) map("n", "gD", function() gs.diffthis("~") end, { desc = "git diff against last commit" }) -- Toggles map("n", "gtb", gs.toggle_current_line_blame, { desc = "toggle git blame line" }) map("n", "gtd", gs.toggle_deleted, { desc = "toggle git show deleted" }) -- Text object map({ "o", "x" }, "ih", ":Gitsigns select_hunk", { desc = "select git hunk" }) end, }) -- vim.cmd([[hi GitSignsAdd guifg=#04de21]]) -- vim.cmd([[hi GitSignsChange guifg=#83fce6]]) -- vim.cmd([[hi GitSignsDelete guifg=#fa2525]]) end, }, }