dotfiles-mirror/config/nvim/lua/plugins/lsp/init.lua
coast 3c3f332f83 remove some things from the Nvim config, change up the waybar config,
switch to Niri WM and update my Niri config, change up some stuff in
    nixos configuration
2025-11-02 13:53:18 +03:30

154 lines
3.3 KiB
Lua

local lsp = require("lspconfig")
local fmt = require("null-ls")
local cmp = require("cmp")
require("nvim-autopairs").setup({})
require("lsp_signature").setup({
hint_enable = false,
})
local augroup = vim.api.nvim_create_augroup("LspFormatting", {})
fmt.setup({
sources = {
fmt.builtins.formatting.clang_format,
require("none-ls.formatting.rustfmt"),
fmt.builtins.formatting.stylua,
fmt.builtins.formatting.gofmt,
},
on_attach = function(client, bufnr)
if client.supports_method("textDocument/formatting") then
vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr })
vim.api.nvim_create_autocmd("BufWritePre", {
group = augroup,
buffer = bufnr,
callback = function()
vim.lsp.buf.format({ async = false })
end,
})
end
end,
})
cmp.setup({
snippet = {
expand = function(args)
vim.fn["vsnip#anonymous"](args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(),
["<CR>"] = cmp.mapping.confirm({ select = true }),
}),
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "vsnip" },
{
name = "spell",
option = {
keep_all_entries = false,
enable_in_context = function()
return true
end,
},
},
}, {
{ name = "buffer" },
{ name = "nvim_lua" },
}),
})
cmp.setup.filetype("gitcommit", {
sources = cmp.config.sources({
{ name = "git" },
}, {
{ name = "buffer" },
}),
})
cmp.setup.cmdline({ "/", "?" }, {
mapping = cmp.mapping.preset.cmdline(),
sources = {
{ name = "buffer" },
},
})
cmp.setup.cmdline(":", {
mapping = cmp.mapping.preset.cmdline(),
sources = cmp.config.sources({
{ name = "path" },
}, {
{ name = "cmdline" },
}),
})
local capabilities = require("cmp_nvim_lsp").default_capabilities()
lsp.rust_analyzer.setup({
settings = {
["rust-analyzer"] = {},
},
capabilities = capabilities,
})
local clangd_capabilities = vim.deepcopy(capabilities)
clangd_capabilities["offsetEncoding"] = "utf-8"
lsp.clangd.setup({
cmd = {
"clangd",
"--background-index",
"--function-arg-placeholders=0",
"-j=12",
"--clang-tidy",
},
capabilities = clangd_capabilities,
init_options = {
documentFormatting = true,
},
})
lsp.pyright.setup({
capabilities = capabilities,
})
lsp.gopls.setup({
capabilities = capabilities,
})
lsp.asm_lsp.setup({
capabilities = capabilities,
})
lsp.zls.setup({
capabilities = capabilities,
})
lsp.jdtls.setup({
capabilities = capabilities,
})
lsp.tinymist.setup({
capabilities = capabilities,
})
lsp.lua_ls.setup({
on_init = function(client)
local path = client.workspace_folders[1].name
if not vim.loop.fs_stat(path .. "/.luarc.json") and not vim.loop.fs_stat(path .. "/.luarc.jsonc") then
client.config.settings = vim.tbl_deep_extend("force", client.config.settings, {
Lua = {
runtime = {
version = "LuaJIT",
},
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
},
},
},
})
client.notify("workspace/didChangeConfiguration", { settings = client.config.settings })
end
return true
end,
capabilities = capabilities,
})