mirror of
https://github.com/dwinkler1/nvimConfig.git
synced 2026-02-19 22:40:57 -05:00
init wrapper-module config
This commit is contained in:
commit
91755583fd
46 changed files with 4277 additions and 0 deletions
351
plugin/24_completion.lua
Normal file
351
plugin/24_completion.lua
Normal file
|
|
@ -0,0 +1,351 @@
|
|||
local add = Config.add
|
||||
local later = MiniDeps.later
|
||||
local now_if_args = Config.now_if_args
|
||||
|
||||
-- Constants
|
||||
local BLINK_VERSION = "v1.4.1"
|
||||
|
||||
-- Plugin sources configuration
|
||||
local PLUGIN_SOURCES = {
|
||||
"hrsh7th/cmp-cmdline",
|
||||
"xzbdmw/colorful-menu.nvim",
|
||||
"zbirenbaum/copilot.lua",
|
||||
"jmbuhr/cmp-pandoc-references",
|
||||
"fang2hou/blink-copilot",
|
||||
"olimorris/codecompanion.nvim"
|
||||
}
|
||||
|
||||
local PLUGIN_ADDS = {
|
||||
"cmp-cmdline",
|
||||
"blink.compat",
|
||||
"colorful-menu.nvim",
|
||||
"cmp-pandoc-references",
|
||||
}
|
||||
|
||||
-- Helper functions
|
||||
local function create_system_prompt(role_description)
|
||||
return function(context)
|
||||
return "I want you to act as a senior " .. context.filetype .. " developer. " .. role_description
|
||||
end
|
||||
end
|
||||
|
||||
local function get_code_block(context)
|
||||
local text = require("codecompanion.helpers.actions").get_code(context.start_line, context.end_line)
|
||||
return "```" .. context.filetype .. "\n" .. text .. "\n```"
|
||||
end
|
||||
|
||||
local function create_common_opts(mapping, short_name)
|
||||
return {
|
||||
mapping = mapping,
|
||||
modes = { "v" },
|
||||
short_name = short_name,
|
||||
auto_submit = true,
|
||||
stop_context_insertion = true,
|
||||
user_prompt = true,
|
||||
}
|
||||
end
|
||||
|
||||
local function get_mini_icons_highlight(ctx)
|
||||
local _, hl, _ = require("mini.icons").get("lsp", ctx.kind)
|
||||
return hl
|
||||
end
|
||||
|
||||
local function get_blink_fuzzy_setting()
|
||||
local setting = {
|
||||
sorts = { "exact", "score", "sort_text" }
|
||||
}
|
||||
|
||||
if not Config.isNixCats then
|
||||
setting.prebuilt_binary = { force_version = BLINK_VERSION }
|
||||
end
|
||||
|
||||
return setting
|
||||
end
|
||||
|
||||
-- Plugin loading
|
||||
if not Config.isNixCats then
|
||||
local m_add = MiniDeps.add
|
||||
|
||||
now_if_args(function()
|
||||
m_add({
|
||||
source = "saghen/blink.cmp",
|
||||
depends = { "rafamadriz/friendly-snippets" },
|
||||
checkout = BLINK_VERSION,
|
||||
})
|
||||
end)
|
||||
|
||||
later(function()
|
||||
for _, source in ipairs(PLUGIN_SOURCES) do
|
||||
m_add({ source = source })
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local function get_codecompanion_config()
|
||||
return {
|
||||
adapters = {
|
||||
http = {
|
||||
copilot = function()
|
||||
return require("codecompanion.adapters").extend("copilot", {
|
||||
schema = {
|
||||
model = { default = "gemini-3-pro-preview" }
|
||||
}
|
||||
})
|
||||
end,
|
||||
}
|
||||
},
|
||||
display = {
|
||||
chat = {
|
||||
show_settings = false,
|
||||
window = {
|
||||
layout = "horizontal",
|
||||
position = "bottom",
|
||||
height = 0.33,
|
||||
},
|
||||
},
|
||||
},
|
||||
prompt_library = {
|
||||
["Code Expert"] = {
|
||||
strategy = "chat",
|
||||
description = "Get expert advice from an LLM",
|
||||
opts = create_common_opts("<localleader>ae", "expert"),
|
||||
prompts = {
|
||||
{
|
||||
role = "system",
|
||||
content = create_system_prompt(
|
||||
"I will ask you specific questions and I want you to return concise explanations and codeblock examples."
|
||||
),
|
||||
},
|
||||
{
|
||||
role = "user",
|
||||
content = function(context)
|
||||
return "I have the following code:\n\n" .. get_code_block(context) .. "\n\n"
|
||||
end,
|
||||
opts = { contains_code = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
["Code Fixer"] = {
|
||||
strategy = "chat",
|
||||
description = "Fix code errors with expert guidance",
|
||||
opts = create_common_opts("<localleader>af", "afixer"),
|
||||
prompts = {
|
||||
{
|
||||
role = "system",
|
||||
content = create_system_prompt(
|
||||
"I have a block of code that is not working and will give you a hint about the error. I want you to return the corrected code and a concise explanation of the corrections."
|
||||
),
|
||||
},
|
||||
{
|
||||
role = "user",
|
||||
content = function(context)
|
||||
return "The following code has an error:\n\n" .. get_code_block(context) .. "\n\nThe error is:"
|
||||
end,
|
||||
opts = { contains_code = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
["Suggest"] = {
|
||||
strategy = "chat",
|
||||
description = "Suggest improvements to the buffer",
|
||||
opts = {
|
||||
mapping = "<localleader>as",
|
||||
modes = { "v" },
|
||||
short_name = "suggest",
|
||||
auto_submit = true,
|
||||
user_prompt = false,
|
||||
stop_context_insertion = false,
|
||||
},
|
||||
prompts = {
|
||||
{
|
||||
role = "system",
|
||||
content = create_system_prompt(
|
||||
"When asked to improve code, follow these steps:\n" ..
|
||||
"1. Identify the programming language.\n" ..
|
||||
"2. Think separately for each function or significant block of code and think about possible improvements (e.g., for better readability or speed) in the context of the language.\n" ..
|
||||
"3. Think about the whole document and think about possible improvements.\n" ..
|
||||
"4. Provide the improved code.\n" ..
|
||||
"5. Provide a concise explanation of the improvements."
|
||||
),
|
||||
},
|
||||
{
|
||||
role = "user",
|
||||
content = function(context)
|
||||
return "Please improve the following code:\n\n" .. get_code_block(context)
|
||||
end,
|
||||
opts = { contains_code = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
-- Batch add simple plugins
|
||||
later(function()
|
||||
for _, plugin in ipairs(PLUGIN_ADDS) do
|
||||
add(plugin)
|
||||
end
|
||||
end)
|
||||
|
||||
-- Configure plugins with setup
|
||||
later(function()
|
||||
add("copilot.lua")
|
||||
require("copilot").setup({
|
||||
suggestion = { enabled = false },
|
||||
panel = { enabled = false },
|
||||
filetypes = {
|
||||
help = true,
|
||||
julia = true,
|
||||
lua = true,
|
||||
markdown = true,
|
||||
nix = true,
|
||||
python = true,
|
||||
r = true,
|
||||
sh = function()
|
||||
if string.match(vim.fs.basename(vim.api.nvim_buf_get_name(0)), '^%.env.*') then
|
||||
-- disable for .env files
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end,
|
||||
["."] = false
|
||||
},
|
||||
server_opts_overrides = {
|
||||
settings = {
|
||||
telemetry = { telemetryLevel = 'off' }
|
||||
}
|
||||
},
|
||||
should_attach = function(_, bufname)
|
||||
if string.match(bufname, "env") then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
})
|
||||
end)
|
||||
|
||||
later(function()
|
||||
add("blink-copilot")
|
||||
require("blink-copilot").setup({
|
||||
max_completions = 1,
|
||||
})
|
||||
end)
|
||||
|
||||
|
||||
later(function()
|
||||
add("codecompanion.nvim")
|
||||
|
||||
-- now use function
|
||||
require("codecompanion").setup(get_codecompanion_config())
|
||||
vim.cmd([[cab cc CodeCompanion]])
|
||||
end)
|
||||
|
||||
now_if_args(function()
|
||||
add("blink.cmp")
|
||||
|
||||
require("blink.cmp").setup({
|
||||
keymap = {
|
||||
preset = "default",
|
||||
["<C-space>"] = { "show", "select_next" },
|
||||
["<C-l>"] = { "accept" },
|
||||
},
|
||||
cmdline = {
|
||||
enabled = true,
|
||||
keymap = {
|
||||
preset = "inherit",
|
||||
["<Tab>"] = { "show", "select_next" },
|
||||
["<S-Tab>"] = { "show", "select_prev" },
|
||||
["<C-l>"] = { "accept" },
|
||||
},
|
||||
completion = {
|
||||
menu = { auto_show = true },
|
||||
list = {
|
||||
selection = { preselect = false, auto_insert = true }
|
||||
},
|
||||
},
|
||||
sources = function()
|
||||
local cmd_type = vim.fn.getcmdtype()
|
||||
if cmd_type == "/" or cmd_type == "?" then
|
||||
return { "buffer" }
|
||||
elseif cmd_type == ":" or cmd_type == "@" then
|
||||
return { "cmdline", "cmp_cmdline" }
|
||||
end
|
||||
return {}
|
||||
end,
|
||||
},
|
||||
fuzzy = get_blink_fuzzy_setting(),
|
||||
signature = {
|
||||
enabled = true,
|
||||
window = { show_documentation = true }
|
||||
},
|
||||
completion = {
|
||||
menu = {
|
||||
draw = {
|
||||
treesitter = { "lsp" },
|
||||
components = {
|
||||
label = {
|
||||
text = function(ctx)
|
||||
return require("colorful-menu").blink_components_text(ctx)
|
||||
end,
|
||||
highlight = function(ctx)
|
||||
return require("colorful-menu").blink_components_highlight(ctx)
|
||||
end,
|
||||
},
|
||||
kind_icon = { highlight = get_mini_icons_highlight },
|
||||
kind = { highlight = get_mini_icons_highlight },
|
||||
},
|
||||
},
|
||||
},
|
||||
list = {
|
||||
selection = { preselect = false, auto_insert = true }
|
||||
},
|
||||
documentation = { auto_show = true },
|
||||
trigger = { show_in_snippet = false },
|
||||
},
|
||||
snippets = { preset = "mini_snippets" },
|
||||
sources = {
|
||||
default = { "references", "lsp", "path", "snippets", "buffer", "omni", "copilot", "codecompanion" },
|
||||
providers = {
|
||||
path = {
|
||||
score_offset = 50,
|
||||
opts = {
|
||||
get_cwd = function(_)
|
||||
return vim.fn.getcwd()
|
||||
end,
|
||||
},
|
||||
},
|
||||
lsp = { score_offset = 40 },
|
||||
snippets = { score_offset = 0 },
|
||||
cmp_cmdline = {
|
||||
name = "cmp_cmdline",
|
||||
module = "blink.compat.source",
|
||||
enabled = false,
|
||||
score_offset = 10,
|
||||
opts = { cmp_name = "cmdline" }
|
||||
},
|
||||
cmp_r = {
|
||||
name = "cmp_r",
|
||||
module = "blink.compat.source",
|
||||
},
|
||||
copilot = {
|
||||
name = "copilot",
|
||||
module = "blink-copilot",
|
||||
score_offset = 45,
|
||||
async = true,
|
||||
},
|
||||
codecompanion = {
|
||||
name = "CodeCompanion",
|
||||
module = "codecompanion.providers.completion.blink",
|
||||
score_offset = 45,
|
||||
async = true,
|
||||
},
|
||||
references = {
|
||||
name = "pandoc_references",
|
||||
module = "cmp-pandoc-references.blink",
|
||||
score_offset = 50,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
end)
|
||||
Loading…
Add table
Add a link
Reference in a new issue