git.lua (3074B)
1 if vim.g.loaded_fugitive then 2 vim.keymap.set('n', '<leader>gg', '<cmd>tab G<cr>', { desc = 'Git Status' }) 3 vim.keymap.set('n', '<leader>G', function() 4 vim.cmd.G() 5 vim.cmd.only() 6 end, { desc = 'Git Status (only)' }) 7 vim.keymap.set('n', '<leader>gc', '<cmd>G commit<cr>', { desc = 'Git Commit' }) 8 vim.keymap.set('n', '<leader>gb', '<cmd>Git blame<cr>', { desc = 'Git Blame' }) 9 end 10 if pcall(require, 'git-worktree') then 11 require('git-worktree').setup() 12 end 13 14 if pcall(require, 'gitsigns') then 15 local gsigns = require('gitsigns') 16 17 local get_theme = function() 18 local dark_theme = { add = '│', change = '│', delete = '│', topdelete = '‾', changedelete = '│' } 19 local light_theme = { add = ' ', change = ' ', delete = ' ', topdelete = ' ', changedelete = ' ' } 20 21 if vim.opt.background:get() == 'light' then 22 return light_theme 23 end 24 25 return dark_theme 26 end 27 28 local theme = get_theme() 29 gsigns.setup { 30 signs = { 31 add = { text = theme.add }, 32 change = { text = theme.change }, 33 delete = { text = theme.delete }, 34 topdelete = { text = theme.topdelete }, 35 changedelete = { text = theme.changedelete }, 36 }, 37 } 38 39 vim.keymap.set('n', ']h', gsigns.next_hunk, { desc = 'Git Next Hunk' }) 40 vim.keymap.set('n', '[h', gsigns.prev_hunk, { desc = 'Git Previous Hunk' }) 41 vim.keymap.set('n', '<leader>hs', gsigns.stage_hunk, { desc = 'Git Stage Hunk' }) 42 vim.keymap.set('n', '<leader>hu', gsigns.undo_stage_hunk, { desc = 'Git Undo Stage Hunk' }) 43 vim.keymap.set('n', '<leader>hr', gsigns.reset_hunk, { desc = 'Git Reset Hunk' }) 44 vim.keymap.set('n', '<leader>hR', gsigns.reset_buffer, { desc = 'Git Reset Buffer' }) 45 vim.keymap.set('n', '<leader>hp', gsigns.preview_hunk, { desc = 'Git Preview Hunk' }) 46 vim.keymap.set('n', '<leader>hb', gsigns.toggle_current_line_blame, { desc = 'Git Toggle Blame Line' }) 47 vim.keymap.set('n', '<leader>hn', gsigns.toggle_numhl, { desc = 'Git Highlight Num' }) 48 vim.keymap.set('o', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>') 49 vim.keymap.set('x', 'ig', ':<C-U>lua require("gitsigns").select_hunk()<cr>') 50 end 51 52 if pcall(require, 'cmp_git') then 53 local function filter_repo(git_info) 54 -- dpgw issues are in one repo dpgw/dpgw 55 if git_info.host == 'devel.bigroot.cz' then 56 git_info = { host = 'devel.bigroot.cz', owner = 'dpgw', repo = 'dpgw' } 57 end 58 return git_info 59 end 60 61 require 'cmp_git'.setup { 62 trigger_actions = { 63 { 64 debug_name = 'gitlab_issues', 65 trigger_character = '#', 66 action = function(sources, trigger_char, callback, _, git_info) 67 git_info = filter_repo(git_info) 68 return sources.gitlab:get_issues(callback, git_info, trigger_char) 69 end, 70 }, 71 { 72 debug_name = 'gitlab_mrs', 73 trigger_character = '!', 74 action = function(sources, trigger_char, callback, _, git_info) 75 git_info = filter_repo(git_info) 76 return sources.gitlab:get_merge_requests(callback, git_info, trigger_char) 77 end, 78 }, 79 }, 80 } 81 end