LazyVim.on_very_lazy(function() vim.filetype.add({ extension = { mdx = "markdown.mdx" }, }) end) return { recommended = function() return LazyVim.extras.wants({ ft = { "markdown", "markdown.mdx" }, root = "README.md", }) end, { "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() vim.fn["mkdp#util#install"]() end, keys = { { "cp", ft = "markdown", "MarkdownPreviewToggle", desc = "Markdown Preview", }, }, config = function() vim.cmd([[do FileType]]) end, }, { "lukas-reineke/headlines.nvim", opts = function() local opts = {} for _, ft in ipairs({ "markdown", "norg", "rmd", "org" }) do opts[ft] = { headline_highlights = {}, -- disable bullets for now. See https://github.com/lukas-reineke/headlines.nvim/issues/66 bullets = {}, quote_string = false, } for i = 1, 6 do local hl = "Headline" .. i vim.api.nvim_set_hl(0, hl, { link = "Headline", default = true }) table.insert(opts[ft].headline_highlights, hl) end end return opts end, ft = { "markdown", "norg", "rmd", "org" }, config = function(_, opts) -- PERF: schedule to prevent headlines slowing down opening a file vim.schedule(function() require("headlines").setup(opts) require("headlines").refresh() end) end, }, }