return { { "purarue/gitsigns-yadm.nvim", lazy = true, }, { "lewis6991/gitsigns.nvim", event = { "BufReadPost", "VeryLazy" }, opts = { signs = { add = { text = '│' }, change = { text = '~' }, delete = { text = '_' }, topdelete = { text = '‾' }, changedelete = { text = '~' }, untracked = { text = '┆' }, }, _on_attach_pre = function(_, callback) if vim.fn.executable("yadm") == 1 then require("gitsigns-yadm").yadm_signs(callback) else callback() end end, signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` numhl = false, -- Toggle with `:Gitsigns toggle_numhl` linehl = false, -- Toggle with `:Gitsigns toggle_linehl` word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` watch_gitdir = { follow_files = true }, attach_to_untracked = true, current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` current_line_blame_opts = { virt_text = true, virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align' delay = 1000, ignore_whitespace = false, }, current_line_blame_formatter = ', - ', sign_priority = 6, update_debounce = 100, status_formatter = nil, -- Use default max_file_length = 40000, -- Disable if file is longer than this (in lines) preview_config = { -- Options passed to nvim_open_win border = 'single', style = 'minimal', relative = 'cursor', row = 0, col = 1 }, on_attach = function(bufnr) local gs = package.loaded.gitsigns local function map(mode, l, r, desc, opts) opts = opts or {} opts.buffer = bufnr opts.desc = desc vim.keymap.set(mode, l, r, opts) end -- navigation map('n', ']c', function() if vim.wo.diff then return ']c' end vim.schedule(function() gs.next_hunk() end) return '' end, "jump to next hunk", { expr = true }) map('n', '[c', function() if vim.wo.diff then return '[c' end vim.schedule(function() gs.prev_hunk() end) return '' end, "jump to previous hunk", { expr = true }) -- Actions map('n', 'hs', gs.stage_hunk, "stage hunk") map('n', 'hr', gs.reset_hunk, "reset hunk") map('v', 'hs', function() gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } end, "stage selection") map('v', 'hr', function() gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } end, "reset selection") map('n', 'hS', gs.stage_buffer, "stage buffer") map('n', 'hu', gs.undo_stage_hunk, "undo stage hunk") map('n', 'hR', gs.reset_buffer, "undo reset buffer") map('n', 'hp', gs.preview_hunk, "preview hunk") map('n', 'hb', function() gs.blame_line { full = true } end, "blame line") map('n', 'tb', gs.toggle_current_line_blame, "toggle current line blame") map('n', 'hd', gs.diffthis, "diff this") map('n', 'hD', function() gs.diffthis('~') end, "diff whole buffer") map('n', 'td', gs.toggle_deleted, "toggle deleted") -- Text object map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk', "select hunk") end }, }, { "NeogitOrg/neogit", dependencies = { "nvim-lua/plenary.nvim", -- required "sindrets/diffview.nvim", -- optional - Diff integration "nvim-telescope/telescope.nvim", -- optional }, cmd = "Neogit", config = true } }