local set = vim.keymap.set local gitsigns = require('gitsigns') gitsigns.setup() require('neogit').setup({}) require('octo').setup() require('diffview').setup({ enhanced_diff_hl = true, default = { winbar_info = true }, keymaps = { view = { { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, }, file_panel = { { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, }, file_history_panel = { { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } }, }, }, }) vim.treesitter.language.register('markdown', 'octo') -- Autocomplete for @ (user mention) and # (issue) -- Works in GitHub issues/PRs (for octo.nvim) vim.api.nvim_create_autocmd('FileType', { pattern = 'octo', callback = function() vim.keymap.set('i', '@', '@', { silent = true, buffer = true }) vim.keymap.set('i', '#', '#', { silent = true, buffer = true }) end, }) -- GitHub keymaps set('n', 'gi', 'Octo issue search', { desc = '[G]ithub [I]ssues' }) set('n', 'pr', 'Octo issue search', { desc = 'Github [PR]s' }) -- Git keymaps set('n', 'gb', gitsigns.toggle_current_line_blame, { desc = '[G]it [B]lame Line' }) set('n', 'gD', gitsigns.toggle_deleted, { desc = '[G]it [D]eleted' }) set('n', 'gd', 'DiffviewOpen', { desc = '[G]it [D]iff' }) set('n', 'gl', 'DiffviewFileHistory', { desc = '[G]it [L]og' }) set('n', 'gs', 'Neogit', { desc = '[G]it [S]tatus' }) set('n', 'gc', 'Neogit commit', { desc = '[G]it [C]ommit' }) set('n', 'gp', 'Neogit push', { desc = '[G]it [P]ush' }) set('n', 'gP', 'Neogit pull', { desc = '[G]it [P]ull' }) -- NOTE: Waiting to actually have my next merge conflict and -- see how diffview handles and then deciding if I want to use -- neogit or diffview for merge (prob diffview), same with rebase -- althoug I don't think I will use rebase anytime soon set('n', 'gr', 'TODO:', { desc = '[G]it [R]ebase' }) set('n', 'gm', 'TODO:', { desc = '[G]it [M]erge' }) -- Hunk Keymaps local function stage_visual_chunk() gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end local function reset_visual_chunk() gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') }) end set('n', 'hp', gitsigns.preview_hunk, { desc = '[H]unk [P]review' }) set('n', 'hs', gitsigns.stage_hunk, { desc = '[H]unk [S]tage' }) set('n', 'hr', gitsigns.reset_hunk, { desc = '[H]unk [R]eset' }) set('v', 'hs', stage_visual_chunk, { desc = '[H]unk [S]tage' }) set('v', 'hr', reset_visual_chunk, { desc = '[H]unk [S]tage' }) set('n', 'hS', gitsigns.stage_buffer, { desc = '[S]tage Buffer' }) set('n', 'hR', gitsigns.reset_buffer, { desc = '[R]eset Buffer' }) set('n', 'hu', gitsigns.undo_stage_hunk, { desc = '[H]unk [U]ndo' })