145 lines
3.5 KiB
Nix
145 lines
3.5 KiB
Nix
{pkgs, ...}: {
|
|
programs.neovim.plugins = with pkgs.vimPlugins; [
|
|
# LSP and completions for injected langs
|
|
otter-nvim
|
|
phpactor
|
|
# LSP
|
|
{
|
|
plugin = nvim-lspconfig;
|
|
type = "lua";
|
|
config =
|
|
/*
|
|
lua
|
|
*/
|
|
''
|
|
local lspconfig = require("lspconfig")
|
|
|
|
function add_lsp(server, options)
|
|
if not options["cmd"] then
|
|
options["cmd"] = server["document_config"]["default_config"]["cmd"]
|
|
end
|
|
if not options["capabilities"] then
|
|
options["capabilities"] = require("cmp_nvim_lsp").default_capabilities()
|
|
end
|
|
|
|
if vim.fn.executable(options["cmd"][1]) == 1 then
|
|
server.setup(options)
|
|
end
|
|
end
|
|
|
|
-- Add LSPs with lsp-format attached
|
|
add_lsp(lspconfig.lua_ls, {})
|
|
|
|
add_lsp(lspconfig.nixd, {
|
|
settings = {
|
|
nixd = {
|
|
formatting = {
|
|
command = { "alejandra" },
|
|
},
|
|
},
|
|
},
|
|
})
|
|
|
|
-- Other LSPs
|
|
add_lsp(lspconfig.bashls, {})
|
|
add_lsp(lspconfig.clangd, {})
|
|
add_lsp(lspconfig.dartls, {})
|
|
add_lsp(lspconfig.dockerls, {})
|
|
add_lsp(lspconfig.gopls, {})
|
|
add_lsp(lspconfig.hls, {})
|
|
add_lsp(lspconfig.jdtls, {})
|
|
add_lsp(lspconfig.kotlin_language_server, {})
|
|
add_lsp(lspconfig.phpactor, { init_options = { ["language_server_php_cs_fixer.enabled"] = true } })
|
|
add_lsp(lspconfig.rust_analyzer, {})
|
|
add_lsp(lspconfig.pylsp, {})
|
|
add_lsp(lspconfig.solargraph, {})
|
|
add_lsp(lspconfig.terraformls, {})
|
|
add_lsp(lspconfig.texlab, { chktex = {
|
|
onEdit = true,
|
|
onOpenAndSave = true,
|
|
} })
|
|
add_lsp(lspconfig.tsserver, {})
|
|
add_lsp(lspconfig.typst_lsp, {})
|
|
add_lsp(lspconfig.elixirls, { cmd = { "elixir-ls" } })
|
|
'';
|
|
}
|
|
{
|
|
plugin = ltex_extra-nvim;
|
|
type = "lua";
|
|
config =
|
|
/*
|
|
lua
|
|
*/
|
|
''
|
|
local ltex_extra = require("ltex_extra")
|
|
add_lsp(lspconfig.ltex, {
|
|
on_attach = function(client, bufnr)
|
|
ltex_extra.setup({
|
|
path = vim.fn.expand("~") .. "/.local/state/ltex",
|
|
})
|
|
end,
|
|
})
|
|
'';
|
|
}
|
|
|
|
# Snippets
|
|
luasnip
|
|
|
|
# Completions
|
|
cmp-nvim-lsp
|
|
cmp_luasnip
|
|
cmp-rg
|
|
cmp-buffer
|
|
cmp-path
|
|
{
|
|
plugin = cmp-git;
|
|
type = "lua";
|
|
config =
|
|
/*
|
|
lua
|
|
*/
|
|
''
|
|
require("cmp_git").setup({})
|
|
'';
|
|
}
|
|
|
|
lspkind-nvim
|
|
{
|
|
plugin = nvim-cmp;
|
|
type = "lua";
|
|
config =
|
|
/*
|
|
lua
|
|
*/
|
|
''
|
|
local cmp = require("cmp")
|
|
|
|
cmp.setup({
|
|
formatting = {
|
|
format = require("lspkind").cmp_format({
|
|
before = function(entry, vim_item)
|
|
return vim_item
|
|
end,
|
|
}),
|
|
},
|
|
snippet = {
|
|
expand = function(args)
|
|
require("luasnip").lsp_expand(args.body)
|
|
end,
|
|
},
|
|
mapping = cmp.mapping.preset.insert({}),
|
|
sources = {
|
|
{ name = "otter" },
|
|
{ name = "nvim_lsp" },
|
|
{ name = "luasnip" },
|
|
{ name = "git" },
|
|
{ name = "buffer", option = { get_bufnrs = vim.api.nvim_list_bufs } },
|
|
{ name = "path" },
|
|
{ name = "rg" },
|
|
},
|
|
})
|
|
'';
|
|
}
|
|
];
|
|
}
|