Files
neovim-config/lua/plugins/coding.lua
T
rootiest 0792328281 ️ perf(nvim-cmp): toggle cmp sources based on ft
Allow some/all cmp sources to be enabled/disabled depending on the filetype of the buffer
2024-08-04 17:59:32 -04:00

201 lines
4.9 KiB
Lua

-- -----------------------------------------------------------------------------
-- --------------------------------- CODING ------------------------------------
-- -----------------------------------------------------------------------------
return {
{ -- Mason-lspconfig
"williamboman/mason-lspconfig.nvim",
opts = {
automatic_installation = true,
},
},
{ -- Codeium
import = "lazyvim.plugins.extras.coding.codeium",
opts = {
enable_chat = true,
},
cond = function()
return vim.g.aitool == "codeium"
end,
},
{ -- Copilot
import = "lazyvim.plugins.extras.coding.copilot",
cond = function()
return vim.g.aitool == "copilot"
end,
},
{ -- Tabnine
import = "lazyvim.plugins.extras.coding.tabnine",
cond = function()
return vim.g.aitool == "tabnine"
end,
},
{ -- Minuet-AI
"milanglacier/minuet-ai.nvim",
dependencies = { { "nvim-lua/plenary.nvim" }, { "hrsh7th/nvim-cmp" } },
config = function()
require("minuet").setup({ provider = "openai" })
end,
cond = function()
return vim.g.aitool == "minuet"
end,
},
{ -- Yanky
import = "lazyvim.plugins.extras.coding.yanky",
},
{ -- Mini Surround
import = "lazyvim.plugins.extras.coding.mini-surround",
},
{ -- VSCode
import = "lazyvim.plugins.extras.vscode",
},
{ -- Mini Align
"echasnovski/mini.align",
event = "InsertEnter",
config = function()
require("mini.align").setup()
end,
},
{ -- Alternate
"ton/vim-alternate",
lazy = true,
ft = { "cpp", "h", "hpp", "c" },
keys = {
{ -- Toggle Alternate
"<leader>a",
"<cmd>Alternate<cr>",
desc = "Toggle Alternate",
},
},
},
{ -- Completion
"hrsh7th/nvim-cmp",
---@param opts cmp.ConfigSchema
opts = function(_, opts)
local cmp = require("cmp")
-- Global sources
opts.sources = {
{ name = "emoji" },
{ name = "cmp_yanky" },
{ name = "dotenv" },
{ name = "calc" },
{ name = "conventionalcommits" },
{ name = "gitmoji" },
}
-- General setup
cmp.setup(opts)
-- Filetype-specific setup
cmp.setup.filetype("config", {
sources = vim.tbl_filter(function(source)
return source.name ~= "emoji" and source.name ~= "gitmoji"
end, opts.sources),
})
-- List of filetypes to disable completion
local disabled_filetypes = { "dashboard", "qalc" }
for _, filetype in ipairs(disabled_filetypes) do
cmp.setup.filetype(filetype, {
sources = {},
})
end
-- Key mappings
cmp.setup({
mapping = {
["<C-p>"] = cmp.mapping.select_prev_item(),
["<C-n>"] = cmp.mapping.select_next_item(),
["<S-Tab>"] = cmp.mapping.select_prev_item(),
["<Tab>"] = cmp.mapping.select_next_item(),
["<C-S-f>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.close(),
["<CR>"] = cmp.mapping.confirm({
behavior = cmp.ConfirmBehavior.Insert,
select = true,
}),
},
})
end,
dependencies = {
"hrsh7th/cmp-emoji",
{
"chrisgrieser/cmp_yanky",
option = {
onlyCurrentFiletype = false,
},
},
"SergioRibera/cmp-dotenv",
"hrsh7th/cmp-calc",
"davidsierradz/cmp-conventionalcommits",
"Dynge/gitmoji.nvim",
},
},
{ -- Colorizer
"norcalli/nvim-colorizer.lua",
event = "BufEnter",
config = function()
require("colorizer").setup()
end,
},
{ -- Substitute
"gbprod/substitute.nvim",
lazy = true,
opts = {
yank_substituted_text = false,
preserve_cursor_position = true,
},
keys = {
{ -- Substitute operator in normal mode
"x",
function()
require("substitute").operator()
end,
desc = "Substitute operator",
},
{ -- Substitute line in normal mode
"xx",
function()
require("substitute").line()
end,
desc = "Substitute line",
},
{ -- Substitute end of line in normal mode
"X",
function()
require("substitute").eol()
end,
desc = "Substitute end of line",
},
{ -- Substitute visual selection in visual mode
"x",
function()
require("substitute").visual()
end,
desc = "Substitute visual selection",
mode = "x",
},
{
"<leader>r",
function()
require("substitute").visual()
end,
desc = "Substitute",
mode = "x",
},
},
},
{ -- mini.splitjoin
"echasnovski/mini.splitjoin",
event = "InsertEnter",
opts = {
mappings = {
toggle = "gJ",
},
},
},
}