2021-02-01 15:54:53 +00:00
|
|
|
{ config, pkgs, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.programs.nixvim.plugins.lsp;
|
|
|
|
helpers = (import ../helpers.nix { inherit lib; });
|
|
|
|
in
|
|
|
|
{
|
|
|
|
imports = [
|
|
|
|
./clangd.nix
|
|
|
|
./rust-analyzer.nix
|
|
|
|
./rnix-lsp.nix
|
2021-11-23 15:41:03 +01:00
|
|
|
./pyright.nix
|
2021-02-01 15:54:53 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
options = {
|
|
|
|
programs.nixvim.plugins.lsp = {
|
|
|
|
enable = mkEnableOption "Enable neovim's built-in LSP";
|
|
|
|
|
|
|
|
enabledServers = mkOption {
|
|
|
|
type = with types; listOf (oneOf [str (submodule {
|
|
|
|
options = {
|
|
|
|
name = mkOption {
|
|
|
|
type = str;
|
|
|
|
description = "The server's name";
|
|
|
|
};
|
|
|
|
|
|
|
|
extraOptions = mkOption {
|
|
|
|
type = attrs;
|
|
|
|
description = "Extra options for the server";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
})]);
|
|
|
|
description = "A list of enabled LSP servers. Don't use this directly.";
|
|
|
|
default = [];
|
|
|
|
};
|
|
|
|
|
|
|
|
onAttach = mkOption {
|
|
|
|
type = types.lines;
|
|
|
|
description = "A lua function to be run when a new LSP buffer is attached. The argument `client` is provided.";
|
|
|
|
default = "";
|
|
|
|
};
|
2021-11-23 15:39:57 +01:00
|
|
|
|
|
|
|
capabilities = mkOption {
|
|
|
|
type = types.lines;
|
|
|
|
description = "A lua function defining the capabilities of a new LSP buffer.";
|
|
|
|
default = "";
|
|
|
|
};
|
2021-02-01 15:54:53 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config = mkIf cfg.enable {
|
|
|
|
programs.nixvim = {
|
|
|
|
extraPlugins = [ pkgs.vimPlugins.nvim-lspconfig ];
|
|
|
|
|
|
|
|
# Enable all LSP servers
|
|
|
|
extraConfigLua = ''
|
|
|
|
-- LSP {{{
|
|
|
|
local __lspServers = ${helpers.toLuaObject cfg.enabledServers}
|
|
|
|
local __lspOnAttach = function(client)
|
|
|
|
${cfg.onAttach}
|
|
|
|
end
|
2021-11-23 15:39:57 +01:00
|
|
|
local __lspCapabilities = function
|
|
|
|
${cfg.capabilities}
|
|
|
|
end
|
2021-02-01 15:54:53 +00:00
|
|
|
|
|
|
|
for i,server in ipairs(__lspServers) do
|
|
|
|
if type(server) == "string" then
|
|
|
|
require('lspconfig')[server].setup {
|
|
|
|
on_attach = __lspOnAttach
|
2021-11-23 15:39:57 +01:00
|
|
|
capabilities = __lspCapabilities
|
2021-02-01 15:54:53 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
require('lspconfig')[server.name].setup(server.extraOptions)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
-- }}}
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|