plugins/nvim-lsp: keymaps options (#254)

This commit is contained in:
Gaétan Lepage 2023-03-14 15:22:56 +01:00 committed by GitHub
parent 4d4f4d17f7
commit 9d68949da7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 94 additions and 0 deletions

View file

@ -16,6 +16,37 @@ in {
plugins.lsp = { plugins.lsp = {
enable = mkEnableOption "neovim's built-in LSP"; enable = mkEnableOption "neovim's built-in LSP";
keymaps = {
silent = mkOption {
type = types.bool;
description = "Whether nvim-lsp keymaps should be silent";
default = false;
};
diagnostic = mkOption {
type = types.attrsOf types.str;
description = "Mappings for `vim.diagnostic.<action>` functions.";
example = {
"<leader>k" = "goto_prev";
"<leader>j" = "goto_next";
};
default = {};
};
lspBuf = mkOption {
type = types.attrsOf types.str;
description = "Mappings for `vim.lsp.buf.<action>` functions.";
example = {
"gd" = "definition";
"gD" = "references";
"gt" = "type_definition";
"gi" = "implementation";
"K" = "hover";
};
default = {};
};
};
enabledServers = mkOption { enabledServers = mkOption {
type = with types; type = with types;
listOf (oneOf [ listOf (oneOf [
@ -79,6 +110,30 @@ in {
mkIf cfg.enable { mkIf cfg.enable {
extraPlugins = [pkgs.vimPlugins.nvim-lspconfig]; extraPlugins = [pkgs.vimPlugins.nvim-lspconfig];
maps.normal = let
diagnosticMaps =
mapAttrs
(key: action: {
silent = cfg.keymaps.silent;
action = "vim.diagnostic.${action}";
lua = true;
})
cfg.keymaps.diagnostic;
lspBuf =
mapAttrs
(key: action: {
silent = cfg.keymaps.silent;
action = "vim.lsp.buf.${action}";
lua = true;
})
cfg.keymaps.lspBuf;
in
mkMerge [
diagnosticMaps
lspBuf
];
# Enable all LSP servers # Enable all LSP servers
extraConfigLua = '' extraConfigLua = ''
-- LSP {{{ -- LSP {{{

View file

@ -0,0 +1,39 @@
{
empty = {
plugins.lsp.enable = true;
};
test = {
plugins.lsp = {
enable = true;
keymaps = {
silent = true;
diagnostic = {
"<leader>k" = "goto_prev";
"<leader>j" = "goto_next";
};
lspBuf = {
"gd" = "definition";
"gD" = "references";
"gt" = "type_definition";
"gi" = "implementation";
"K" = "hover";
};
};
servers = {
bashls.enable = true;
clangd.enable = true;
nil_ls.enable = true;
rust-analyzer.enable = true;
pylsp = {
enable = true;
filetypes = ["python"];
autostart = false;
};
};
};
};
}