neovim

Personal neovim configuration files
git clone git://gtms.dev/neovim
Log | Files | Refs

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