diff --git a/plugins/languages/markdown-preview.nix b/plugins/languages/markdown-preview.nix index 1e51195e..6b6b5851 100644 --- a/plugins/languages/markdown-preview.nix +++ b/plugins/languages/markdown-preview.nix @@ -12,215 +12,204 @@ with helpers.vim-plugin; originalName = "markdown-preview.nvim"; defaultPackage = pkgs.vimPlugins.markdown-preview-nvim; globalPrefix = "mkdp_"; - deprecateExtraConfig = true; maintainers = [maintainers.GaetanLepage]; - options = { - autoStart = mkDefaultOpt { - global = "auto_start"; - type = types.bool; - description = '' - Open the preview window after entering the markdown buffer. + # TODO introduced 2024-03-02: remove 2024-05-02 + deprecateExtraConfig = true; + optionsRenamedToSettings = [ + "autoStart" + "autoClose" + "refreshSlow" + "commandForGlobal" + "openToTheWorld" + "openIp" + "browser" + "echoPreviewUrl" + "browserFunc" + "previewOptions" + "markdownCss" + "highlightCss" + "port" + "pageTitle" + "theme" + ]; + imports = [ + ( + mkRenamedOptionModule + ["plugins" "markdown-preview" "fileTypes"] + ["plugins" "markdown-preview" "settings" "filetypes"] + ) + ]; - Default: `false` - ''; - }; + settingsOptions = { + auto_start = helpers.defaultNullOpts.mkBool false '' + Open the preview window after entering the markdown buffer. + ''; - autoClose = mkDefaultOpt { - global = "auto_close"; - type = types.bool; - description = '' - Auto close current preview window when change from markdown buffer to another buffer. + auto_close = helpers.defaultNullOpts.mkBool true '' + Auto close current preview window when change from markdown buffer to another buffer. + ''; - Default: `true` - ''; - }; + refresh_slow = helpers.defaultNullOpts.mkBool false '' + Refresh markdown when save the buffer or leave from insert mode, default false is auto + refresh markdown as you edit or move the cursor. + ''; - refreshSlow = mkDefaultOpt { - global = "refresh_slow"; - type = types.bool; - description = '' - Refresh markdown when save the buffer or leave from insert mode, default false is auto - refresh markdown as you edit or move the cursor. + command_for_global = helpers.defaultNullOpts.mkBool false '' + Enable markdown preview for all files (by default, the plugin is only enabled for markdown + files). + ''; - Default: `false` - ''; - }; + open_to_the_world = helpers.defaultNullOpts.mkBool false '' + Make the preview server available to others in your network. + By default, the server listens on localhost (127.0.0.1). + ''; - commandForGlobal = mkDefaultOpt { - global = "command_for_global"; - type = types.bool; - description = '' - Enable markdown preview for all files (by default, the plugin is only enabled for markdown - files). + open_ip = helpers.defaultNullOpts.mkStr "" '' + Custom IP used to open the preview page. + This can be useful when you work in remote vim and preview on local browser. + For more detail see: https://github.com/iamcco/markdown-preview.nvim/pull/9. + ''; - Default: `false` - ''; - }; + browser = helpers.defaultNullOpts.mkStr "" '' + The browser to open the preview page. + ''; - openToTheWorld = mkDefaultOpt { - global = "open_to_the_world"; - type = types.bool; - description = '' - Make the preview server available to others in your network. - By default, the server listens on localhost (127.0.0.1). + echo_preview_url = helpers.defaultNullOpts.mkBool false '' + Echo preview page url in command line when opening the preview page. + ''; - Default: `false` - ''; - }; + browser_func = helpers.defaultNullOpts.mkStr "" '' + A custom vim function name to open preview page. + This function will receive url as param. + ''; - openIp = mkDefaultOpt { - global = "open_ip"; - type = types.str; - description = '' - Custom IP used to open the preview page. - This can be useful when you work in remote vim and preview on local browser. - For more detail see: https://github.com/iamcco/markdown-preview.nvim/pull/9. + preview_options = + helpers.mkNullOrOption + ( + types.submodule { + freeformType = types.attrs; - Default: "" - ''; - }; - - browser = mkDefaultOpt { - type = types.str; - description = '' - The browser to open the preview page. - - Default: "" - ''; - }; - - echoPreviewUrl = mkDefaultOpt { - global = "echo_preview_url"; - type = types.bool; - description = '' - Echo preview page url in command line when opening the preview page. - - Default: `false` - ''; - }; - - browserFunc = mkDefaultOpt { - global = "browser_func"; - type = types.str; - description = '' - A custom vim function name to open preview page. - This function will receive url as param. - - Default: "" - ''; - }; - - previewOptions = mkDefaultOpt { - global = "preview_options"; - default = {}; - description = "Preview options"; - type = types.submodule { - freeformType = types.attrs; - options = let - mkEmptyListOfStr = helpers.defaultNullOpts.mkNullable (with types; listOf str) "[]"; - in { - mkit = mkEmptyListOfStr "markdown-it options for render"; - - katex = mkEmptyListOfStr "katex options for math"; - - uml = mkEmptyListOfStr "markdown-it-plantuml options"; - - maid = mkEmptyListOfStr "mermaid options"; - - disable_sync_scroll = helpers.defaultNullOpts.mkBool false "Disable sync scroll."; - - sync_scroll_type = - helpers.defaultNullOpts.mkEnumFirstDefault - ["middle" "top" "relative"] - '' - Scroll type: - - "middle": The cursor position is always shown at the middle of the preview page. - - "top": The vim top viewport is always shown at the top of the preview page. - - "relative": The cursor position is always shown at the relative positon of the preview page. - - Default: "middle" + options = { + mkit = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `markdown-it` options for render. ''; - hide_yaml_meta = helpers.defaultNullOpts.mkBool true "Hide yaml metadata."; + katex = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `katex` options for math. + ''; - sequence_diagrams = mkEmptyListOfStr "js-sequence-diagrams options"; + uml = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `markdown-it-plantuml` options. + ''; - flowchart_diagrams = mkEmptyListOfStr "flowcharts diagrams options"; + maid = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `mermaid` options. + ''; - content_editable = helpers.defaultNullOpts.mkBool false '' - Content editable from the preview page. - ''; + disable_sync_scroll = helpers.defaultNullOpts.mkBool false '' + Disable sync scroll. + ''; - disable_filename = helpers.defaultNullOpts.mkBool false '' - Disable filename header for the preview page. - ''; + sync_scroll_type = + helpers.defaultNullOpts.mkEnumFirstDefault + ["middle" "top" "relative"] + '' + Scroll type: + - "middle": The cursor position is always shown at the middle of the preview page. + - "top": The vim top viewport is always shown at the top of the preview page. + - "relative": The cursor position is always shown at the relative positon of the preview page. + ''; - toc = mkEmptyListOfStr "Toc options"; - }; - }; - }; - - markdownCss = mkDefaultOpt { - global = "markdown_css"; - type = types.str; - description = '' - Custom markdown style. - Must be an absolute path like "/Users/username/markdown.css" or - `expand('~/markdown.css')`. - - Default: "" - ''; - }; - - highlightCss = mkDefaultOpt { - global = "highlight_css"; - type = types.str; - description = '' - Custom highlight style. - Must be an absolute path like "/Users/username/highlight.css" or - `expand('~/highlight.css')`. - - Default: "" - ''; - }; - - port = mkDefaultOpt { - type = types.ints.positive; - apply = v: helpers.ifNonNull' v (toString v); - description = '' - Custom port to start server or empty for random. - ''; - }; - - pageTitle = mkDefaultOpt { - global = "page_title"; - type = types.str; - description = '' - Preview page title. - `$${name}` will be replaced with the file name. - - Default: "「\$\{name}」" - ''; - }; - - fileTypes = mkDefaultOpt { - global = "file_types"; - type = with types; listOf str; - description = '' - Recognized filetypes. These filetypes will have MarkdownPreview... commands. - - Default: `["markdown"]` - ''; - }; - - theme = mkDefaultOpt { - type = types.enum ["dark" "light"]; - description = '' - Default theme (dark or light). - By default the theme is define according to the preferences of the system. - ''; + hide_yaml_meta = helpers.defaultNullOpts.mkBool true '' + Hide yaml metadata. + ''; + + sequence_diagrams = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `js-sequence-diagrams` options. + ''; + + flowchart_diagrams = helpers.defaultNullOpts.mkListOf types.str "[]" '' + `flowcharts` diagrams options. + ''; + + content_editable = helpers.defaultNullOpts.mkBool false '' + Content editable from the preview page. + ''; + + disable_filename = helpers.defaultNullOpts.mkBool false '' + Disable filename header for the preview page. + ''; + + toc = helpers.defaultNullOpts.mkListOf types.str "[]" '' + Toc options. + ''; + }; + } + ) + "Preview options"; + + markdown_css = helpers.defaultNullOpts.mkStr "" '' + Custom markdown style. + Must be an absolute path like `"/Users/username/markdown.css"` or + `{__raw = "vim.fn.expand('~/markdown.css')";}`. + ''; + + highlight_css = helpers.defaultNullOpts.mkStr "" '' + Custom highlight style. + Must be an absolute path like "/Users/username/highlight.css" or + `{__raw = "vim.fn.expand('~/highlight.css')";}`. + ''; + + port = helpers.defaultNullOpts.mkStr "" '' + Custom port to start server or empty for random. + ''; + + page_title = helpers.defaultNullOpts.mkStr "「\$\{name}」" '' + Preview page title. + `$${name}` will be replaced with the file name. + ''; + + images_path = helpers.defaultNullOpts.mkStr "" '' + Use a custom location for images. + ''; + + filetypes = helpers.defaultNullOpts.mkListOf types.str ''["markdown"]'' '' + Recognized filetypes. These filetypes will have `MarkdownPreview...` commands. + ''; + + theme = helpers.mkNullOrOption (types.enum ["dark" "light"]) '' + Default theme (dark or light). + By default the theme is define according to the preferences of the system. + ''; + + combine_preview = helpers.defaultNullOpts.mkBool false '' + Combine preview window. + If enable it will reuse previous opened preview window when you preview markdown file. + Ensure to set `auto_close = false` if you have enable this option. + ''; + + combine_preview_auto_refresh = helpers.defaultNullOpts.mkBool true '' + Auto refetch combine preview contents when change markdown buffer only when + `combine_preview` is `true`. + ''; + }; + + settingsExample = { + auto_start = true; + auto_close = true; + browser = "firefox"; + echo_preview_url = true; + preview_options = { + disable_sync_scroll = true; + sync_scroll_type = "middle"; + disable_filename = true; }; + markdown_css = "/Users/username/markdown.css"; + highlight_css.__raw = "vim.fn.expand('~/highlight.css')"; + port = "8080"; + page_title = "「\$\{name}」"; + theme = "dark"; }; }