diff --git a/docs/release-notes/rl-0.6.md b/docs/release-notes/rl-0.6.md index 8d74eec..f1ef364 100644 --- a/docs/release-notes/rl-0.6.md +++ b/docs/release-notes/rl-0.6.md @@ -25,3 +25,5 @@ Release notes for release 0.6 [donnerinoern](https://github.com/donnerinoern): - Added Gruvbox theme + +- Added marksman LSP for Markdown diff --git a/modules/languages/markdown/config.nix b/modules/languages/markdown/config.nix index ba49fb9..8a9e7eb 100644 --- a/modules/languages/markdown/config.nix +++ b/modules/languages/markdown/config.nix @@ -4,9 +4,25 @@ lib, ... }: let - inherit (lib) nvim mkIf mkMerge; + inherit (lib) nvim mkIf mkMerge isList; cfg = config.vim.languages.markdown; + servers = { + marksman = { + package = pkgs.marksman; + lspConfig = '' + lspconfig.marksman.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then nvim.lua.expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/marksman", "server"}'' + }, + } + ''; + }; + }; in { config = mkIf cfg.enable (mkMerge [ (mkIf cfg.treesitter.enable { @@ -26,5 +42,11 @@ in { autocmd FileType markdown noremap p :Glow ''; }) + + (mkIf cfg.lsp.enable { + vim.lsp.lspconfig.enable = true; + + vim.lsp.lspconfig.sources.markdown-lsp = servers.${cfg.lsp.server}.lspConfig; + }) ]); } diff --git a/modules/languages/markdown/markdown.nix b/modules/languages/markdown/markdown.nix index 153eae5..9ff06f8 100644 --- a/modules/languages/markdown/markdown.nix +++ b/modules/languages/markdown/markdown.nix @@ -4,9 +4,27 @@ lib, ... }: let - inherit (lib) mkEnableOption mkOption types nvim; + inherit (builtins) attrNames; + inherit (lib) mkEnableOption mkOption types nvim isList; cfg = config.vim.languages.markdown; + defaultServer = "marksman"; + servers = { + marksman = { + package = pkgs.marksman; + lspConfig = '' + lspconfig.marksman.setup{ + capabilities = capabilities; + on_attach = default_on_attach; + cmd = ${ + if isList cfg.lsp.package + then nvim.lua.expToLua cfg.lsp.package + else ''{"${cfg.lsp.package}/bin/marksman", "server"}'' + }, + } + ''; + }; + }; in { options.vim.languages.markdown = { enable = mkEnableOption "Markdown markup language support"; @@ -26,5 +44,22 @@ in { mdPackage = nvim.types.mkGrammarOption pkgs "markdown"; mdInlinePackage = nvim.types.mkGrammarOption pkgs "markdown-inline"; }; + + lsp = { + enable = mkEnableOption "Enable Markdown LSP support" // {default = config.vim.languages.enableLSP;}; + + server = mkOption { + description = "Markdown LSP server to use"; + type = with types; enum (attrNames servers); + default = defaultServer; + }; + + package = mkOption { + description = "Markdown LSP server package, or the command to run as a list of strings"; + example = ''[lib.getExe pkgs.jdt-language-server " - data " " ~/.cache/jdtls/workspace "]''; + type = with types; either package (listOf str); + default = servers.${cfg.lsp.server}.package; + }; + }; }; }