]> Git — Sourcephile - julm/julm-nix.git/blob - home-manager/profiles/nvim/lua/plugins/gitsigns.lua
Usability/Operability(neovim/gitsigns): enable
[julm/julm-nix.git] / home-manager / profiles / nvim / lua / plugins / gitsigns.lua
1 return {
2 "gitsigns.nvim",
3 lazy = false,
4 after = function()
5 require("gitsigns").setup({
6 signs = {
7 add = { text = "┃" },
8 change = { text = "┃" },
9 delete = { text = "_" },
10 topdelete = { text = "‾" },
11 changedelete = { text = "~" },
12 untracked = { text = "┆" },
13 },
14 signs_staged = {
15 add = { text = "┃" },
16 change = { text = "┃" },
17 delete = { text = "_" },
18 topdelete = { text = "‾" },
19 changedelete = { text = "~" },
20 untracked = { text = "┆" },
21 },
22 signs_staged_enable = true,
23 signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
24 numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
25 linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
26 word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
27 watch_gitdir = {
28 follow_files = true,
29 },
30 auto_attach = true,
31 attach_to_untracked = false,
32 current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
33 current_line_blame_opts = {
34 virt_text = true,
35 virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align'
36 delay = 1000,
37 ignore_whitespace = false,
38 virt_text_priority = 100,
39 use_focus = true,
40 },
41 current_line_blame_formatter = "<author>, <author_time:%R> - <summary>",
42 sign_priority = 6,
43 update_debounce = 100,
44 status_formatter = nil, -- Use default
45 max_file_length = 40000, -- Disable if file is longer than this (in lines)
46 preview_config = {
47 -- Options passed to nvim_open_win
48 style = "minimal",
49 relative = "cursor",
50 row = 0,
51 col = 1,
52 },
53 on_attach = function(bufnr)
54 local gitsigns = require("gitsigns")
55
56 local function map(mode, l, r, opts)
57 opts = opts or {}
58 opts.buffer = bufnr
59 vim.keymap.set(mode, l, r, opts)
60 end
61
62 -- Navigation
63 map("n", "]c", function()
64 if vim.wo.diff then
65 vim.cmd.normal({ "]c", bang = true })
66 else
67 gitsigns.nav_hunk("next")
68 end
69 end)
70
71 map("n", "[c", function()
72 if vim.wo.diff then
73 vim.cmd.normal({ "[c", bang = true })
74 else
75 gitsigns.nav_hunk("prev")
76 end
77 end)
78
79 -- Actions
80 map("n", "<leader>hs", gitsigns.stage_hunk)
81 map("n", "<leader>hr", gitsigns.reset_hunk)
82
83 map("v", "<leader>hs", function()
84 gitsigns.stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
85 end)
86
87 map("v", "<leader>hr", function()
88 gitsigns.reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
89 end)
90
91 map("n", "<leader>hS", gitsigns.stage_buffer)
92 map("n", "<leader>hR", gitsigns.reset_buffer)
93 map("n", "<leader>hp", gitsigns.preview_hunk)
94 map("n", "<leader>hi", gitsigns.preview_hunk_inline)
95
96 map("n", "<leader>hb", function()
97 gitsigns.blame_line({ full = true })
98 end)
99
100 map("n", "<leader>hd", gitsigns.diffthis)
101
102 map("n", "<leader>hD", function()
103 gitsigns.diffthis("~")
104 end)
105
106 map("n", "<leader>hQ", function()
107 gitsigns.setqflist("all")
108 end)
109 map("n", "<leader>hq", gitsigns.setqflist)
110
111 -- Toggles
112 map("n", "<leader>tb", gitsigns.toggle_current_line_blame)
113 map("n", "<leader>tw", gitsigns.toggle_word_diff)
114
115 -- Text object
116 map({ "o", "x" }, "ih", gitsigns.select_hunk)
117 end,
118 })
119 end,
120 }