From 9502eb0f10debde67ef98f772af275422d965204 Mon Sep 17 00:00:00 2001 From: Ilia Levikov Date: Wed, 17 Sep 2025 16:57:06 +1200 Subject: [PATCH] feat: add copilot and update harpoon to v2 --- lua/newbim/plugins/copilot.lua | 99 ++++++++++++++++++++++++++++++++++ lua/newbim/plugins/harpoon.lua | 85 ++++++++++++++++++++++++----- lua/plugin-setup.lua | 1 + 3 files changed, 173 insertions(+), 12 deletions(-) create mode 100644 lua/newbim/plugins/copilot.lua diff --git a/lua/newbim/plugins/copilot.lua b/lua/newbim/plugins/copilot.lua new file mode 100644 index 00000000..cd3c49a4 --- /dev/null +++ b/lua/newbim/plugins/copilot.lua @@ -0,0 +1,99 @@ +return { + 'zbirenbaum/copilot.lua', + cmd = 'Copilot', + event = 'InsertEnter', + config = function() + require('copilot').setup { + panel = { + enabled = true, + auto_refresh = false, + keymap = { + jump_prev = '[[', + jump_next = ']]', + accept = '', + refresh = 'gr', + open = '', -- Ctrl+Enter (better for Mac) + }, + layout = { + position = 'bottom', + ratio = 0.4, + }, + }, + suggestion = { + enabled = true, + auto_trigger = true, + debounce = 75, + keymap = { + accept = '', -- Tab to accept (most common) + accept_word = '', -- Ctrl+Right Arrow + accept_line = '', -- Ctrl+l + next = '', -- Ctrl+] for next + prev = '', -- Ctrl+[ for previous + dismiss = '', -- Ctrl+\ to dismiss + }, + }, + filetypes = { + yaml = false, + markdown = false, + help = false, + gitcommit = false, + gitrebase = false, + hgcommit = false, + svn = false, + cvs = false, + ['.'] = false, + }, + copilot_node_command = 'node', -- Make sure you have Node.js installed + server_opts_overrides = {}, + } + + -- Mac-friendly custom keymaps + local opts = { silent = true, noremap = true } + + -- Panel controls (using Cmd instead of Alt when possible) + vim.keymap.set('n', 'co', function() + require('copilot.panel').open { position = 'bottom', ratio = 0.4 } + end, { desc = 'Open Copilot panel' }) + + vim.keymap.set('n', 'cr', function() + require('copilot.panel').refresh() + end, { desc = 'Refresh Copilot suggestions' }) + + vim.keymap.set('n', 'cc', function() + require('copilot.panel').close() + end, { desc = 'Close Copilot panel' }) + + -- Alternative panel opening in insert mode + vim.keymap.set('i', '', function() + require('copilot.panel').open { position = 'right', ratio = 0.3 } + end, { desc = 'Open Copilot panel (insert mode)' }) + + -- Suggestion controls that work well on Mac + vim.keymap.set('i', '', function() + require('copilot.suggestion').next() + end, { desc = 'Next Copilot suggestion' }) + + vim.keymap.set('i', '', function() + require('copilot.suggestion').prev() + end, { desc = 'Previous Copilot suggestion' }) + + -- Toggle auto trigger + vim.keymap.set('i', '', function() + require('copilot.suggestion').toggle_auto_trigger() + end, { desc = 'Toggle Copilot auto trigger' }) + + -- Manual suggestion trigger + vim.keymap.set('i', '', function() + require('copilot.suggestion').next() + end, { desc = 'Trigger Copilot suggestion' }) + + -- Accept with different granularities + vim.keymap.set('i', '', function() + require('copilot.suggestion').accept_word() + end, { desc = 'Accept word' }) + + vim.keymap.set('i', '', function() + require('copilot.suggestion').accept_line() + end, { desc = 'Accept line' }) + end, +} diff --git a/lua/newbim/plugins/harpoon.lua b/lua/newbim/plugins/harpoon.lua index 3a81971f..fc1657a1 100644 --- a/lua/newbim/plugins/harpoon.lua +++ b/lua/newbim/plugins/harpoon.lua @@ -1,21 +1,82 @@ --- NOTE: Harpoon setup +-- NOTE: Harpoon2 setup return { - 'theprimeagen/harpoon', + 'ThePrimeagen/harpoon', + branch = 'harpoon2', + dependencies = { 'nvim-lua/plenary.nvim' }, config = function() - local mark = require 'harpoon.mark' - local ui = require 'harpoon.ui' + local harpoon = require 'harpoon' - vim.keymap.set('n', 'a', mark.add_file) - vim.keymap.set('n', '', ui.toggle_quick_menu) + -- REQUIRED + harpoon:setup() + -- OPTIONAL - you can customize settings here + -- harpoon:setup({ + -- settings = { + -- save_on_toggle = true, + -- sync_on_ui_close = true, + -- key = function() + -- return vim.loop.cwd() + -- end, + -- }, + -- }) + -- Basic keymaps + vim.keymap.set('n', 'a', function() + harpoon:list():add() + end, { desc = 'Harpoon add file' }) + + vim.keymap.set('n', '', function() + harpoon.ui:toggle_quick_menu(harpoon:list()) + end, { desc = 'Harpoon toggle menu' }) + + -- Navigation keymaps vim.keymap.set('n', '', function() - ui.nav_file(1) - end) + harpoon:list():select(1) + end, { desc = 'Harpoon to file 1' }) + vim.keymap.set('n', '', function() - ui.nav_file(2) - end) + harpoon:list():select(2) + end, { desc = 'Harpoon to file 2' }) + vim.keymap.set('n', '', function() - ui.nav_file(3) - end) + harpoon:list():select(3) + end, { desc = 'Harpoon to file 3' }) + + vim.keymap.set('n', '', function() + harpoon:list():select(4) + end, { desc = 'Harpoon to file 4' }) + + -- Toggle previous & next buffers stored within Harpoon list + vim.keymap.set('n', '', function() + harpoon:list():prev() + end, { desc = 'Harpoon previous buffer' }) + + vim.keymap.set('n', '', function() + harpoon:list():next() + end, { desc = 'Harpoon next buffer' }) + + -- Optional: Telescope integration + -- If you have telescope installed, you can add this for a better UI + local conf = require('telescope.config').values + local function toggle_telescope(harpoon_files) + local file_paths = {} + for _, item in ipairs(harpoon_files.items) do + table.insert(file_paths, item.value) + end + + require('telescope.pickers') + .new({}, { + prompt_title = 'Harpoon', + finder = require('telescope.finders').new_table { + results = file_paths, + }, + previewer = conf.file_previewer {}, + sorter = conf.generic_sorter {}, + }) + :find() + end + + vim.keymap.set('n', '', function() + toggle_telescope(harpoon:list()) + end, { desc = 'Open harpoon window' }) end, } diff --git a/lua/plugin-setup.lua b/lua/plugin-setup.lua index 8a2fd9a1..15dd81c1 100644 --- a/lua/plugin-setup.lua +++ b/lua/plugin-setup.lua @@ -28,6 +28,7 @@ require('lazy').setup({ require 'newbim/plugins/mini', require 'newbim/plugins/comment', require 'newbim/plugins/markdown', + require 'newbim/plugins/copilot', }, { ui = { -- If you are using a Nerd Font: set icons to an empty table which will use the