nixvim-config/plugins/lsp.nix
2025-02-21 21:37:05 -08:00

90 lines
2.6 KiB
Nix

{ pkgs, ... }:
{
environment.systemPackages = [
pkgs.nodePackages.eslint
pkgs.nodePackages.prettier
];
programs.nixvim = {
plugins.lsp = {
enable = true;
onAttach = ''
-- Set capabilities for the LSP client from blink-cmp
-- client.config.capabilities = require('blink.cmp').get_lsp_capabilities(client.config.capabilities)
local active_clients = vim.lsp.get_active_clients()
if client.name == "denols" then
for _, client_ in pairs(active_clients) do
-- stop tsserver if denols is already active
if client_.name == "ts_ls" then
client_.stop()
end
end
elseif client.name == "ts_ls" then
for _, client_ in pairs(active_clients) do
-- prevent tsserver from starting if denols is already active
if client_.name == "denols" then
client.stop()
end
end
end
'';
servers = {
## Needs a package
# awk_ls.enable = true;
bashls.enable = true;
clangd.enable = true;
cmake.enable = true;
## Needs a package
# css_variables.enable = true;
cssls.enable = true;
## Needs a package
# cssmodules_ls.enable = true;
## Needs a package
# custom_elements_ls.enable = true;
denols = {
enable = true;
rootDir = "require('lspconfig').util.root_pattern('deno.json', 'deno.jsonc')";
};
dockerls.enable = true; # Docker
eslint.enable = true;
gopls = { # Golang
enable = true;
autostart = true;
};
## Needs a package
# graphql.enable = true;
html.enable = true;
java_language_server.enable = true;
lua_ls = { # Lua
enable = true;
settings.telemetry.enable = false;
};
marksman.enable = true;
nil_ls.enable = true;
## Using nil_ls
# nixd.enable = true;
postgres_lsp.enable = true;
pyright.enable = true;
rust_analyzer = {
enable = true;
installRustc = true;
installCargo = true;
};
sqls.enable = true;
## Needs a package
# sqlls.enable = true;
stylelint_lsp.enable = true;
tailwindcss.enable = true;
ts_ls = {
enable = true;
rootDir = "require('lspconfig').util.root_pattern('package.json')";
settings = {
single_file_support = false;
};
};
yamlls.enable = true; # YAML
};
};
};
}