return { { "stevearc/conform.nvim", optional = true, opts = { formatters = { ["markdown-toc"] = { condition = function(_, ctx) for _, line in ipairs(vim.api.nvim_buf_get_lines(ctx.buf, 0, -1, false)) do if line:find("") then return true end end end, }, ["markdownlint-cli2"] = { condition = function(_, ctx) local diag = vim.tbl_filter(function(d) return d.source == "markdownlint" end, vim.diagnostic.get(ctx.buf)) return #diag > 0 end, }, }, formatters_by_ft = { ["markdown"] = { "prettier", "markdownlint-cli2", "markdown-toc" }, ["markdown.mdx"] = { "prettier", "markdownlint-cli2", "markdown-toc" }, }, }, }, { "williamboman/mason.nvim", opts = { ensure_installed = { "markdownlint-cli2", "markdown-toc" } }, }, { "nvimtools/none-ls.nvim", optional = true, opts = function(_, opts) local nls = require("null-ls") opts.sources = vim.list_extend(opts.sources or {}, { nls.builtins.diagnostics.markdownlint_cli2, }) end, }, { "mfussenegger/nvim-lint", optional = true, opts = { linters_by_ft = { markdown = { "markdownlint-cli2" }, }, }, }, { "neovim/nvim-lspconfig", opts = { servers = { marksman = {}, }, }, }, -- Markdown preview { "iamcco/markdown-preview.nvim", cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop" }, build = function() require("lazy").load({ plugins = { "markdown-preview.nvim" } }) vim.fn["mkdp#util#install"]() end, keys = { { "cp", ft = "markdown", "MarkdownPreviewToggle", desc = "Markdown Preview", }, }, config = function() vim.cmd([[do FileType]]) end, }, { "MeanderingProgrammer/render-markdown.nvim", opts = { code = { sign = false, width = "block", right_pad = 1, }, heading = { sign = false, icons = {}, }, checkbox = { enabled = false, }, }, ft = { "markdown", "norg", "rmd", "org", "codecompanion" }, config = function(_, opts) require("render-markdown").setup(opts) Snacks.toggle({ name = "Render Markdown", get = function() return require("render-markdown.state").enabled end, set = function(enabled) local m = require("render-markdown") if enabled then m.enable() else m.disable() end end, }):map("um") end, }, }