From 49cf8a26c734eb902ffd4b72646f6ed45a960790 Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Fri, 19 Jul 2024 22:31:57 +0300 Subject: feat(neovim-git): massive git refactor, now lazy loads --- .config/nvim/lua/custom/git.lua | 81 ---------------------------- .config/nvim/lua/custom/plugins/git.lua | 96 +++++++++++++++++++++++++++++---- 2 files changed, 87 insertions(+), 90 deletions(-) delete mode 100644 .config/nvim/lua/custom/git.lua diff --git a/.config/nvim/lua/custom/git.lua b/.config/nvim/lua/custom/git.lua deleted file mode 100644 index 5e1664e..0000000 --- a/.config/nvim/lua/custom/git.lua +++ /dev/null @@ -1,81 +0,0 @@ -local set = vim.keymap.set -local gitsigns = require('gitsigns') -gitsigns.setup() -require('neogit').setup({ - mappings = { - commit_editor = { - [''] = 'Submit', - [''] = 'Abort', - }, - commit_editor_I = { - [''] = 'Submit', - [''] = 'Abort', - }, - popup = { - ['p'] = 'PushPopup', -- P for push - ['P'] = 'PullPopup', -- shift P for Pull - }, - }, -}) -require('octo').setup({ - suppress_missing_scope = { projects_v2 = true }, -}) -local quit_keymap = { 'n', 'q', 'DiffviewClose', { desc = 'Quit the diffview' } } -require('diffview').setup({ - enhanced_diff_hl = true, - default = { winbar_info = true }, - keymaps = { - view = { quit_keymap }, - file_panel = { quit_keymap }, - file_history_panel = { quit_keymap }, - }, -}) - --- Add support for markdown in octo.nvim -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 (local)' }) -set('n', 'pr', 'Octo pr search', { desc = 'Github [PR]s (local)' }) -set('n', 'gI', 'Octo search is:issue is:open author:@me', { desc = '[G]ithub [I]ssues (global)' }) -set('n', 'pR', 'Octo search is:pr author:@me', { desc = 'Github [PR]s (global)' }) - --- 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', 'gb', 'Neogit branch', { desc = '[G]it [B]ranch' }) -set('n', 'gd', 'DiffviewOpen', { desc = '[G]it [D]iff' }) -set('n', 'gl', 'DiffviewFileHistory', { desc = '[G]it [L]og (diffview)' }) -set('n', 'gL', 'Neogit log', { desc = '[G]it [L]og (neogit)' }) -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' }) -set('n', 'gr', 'Neogit rebase', { desc = '[G]it [R]ebase' }) -set('n', 'gm', 'Neogit merge', { 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' }) diff --git a/.config/nvim/lua/custom/plugins/git.lua b/.config/nvim/lua/custom/plugins/git.lua index d770405..3c75969 100644 --- a/.config/nvim/lua/custom/plugins/git.lua +++ b/.config/nvim/lua/custom/plugins/git.lua @@ -1,13 +1,91 @@ +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', - dependencies = { - 'nvim-lua/plenary.nvim', - 'nvim-telescope/telescope.nvim', + { 'NeogitOrg/neogit', opts = neogit_opts, cmd = 'Neogit' }, + { 'lewis6991/gitsigns.nvim', config = true }, + { 'pwntester/octo.nvim', config = octo_config, cmd = 'Octo' }, + { 'sindrets/diffview.nvim', - 'lewis6991/gitsigns.nvim', - 'pwntester/octo.nvim', + opts = diffview_opts, + cmd = { 'DiffviewOpen', 'DiffviewClose', 'DiffviewFileHistory' }, }, - config = function() - require('custom.git') - end, } -- cgit v1.3.1