nix-community.nixvim/plugins/nvim-lsp/default.nix

80 lines
2 KiB
Nix
Raw Normal View History

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
];
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
-- }}}
'';
};
};
}