diff --git a/modules/languages/markdown/config.nix b/modules/languages/markdown/config.nix index 7084314..4483e76 100644 --- a/modules/languages/markdown/config.nix +++ b/modules/languages/markdown/config.nix @@ -4,7 +4,8 @@ lib, ... }: let - inherit (lib) nvim mkIf mkMerge mkBinding isList; + inherit (lib) nvim mkIf mkMerge mkBinding isList concatMapStringsSep; + inherit (nvim.vim) mkVimBool; cfg = config.vim.languages.markdown; self = import ./markdown.nix { @@ -49,6 +50,21 @@ in { ''; }) + (mkIf cfg.markdownPreview.enable { + vim.startPlugins = [pkgs.vimPlugins.markdown-preview-nvim]; + + vim.configRC.markdown-preview = nvim.dag.entryAnywhere '' + let g:mkdp_auto_start = ${mkVimBool cfg.markdownPreview.autoStart} + let g:mkdp_auto_close = ${mkVimBool cfg.markdownPreview.autoClose} + let g:mkdp_refresh_slow = ${mkVimBool cfg.markdownPreview.lazyRefresh} + let g:mkdp_filetypes = [${concatMapStringsSep ", " (x: "'" + x + "'") cfg.markdownPreview.filetypes}] + let g:mkdp_command_for_global = ${mkVimBool cfg.markdownPreview.alwaysAllowPreview} + let g:mkdp_open_to_the_world = ${mkVimBool cfg.markdownPreview.broadcastServer} + let g:mkdp_open_ip = '${cfg.markdownPreview.customIP}' + let g:mkdp_port = '${cfg.markdownPreview.customPort}' + ''; + }) + (mkIf cfg.lsp.enable { vim.lsp.lspconfig.enable = true; diff --git a/modules/languages/markdown/markdown.nix b/modules/languages/markdown/markdown.nix index 7c07667..737b635 100644 --- a/modules/languages/markdown/markdown.nix +++ b/modules/languages/markdown/markdown.nix @@ -40,6 +40,62 @@ in { }; }; + markdownPreview = { + enable = mkOption { + type = types.bool; + default = false; + description = "Enable markdown preview in neovim with markdown-preview.nvim"; + }; + + autoStart = mkOption { + type = types.bool; + default = false; + description = "Automatically open the preview window after entering a Markdown buffer"; + }; + + autoClose = mkOption { + type = types.bool; + default = true; + description = "Automatically close the preview window after leaving a Markdown buffer"; + }; + + lazyRefresh = mkOption { + type = types.bool; + default = false; + description = "Only update preview when saving or leaving insert mode"; + }; + + filetypes = mkOption { + type = types.listOf types.str; + default = ["markdown"]; + description = "Allowed filetypes"; + }; + + alwaysAllowPreview = mkOption { + type = types.bool; + default = false; + description = "Allow preview on all filetypes"; + }; + + broadcastServer = mkOption { + type = types.bool; + default = false; + description = "Allow for outside and network wide connections"; + }; + + customIP = mkOption { + type = types.str; + default = ""; + description = "IP-address to use"; + }; + + customPort = mkOption { + type = types.str; + default = ""; + description = "Port to use"; + }; + }; + treesitter = { enable = mkOption { description = "Enable Markdown treesitter";