diff options
Diffstat (limited to 'home/.config/nvim/lua/custom/plugins/git.lua')
-rw-r--r-- | home/.config/nvim/lua/custom/plugins/git.lua | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/home/.config/nvim/lua/custom/plugins/git.lua b/home/.config/nvim/lua/custom/plugins/git.lua new file mode 100644 index 0000000..adc584c --- /dev/null +++ b/home/.config/nvim/lua/custom/plugins/git.lua @@ -0,0 +1,116 @@ +local map = require("mapper") + +return { + { 'akinsho/git-conflict.nvim', config = true }, + { + "NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-telescope/telescope.nvim", + }, + config = function() + local neogit = require("neogit") + neogit.setup({ + disable_commit_confirmation = true, + kind = "split", + console_timeout = 5000, + auto_show_console = false, + }) + map.n("<leader>ng", neogit.open) + end, + }, + { + "ruifm/gitlinker.nvim", + keys = { + { "<leader>gy", function() require 'gitlinker'.get_buf_range_url("n") end }, + { + "<leader>gy", + function() + require 'gitlinker'.get_buf_range_url("v") + end, + mode = "v" + }, + }, + dependencies = { + "nvim-lua/plenary.nvim", + }, + config = function() + require "gitlinker".setup({ + callbacks = { + ["personal"] = function(url_data) + url_data.host = "github.com" + return require "gitlinker.hosts".get_github_type_url(url_data) + end, + ["work"] = function(url_data) + url_data.host = "github.com" + return require "gitlinker.hosts".get_github_type_url(url_data) + end, + ["git.strisemarx.com"] = function(url_data) + local url = require "gitlinker.hosts".get_base_https_url(url_data) + url = url .. "/tree/" .. url_data.file .. "?id=" .. url_data.rev + if url_data.lstart then + url = url .. "#n" .. url_data.lstart + end + return url + end + }, + }) + end, + }, + { + "lewis6991/gitsigns.nvim", + event = "BufRead", + opts = { + signs = { + change = { show_count = true }, + delete = { show_count = true }, + topdelete = { show_count = true }, + changedelete = { show_count = true }, + }, + numhl = true, + _extmark_signs = true, + _threaded_diff = true, + _signs_staged_enable = true, + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + + -- 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 }, 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 }, bufnr) + + -- Actions + map.nvcmd('<leader>hs', "Gitsigns stage_hunk", nil, bufnr) + map.nvcmd('<leader>hr', "Gitsigns reset_hunk", nil, bufnr) + map.n('<leader>hS', gs.stage_buffer, nil, bufnr) + map.n('<leader>hu', gs.undo_stage_hunk, nil, bufnr) + map.n('<leader>hR', gs.reset_buffer, nil, bufnr) + map.n('<leader>hp', gs.preview_hunk, nil, bufnr) + map.n('<leader>hb', function() gs.blame_line { full = true } end, nil, + bufnr) + map.n('<leader>tb', gs.toggle_current_line_blame, nil, bufnr) + map.n('<leader>hd', gs.diffthis, nil, bufnr) + map.n('<leader>hD', function() gs.diffthis('~') end, nil, bufnr) + map.n('<leader>hc', gs.change_base, nil, bufnr) + map.n('<leader>hC', function() gs.change_base('~') end, nil, bufnr) + map.n('<leader>td', gs.toggle_deleted, nil, bufnr) + map.n('<leader>tw', gs.toggle_word_diff, nil, bufnr) + map.n('<leader>tl', gs.toggle_linehl, nil, bufnr) + + -- Text object + map.map({ 'o', 'x' }, 'ih', ':<C-U>Gitsigns select_hunk<CR>', nil, bufnr) + end + }, + dependencies = { + "nvim-lua/plenary.nvim", + }, + }, +} |