add copilot, snacks

This commit is contained in:
iofq 2025-02-02 22:38:46 -06:00
parent 0f709befab
commit d88c03f005
11 changed files with 325 additions and 450 deletions

75
nvim/lua/plugins/ai.lua Normal file
View file

@ -0,0 +1,75 @@
return {
{
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
opts = {
panel = { enabled = false },
suggestion = {
enabled = true,
keymap = {
accept = "<M-]>",
next = "<M-[>",
dismiss = "<C-]>",
},
},
completion = {
documentation = {
auto_show = true,
},
list = {
selection = {
preselect = false,
auto_insert = true,
}
},
accept = {
auto_brackets = {
enabled = true
}
},
},
filetypes = {
go = true,
lua = true,
php = true,
python = true,
ruby = true,
sh = true,
puppet = true,
yaml = true,
markdown = true,
["."] = false,
}
}
},
{
"yetone/avante.nvim",
event = "VeryLazy",
lazy = false,
dependencies = {
"stevearc/dressing.nvim",
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
"folke/snacks.nvim",
"zbirenbaum/copilot.lua",
{
'MeanderingProgrammer/render-markdown.nvim',
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
opts = {
provider = "copilot",
auto_suggestions_provider = "copilot",
behavior = {
auto_suggestions = false, -- TODO
},
file_selector = {
provider = "native", -- TODO snacks once it's ready
}
}
}
}

View file

@ -1,60 +1,105 @@
return {
{
'hrsh7th/nvim-cmp',
event = 'VeryLazy',
'saghen/blink.cmp',
dependencies = {
'hrsh7th/cmp-buffer',
'hrsh7th/cmp-cmdline',
'hrsh7th/cmp-path',
'hrsh7th/cmp-nvim-lsp',
'ray-x/cmp-treesitter',
'L3MON4D3/luasnip',
'saadparwaiz1/cmp_luasnip',
"yetone/avante.nvim",
'saghen/blink.compat',
'rafamadriz/friendly-snippets',
'giuxtaposition/blink-cmp-copilot',
'mikavilpas/blink-ripgrep.nvim'
},
config = function()
local cmp = require('cmp')
cmp.setup {
snippet = {
expand = function(args)
require('luasnip').lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert {
['<C-u>'] = cmp.mapping.scroll_docs(-4),
['<C-d>'] = cmp.mapping.scroll_docs(4),
['<C-n>'] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Insert },
['<C-p>'] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Insert },
['<C-Space>'] = cmp.mapping.confirm {
select = true,
behavior = cmp.SelectBehavior.Insert
},
},
sources = cmp.config.sources({
{ name = 'nvim_lsp', keyword_length = 1 },
{ name = 'luasnip' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'treesitter', keyword_length = 3 },
}),
}
cmp.setup.cmdline({ '/', '?' }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = 'buffer' },
},
config = function(_, opts)
require('blink.cmp').setup(opts)
vim.api.nvim_create_autocmd('User', {
pattern = 'BlinkCmpMenuOpen',
callback = function()
require("copilot.suggestion").dismiss()
vim.b.copilot_suggestion_hidden = true
end,
})
cmp.setup.cmdline(':', {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = 'path' },
{ name = 'buffer' },
{ name = 'cmdline' },
}),
matching = { disallow_symbol_nonprefix_matching = false },
vim.api.nvim_create_autocmd('User', {
pattern = 'BlinkCmpMenuClose',
callback = function()
vim.b.copilot_suggestion_hidden = false
end,
})
end,
opts = {
sources = {
default = {
"lsp",
"path",
"snippets",
"buffer",
"ripgrep",
"avante_commands",
"avante_mentions",
"avante_files"
},
providers = {
ripgrep = {
module = "blink-ripgrep",
name = "rg",
score_offset = -10,
},
avante_commands = {
name = "avante_commands",
module = "blink.compat.source",
score_offset = 90,
opts = {},
},
avante_files = {
name = "avante_files",
module = "blink.compat.source",
score_offset = 100,
opts = {},
},
avante_mentions = {
name = "avante_mentions",
module = "blink.compat.source",
score_offset = 1000,
opts = {},
}
}
},
keymap = {
["<C-space>"] = { "show", "select_and_accept" }
},
completion = {
documentation = {
auto_show = true,
auto_show_delay_ms = 100
},
list = {
selection = {
preselect = false,
auto_insert = true,
}
},
accept = {
auto_brackets = {
enabled = true
}
},
menu = {
draw = {
treesitter = { "lsp" },
columns = {
{ "label", "label_description", gap = 1 },
{ "source_name", "kind", gap = 1 }
},
}
},
trigger = {
show_on_keyword = false,
}
},
appearance = {
use_nvim_cmp_as_default = true,
},
signature = { enabled = true }
}
},
{
'L3MON4D3/luasnip',

View file

@ -2,45 +2,27 @@ return {
{
'folke/trouble.nvim',
event = 'VeryLazy',
dependencies = {
'artemave/workspace-diagnostics.nvim',
},
config = function()
require('trouble').setup()
vim.keymap.set(
'n',
config = true,
keys = {
{
'<leader>de',
'<cmd>Trouble diagnostics toggle focus=true<CR>',
{ noremap = true, desc = 'Trouble diagnostics' }
)
vim.keymap.set(
'n',
'<leader>dE',
'<cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>',
{ noremap = true, desc = 'Trouble diagnostics (currrent buffer)' }
)
vim.keymap.set('n', '<leader>dw', function()
for _, client in ipairs(vim.lsp.get_clients { bufnr = 0 }) do
require('workspace-diagnostics').populate_workspace_diagnostics(client, 0)
end
end, { noremap = true, desc = 'Populate Trouble workspace diagnostics' })
end,
}
}
},
{
'neovim/nvim-lspconfig',
event = 'VeryLazy',
dependencies = {
'hrsh7th/cmp-nvim-lsp',
'artemave/workspace-diagnostics.nvim',
'folke/snacks.nvim',
'saghen/blink.cmp',
},
config = function()
local lspconfig = require('lspconfig')
lspconfig.util.default_config.capabilities = vim.tbl_deep_extend(
'force',
lspconfig.util.default_config.capabilities,
require('cmp_nvim_lsp').default_capabilities()
)
local capabilities = require("blink.cmp").get_lsp_capabilities()
lspconfig.gopls.setup {
capabilities = capabilities,
settings = {
gopls = {
gofumpt = true,
@ -66,10 +48,12 @@ return {
},
},
}
lspconfig.jedi_language_server.setup {}
lspconfig.nil_ls.setup {}
lspconfig.phpactor.setup {}
lspconfig.jedi_language_server.setup { capabilities = capabilities }
lspconfig.nil_ls.setup { capabilities = capabilities }
lspconfig.phpactor.setup { capabilities = capabilities }
lspconfig.ruby_ls.setup { capabilities = capabilities }
lspconfig.lua_ls.setup {
capabilities = capabilities,
on_init = function(client)
local path = client.workspace_folders[1].name
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
@ -120,27 +104,27 @@ return {
vim.keymap.set(
'n',
'<leader>dd',
'<cmd>Telescope lsp_definitions<cr>',
function() Snacks.picker.diagnostics() end,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP diagnostics' }
)
vim.keymap.set(
'n',
'<leader>df',
function() Snacks.picker.lsp_definitions() end,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP definitions' }
)
vim.keymap.set(
'n',
'<leader>di',
'<cmd>Telescope lsp_implementations<cr>',
function() Snacks.picker.lsp_implementations() end,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP implementations' }
)
vim.keymap.set(
'n',
'<leader>dr',
'<cmd>Telescope lsp_references<cr>',
function() Snacks.picker.lsp_references() end,
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP references' }
)
vim.keymap.set(
'n',
'<leader>ds',
'<cmd>Telescope lsp_document_symbols<cr>',
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP symbols' }
)
vim.keymap.set(
'n',
'<leader>dl',
@ -168,7 +152,6 @@ return {
})
vim.lsp.codelens.refresh { bufnr = bufnr }
end
require('workspace-diagnostics').populate_workspace_diagnostics(client, bufnr)
end,
})
vim.api.nvim_exec_autocmds('FileType', {})

View file

@ -46,18 +46,11 @@ return {
require('mini.ai').setup()
require('mini.align').setup()
require('mini.bracketed').setup()
require('mini.comment').setup()
require('mini.icons').setup()
require('mini.surround').setup()
require('mini.jump2d').setup { mappings = { start_jumping = '<leader>S' } }
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' }, }
require('mini.trailspace').setup()
vim.api.nvim_create_user_command('Trim', require('mini.trailspace').trim, {})
local indent = require('mini.indentscope')
indent.setup {
symbol = '',
draw = { delay = 0 },
}
local miniclue = require('mini.clue')
miniclue.setup {
@ -101,14 +94,6 @@ return {
}
vim.keymap.set('n', '<leader>nm', map.toggle, { noremap = true, desc = 'minimap open' })
require('mini.notify').setup {
window = {
winblend = 0,
config = {
border = 'double',
},
},
}
local files = require("mini.files")
files.setup {
mappings = {

View file

@ -9,16 +9,6 @@ return {
event = 'VeryLazy',
config = true,
},
{
'akinsho/toggleterm.nvim',
event = 'VeryLazy',
opts = {
open_mapping = [[<C-\>]],
direction = 'float',
close_on_exit = true,
autochdir = true,
},
},
{
'jinh0/eyeliner.nvim',
event = 'VeryLazy',
@ -27,13 +17,6 @@ return {
vim.api.nvim_set_hl(0, 'EyelinerSecondary', { underline = true })
end,
},
{
'OXY2DEV/markview.nvim',
event = 'VeryLazy',
dependencies = {
"nvim-treesitter/nvim-treesitter",
}
},
{ 'tiagovla/scope.nvim', event = 'VeryLazy', config = true },
{
'sindrets/diffview.nvim',
@ -65,16 +48,12 @@ return {
disable_builtin_notifications = true,
integrations = {
diffview = true,
telescope = true,
fzf_lua = true,
},
},
keys = {
{
'<leader>ng',
function()
require('neogit').open()
end,
function() require('neogit').open() end,
{ noremap = true, silent = true, desc = 'Neogit' },
},
},
@ -98,17 +77,17 @@ return {
options = {
transparent = true,
terminal_colors = false,
modules = {
"mini",
"treesitter",
"neogit",
"aerial"
}
},
},
config = function(_, opts)
require('nightfox').setup(opts)
vim.cmd('colorscheme terafox')
vim.api.nvim_set_hl(0, 'MiniNotifyNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniNotifyTitle', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniNotifyBorder', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniMapNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniClueNormal', { bg = 'none' })
vim.api.nvim_set_hl(0, 'MiniTablineFill', { bg = 'none' })
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' })
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' })
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
@ -179,4 +158,16 @@ return {
autojump = true,
},
},
{
'gbprod/yanky.nvim',
opts = {
ring = {
storage = "memory",
},
},
keys = {
{ "y", "<Plug>(YankyYank)", mode = { "n", "x" } },
{ "<leader>fp", "<cmd>YankyRingHistory<cr>", { mode = { "n", "x" }, noremap = true, silent = true, desc = 'Pick history (yanky.nvim)' } }
},
},
}

View file

@ -0,0 +1,76 @@
return {
{
"folke/snacks.nvim",
priority = 1000,
lazy = false,
opts = {
bigfile = { enabled = true },
notifier = { enabled = true },
scope = { enabled = true },
terminal = { enabled = true },
indent = { enabled = true },
input = { enabled = true },
words = { enabled = true },
picker = {
enabled = true,
matcher = { frecency = true },
layout = {
preset = function()
return vim.o.columns >= 120 and "telescope" or "vertical"
end
},
win = {
input = {
keys = {
["wq"] = { "close", mode = "i" },
}
},
list = {
keys = {
["wq"] = { "close", mode = "i" },
}
}
}
},
},
config = function(_, opts)
require("snacks").setup(opts)
vim.api.nvim_set_hl(0, 'SnacksPickerDir', { fg = '#cccccc' })
end,
keys = {
{ '<C-\\>', function() Snacks.terminal.toggle() end, mode = { "n", "t" }, noremap = true, desc = 'terminal open' },
{ 'm', function() Snacks.words.jump(1, true) end, noremap = true, desc = 'next reference' },
{ 'M', function() Snacks.words.jump(-1, true) end, noremap = true, desc = 'next reference' },
{
'<leader>ff',
function() Snacks.picker.smart() end,
{ noremap = true, silent = true, desc = 'Fuzzy find git files' }
},
{
'<leader>fa',
function() Snacks.picker.grep() end,
{ noremap = true, silent = true, desc = 'Fuzzy find grep' }
},
{
'<leader>f8',
function() Snacks.picker.grep_word() end,
{ noremap = true, silent = true, desc = 'Fuzzy find grep word' }
},
{
'<leader>f?',
function() Snacks.picker.pickers() end,
{ noremap = true, silent = true, desc = 'See all pickers' }
},
{
'<leader>f.',
function() Snacks.picker.resume() end,
{ noremap = true, silent = true, desc = 'Fuzzy find resume' }
},
{
'<leader><leader>',
function() Snacks.picker.buffers() end,
{ noremap = true, silent = true, desc = 'Fuzzy find buffers' }
},
}
}
}

View file

@ -1,140 +0,0 @@
return {
{
'nvim-telescope/telescope-fzf-native.nvim',
event = 'VeryLazy',
build = 'make',
},
{
'nvim-telescope/telescope.nvim',
event = 'VeryLazy',
dependencies = {
'nvim-lua/plenary.nvim',
'nvim-telescope/telescope-fzf-native.nvim',
'nvim-treesitter/nvim-treesitter',
'tiagovla/scope.nvim',
{
'gbprod/yanky.nvim',
config = function()
local mapping = require("yanky.telescope.mapping")
require("yanky").setup({
picker = {
telescope = {
mappings = {
default = mapping.set_register(
require("yanky.utils").get_default_register()
),
},
},
},
ring = {
storage = "memory",
},
})
vim.keymap.set({ "n", "x" }, "y", "<Plug>(YankyYank)")
end,
},
},
config = function()
local telescope = require('telescope')
local actions = require('telescope.actions')
telescope.setup {
defaults = {
layout_strategy = 'vertical',
layout_config = { width = 0.90 },
prompt_title = false,
results_title = false,
preview_title = false,
vimgrep_arguments = {
'rg',
'-L',
'--color=never',
'--no-heading',
'--hidden',
'--with-filename',
'--line-number',
'--column',
'--smart-case',
},
preview = { treesitter = true },
path_display = { 'truncate' },
mappings = {
i = {
['wq'] = actions.close,
['<Esc>'] = actions.close,
['<C-k>'] = actions.move_selection_previous,
['<C-j>'] = actions.move_selection_next,
},
},
},
}
telescope.load_extension('fzf')
telescope.load_extension('scope')
telescope.load_extension('yank_history')
local b = require('telescope.builtin')
-- Fall back to find_files if not in a git repo
local project_files = function()
local opts = {} -- define here if you want to define something
local ok = pcall(b.git_files, opts)
if not ok then
b.find_files(opts)
end
end
vim.keymap.set(
'n',
'<leader>ff',
project_files,
{ noremap = true, silent = true, desc = 'Fuzzy find git files' }
)
vim.keymap.set(
'n',
'<leader>fg',
b.find_files,
{ noremap = true, silent = true, desc = 'Fuzzy find files' }
)
vim.keymap.set(
'n',
'<leader>fa',
b.live_grep,
{ noremap = true, silent = true, desc = 'Fuzzy find grep' }
)
vim.keymap.set(
'n',
'<leader>f8',
b.grep_string,
{ noremap = true, silent = true, desc = 'Fuzzy find grep current word' }
)
vim.keymap.set(
'n',
'<leader>f?',
b.builtin,
{ noremap = true, silent = true, desc = 'See all pickers' }
)
vim.keymap.set(
'n',
'<leader>f.',
b.resume,
{ noremap = true, silent = true, desc = 'Fuzzy find resume' }
)
vim.keymap.set(
'n',
'<leader>fs',
b.lsp_document_symbols,
{ noremap = true, silent = true, desc = 'Fuzzy find treesitter objects' }
)
vim.keymap.set(
'n',
'<leader><leader>',
'<cmd>Telescope scope buffers<cr>',
{ noremap = true, silent = true, desc = 'Pick buffers (scope.nvim)' }
)
vim.keymap.set(
'n',
'<leader>fp',
'<cmd>Telescope yank_history<cr>',
{ noremap = true, silent = true, desc = 'Pick history (yanky.nvim)' }
)
end,
},
}