kickstart.nvim/lua/whipsmart/plugins/markdown.lua

85 lines
2.9 KiB
Lua

local function gh(repo) return 'https://github.com/' .. repo end
-- ── render-markdown (always loaded) ─────────────────────────────────────────
vim.pack.add {
gh 'MeanderingProgrammer/render-markdown.nvim',
gh 'nvim-treesitter/nvim-treesitter',
}
require('render-markdown').setup {
render_modes = { 'n', 'c' },
heading = { enabled = true },
bullet = { enabled = true },
checkbox = { enabled = true },
code = { enabled = true },
}
vim.api.nvim_create_autocmd('FileType', {
desc = 'Markdown editing options',
group = vim.api.nvim_create_augroup('whipsmart-markdown', { clear = true }),
pattern = 'markdown',
callback = function()
vim.opt_local.wrap = true
vim.opt_local.linebreak = true
vim.opt_local.spell = true
vim.opt_local.spelllang = 'en_us'
vim.opt_local.conceallevel = 2
end,
})
-- ── obsidian (opt-in — requires vim.g.obsidian_vaults to be set in local.lua) ─
-- Example local.lua entry:
-- vim.g.obsidian_vaults = { { name = 'personal', path = '~/Obsidian/Main' } }
if not vim.g.obsidian_vaults then return end
-- blink.compat must be unversioned (HEAD) — released tags lack cmp.get_config()
vim.pack.add {
{ src = gh 'epwalsh/obsidian.nvim', version = vim.version.range '*' },
gh 'nvim-lua/plenary.nvim',
gh 'saghen/blink.compat',
}
require('blink.compat').setup {}
require('obsidian').setup {
workspaces = vim.g.obsidian_vaults,
completion = { nvim_cmp = false, min_chars = 2 },
}
-- Register obsidian nvim-cmp sources via blink.compat shim
local cmp = require 'cmp'
cmp.register_source('obsidian', require('cmp_obsidian').new())
cmp.register_source('obsidian_new', require('cmp_obsidian_new').new())
cmp.register_source('obsidian_tags', require('cmp_obsidian_tags').new())
-- Extend blink.cmp config post-setup via the v1 merge_with API.
-- Called from custom/plugins/ (Section 3), so plugins.cmp has already run setup().
require('blink.cmp.config').merge_with {
completion = {
trigger = {
-- Remove '[' so [[ wikilinks trigger the completion menu
show_on_x_blocked_trigger_characters = { "'", '"', '(', '{' },
},
menu = {
-- Suppress auto-popup in markdown/text except when '[' was the trigger
auto_show = function(ctx)
if vim.tbl_contains({ 'markdown', 'text' }, vim.bo.filetype) then
return ctx.trigger.initial_kind == 'trigger_character'
and ctx.trigger.initial_character == '['
end
return true
end,
},
},
sources = {
per_filetype = {
markdown = { 'obsidian', 'obsidian_new', 'obsidian_tags', 'lsp', 'path', 'snippets', 'buffer' },
},
providers = {
obsidian = { name = 'obsidian', module = 'blink.compat.source' },
obsidian_new = { name = 'obsidian_new', module = 'blink.compat.source' },
obsidian_tags = { name = 'obsidian_tags', module = 'blink.compat.source' },
},
},
}