local quit_keymap = { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } } local diffview_opts = { enhanced_diff_hl = true, default = { winbar_info = true }, keymaps = { view = { quit_keymap }, file_panel = { quit_keymap }, file_history_panel = { quit_keymap }, }, } local neogit_opts = { mappings = { commit_editor = { [''] = 'Submit', [''] = 'Abort', }, commit_editor_I = { [''] = 'Submit', [''] = 'Abort', }, popup = { ['p'] = 'PushPopup', ['P'] = 'PullPopup', }, }, } local function octo_config() require('octo').setup({ suppress_missing_scope = { projects_v2 = true } }) vim.treesitter.language.register('markdown', 'octo') vim.api.nvim_create_autocmd('FileType', { pattern = 'octo', callback = function() -- Autocomplete for @ (user mention) and # (issue) vim.keymap.set('i', '@', '@', { silent = true, buffer = true }) vim.keymap.set('i', '#', '#', { silent = true, buffer = true }) end, }) end -- Helpers local function stage_visual_chunk() require('gitsigns').stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end local function reset_visual_chunk() require('gitsigns').reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end -- GitHub Keymaps local search_open_issues_by_me = 'Octo search is:issue is:open author:@me' vim.keymap.set('n', 'gi', 'Octo issue search', { desc = '[G]ithub [I]ssues (local)' }) vim.keymap.set('n', 'pr', 'Octo pr search', { desc = 'Github [PR]s (local)' }) vim.keymap.set('n', 'gI', search_open_issues_by_me, { desc = '[G]ithub [I]ssues (global)' }) vim.keymap.set('n', 'pR', 'Octo search is:pr author:@me', { desc = 'Github [PR]s (global)' }) -- Git keymaps vim.keymap.set('n', 'gB', 'Gitsigns toggle_current_line_blame', { desc = '[G]it [B]lame Line' }) vim.keymap.set('n', 'gD', 'Gitsigns toggle_deleted', { desc = '[G]it [D]eleted' }) vim.keymap.set('n', 'gb', 'Neogit branch', { desc = '[G]it [B]ranch' }) vim.keymap.set('n', 'gd', 'DiffviewOpen', { desc = '[G]it [D]iff' }) vim.keymap.set('n', 'gl', 'DiffviewFileHistory', { desc = '[G]it [L]og (diffview)' }) vim.keymap.set('n', 'gs', 'Neogit', { desc = '[G]it [S]tatus' }) vim.keymap.set('n', 'gL', 'Neogit log', { desc = '[G]it [L]og (neogit)' }) vim.keymap.set('n', 'gc', 'Neogit commit', { desc = '[G]it [C]ommit' }) vim.keymap.set('n', 'gp', 'Neogit push', { desc = '[G]it [P]ush' }) vim.keymap.set('n', 'gP', 'Neogit pull', { desc = '[G]it [P]ull' }) vim.keymap.set('n', 'gr', 'Neogit rebase', { desc = '[G]it [R]ebase' }) vim.keymap.set('n', 'gm', 'Neogit merge', { desc = '[G]it [M]erge' }) -- Hunk Keymaps vim.keymap.set('n', 'hp', 'Gitsigns preview_hunk', { desc = '[H]unk [P]review' }) vim.keymap.set('n', 'hs', 'Gitsigns stage_hunk', { desc = '[H]unk [S]tage' }) vim.keymap.set('n', 'hr', 'Gitsigns reset_hunk', { desc = '[H]unk [R]eset' }) vim.keymap.set('v', 'hs', stage_visual_chunk, { desc = '[H]unk [S]tage' }) vim.keymap.set('v', 'hr', reset_visual_chunk, { desc = '[H]unk [S]tage' }) vim.keymap.set('n', 'hS', 'Gitsigns stage_buffer', { desc = '[S]tage Buffer' }) vim.keymap.set('n', 'hR', 'Gitsigns reset_buffer', { desc = '[R]eset Buffer' }) vim.keymap.set('n', 'hu', 'Gitsigns undo_stage_hunk', { desc = '[H]unk [U]ndo' }) return { { 'NeogitOrg/neogit', opts = neogit_opts, cmd = 'Neogit', commit = 'c31ef8b5fdb3ea4beaf6ab66e07327b810e32c9f', }, { 'pwntester/octo.nvim', config = octo_config, cmd = 'Octo' }, { 'lewis6991/gitsigns.nvim', config = true, cmd = 'Gitsigns', event = 'VeryLazy' }, { 'sindrets/diffview.nvim', opts = diffview_opts, cmd = { 'DiffviewOpen', 'DiffviewClose', 'DiffviewFileHistory' }, }, }