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
|
# Git integration: signs, blame, diffs and hunk operations
{ config, lib, ... }:
{
config.programs.nixvim = lib.mkIf config.development.nixvim.enable {
plugins.gitsigns = {
enable = true;
settings = {
signs = {
add.text = "┃";
change.text = "┃";
delete.text = "▁";
topdelete.text = "▔";
changedelete.text = "~";
untracked.text = "┆";
};
numhl = true;
current_line_blame = false;
current_line_blame_formatter = "<author>, <author_time:%Y-%m-%d> - <summary>";
on_attach = ''
function(bufnr)
local gitsigns = require('gitsigns')
local function map(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, silent = true, desc = desc })
end
-- Navigation
map('n', ']c', function() gitsigns.nav_hunk('next') end, 'Next hunk')
map('n', '[c', function() gitsigns.nav_hunk('prev') end, 'Previous hunk')
map('n', ']C', function() gitsigns.nav_hunk('last') end, 'Last hunk')
map('n', '[C', function() gitsigns.nav_hunk('first') end, 'First hunk')
-- Hunk actions
map('n', '<leader>gs', gitsigns.stage_hunk, 'Stage hunk')
map('v', '<leader>gs', function()
gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Stage visual range hunk')
map('n', '<leader>gr', gitsigns.reset_hunk, 'Reset hunk')
map('v', '<leader>gr', function()
gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Reset visual range hunk')
map('n', '<leader>gS', gitsigns.stage_buffer, 'Stage buffer')
map('n', '<leader>gR', gitsigns.reset_buffer, 'Reset buffer')
map('n', '<leader>gi', gitsigns.reset_buffer_index, 'Unstage buffer (reset index)')
map('n', '<leader>gu', gitsigns.undo_stage_hunk, 'Undo stage hunk')
-- Preview
map('n', '<leader>gp', gitsigns.preview_hunk, 'Preview hunk')
map('n', '<leader>gP', gitsigns.preview_hunk_inline, 'Preview hunk inline')
-- Blame
map('n', '<leader>gb', gitsigns.blame_line, 'Blame line')
map('n', '<leader>gB', function()
gitsigns.blame_line({ full = true })
end, 'Blame line (full)')
-- Diffs / base
map('n', '<leader>gd', gitsigns.diffthis, 'Diff this (index)')
map('n', '<leader>gD', function()
gitsigns.diffthis('~')
end, 'Diff this (HEAD)')
map('n', '<leader>gc', function()
gitsigns.change_base(nil, true)
end, 'Change diff base')
-- Quickfix / location list
map('n', '<leader>gq', gitsigns.setqflist, 'Hunks to quickfix')
map('n', '<leader>gQ', function()
gitsigns.setqflist('all')
end, 'Repo hunks to quickfix')
map('n', '<leader>gl', gitsigns.setloclist, 'Hunks to location list')
-- Toggles
map('n', '<leader>gts', gitsigns.toggle_signs, 'Toggle signs')
map('n', '<leader>gtl', gitsigns.toggle_linehl, 'Toggle line highlight')
map('n', '<leader>gtn', gitsigns.toggle_numhl, 'Toggle number highlight')
map('n', '<leader>gtw', gitsigns.toggle_word_diff, 'Toggle word diff')
map('n', '<leader>gtb', gitsigns.toggle_current_line_blame, 'Toggle current line blame')
map('n', '<leader>gtd', gitsigns.toggle_deleted, 'Toggle deleted lines')
-- Misc
map('n', '<leader>gF', gitsigns.refresh, 'Refresh gitsigns')
-- Text object
map({ 'o', 'x' }, 'ih', gitsigns.select_hunk, 'Select hunk text object')
end
'';
};
};
highlight = with config.scheme.withHashtag; {
GitSignsAdd.fg = base0B;
GitSignsChange.fg = base0A;
GitSignsDelete.fg = base08;
GitSignsTopdelete.fg = base08;
GitSignsChangedelete.fg = base0A;
GitSignsUntracked.fg = base0C;
GitSignsCurrentLineBlame.fg = base04;
};
};
}
|