{lib, ...}: let inherit (lib.options) mkEnableOption; inherit (lib.nvim.binds) mkMappingOption; in { options.vim.lsp = { enable = mkEnableOption "LSP, also enabled automatically through null-ls and lspconfig options"; formatOnSave = mkEnableOption "format on save"; mappings = { goToDefinition = mkMappingOption "Go to definition" "lgd"; goToDeclaration = mkMappingOption "Go to declaration" "lgD"; goToType = mkMappingOption "Go to type" "lgt"; listImplementations = mkMappingOption "List implementations" "lgi"; listReferences = mkMappingOption "List references" "lgr"; nextDiagnostic = mkMappingOption "Go to next diagnostic" "lgn"; previousDiagnostic = mkMappingOption "Go to previous diagnostic" "lgp"; openDiagnosticFloat = mkMappingOption "Open diagnostic float" "le"; documentHighlight = mkMappingOption "Document highlight" "lH"; listDocumentSymbols = mkMappingOption "List document symbols" "lS"; addWorkspaceFolder = mkMappingOption "Add workspace folder" "lwa"; removeWorkspaceFolder = mkMappingOption "Remove workspace folder" "lwr"; listWorkspaceFolders = mkMappingOption "List workspace folders" "lwl"; listWorkspaceSymbols = mkMappingOption "List workspace symbols" "lws"; hover = mkMappingOption "Trigger hover" "lh"; signatureHelp = mkMappingOption "Signature help" "ls"; renameSymbol = mkMappingOption "Rename symbol" "ln"; codeAction = mkMappingOption "Code action" "la"; format = mkMappingOption "Format" "lf"; toggleFormatOnSave = mkMappingOption "Toggle format on save" "ltf"; }; }; }