return { { "nvim-treesitter/nvim-treesitter", opts = function(_, opts) if type(opts.ensure_installed) == "table" then vim.list_extend(opts.ensure_installed, { "markdown", "markdown_inline" }) end end, }, { "williamboman/mason.nvim", opts = function(_, opts) opts.ensure_installed = opts.ensure_installed or {} vim.list_extend(opts.ensure_installed, { "markdownlint", "marksman" }) end, }, { "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, }) end, }, { "mfussenegger/nvim-lint", optional = true, opts = { linters_by_ft = { markdown = { "markdownlint" }, }, }, }, { "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 = {}, } 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, }, }