aboutsummaryrefslogtreecommitdiff
path: root/nvim/lua/plugins/gitsigns.lua
blob: 3f30f426f685e12cc51f014ff49690236c684dff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
return {
	{
		"lewis6991/gitsigns.nvim",
		lazy = false,
		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,
	}
}