<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Posts tagged: markdown</title>
  <id>https://pype.dev/tags/markdown/atom.xml</id>
  <updated>2026-10-04T06:00:00Z</updated>
  <subtitle>All posts with the tag &#34;markdown&#34;</subtitle>
  <link href="https://pype.dev/tags/markdown/" rel="alternate" type="text/html"></link>
  <link href="https://pype.dev/tags/markdown/atom.xml" rel="self" type="application/atom+xml"></link>
  <author>
    <name>Nic Payne</name>
  </author>
  <generator uri="https://github.com/WaylonWalker/markata-go">markata-go</generator>
  <entry>
    <title>Neovim Markdown Journaling Research</title>
    <id>https://pype.dev/neovim-markdown-journaling-research/</id>
    <updated>2026-10-04T06:00:00Z</updated>
    <published>2026-10-04T06:00:00Z</published>
    <link href="https://pype.dev/neovim-markdown-journaling-research/" rel="alternate" type="text/html"></link>
    <summary type="text">Research on the current Neovim plugin landscape for writing/journaling in Markdown, oriented around this site&#39;s workflow: a markata blog with YAML...</summary>
    <content type="html">&lt;p&gt;Research on the current Neovim plugin landscape for writing/journaling in&#xA;Markdown, oriented around this site&amp;rsquo;s workflow: a markata blog with YAML&#xA;frontmatter, mkdocs-material-style &lt;code&gt;!!! scripture&lt;/code&gt; / &lt;code&gt;??? scripture&lt;/code&gt;&#xA;admonitions, &lt;code&gt;[[ slug ]]&lt;/code&gt; wikilinks, and a custom &lt;code&gt;pypeaday.daily&lt;/code&gt; module&#xA;(copier templates + telescope/fzf pickers + live_grep backlinks).&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-lazyvim-lang-markdown-extra-what-it-actually-does&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;1. LazyVim &lt;/span&gt;&lt;code&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;lang.markdown&lt;/span&gt;&lt;/code&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt; extra — what it actually does&lt;/span&gt; &lt;a href=&#34;#1-lazyvim-lang-markdown-extra-what-it-actually-does&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Source of truth (current &lt;code&gt;main&lt;/code&gt;):&#xA;&lt;a href=&#34;https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/plugins/extras/lang/markdown.lua&#34;&gt;https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/plugins/extras/lang/markdown.lua&lt;/a&gt;&#xA;Docs: &lt;a href=&#34;https://github.com/LazyVim/lazyvim.github.io/blob/main/docs/extras/lang/markdown.md&#34;&gt;https://github.com/LazyVim/lazyvim.github.io/blob/main/docs/extras/lang/markdown.md&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;As of 2026, the extra installs/configures:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;marksman&lt;/strong&gt; via nvim-lspconfig (&lt;code&gt;servers = { marksman = {} }&lt;/code&gt;) — markdown&#xA;LSP with &lt;code&gt;[[wikilink]]&lt;/code&gt; completion, go-to-definition, references&#xA;(backlinks), and dead-link diagnostics. Big deal: most of what&#xA;&lt;code&gt;pypeaday.daily.find_backlinks()&lt;/code&gt; does via telescope live_grep, marksman&#xA;gives via &lt;code&gt;grr&lt;/code&gt;/&lt;code&gt;vim.lsp.buf.references&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;markdownlint-cli2&lt;/strong&gt; via nvim-lint (and none-ls if installed), plus&#xA;conform.nvim formatters &lt;code&gt;prettier&lt;/code&gt;, &lt;code&gt;markdownlint-cli2&lt;/code&gt;, and &lt;code&gt;markdown-toc&lt;/code&gt;&#xA;(the last only runs when the buffer contains &lt;code&gt;&amp;lt;!-- toc --&amp;gt;&lt;/code&gt;). Mason&#xA;auto-installs &lt;code&gt;markdownlint-cli2&lt;/code&gt; + &lt;code&gt;markdown-toc&lt;/code&gt;. LazyVim switched from&#xA;markdownlint-cli to cli2 in 2024:&#xA;&lt;a href=&#34;https://github.com/LazyVim/LazyVim/pull/3843&#34;&gt;https://github.com/LazyVim/LazyVim/pull/3843&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;markdown-preview.nvim&lt;/strong&gt; (&lt;code&gt;iamcco/markdown-preview.nvim&lt;/code&gt;) — browser&#xA;preview on &lt;code&gt;&amp;lt;leader&amp;gt;cp&lt;/code&gt; (markdown buffers only).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;render-markdown.nvim&lt;/strong&gt; (&lt;code&gt;MeanderingProgrammer/render-markdown.nvim&lt;/code&gt;) —&#xA;in-buffer rendering. LazyVim replaced &lt;code&gt;headlines.nvim&lt;/code&gt; with this plugin&#xA;back in 2024:&#xA;&lt;a href=&#34;https://github.com/LazyVim/LazyVim/pull/4139&#34;&gt;https://github.com/LazyVim/LazyVim/pull/4139&lt;/a&gt;. LazyVim&amp;rsquo;s config disables&#xA;heading icons and checkbox rendering, and maps a&#xA;&lt;code&gt;&amp;lt;leader&amp;gt;um&lt;/code&gt; toggle via &lt;code&gt;Snacks.toggle&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There is &lt;strong&gt;no prose/spell/grammar extra&lt;/strong&gt; in LazyVim — the full extras list&#xA;contains nothing like a &lt;code&gt;lang.text&lt;/code&gt; or &lt;code&gt;extras.spelling&lt;/code&gt;. Prose tooling has&#xA;to be added by hand.&lt;/p&gt;&#xA;&lt;p&gt;The import already exists in &lt;code&gt;~/.config/nvim/lua/config/lazy.lua&lt;/code&gt; (line 53)&#xA;alongside ~15 other extras — verified 2026-10-04. If plugins look missing,&#xA;&lt;code&gt;:Lazy sync&lt;/code&gt; will reconcile; &lt;code&gt;:LazyExtras&lt;/code&gt; shows what&amp;rsquo;s active.&lt;/p&gt;&#xA;&lt;p&gt;Built-in LazyVim defaults that matter for prose (no plugin needed):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;FileType autocmd already sets &lt;code&gt;wrap&lt;/code&gt; and &lt;code&gt;spell&lt;/code&gt; for markdown:&#xA;&lt;code&gt;lazyvim/config/autocmds.lua&lt;/code&gt; (&lt;code&gt;wrap_spell&lt;/code&gt; augroup, patterns include&#xA;&lt;code&gt;markdown&lt;/code&gt;). So spell+wrap are already on.&lt;/li&gt;&#xA;&lt;li&gt;Toggles already mapped: &lt;code&gt;&amp;lt;leader&amp;gt;us&lt;/code&gt; spell, &lt;code&gt;&amp;lt;leader&amp;gt;uw&lt;/code&gt; wrap,&#xA;&lt;code&gt;&amp;lt;leader&amp;gt;um&lt;/code&gt; render-markdown (with the extra), &lt;code&gt;&amp;lt;leader&amp;gt;uz&lt;/code&gt; Snacks zen&#xA;mode, &lt;code&gt;&amp;lt;leader&amp;gt;uD&lt;/code&gt; Snacks dim — see &lt;code&gt;lazyvim/config/keymaps.lua&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;2-render-markdown-nvim-capabilities-and-the-admonition-gap&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;2. render-markdown.nvim — capabilities and the admonition gap&lt;/span&gt; &lt;a href=&#34;#2-render-markdown-nvim-capabilities-and-the-admonition-gap&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Repo: &lt;a href=&#34;https://github.com/MeanderingProgrammer/render-markdown.nvim&#34;&gt;https://github.com/MeanderingProgrammer/render-markdown.nvim&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Renders headings, code blocks, inline code, horizontal rules, list&#xA;bullets, &lt;strong&gt;checkboxes (with user-defined states)&lt;/strong&gt;, block quotes,&#xA;&lt;strong&gt;callouts&lt;/strong&gt;, tables, links, LaTeX, per the README feature list.&lt;/li&gt;&#xA;&lt;li&gt;Callouts: supports GitHub (&lt;code&gt;[!NOTE]&lt;/code&gt;, &lt;code&gt;[!TIP]&lt;/code&gt;, &lt;code&gt;[!IMPORTANT]&lt;/code&gt;,&#xA;&lt;code&gt;[!WARNING]&lt;/code&gt;, &lt;code&gt;[!CAUTION]&lt;/code&gt;) and the full Obsidian set (&lt;code&gt;[!QUOTE]&lt;/code&gt;,&#xA;&lt;code&gt;[!TODO]&lt;/code&gt;, etc.). Custom callouts are fully supported — each entry is&#xA;&lt;code&gt;name = { raw = &#39;[!SCRIPTURE]&#39;, rendered = &#39; Scripture&#39;, highlight = &#39;...&#39; }&lt;/code&gt;.&#xA;Wiki reference:&#xA;&lt;a href=&#34;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Callouts&#34;&gt;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Callouts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Custom callout titles (&lt;code&gt;&amp;gt; [!quote] Psalm 119&lt;/code&gt;) are supported:&#xA;&lt;a href=&#34;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/109&#34;&gt;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/109&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Checkboxes: &lt;code&gt;- [ ]&lt;/code&gt; / &lt;code&gt;- [x]&lt;/code&gt; render as icons, and arbitrary custom states&#xA;(&lt;code&gt;- [/]&lt;/code&gt;, &lt;code&gt;- [&amp;gt;]&lt;/code&gt;, etc.) are configurable (&lt;code&gt;checkbox.custom&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;mkdocs &lt;code&gt;!!!&lt;/code&gt;/&lt;code&gt;???&lt;/code&gt; admonitions are NOT supported.&lt;/strong&gt; The plugin is&#xA;treesitter-driven over the standard markdown parser; admonition blocks&#xA;are just indented text to it. Callout support was added for the&#xA;&lt;code&gt;&amp;gt; [!x]&lt;/code&gt; blockquote syntax only&#xA;(&lt;a href=&#34;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/20&#34;&gt;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/20&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;The main alternative, &lt;code&gt;OXY2DEV/markview.nvim&lt;/code&gt;, also only renders&#xA;&lt;code&gt;&amp;gt; [!x]&lt;/code&gt; callouts for markdown — its &amp;ldquo;admonitions&amp;rdquo; support is for&#xA;&lt;strong&gt;Asciidoc&lt;/strong&gt;, not mkdocs:&#xA;&lt;a href=&#34;https://github.com/OXY2DEV/markview.nvim/wiki/Markdown&#34;&gt;https://github.com/OXY2DEV/markview.nvim/wiki/Markdown&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Even &lt;code&gt;markdown-preview.nvim&lt;/code&gt; can&amp;rsquo;t preview mkdocs admonitions — open&#xA;feature request: &lt;a href=&#34;https://github.com/iamcco/markdown-preview.nvim/issues/618&#34;&gt;https://github.com/iamcco/markdown-preview.nvim/issues/618&lt;/a&gt;.&#xA;The faithful preview for &lt;code&gt;!!! scripture&lt;/code&gt; is the markata/mkdocs build&#xA;itself, not an editor plugin.&lt;/li&gt;&#xA;&lt;li&gt;Conceal/anti-conceal: &lt;code&gt;anti_conceal&lt;/code&gt; hides the plugin&amp;rsquo;s virtual text on&#xA;the cursor line so you can edit raw source; &lt;code&gt;win_options.conceallevel&lt;/code&gt;&#xA;is managed per rendered/raw view. Known upstream limitation: concealed&#xA;text + &lt;code&gt;wrap&lt;/code&gt; keeps stale line breaks (neovim issue #14409), documented&#xA;in &lt;a href=&#34;https://github.com/MeanderingProgrammer/render-markdown.nvim/blob/HEAD/doc/limitations.md&#34;&gt;https://github.com/MeanderingProgrammer/render-markdown.nvim/blob/HEAD/doc/limitations.md&lt;/a&gt;.&#xA;Practical tradeoff: rendered mode is great for reading/journaling review;&#xA;expect to live with &lt;code&gt;&amp;lt;leader&amp;gt;um&lt;/code&gt; toggling or anti-conceal while editing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;3-obsidian-nvim-fit-for-a-non-obsidian-vault&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;3. obsidian.nvim — fit for a non-Obsidian vault&lt;/span&gt; &lt;a href=&#34;#3-obsidian-nvim-fit-for-a-non-obsidian-vault&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Repo (community fork, actively maintained; &lt;code&gt;epwalsh/obsidian.nvim&lt;/code&gt; is the&#xA;legacy upstream): &lt;a href=&#34;https://github.com/obsidian-nvim/obsidian.nvim&#34;&gt;https://github.com/obsidian-nvim/obsidian.nvim&lt;/a&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A &amp;ldquo;workspace&amp;rdquo; is just a directory of markdown — no &lt;code&gt;.obsidian/&lt;/code&gt; config&#xA;required. &lt;code&gt;workspaces = { { name = &amp;quot;pype.dev&amp;quot;, path = &amp;quot;~/projects/personal/pype.dev&amp;quot; } }&lt;/code&gt;&#xA;is a valid setup.&lt;/li&gt;&#xA;&lt;li&gt;Provides &lt;code&gt;:Obsidian today [OFFSET]&lt;/code&gt; / &lt;code&gt;dailies&lt;/code&gt;, &lt;code&gt;new_from_template&lt;/code&gt;,&#xA;&lt;code&gt;template&lt;/code&gt; (substitutions, date/time formats), &lt;code&gt;backlinks&lt;/code&gt;,&#xA;&lt;code&gt;follow_link&lt;/code&gt;, &lt;code&gt;search&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt;, &lt;code&gt;links&lt;/code&gt;. See command list in README.&lt;/li&gt;&#xA;&lt;li&gt;Completion of &lt;code&gt;[[&lt;/code&gt; wiki links and &lt;code&gt;#&lt;/code&gt; tags via blink.cmp or nvim-cmp;&#xA;newer versions do this through an in-process LSP so it works with any&#xA;completion engine.&lt;/li&gt;&#xA;&lt;li&gt;Caveats:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Search/backlinks require &lt;code&gt;ripgrep&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Only activates inside workspace paths; the whole pype.dev repo would be&#xA;one workspace, so &lt;code&gt;:Obsidian search&lt;/code&gt; scans posts+pages together&#xA;(probably fine).&lt;/li&gt;&#xA;&lt;li&gt;Default wikilink style is &lt;code&gt;[[id|alias]]&lt;/code&gt;-ish (&lt;code&gt;wiki_link_id_prefix&lt;/code&gt;);&#xA;the &lt;code&gt;[[ slug ]]&lt;/code&gt;-with-spaces convention used by markata is configured&#xA;via &lt;code&gt;wiki_link_func&lt;/code&gt;. Also &lt;code&gt;disable_frontmatter&lt;/code&gt;/custom&#xA;&lt;code&gt;note_frontmatter_func&lt;/code&gt; matters since it would otherwise write&#xA;Obsidian-style frontmatter (&lt;code&gt;id&lt;/code&gt;, &lt;code&gt;aliases&lt;/code&gt;, &lt;code&gt;tags&lt;/code&gt;) that markata&#xA;doesn&amp;rsquo;t want.&lt;/li&gt;&#xA;&lt;li&gt;Its built-in checkbox/conceal UI is deprecated in favor of&#xA;render-markdown.nvim — set &lt;code&gt;ui.enable = false&lt;/code&gt; and let&#xA;render-markdown handle visuals.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Verdict: overlaps ~80% with the existing &lt;code&gt;pypeaday.daily&lt;/code&gt; module (daily&#xA;notes, templates, backlinks). The genuinely new capability is &lt;code&gt;[[&lt;/code&gt;&#xA;completion and structured wikilink following — but &lt;strong&gt;marksman (already&#xA;in lang.markdown) gives wikilink completion, &lt;code&gt;gd&lt;/code&gt; link following, and&#xA;&lt;code&gt;grr&lt;/code&gt; backlinks for free&lt;/strong&gt;, so obsidian.nvim is optional rather than&#xA;foundational. If adopted, keep &lt;code&gt;pypeaday.daily&lt;/code&gt; for copier template&#xA;creation and use obsidian.nvim only for links/completion.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;4-alternatives-brief-survey&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;4. Alternatives — brief survey&lt;/span&gt; &lt;a href=&#34;#4-alternatives-brief-survey&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;telekasten.nvim&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nvim-telekasten/telekasten.nvim&#34;&gt;https://github.com/nvim-telekasten/telekasten.nvim&lt;/a&gt;):&#xA;telescope-based zettelkasten + journal; daily/weekly notes, templates,&#xA;backlinks, calendar. Works, but low recent activity and it duplicates&#xA;the existing copier+telescope workflow. Not recommended here.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;zk-nvim&lt;/strong&gt; (&lt;a href=&#34;https://github.com/zk-org/zk-nvim&#34;&gt;https://github.com/zk-org/zk-nvim&lt;/a&gt;): Neovim frontend for&#xA;the &lt;code&gt;zk&lt;/code&gt; CLI (a real LSP + note DB). Solid and maintained, but it wants&#xA;the &lt;code&gt;zk&lt;/code&gt; binary and a &lt;code&gt;zk&lt;/code&gt;-style notebook — another parallel system, not&#xA;a fit for markata frontmatter/slugs.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;neorg&lt;/strong&gt; (&lt;a href=&#34;https://github.com/nvim-neorg/neorg&#34;&gt;https://github.com/nvim-neorg/neorg&lt;/a&gt;): still releasing (9.x),&#xA;but it&amp;rsquo;s its own &lt;code&gt;.norg&lt;/code&gt; file format — incompatible with a markdown&#xA;blog. Maintainer activity is low (focus shifted to the &lt;code&gt;lux&lt;/code&gt; Lua package&#xA;manager): &lt;a href=&#34;https://github.com/nvim-neorg/neorg/discussions/1673&#34;&gt;https://github.com/nvim-neorg/neorg/discussions/1673&lt;/a&gt;. Skip.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Preview&lt;/strong&gt;: &lt;code&gt;markdown-preview.nvim&lt;/code&gt; (browser, in the extra, &lt;code&gt;&amp;lt;leader&amp;gt;cp&lt;/code&gt;)&#xA;is the maintained option. &lt;code&gt;glow.nvim&lt;/code&gt; is abandoned — its own README&#xA;points at render-markdown.nvim:&#xA;&lt;a href=&#34;https://github.com/ellisonleao/glow.nvim/&#34;&gt;https://github.com/ellisonleao/glow.nvim/&lt;/a&gt; (fork &lt;code&gt;shcode/nvim-glow&lt;/code&gt;&#xA;exists but is a terminal renderer, no help for admonitions). For this&#xA;site, &lt;code&gt;markata&lt;/code&gt;&amp;rsquo;s own build/serve is the only faithful preview.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Focus&lt;/strong&gt;: don&amp;rsquo;t install zen-mode/twilight. LazyVim already maps&#xA;&lt;code&gt;Snacks.zen()&lt;/code&gt; to &lt;code&gt;&amp;lt;leader&amp;gt;uz&lt;/code&gt; and &lt;code&gt;Snacks.toggle.dim()&lt;/code&gt; to &lt;code&gt;&amp;lt;leader&amp;gt;uD&lt;/code&gt;&#xA;(folke&amp;rsquo;s snacks.nvim replaced his standalone plugins:&#xA;&lt;a href=&#34;https://github.com/folke/snacks.nvim/blob/main/docs/zen.md&#34;&gt;https://github.com/folke/snacks.nvim/blob/main/docs/zen.md&lt;/a&gt;).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Tables&lt;/strong&gt;: &lt;code&gt;tabular&lt;/code&gt; is already installed (&lt;code&gt;:Tabularize /|&lt;/code&gt;), and&#xA;prettier (via conform &lt;code&gt;&amp;lt;leader&amp;gt;cf&lt;/code&gt;) aligns markdown tables automatically.&#xA;If auto-growing tables are wanted, &lt;code&gt;Kicamon/markdown-table-mode.nvim&lt;/code&gt; or&#xA;&lt;code&gt;dhruvasagar/vim-table-mode&lt;/code&gt; are the options — probably unnecessary.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;List/checkbox ergonomics&lt;/strong&gt;: &lt;code&gt;bullets.vim&lt;/code&gt;&#xA;(&lt;a href=&#34;https://github.com/bullets-vim/bullets.vim&#34;&gt;https://github.com/bullets-vim/bullets.vim&lt;/a&gt;) auto-continues lists on&#xA;&lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt;/&lt;code&gt;o&lt;/code&gt;, renumbers with &lt;code&gt;gN&lt;/code&gt;, indents with &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;, and toggles&#xA;checkboxes with &lt;code&gt;&amp;lt;leader&amp;gt;x&lt;/code&gt; — including partial-completion parent&#xA;checkboxes. Perfect fit for prayer-request checklists.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Link editing nicety&lt;/strong&gt;: &lt;code&gt;antonk52/markdowny.nvim&lt;/code&gt; adds vim-style&#xA;surround ops for &lt;code&gt;[text](url)&lt;/code&gt; links. Optional quality-of-life.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;5-spell-wrap-prose-ergonomics&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;5. Spell / wrap / prose ergonomics&lt;/span&gt; &lt;a href=&#34;#5-spell-wrap-prose-ergonomics&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Already handled by LazyVim core: &lt;code&gt;spell&lt;/code&gt; + &lt;code&gt;wrap&lt;/code&gt; FileType autocmd for&#xA;markdown; &lt;code&gt;&amp;lt;leader&amp;gt;us&lt;/code&gt; / &lt;code&gt;&amp;lt;leader&amp;gt;uw&lt;/code&gt; toggles; &lt;code&gt;spelllang = &amp;quot;en&amp;quot;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Worth adding in an ftplugin/autocmd: &lt;code&gt;linebreak&lt;/code&gt; (wrap at words, not&#xA;mid-word), &lt;code&gt;breakindent&lt;/code&gt; (wrapped lines keep list indent), &lt;code&gt;wrapmargin&lt;/code&gt;/&#xA;&lt;code&gt;colorcolumn&lt;/code&gt; hygiene, and &lt;code&gt;conceallevel=2&lt;/code&gt; + &lt;code&gt;concealcursor=nc&lt;/code&gt; if you&#xA;want rendered-markdown to look clean while keeping cursor-line raw.&#xA;Note &lt;code&gt;smoothscroll&lt;/code&gt; is globally disabled in this config&#xA;(&lt;code&gt;vim.opt.smoothscroll = false&lt;/code&gt;) — re-enable it locally for markdown if&#xA;long wrapped paragraphs feel jumpy.&lt;/li&gt;&#xA;&lt;li&gt;Prose LSPs:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;harper-ls&lt;/strong&gt; (&lt;a href=&#34;https://github.com/Automattic/harper&#34;&gt;https://github.com/Automattic/harper&lt;/a&gt;,&#xA;&lt;a href=&#34;https://writewithharper.com&#34;&gt;https://writewithharper.com&lt;/a&gt;): Rust grammar/spelling LSP aimed at&#xA;developers; markdown-aware, fast, no Java. Installable via mason&#xA;(&lt;code&gt;harper_ls&lt;/code&gt; in lspconfig), every linter toggleable&#xA;(&lt;code&gt;linters.sentence_capitalization&lt;/code&gt;, &lt;code&gt;long_sentences&lt;/code&gt;, etc.). Best&#xA;current default for prose grammar. Caution: it flags in every buffer&#xA;it attaches to — scope it to &lt;code&gt;markdown&lt;/code&gt; filetype only.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ltex-ls is dead&lt;/strong&gt; — &lt;code&gt;valentjn/ltex-ls&lt;/code&gt; is archived&#xA;(&lt;a href=&#34;https://github.com/valentjn/ltex-ls&#34;&gt;https://github.com/valentjn/ltex-ls&lt;/a&gt;). Maintained fork:&#xA;&lt;strong&gt;ltex-plus/ltex-ls-plus&lt;/strong&gt; (&lt;a href=&#34;https://github.com/ltex-plus/ltex-ls-plus&#34;&gt;https://github.com/ltex-plus/ltex-ls-plus&lt;/a&gt;),&#xA;still LanguageTool-based (heavy JVM, but deeper grammar rules).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;vale&lt;/strong&gt; (&lt;a href=&#34;https://vale.sh&#34;&gt;https://vale.sh&lt;/a&gt;): CLI style-guide linter; usable through&#xA;nvim-lint&amp;rsquo;s &lt;code&gt;vale&lt;/code&gt; linter. Best if you want house-style rules&#xA;(write-good/proselint packs), more setup than value for journaling.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Soft punctuation niceties: &lt;code&gt;pensieve&lt;/code&gt;/&lt;code&gt;cmp-dictionary&lt;/code&gt; are mostly dead&#xA;ends; the spell dictionary via &lt;code&gt;zg&lt;/code&gt; + blink &lt;code&gt;buffer&lt;/code&gt;/&lt;code&gt;spell&lt;/code&gt; source&#xA;covers the practical case.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;recommended-additions-for-this-setup&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Recommended additions for this setup&lt;/span&gt; &lt;a href=&#34;#recommended-additions-for-this-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Ordered by value ÷ effort.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-lang-markdown-extra-is-already-enabled-zero-new-code&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;1. lang.markdown extra is already enabled (zero new code)&lt;/span&gt; &lt;a href=&#34;#1-lang-markdown-extra-is-already-enabled-zero-new-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;~/.config/nvim/lua/config/lazy.lua&lt;/code&gt; line 53 already imports it. Verify&#xA;marksman attaches with &lt;code&gt;:LspInfo&lt;/code&gt; in a note buffer. Then:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;gd&lt;/code&gt; on &lt;code&gt;&amp;lt;a href=&amp;quot;/2025-09-13-notes/&amp;quot; class=&amp;quot;wikilink&amp;quot; data-title=&amp;quot;2025-09-13 Notes&amp;quot; data-description=&amp;quot;yesterday: 2025-09-11-notes&amp;quot; data-date=&amp;quot;2025-09-13&amp;quot;&amp;gt;2025-09-13 Notes&amp;lt;/a&amp;gt;&lt;/code&gt; jumps to the note&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;grr&lt;/code&gt; (LSP references) is a richer backlinks view than the live_grep&#xA;pattern in &lt;code&gt;find_daily_files&lt;/code&gt;/&lt;code&gt;find_backlinks&lt;/code&gt; — keep the telescope one,&#xA;it searches the spaced &lt;code&gt;[[ slug ]]&lt;/code&gt; convention regardless of whether&#xA;marksman resolves it.&lt;/li&gt;&#xA;&lt;li&gt;Caveat: marksman treats the git root (&lt;code&gt;pype.dev&lt;/code&gt;) as the workspace, which&#xA;is what we want. Verify it resolves the spaced &lt;code&gt;[[ slug ]]&lt;/code&gt; form; if not,&#xA;completion still works for &lt;code&gt;[[slug]]&lt;/code&gt; and markata tolerates both.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-markdown-writing-mode-ftplugin-tiny-high-value&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;2. Markdown writing-mode ftplugin (tiny, high value)&lt;/span&gt; &lt;a href=&#34;#2-markdown-writing-mode-ftplugin-tiny-high-value&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;~/.config/nvim/after/ftplugin/markdown.lua&lt;/code&gt; (LazyVim loads &lt;code&gt;after/ftplugin&lt;/code&gt;&#xA;automatically — no spec needed):&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linebreak&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;-- wrap at word boundaries&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;breakindent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;-- keep list indentation on wrapped lines&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;smoothscroll&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;-- undo the global `false` for prose&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;conceallevel&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;-- conceal markup for rendered view&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;concealcursor&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nc&amp;#34;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;-- show raw text on the cursor line in insert&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.opt_local&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;spell&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;          &lt;span class=&#34;c1&#34;&gt;-- redundant w/ LazyVim autocmd, explicit is fine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- map j/k to gj/gk for wrapped-line navigation (markdown buffers only)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.keymap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;j&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gj&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;remap&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;vim.keymap&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;x&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;k&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gk&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buffer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;remap&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;3-render-markdown-tweaks-a-scripture-callout-checkbox-states&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;3. render-markdown tweaks + a &lt;/span&gt;&lt;code&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;scripture&lt;/span&gt;&lt;/code&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt; callout + checkbox states&lt;/span&gt; &lt;a href=&#34;#3-render-markdown-tweaks-a-scripture-callout-checkbox-states&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- lua/plugins/markdown.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;MeanderingProgrammer/render-markdown.nvim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;opts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;-- re-enable what LazyVim&amp;#39;s extra disables&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;checkbox&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;unchecked&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;󰄱 &amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;checked&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;icon&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;󰱒 &amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;custom&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;praying&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;raw&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;[/]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rendered&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;󱑂 &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;RenderMarkdownWarn&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;callout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- !!! scripture has no renderer; if you ever write&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;-- &amp;gt; [!scripture] in blog posts this makes it pretty.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;scripture&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;raw&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;[!SCRIPTURE]&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;rendered&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;󰗶 Scripture&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;highlight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;RenderMarkdownHint&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;anti_conceal&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;-- cursor line shows raw markdown&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Reality check: &lt;strong&gt;nothing renders &lt;code&gt;!!! scripture&lt;/code&gt; blocks in the editor&lt;/strong&gt; —&#xA;they&amp;rsquo;ll show as plain indented text (which is honest: markata is the only&#xA;real renderer). If visual distinction matters, &lt;code&gt;util.mini-hipatterns&lt;/code&gt; is&#xA;already enabled — add a pattern:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- inside the existing mini.hipatterns spec&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;hipatterns&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mini.hipatterns&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;opts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;highlighters&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;admonition&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pattern&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;^!?%?+ +%w+.*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;group&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Special&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;4-bullets-vim-for-prayer-request-checklists-one-line-high-value&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;4. bullets.vim for prayer-request checklists (one line, high value)&lt;/span&gt; &lt;a href=&#34;#4-bullets-vim-for-prayer-request-checklists-one-line-high-value&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bullets-vim/bullets.vim&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ft&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markdown&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;&amp;lt;leader&amp;gt;x&lt;/code&gt; toggles &lt;code&gt;- [ ]&lt;/code&gt;/&lt;code&gt;- [x]&lt;/code&gt;, &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt;/&lt;code&gt;o&lt;/code&gt; continue list items,&#xA;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;/&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt; adjust nesting. Docs:&#xA;&lt;a href=&#34;https://github.com/bullets-vim/bullets.vim&#34;&gt;https://github.com/bullets-vim/bullets.vim&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;5-optional-heavier-lifts-only-if-felt-needed&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;5. Optional, heavier lifts (only if felt needed)&lt;/span&gt; &lt;a href=&#34;#5-optional-heavier-lifts-only-if-felt-needed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;harper-ls&lt;/strong&gt; grammar checking, scoped to markdown:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim/nvim-lspconfig&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;opts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;servers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;harper_ls&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;filetypes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;markdown&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;harper-ls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;linters&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sentence_capitalization&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long_sentences&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;obsidian.nvim&lt;/strong&gt; for &lt;code&gt;[[&lt;/code&gt; completion + &lt;code&gt;:Obsidian backlinks&lt;/code&gt; — only if&#xA;marksman&amp;rsquo;s LSP completion of wikilinks proves insufficient. Keep&#xA;&lt;code&gt;ui.enable = false&lt;/code&gt; and continue using &lt;code&gt;pypeaday.daily&lt;/code&gt; + copier for note&#xA;creation. Expect to write a &lt;code&gt;wiki_link_func&lt;/code&gt; to emit &lt;code&gt;[[ slug ]]&lt;/code&gt; and a&#xA;&lt;code&gt;note_frontmatter_func&lt;/code&gt; matching markata&amp;rsquo;s frontmatter.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;bottom-line&#34;&gt;&lt;span class=&#34;heading-wear-glyph&#34;&gt;Bottom line&lt;/span&gt; &lt;a href=&#34;#bottom-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The copier+telescope daily-notes system is already doing the job of an&#xA;entire plugin category (telekasten/zk/obsidian daily notes). The real gaps&#xA;are: marksman wikilink navigation (free, already enabled via lang.markdown),&#xA;rendered checkboxes/callouts (render-markdown, in the extra), checkbox&#xA;toggling (bullets.vim), wrapped-line ergonomics (a 6-line ftplugin), and&#xA;optional grammar checking (harper-ls). &lt;code&gt;!!!&lt;/code&gt; admonitions are a markata-side&#xA;concern — no editor plugin renders them; at most, highlight the marker line.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Nic Payne</name>
      <uri>https://pype.dev</uri>
    </author>
  </entry>
</feed>