local on_attach = function(on_attach, name) return vim.api.nvim_create_autocmd('LspAttach', { callback = function(args) local buffer = args.buf ---@type number local client = vim.lsp.get_client_by_id(args.data.client_id) if client and (not name or client.name == name) then return on_attach(client, buffer) end end, }) end return { { 'CopilotC-Nvim/CopilotChat.nvim', branch = 'canary', dependencies = { { 'zbirenbaum/copilot.lua' }, -- or github/copilot.vim { 'nvim-lua/plenary.nvim' }, -- for curl, log wrapper }, build = 'make tiktoken', -- Only on MacOS or Linux opts = { debug = true, -- Enable debugging context = 'buffer', }, keys = { { 'aa', function() local chat = require 'CopilotChat' chat.toggle() end, desc = 'Copilot toggle chat', }, { 'aq', function() local input = vim.fn.input 'Quick Chat: ' if input ~= '' then require('CopilotChat').ask(input, { selection = require('CopilotChat.select').buffer }) end end, desc = 'Copilot quick chat', }, { 'ax', function() local chat = require 'CopilotChat' chat.reset() end, desc = 'Copilot chat reset', }, { 'ap', function() local actions = require 'CopilotChat.actions' require('CopilotChat.integrations.telescope').pick(actions.prompt_actions()) end, desc = 'Copilot chat prompt actions', }, }, }, { 'zbirenbaum/copilot.lua', cmd = 'Copilot', event = 'InsertEnter', build = ':Copilot auth', opts = { -- suggestion = { enabled = false }, -- panel = { enabled = false }, filetypes = { markdown = true, help = true, }, }, }, { 'zbirenbaum/copilot-cmp', dependencies = 'copilot.lua', opts = {}, config = function(_, opts) local copilot_cmp = require 'copilot_cmp' copilot_cmp.setup(opts) on_attach(function(client) copilot_cmp._on_insert_enter {} end, 'copilot') end, }, }