nixos/home-manager/modules/neovim/plugins/lsp/default.nix
2025-04-17 13:36:43 -04:00

192 lines
5.2 KiB
Nix

{pkgs, ...}: {
imports = [
./cmp.nix
];
programs.nixvim.plugins = {
crates.enable = true; # Does not work
dressing.enable = true;
};
programs.nixvim.extraConfigVim = ''
augroup unrecognized_filetypes
autocmd!
autocmd BufRead,BufNewFile *.vert set filetype=glsl
autocmd BufRead,BufNewFile *.tesc set filetype=glsl
autocmd BufRead,BufNewFile *.tese set filetype=glsl
autocmd BufRead,BufNewFile *.frag set filetype=glsl
autocmd BufRead,BufNewFile *.geom set filetype=glsl
autocmd BufRead,BufNewFile *.comp set filetype=glsl
autocmd BufRead,BufNewFile *.qml set filetype=qml
autocmd BufRead,BufNewFile *.slint set filetype=slint
autocmd BufRead,BufNewFile *.typ set filetype=typst
augroup END
'';
programs.nixvim.plugins.lsp = {
enable = true;
capabilities = ''
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
capabilities.textDocument.completion.completionItem.snippetSupport = true'';
preConfig = ''
local border = {
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" },
{ "", "FloatBorder" }
}
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border })
vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border })
'';
inlayHints = true;
servers = {
clangd = {
enable = true;
settings.arguments = [
"--clang-tidy"
"--background-index"
"--completion-style=detailed"
"--cross-file-rename"
"--header-insertion=iwyu"
"--all-scopes-completion"
];
};
# jdtls.enable = true;
emmet_ls.enable = true;
ts_ls.enable = true;
cssls.enable = true;
# glsl_analyzer.enable = true;
glslls.enable = true;
pyright.enable = true;
nixd.enable = true;
lua_ls = {
enable = true;
settings = {
telemetry.enable = false;
workspace.checkThirdParty = false;
};
};
svelte = {
enable = true;
settings.enable_ts_plugin = true;
};
slint_lsp.enable = true;
zls.enable = true;
rust_analyzer = {
enable = true;
installRustc = false;
installCargo = false;
settings = {
imports = {
granularity.group = "crate";
prefix = "self";
preferNoStd = true;
};
check = {
command = "clippy";
allTargets = true;
};
completion = {
fullFunctionSignatures.enable = false;
autoimport.enable = true;
};
cargo = {
allTargets = true;
features = "all";
};
procMacro.enable = true;
};
};
};
keymaps = {
silent = true;
extra = [
{
mode = "n";
key = "<leader>rn";
action.__raw = "vim.lsp.buf.rename";
}
{
mode = "n";
key = "<leader>ca";
action.__raw = "vim.lsp.buf.code_action";
}
{
mode = "n";
key = "<leader>di";
action.__raw = "vim.diagnostic.open_float";
}
{
mode = "n";
key = "<leader>dv";
action.__raw = "require('telescope.builtin').diagnostics";
}
{
mode = "n";
key = "gd";
action.__raw = "vim.lsp.buf.definition";
}
{
mode = "n";
key = "gr";
action.__raw = "require('telescope.builtin').lsp_references";
}
{
mode = "n";
key = "gI";
action.__raw = "vim.lsp.buf.implementation";
}
{
mode = "n";
key = "<leader>D";
action.__raw = "vim.lsp.buf.type_definition";
}
{
mode = "n";
key = "<leader>ds";
action.__raw = "require('telescope.builtin').lsp_document_symbols";
}
{
mode = "n";
key = "<leader>ws";
action.__raw = "require('telescope.builtin').lsp_dynamic_workspace_symbols";
}
{
mode = "n";
key = "<leader>K";
action.__raw = "vim.lsp.buf.hover";
}
{
mode = "n";
key = "<leader>k";
action.__raw = "vim.lsp.buf.signature_help";
}
{
mode = "n";
key = "<leader>gD";
action.__raw = "vim.lsp.buf.declaration";
}
{
mode = "n";
key = "<leader>wa";
action.__raw = "vim.lsp.buf.add_workspace_folder";
}
{
mode = "n";
key = "<leader>wr";
action.__raw = "vim.lsp.buf.remove_workspace_folder";
}
{
mode = "n";
key = "<leader>wl";
action.__raw = "function() print(vim.inspect(vim.lsp.buf.list_workspace_folders())) end";
}
];
};
};
}