diff options
Diffstat (limited to 'lua/conf/plugins/gitsigns.lua')
-rw-r--r-- | lua/conf/plugins/gitsigns.lua | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/lua/conf/plugins/gitsigns.lua b/lua/conf/plugins/gitsigns.lua new file mode 100644 index 0000000..f168b93 --- /dev/null +++ b/lua/conf/plugins/gitsigns.lua @@ -0,0 +1,78 @@ +local misc = require('core.misc') +local map = misc.map + +return { 'lewis6991/gitsigns.nvim', + disable = vim.version().minor < 9, + function() + local gs = require("gitsigns") + + gs.setup { + signs = { + add = { text = '│' }, + change = { text = '│' }, + delete = { text = '-' }, + topdelete = { text = '‾' }, + changedelete = { text = '~' }, + untracked = { text = '┆' } + }, + + signcolumn = true, + numhl = false, + linehl = false, + word_diff = false, + + watch_gitdir = { + interval = 1000, + follow_files = true + }, + + attach_to_untracked = true, + current_line_blame_formatter = '<author>, <author_time:%Y-%m-%d> - <summary>', + + preview_config = { border = 'solid' }, + + on_attach = function(bufnr) + local opts = { buffer = bufnr } + + -- Navigation + map('n', ']c', function() + if vim.wo.diff then + return ']c' + end + vim.schedule(function() gs.next_hunk() end) + return '<Ignore>' + end, { expr = true, buffer = bufnr }) + + map('n', '[c', function() + if vim.wo.diff then + return '[c' + end + vim.schedule(function() gs.prev_hunk() end) + return '<Ignore>' + end, { expr = true, buffer = bufnr }) + + -- Actions + map('n', '<leader>hs', gs.stage_hunk, opts) + map('n', '<leader>hr', gs.reset_hunk, opts) + map('v', '<leader>hs', function() + gs.stage_hunk { vim.fn.line('.'), vim.fn.line('v') } + end, opts) + map('v', '<leader>hr', function() + gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') } + end, opts) + map('n', '<leader>hS', gs.stage_buffer, opts) + map('n', '<leader>hu', gs.undo_stage_hunk, opts) + map('n', '<leader>hR', gs.reset_buffer, opts) + map('n', '<leader>hp', gs.preview_hunk, opts) + map('n', '<leader>hb', function() gs.blame_line { full=true } end, opts) + map('n', '<leader>tb', gs.toggle_current_line_blame, opts) + map('n', '<leader>hd', gs.diffthis, opts) + map('n', '<leader>hD', function() gs.diffthis('~') end, opts) + map('n', '<leader>td', gs.toggle_deleted, opts) + + -- Text object + map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', opts) + end + } + end +} |