aboutsummaryrefslogtreecommitdiff
path: root/nvim/lua/plugins/gitsigns.lua
diff options
context:
space:
mode:
Diffstat (limited to 'nvim/lua/plugins/gitsigns.lua')
-rw-r--r--nvim/lua/plugins/gitsigns.lua112
1 files changed, 112 insertions, 0 deletions
diff --git a/nvim/lua/plugins/gitsigns.lua b/nvim/lua/plugins/gitsigns.lua
new file mode 100644
index 0000000..6ee0348
--- /dev/null
+++ b/nvim/lua/plugins/gitsigns.lua
@@ -0,0 +1,112 @@
+return {
+ {
+ "lewis6991/gitsigns.nvim",
+ config = function()
+
+ require('gitsigns').setup {
+ signs = {
+ add = { text = '+' },
+ --change = { text = '┃' },
+ change = { text = 'Δ' },
+ delete = { text = '-' },
+ topdelete = { text = '-' },
+ changedelete = { text = 'Δ-' },
+ untracked = { text = '~' },
+ },
+ signs_staged = {
+ add = { text = '+' },
+ --change = { text = '┃' },
+ change = { text = 'Δ' },
+ delete = { text = '-' },
+ topdelete = { text = '-' },
+ changedelete = { text = 'Δ-' },
+ untracked = { text = '~' },
+ },
+ signs_staged_enable = true,
+ 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
+ },
+ auto_attach = true,
+ attach_to_untracked = false,
+ 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,
+ virt_text_priority = 100,
+ use_focus = true,
+ },
+ current_line_blame_formatter = '<author>, <author_time:%R> - <summary>',
+ 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
+ },
+
+ --[[-- Key Maps --]]
+
+ on_attach = function(bufnr)
+ local gitsigns = require('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', ']c', function()
+ if vim.wo.diff then
+ vim.cmd.normal({']c', bang = true})
+ else
+ gitsigns.nav_hunk('next')
+ end
+ end)
+
+ map('n', '[c', function()
+ if vim.wo.diff then
+ vim.cmd.normal({'[c', bang = true})
+ else
+ gitsigns.nav_hunk('prev')
+ end
+ end)
+ vim.api.nvim_set_hl(0, "GitSignsChangeDelete", { fg = "#E1341E", bg = "NONE" })
+ vim.api.nvim_set_hl(0, "GitSignsTopDelete", { fg = "#E1341E", bg = "NONE" })
+ vim.api.nvim_set_hl(0, "GitSignsDelete", { fg = "#E1341E", bg = "NONE" })
+
+
+ -- Actions
+ --[[
+ map('n', '<leader>hs', gitsigns.stage_hunk)
+ map('n', '<leader>hr', gitsigns.reset_hunk)
+ map('v', '<leader>hs', function() gitsigns.stage_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
+ map('v', '<leader>hr', function() gitsigns.reset_hunk {vim.fn.line('.'), vim.fn.line('v')} end)
+ map('n', '<leader>hS', gitsigns.stage_buffer)
+ map('n', '<leader>hu', gitsigns.undo_stage_hunk)
+ map('n', '<leader>hR', gitsigns.reset_buffer)
+ map('n', '<leader>hp', gitsigns.preview_hunk)
+ map('n', '<leader>hb', function() gitsigns.blame_line{full=true} end)
+ map('n', '<leader>tb', gitsigns.toggle_current_line_blame)
+ map('n', '<leader>hd', gitsigns.diffthis)
+ map('n', '<leader>hD', function() gitsigns.diffthis('~') end)
+ map('n', '<leader>td', gitsigns.toggle_deleted)
+ -- Text object
+ map({'o', 'x'}, 'ih', ':<C-U>Gitsigns select_hunk<CR>')
+ --]]
+ end,
+ }
+ end,
+ }
+}