<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>robin</title>
      <link>https://robinwobin.dev</link>
      <description></description>
      <language>en</language>
      <atom:link href="https://robinwobin.dev/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Sat, 21 Mar 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>creating a native-feeling neovim picker</title>
          <pubDate>Sat, 21 Mar 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/blog/neovim-artio-picker/</link>
          <guid>https://robinwobin.dev/blog/neovim-artio-picker/</guid>
          <description xml:base="https://robinwobin.dev/blog/neovim-artio-picker/">&lt;h2 id=&quot;preface&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#preface&quot; aria-label=&quot;achor-preface&quot;&gt;&lt;&#x2F;a&gt;
preface&lt;&#x2F;h2&gt;
&lt;p&gt;Fuzzy searching in neovim has been a heavily debated topic for years. There
were those we fought for telescope being merged into core (which fortunately
did not happen), and those who felt that fuzzy picking is not a necessity. I&#x27;ve
always felt that a general picker framework is an important core component of
neovim - the same could be said for a file tree but that is not what this blogpost
will focus on.&lt;&#x2F;p&gt;
&lt;p&gt;Initially file picking came from external software like fzf. The
plugin would simply spawn a terminal window running fzf and use the returned
value - a simple and clean solution that is still used in popular pickers like
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ibhagwan&#x2F;fzf-lua&quot;&gt;fzf-lua&lt;&#x2F;a&gt;. After that, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvim-telescope&#x2F;telescope.nvim&quot;&gt;telescope&lt;&#x2F;a&gt; got popular, a picker that used actual
windows and UI components within neovim. Unfortunately, its configuration was
limited and over time maintenance &amp;amp; development slowed down. Since then a
few new ones have popped up, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvim-mini&#x2F;mini.picker&quot;&gt;mini-pick&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;snacks.nvim&quot;&gt;snacks.picker&lt;&#x2F;a&gt;. Both are
widely used and regarded as great solutions. Unfortunately, i don&#x27;t like either
of them. I love &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvim-mini&#x2F;mini.nvim&quot;&gt;mini.nvim&lt;&#x2F;a&gt; and its ecosystem but i don&#x27;t feel like their vision
of a picker fits neovim. As for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;snacks.nvim&quot;&gt;snacks.picker&lt;&#x2F;a&gt;, ... &lt;a href=&quot;&#x2F;blog&#x2F;neovim-native-configuration&#x2F;#why-i-don-t-like-lazy-nvim-or-packer&quot;&gt;let me just link this&lt;&#x2F;a&gt; (i should probably write a blogpost
about folke).&lt;&#x2F;p&gt;
&lt;p&gt;So i went on to invent my own solution. I wanted something that was easy to
configure and extend later, used neovim&#x27;s base feature set as much as possible,
and i was particularly interested in neovim-nightly&#x27;s ui2 system. The ui2
system is a new feature set for neovim that uses windows for specific
components of the UI: the message box and the cmdline. This allows for deeper
extension of these features, like syntax highlighting within the cmdline. This
also allows custom neovim UI&#x27;s to draw their own components.&lt;&#x2F;p&gt;
&lt;p&gt;This ui2 framework particularly interested me because it allowed me to draw
in the cmdline like it&#x27;s a normal buffer. This is very similar to emacs&#x27;
minibuffer feature, which allows plugin authors to use the same UI component
(at the bottom of the screen) to show information.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;overview&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#overview&quot; aria-label=&quot;achor-overview&quot;&gt;&lt;&#x2F;a&gt;
overview&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;artio.nvim&quot;&gt;artio.nvim&lt;&#x2F;a&gt; is a lightweight fuzzy picker for neovim built on top of the new
ui2 window system. It aims to provide a simple and responsive selection UI
without pulling in large dependencies or complex abstractions. It&#x27;s API is
intended to be easily usable and extendable by both users and plugin authors.&lt;&#x2F;p&gt;
&lt;p&gt;The plugin is intentionally small in scope. It focuses on doing one thing well:
presenting selectable lists with fuzzy filtering (or custom sorters) in a
clean, native-feeling way.&lt;&#x2F;p&gt;
&lt;p&gt;This also means it is compatible with neovim&#x27;s &lt;code&gt;vim.ui.select&lt;&#x2F;code&gt; api. This allows
artio.nvim to act as a drop-in replacement for selection prompts used by other
plugins and core features. Since &lt;code&gt;vim.ui.select&lt;&#x2F;code&gt; allows plugin authors to pass
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;pull&#x2F;37360&quot;&gt;additional attributes&lt;&#x2F;a&gt; to its props artio can use these to add additional
functionality.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua z-code&quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-storage z-modifier z-lua&quot;&gt;local&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;files&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-lua&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;iter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;fs&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;dir&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;.&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;map&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;node&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;nodetype&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-return z-lua&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;nodetype&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-comparison z-lua&quot;&gt;==&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;file&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-logical z-lua&quot;&gt;and&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;node&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;  &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;totable&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;ui&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;select&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;files&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;prompt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;select dir&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;format_item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-return z-lua&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;fnamemodify&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;:.&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; artio &amp;amp; mini.nvim exclusive:
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;preview_item&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;        &lt;span class=&quot;z-keyword z-control z-return z-lua&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;fn&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;bufadd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; artio exclusive:
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;get_icon&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-return z-lua&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-support z-function z-builtin z-lua&quot;&gt;require&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;mini.icons&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;get&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;file&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;v&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;_&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;cmd&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;cd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;item&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;features&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#features&quot; aria-label=&quot;achor-features&quot;&gt;&lt;&#x2F;a&gt;
features&lt;&#x2F;h2&gt;
&lt;p&gt;Artio provides a fuzzy-filtered selection window implemented entirely in lua.
it uses ui2 for layout and rendering, which keeps the interface consistent
with neovim-nightly&#x27;s new ui implementation.&lt;&#x2F;p&gt;
&lt;p&gt;Key features include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;fuzzy &amp;amp; pattern matching (through the default sorter)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;vim.ui.select&lt;&#x2F;code&gt; replacement&lt;&#x2F;li&gt;
&lt;li&gt;configurable preview window&lt;&#x2F;li&gt;
&lt;li&gt;basic builtins: files, buffers, colorschemes, helptags, etc&lt;&#x2F;li&gt;
&lt;li&gt;optional icon support for builtins (through &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;nvim-mini&#x2F;mini.icons&quot;&gt;mini-icons&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Artio works well if you want a minimal picker for everyday navigation tasks.
Artio is not meant to be an extremely innovative fuzzy finder, nor is it meant
to be a plugin focused on performance. If you want these features, you can implement them yourself.&lt;&#x2F;p&gt;
&lt;p&gt;For example, if you want to process fuzzy sorting through and external dependency you can do so by overwriting the default sorter:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua z-code&quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-support z-constant z-builtin z-lua&quot;&gt;package&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-support z-constant z-builtin z-lua&quot;&gt;loaded&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-brackets z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-begin z-lua&quot;&gt;[&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;artio&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-brackets z-end z-lua&quot;&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;sorter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-lua&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;lst&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-parameter z-function z-lua&quot;&gt;input&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;    &lt;span class=&quot;z-storage z-modifier z-lua&quot;&gt;local&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;output&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-assignment z-lua&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-lua&quot;&gt;...&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; run your external cmd through `vim.system`
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; process output and return matches
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;    &lt;span class=&quot;z-keyword z-control z-return z-lua&quot;&gt;return&lt;&#x2F;span&gt; &lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;iter&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;output&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;fold&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-constant z-language z-lua&quot;&gt;...&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;configuration&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#configuration&quot; aria-label=&quot;achor-configuration&quot;&gt;&lt;&#x2F;a&gt;
configuration&lt;&#x2F;h2&gt;
&lt;p&gt;The configuration of artio is similarly designed like most neovim components:
to be extensible and flexible. E.g., you can simply change some resizing behavior
with &lt;code&gt;config.shrink&lt;&#x2F;code&gt; or change the way the preview is drawn with
&lt;code&gt;config.win.preview_opts&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;an example setup could look something like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua z-code&quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;pack&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;add&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;artio.nvim&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; after installation, calling its setup function allows you to adjust behavior
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; such as window size, prompt placement, and characters for the ui.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; calling setup is entirely optional if you like the defaults.
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-support z-function z-builtin z-lua&quot;&gt;require&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;artio&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;setup&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;opts&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; whether to draw the prompt at the bottom
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;bottom&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-lua&quot;&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; whether the window should shrink to fit the matches
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;shrink&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-lua&quot;&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; prefix for the prompt
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;promptprefix&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; whether to draw the prompt title
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;prompt_title&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-lua&quot;&gt;false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; pointer for the selected match
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;pointer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;win&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; this can also be a fractal to indicate a percentage of the screen
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;height&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-numeric z-integer z-decimal z-lua&quot;&gt;16&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; works best with laststatus=3
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;    &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;hidestatusline&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-lua&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Keymappings are left to the user. You can find some examples in the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;README.md&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;artio.nvim&#x2F;src&#x2F;branch&#x2F;main&#x2F;README.md&quot;&gt;README&lt;&#x2F;a&gt;:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua z-code&quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;&amp;lt;leader&amp;gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-files)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;fg&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-grep)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; smart file picker
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;ff&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-smart)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; general built-in pickers
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;fh&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-helptags)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;fb&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-buffers)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;f&#x2F;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-buffergrep)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-variable z-other z-lua&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;keymap&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-accessor z-lua&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property z-lua&quot;&gt;&lt;span class=&quot;z-variable z-function z-lua&quot;&gt;set&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-lua&quot;&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;n&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;leader&amp;gt;fo&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-comma z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&amp;lt;Plug&amp;gt;(artio-oldfiles)&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;These mappings are available through the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;&lt;Plug&gt;&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;map.html#%3CPlug%3E&quot;&gt;&lt;code&gt;&amp;lt;Plug&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; interface. These
are abstract &#x27;keys&#x27; that have been mapped by plugin authors (like me) to certain action
and can be mapped to by users with their custom keybinds.&lt;&#x2F;p&gt;
&lt;!--
TODO: comparison with other pickers
- position relative to builtin UI
- related tools and comparison
- contrast with Telescope
- contrast with fzf-lua
- contrast with snacks
--&gt;
&lt;h2 id=&quot;future&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#future&quot; aria-label=&quot;achor-future&quot;&gt;&lt;&#x2F;a&gt;
future&lt;&#x2F;h2&gt;
&lt;p&gt;Currently artio is in a relatively stable state. Improvements or changes might
be made to solve issues or improve performance but there (probably) won&#x27;t be
any major api changes.&lt;&#x2F;p&gt;
&lt;p&gt;As for possible future features, im mostly looking into leveraging async
handling of sorters but i&#x27;m open to further suggestions.&lt;&#x2F;p&gt;
&lt;!--
TODO:
- future direction
- possible improvements
- areas intentionally left open
- maintenance philosophy (long-term intent)
--&gt;
&lt;h2 id=&quot;closing&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#closing&quot; aria-label=&quot;achor-closing&quot;&gt;&lt;&#x2F;a&gt;
closing&lt;&#x2F;h2&gt;
&lt;!--
&gt; closing summary (wrap-up)
&gt; restating purpose
&gt; who should use it
&gt; who probably should not
--&gt;
&lt;p&gt;I discovered a lot of cool features and weird neovim quirks while designing
this plugin. Neovim&#x27;s ui2 definitely is not finished yet and a minibuffer
feature (&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;issues&#x2F;35456&quot;&gt;as the neovim core members have suggested&lt;&#x2F;a&gt;) is
still pretty far away. As i&#x27;ve stated &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;issues&#x2F;35456#issuecomment-3538862420&quot;&gt;on the neovim
repo&lt;&#x2F;a&gt;, the current ui2 implementation is really cool but
also kind of a footgun at times.&lt;&#x2F;p&gt;
&lt;p&gt;In the end, im quite happy with what ive build ~it wont be the ultimate
solution for most people but it will be a solid solution for most people.&lt;&#x2F;p&gt;
&lt;p&gt;If you&#x27;re looking for the most performant and feature-rich picker artio
probably won&#x27;t be for you - and thats fine!&lt;&#x2F;p&gt;
&lt;p&gt;If you want a picker that feels simple, extensible, and closely aligned with
Neovim&#x27;s prior design, artio is worth a look.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>site on a zig server</title>
          <pubDate>Mon, 09 Mar 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/site-zig-minimal/</link>
          <guid>https://robinwobin.dev/notes/site-zig-minimal/</guid>
          <description xml:base="https://robinwobin.dev/notes/site-zig-minimal/">&lt;p&gt;ive been working on a minimal http server to host the static site contents on.
this is mostly because i want to get better at zig and thought itd be a fun
challenge :)&lt;&#x2F;p&gt;
&lt;p&gt;it currently supports embedding the static files and a tiny virtual filesystem.&lt;&#x2F;p&gt;
&lt;p&gt;i might expand it to support templates &amp;amp; generation and take more work off zola.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>evergarden userstyles</title>
          <pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/evergarden-userstyles-release/</link>
          <guid>https://robinwobin.dev/notes/evergarden-userstyles-release/</guid>
          <description xml:base="https://robinwobin.dev/notes/evergarden-userstyles-release/">&lt;p&gt;evergarden is now available as a userstyle!!&lt;&#x2F;p&gt;
&lt;p&gt;i created a small patcher for the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;catppuccin&#x2F;userstyles&quot;&gt;catppuccin userstyles
repo&lt;&#x2F;a&gt; with the help of their lead
maintainer, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;uncenter&quot;&gt;@uncenter&lt;&#x2F;a&gt;. this allows us to use their amazing userstyles with evergarden
colors!&lt;&#x2F;p&gt;
&lt;p&gt;the userstyles are available on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;http:&#x2F;&#x2F;github.com&#x2F;everviolet&#x2F;userstyles&quot;&gt;github&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;evergarden&#x2F;userstyles&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;e4846ccc73eb93100df9808af4a46d93bbfaabaa18b9907507c508ef4c771f8d.webp&quot; alt=&quot;github userstyle preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>ebil tool</title>
          <pubDate>Thu, 19 Feb 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/ebil-released/</link>
          <guid>https://robinwobin.dev/notes/ebil-released/</guid>
          <description xml:base="https://robinwobin.dev/notes/ebil-released/">&lt;p&gt;i created a really cool and awesome tool for publishing your &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ebil.club&quot;&gt;ebil.club&lt;&#x2F;a&gt; site.&lt;&#x2F;p&gt;
&lt;p&gt;you can get the ebil tool from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;ebil&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;f54cb0c4bef87a874d9250ad26e11bf0ec60f296.webp&quot; alt=&quot;ebil tool preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>lylla now supports sections</title>
          <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/lylla-sections/</link>
          <guid>https://robinwobin.dev/notes/lylla-sections/</guid>
          <description xml:base="https://robinwobin.dev/notes/lylla-sections/">&lt;p&gt;lylla now supports sections for statusline components. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;lylla.nvim&#x2F;commit&#x2F;3bf725938ad9e1a083f30528a7315930df6232a8&quot;&gt;&lt;code&gt;3bf7259&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;this uses a pr that has just been merged to nightly. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;pull&#x2F;37153&quot;&gt;&lt;code&gt;#37153&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;this feature was initially requested by &lt;em&gt;me&lt;&#x2F;em&gt; :) &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;issues&#x2F;35806&quot;&gt;&lt;code&gt;#35806&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;lylla is available on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;lylla.nvim&quot;&gt;github&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;lylla.nvim&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;8fd47d894cb43f25d52f31d4fbce7270319654aa.webp&quot; alt=&quot;lylla section preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>mimi colorscheme</title>
          <pubDate>Sat, 07 Feb 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/mimi-released/</link>
          <guid>https://robinwobin.dev/notes/mimi-released/</guid>
          <description xml:base="https://robinwobin.dev/notes/mimi-released/">&lt;p&gt;mimi is a fuzzy &amp;amp; warm colorscheme inspired by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;koi.rip&quot;&gt;june&lt;&#x2F;a&gt;&#x27;s cat.&lt;&#x2F;p&gt;
&lt;p&gt;mimi is available on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;mimi.nvim&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;7d926cc45e98160e178e00723f515e24302ba15f.webp&quot; alt=&quot;mimi preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>aspen plugin</title>
          <pubDate>Tue, 03 Feb 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/aspen-released/</link>
          <guid>https://robinwobin.dev/notes/aspen-released/</guid>
          <description xml:base="https://robinwobin.dev/notes/aspen-released/">&lt;p&gt;i created a plugin for neovim that simplifies some of the hassles of setting up
neovim&#x27;s builtin completion.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;lylla.nvim&quot;&gt;github&lt;&#x2F;a&gt; &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;lylla.nvim&quot;&gt;codeberg&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>artio live mode toggle</title>
          <pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/artio-live-mode-toggle/</link>
          <guid>https://robinwobin.dev/notes/artio-live-mode-toggle/</guid>
          <description xml:base="https://robinwobin.dev/notes/artio-live-mode-toggle/">&lt;p&gt;you can now toggle between live mode and fuzzy mode in artio! &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;artio.nvim&#x2F;commit&#x2F;82db9acd5b1836d5c007f0fbdf612f8236237e3d&quot;&gt;&lt;code&gt;82db9ac&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;you can get artio from &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;artio.nvim&quot;&gt;github&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;artio.nvim&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>artio released!</title>
          <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/artio-released/</link>
          <guid>https://robinwobin.dev/notes/artio-released/</guid>
          <description xml:base="https://robinwobin.dev/notes/artio-released/">&lt;p&gt;ive been working on a extui fuzzy finder for neovim that uses nightly&#x27;s new ui components.&lt;&#x2F;p&gt;
&lt;p&gt;its available on &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;artio.nvim&quot;&gt;github&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;artio.nvim&quot;&gt;codeberg&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;c4e80de98a2501dd57a69fb4f6d999e68278fa89.webp&quot; alt=&quot;artio preview&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>tending your editor config: building sylvee &amp; lynn</title>
          <pubDate>Wed, 13 Aug 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/blog/neovim-native-configuration/</link>
          <guid>https://robinwobin.dev/blog/neovim-native-configuration/</guid>
          <description xml:base="https://robinwobin.dev/blog/neovim-native-configuration/">&lt;!--
### intro

(set the scene and intent)

- why i wanted a quieter, native-first neovim experience

- frustration with sprawling plugin ecosystems and fragile abstractions

- goal: a configuration that feels like neovim, not a replacement for it

- result: sylvee, a native-first neovim distro — and lynn, the small plugin manager that powers it
--&gt;
&lt;p&gt;if you&#x27;re like me and love configuring your neovim setup, you might reach a
point of customization where the different plugins you&#x27;re using start holding
you back: different ui or keybinds start fighting eachother and keeping track of
lazy-loading for every plugin becomes unmanageable.&lt;&#x2F;p&gt;
&lt;p&gt;most of the time you&#x27;ll think to yourself that your setup has become too big and
surely if you just restart from scratch you&#x27;ll avoid this next time ... but you
never do.&lt;&#x2F;p&gt;
&lt;p&gt;thats why i decided to create a native-first neovim experience. i tried to
focus on bringing features to my editor using built-in building blocks and
components. this meant no &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;hrsh7th&#x2F;nvim-cmp&quot;&gt;nvim-cmp&lt;&#x2F;a&gt; or &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Saghen&#x2F;blink.cmp&quot;&gt;blink-cmp&lt;&#x2F;a&gt; and, most importantly, no
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;shitty plugin manager&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;lazy.nvim&quot;&gt;lazy.nvim&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;philosophy-and-foundation&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#philosophy-and-foundation&quot; aria-label=&quot;achor-philosophy-and-foundation&quot;&gt;&lt;&#x2F;a&gt;
philosophy and foundation&lt;&#x2F;h3&gt;
&lt;!--
### section 1: philosophy and foundation

(what kind of user sylvee is built for)

- starting from neovim’s built-in features

- avoiding wrapping everything in custom logic

- respecting the defaults, only extending when necessary

- the garden metaphor: letting neovim bloom on its own
--&gt;
&lt;p&gt;neovim has become incredibly powerful out-of-the-box and i want to take advantage of that.
so i created &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;sylvee: minimal &amp; native-first neovim config&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;sylvee&quot;&gt;sylvee&lt;&#x2F;a&gt;, a native-first neovim configuration that builds on the amazing
features that have been added to neovim recently.&lt;&#x2F;p&gt;
&lt;p&gt;to power plugin management i created a wrapper around &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;, neovim
nightly&#x27;s native plugin manager. this wrapper is called &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;lynn.nvim: native-first neovim plugin manager with charm&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;lynn.nvim&quot;&gt;lynn.nvim&lt;&#x2F;a&gt;, and it
powers the configuration that i made.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neovim-s-built-in-features&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#neovim-s-built-in-features&quot; aria-label=&quot;achor-neovim-s-built-in-features&quot;&gt;&lt;&#x2F;a&gt;
neovim&#x27;s built-in features&lt;&#x2F;h2&gt;
&lt;p&gt;sylvee was built to extend neovim&#x27;s built-in features. i didn&#x27;t want to wrap my
clean and powerful editor in a layer of bloated plugins. using neovim&#x27;s
defaults has become incredibly user-friendly recently and i noticed that i
started deleting custom keymaps i added to my config; neovim&#x27;s default binds
made more sense than my own.&lt;&#x2F;p&gt;
&lt;p&gt;a perfect example of this is neovim&#x27;s recent addition of built-in lsp keymaps:
from neovim 0.11 onwards, you&#x27;ll able to use a bunch of &lt;code&gt;gr&lt;&#x2F;code&gt;-prefixed keymaps to access
different lsp-related editor features. these include &lt;code&gt;grn&lt;&#x2F;code&gt; to rename a symbol,
&lt;code&gt;gra&lt;&#x2F;code&gt; to access code actions and &lt;code&gt;grr&lt;&#x2F;code&gt; to get a list of references. similarly,
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tpope&#x2F;vim-unimpaired&quot;&gt;tpope&#x27;s vim-unimpaired&lt;&#x2F;a&gt; has been
integrated into neovim: you can now use &lt;code&gt;bracket + q&lt;&#x2F;code&gt; to switch items in the
quickfix list and &lt;code&gt;bracket + b&lt;&#x2F;code&gt; to navigate the buffer list.&lt;&#x2F;p&gt;
&lt;p&gt;apart from keymaps, a bunch of settings and autocmds are no longer
needed: setting the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;options.html#&amp;#x27;omnifunc&amp;#x27;&quot;&gt;&#x27;omnifunc&#x27;&lt;&#x2F;a&gt; to lsp completion is done
automatically when an lsp attaches and your folds will use treesitter
when available.&lt;&#x2F;p&gt;
&lt;p&gt;neovim&#x27;s builtin completion has also been greatly improved: since
version &lt;code&gt;0.11&lt;&#x2F;code&gt; you can already enjoy added highlights for matching
results and pre-inserted &#x27;ghost-text&#x27;, and in neovim nightly there is
now also support for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;options.html#&amp;#x27;autocomplete&amp;#x27;&quot;&gt;&#x27;autocomplete&#x27;&lt;&#x2F;a&gt; - enabling this option will make the completion popup
automatically appear while typing.&lt;&#x2F;p&gt;
&lt;p&gt;lsp configuration has been a treat since &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;lsp.html#_config&quot;&gt;&lt;code&gt;vim.lsp.config&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; got added.
gone are the days of giant table&#x27;s with configurations for all your
different lsp&#x27;s. you can now split all your custom configs up into
files in the &lt;code&gt;lsp&#x2F;&lt;&#x2F;code&gt; directory of your config. these will automatically
get sourced. all you need to do is enable the lsp&#x27;s you use using
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;lsp.html#vim.lsp.enable()&quot;&gt;&lt;code&gt;vim.lsp.enable&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; and thats that. similarly, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;nvim-lspconfig&quot;&gt;nvim-lspconfig&lt;&#x2F;a&gt; has been
simplified: you no longer have to even &lt;code&gt;require&lt;&#x2F;code&gt; this plugin - just
throw it in your plugin list and it works.&lt;&#x2F;p&gt;
&lt;!-- TODO: mention `vim.pack` --&gt;
&lt;h3 id=&quot;sylvee-keeping-configuration-gentle&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#sylvee-keeping-configuration-gentle&quot; aria-label=&quot;achor-sylvee-keeping-configuration-gentle&quot;&gt;&lt;&#x2F;a&gt;
sylvee: keeping configuration gentle&lt;&#x2F;h3&gt;
&lt;!--

### section 2: keeping configuration gentle

(how sylvee stays legible and minimal)

- using the plugin&#x2F; directory for simple autoloading

- only mapping keys when the default is missing

- splitting plugin config into clean, isolated files

- relying on built-in commands over external tools when possible

--&gt;
&lt;p&gt;a core part of sylvee is the idea that configuration should be simple and
minimal. this meant using the &lt;code&gt;plugin&#x2F;&lt;&#x2F;code&gt; to load custom scripts instead of death
by a thousand &lt;code&gt;require&lt;&#x2F;code&gt; statements in your &lt;code&gt;init.lua&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;i didn&#x27;t add custom keymaps unless a feature did not have a keymap builtin,
like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;tabpage.html#%3Atabnew&quot;&gt;&lt;code&gt;:tabnew&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; which i bound to &lt;code&gt;&amp;lt;C-w&amp;gt;&amp;lt;tab&amp;gt;&lt;&#x2F;code&gt;, or when the defaults required
ergonomics that would simply break my hand, like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;editing.html#CTRL-%5E&quot;&gt;&lt;code&gt;&amp;lt;C-^&amp;gt;&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; to open the alternate
file which i bound to &lt;code&gt;&amp;lt;C-j&amp;gt;&lt;&#x2F;code&gt; (a keymap that surpringly wasn&#x27;t used yet by neovim).&lt;&#x2F;p&gt;
&lt;p&gt;additionally, i made exceptions for keymaps which i found to better fit neovim&#x27;s
keymap model: switching tabs made more sense with &lt;code&gt;bracket + &amp;lt;tab&amp;gt;&lt;&#x2F;code&gt; than
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;tabpage.html#gt&quot;&gt;&lt;code&gt;gt&#x2F;gT&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. although the goal is minimalism, i didn&#x27;t want to compromise on my
preferences - sylvee can be a little opinionated sometimes.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lynn-a-plugin-manager-with-charm&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#lynn-a-plugin-manager-with-charm&quot; aria-label=&quot;achor-lynn-a-plugin-manager-with-charm&quot;&gt;&lt;&#x2F;a&gt;
lynn - a plugin manager with charm&lt;&#x2F;h2&gt;
&lt;!--

### section 3: introducing lynn — a plugin manager with charm

(what problem lynn solves and how it fits)

- why i didn’t want to use lazy.nvim or packer

- neovim 0.12 introduced vim.pack — a good foundation

- lynn as a lightweight wrapper: no magic, just convenience

- declarative plugin spec in one file

- plugin configs in config&#x2F; matched by name, sourced with :runtime

- no opts&#x2F;config nesting or plugin-specific logic

--&gt;
&lt;h3 id=&quot;why-i-don-t-like-lazy-nvim-or-packer&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#why-i-don-t-like-lazy-nvim-or-packer&quot; aria-label=&quot;achor-why-i-don-t-like-lazy-nvim-or-packer&quot;&gt;&lt;&#x2F;a&gt;
why i don&#x27;t like lazy.nvim or packer&lt;&#x2F;h3&gt;
&lt;p&gt;over time the neovim community has reinvented plugin management time and time
again - to me the days of &lt;code&gt;vim-plug&lt;&#x2F;code&gt; dont feel that far away and we&#x27;ve come a
long way since then. the plugin spec has changed massively: we started out with
simple url strings, expanded with some small options like renaming the plugin
dir or pinning to a version, and ended up with convoluted specs that integrate
both the plugin and your own configuration - thus becoming dependent on the
context of your specific neovim setup.&lt;&#x2F;p&gt;
&lt;p&gt;this evolution was partly caused by the introduction of the
&lt;code&gt;require(&#x27;plugin&#x27;).setup()&lt;&#x2F;code&gt; convention. whereas plugin used to set
configuration options using global &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;lua.html#vim.g&quot;&gt;&lt;code&gt;vim.g&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; variables, they were now set with a
single line of imperative lua code. i find this change way better for clarity
but it didnt come without consequences. since configuration was now set with a
function plugin authors started using this function as the entry point of the
plugin - meaning whether your plugin was lazy-loaded or not became dependent on
when the user runs &lt;code&gt;setup&lt;&#x2F;code&gt;. if you&#x27;re wondering how this is different from how
lazy-loading done previously: neovim has a set of specific
directory names that, if in the runtimepath, will automatically get run or
added to the environment. this includes the &lt;code&gt;plugin&#x2F;&lt;&#x2F;code&gt; dir: authors would put
autocommands in their &lt;code&gt;plugin&#x2F;plugin-name.vim&lt;&#x2F;code&gt; to automatically initialize the
plugin whenever appropiate events happened in the editor.&lt;&#x2F;p&gt;
&lt;p&gt;since the introduction of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;wbthomason&#x2F;packer.nvim&quot;&gt;packer.nvim&lt;&#x2F;a&gt; and &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;shitty plugin manager&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;lazy.nvim&quot;&gt;lazy.nvim&lt;&#x2F;a&gt; the plugin spec received a
new &lt;code&gt;config&lt;&#x2F;code&gt; function (and with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;shitty plugin manager&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;lazy.nvim&quot;&gt;lazy.nvim&lt;&#x2F;a&gt; an even simpler &lt;code&gt;opts&lt;&#x2F;code&gt; table). now
your configuration for a plugin, which in most cases was just calling &lt;code&gt;setup&lt;&#x2F;code&gt;,
could now be done within the plugin spec. ... and now your plugins file is
filled with unrelated configs, differently indented functions, and &lt;code&gt;opts&lt;&#x2F;code&gt; tables.&lt;&#x2F;p&gt;
&lt;p&gt;finally, as mentioned earlier, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; got added in neovim-nightly. this powerful built-in plugin
manager allows you to finally load plugins without the need for a bootstrapped
package manager like &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;shitty plugin manager&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;folke&#x2F;lazy.nvim&quot;&gt;lazy.nvim&lt;&#x2F;a&gt;. ... except there are some caveats. currently
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; only has support for the &lt;em&gt;management&lt;&#x2F;em&gt; and &lt;em&gt;installation&lt;&#x2F;em&gt; of plugins,
configuration is entirely up to the user. similarly, lazy-loading is assumed to
be done by plugins themselves (a sentiment that i entirely support). this means
that there are still definitely some limitations to using &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; - which
led me to create &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; title=&quot;lynn.nvim: native-first neovim plugin manager with charm&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;lynn.nvim&quot;&gt;lynn.nvim&lt;&#x2F;a&gt;, a plugin manager that leverages neovim&#x27;s builtin
features which are responsible for all the heavy lifting and creates a configuration interface that fits
neovim&#x27;s file based model.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;lynn-as-a-lightweight-wrapper-no-magic-just-convenience&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#lynn-as-a-lightweight-wrapper-no-magic-just-convenience&quot; aria-label=&quot;achor-lynn-as-a-lightweight-wrapper-no-magic-just-convenience&quot;&gt;&lt;&#x2F;a&gt;
lynn as a lightweight wrapper: no magic, just convenience&lt;&#x2F;h3&gt;
&lt;p&gt;lynn didnt need to do a lot: git cloning, installing, and setting up the plugin
path was already handled by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. lynn simply needed to help with urls
(allowing you to use &lt;code&gt;owner&#x2F;repo&lt;&#x2F;code&gt; instead of &lt;code&gt;https:&#x2F;&#x2F;github.com&#x2F;owner&#x2F;repo&lt;&#x2F;code&gt;),
allow lazy-loading if the plugin doesn&#x27;t handle it by it self, and
automatically source your config.&lt;&#x2F;p&gt;
&lt;p&gt;the url wrapping simply means that lynn will assume a &lt;code&gt;owner&#x2F;repo&lt;&#x2F;code&gt; format
refers to a github repo. additionally, lynn supports url aliases: you can use
&lt;code&gt;server:owner&#x2F;repo&lt;&#x2F;code&gt; to use a custom git server instead of github.&lt;&#x2F;p&gt;
&lt;p&gt;lazy-loading is kept pretty simple. there&#x27;s no usercommand wrapping or keymaps
that automatically source the plugin. instead, you can use the &lt;code&gt;event&lt;&#x2F;code&gt; field to
create an autocommand for the plugin.&lt;&#x2F;p&gt;
&lt;p&gt;configuration is where most of the magic lies, and funnily enough it&#x27;s also the
simplest (just a few lines of lua code). lynn will automatically source any lua
file in the &lt;code&gt;config&#x2F;&lt;&#x2F;code&gt; directory of your config that matches the name of the
plugin. for &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;echasnovski&#x2F;mini.nvim&quot;&gt;mini.nvim&lt;&#x2F;a&gt; this means lynn will load &lt;code&gt;config&#x2F;mini.lua&lt;&#x2F;code&gt; and for
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ibhagwan&#x2F;fzf-lua&quot;&gt;fzf-lua&lt;&#x2F;a&gt; this means lynn will load &lt;code&gt;config&#x2F;fzf.lua&lt;&#x2F;code&gt;. finding these files is
done by the &lt;code&gt;:runtime&lt;&#x2F;code&gt; command - neovim already has a builtin mechanism for
finding files in your setup and there is no need for lua code going over your
filesystem.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;using-lynn-and-sylvee&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#using-lynn-and-sylvee&quot; aria-label=&quot;achor-using-lynn-and-sylvee&quot;&gt;&lt;&#x2F;a&gt;
using lynn and sylvee&lt;&#x2F;h2&gt;
&lt;!--

### section 4: implementation details

(technical walkthrough for both tools)

- how plugin specs work in lynn

- how `require(&quot;lynn&quot;).setup(&quot;plugins&quot;)` integrates with vim.pack.add

- how sylvee calls lynn and sets up the config directory

- using NVIM_APPNAME=sylvee nvim to isolate config

- optional tools: fzf, ripgrep, etc for enhancements

--&gt;
&lt;h3 id=&quot;adding-plugins-to-lynn&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#adding-plugins-to-lynn&quot; aria-label=&quot;achor-adding-plugins-to-lynn&quot;&gt;&lt;&#x2F;a&gt;
adding plugins to lynn&lt;&#x2F;h3&gt;
&lt;p&gt;plugin specs are quite simple. you&#x27;re probably already familiar with most of the fields it supports.&lt;&#x2F;p&gt;
&lt;p&gt;a simple example would look like this:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;lua&quot; class=&quot;language-lua z-code&quot;&gt;&lt;code class=&quot;language-lua&quot; data-lang=&quot;lua&quot;&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;owner&#x2F;repo&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;url&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-single z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;https:&#x2F;&#x2F;github.com&#x2F;owner&#x2F;repo&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; optionally specify a custom url
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;name&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;cool-repo&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; optionally rename the plugin
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;main&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; pin the plugin to a specific version, allows for the use of `vim.version`
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;path&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;path&#x2F;to&#x2F;plugin&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; optionally specify a custom path
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;deps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-begin z-lua&quot;&gt;{&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;dep1&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;dep2&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; specify dependencies
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;event&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;VimEnter&lt;span class=&quot;z-punctuation z-definition z-string z-end z-lua&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; specify an autocommand event
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-string z-unquoted z-key z-lua&quot;&gt;lazy&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-constant z-language z-boolean z-true z-lua&quot;&gt;true&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; lazy-load the plugin
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;after&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; pass a function to run after the plugin is loaded, by default sources the `config&#x2F;plugin-name.lua` file
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;  &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-key z-lua&quot;&gt;&lt;span class=&quot;z-entity z-name z-function z-lua&quot;&gt;before&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-lua&quot;&gt;=&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-value z-lua&quot;&gt; &lt;span class=&quot;z-meta z-function z-lua&quot;&gt;&lt;span class=&quot;z-meta z-block z-lua&quot;&gt;&lt;span class=&quot;z-storage z-type z-function z-lua&quot;&gt;function&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-group z-begin z-lua&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-group z-end z-lua&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-end z-lua&quot;&gt;end&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-separator z-field z-lua&quot;&gt;,&lt;&#x2F;span&gt; &lt;span class=&quot;z-comment z-line z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-lua&quot;&gt;--&lt;&#x2F;span&gt; pass a function to run before the plugin is loaded
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-lua&quot;&gt;&lt;span class=&quot;z-meta z-mapping z-lua&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-block z-end z-lua&quot;&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;lazy loading is only done if &lt;code&gt;lazy&lt;&#x2F;code&gt; is set to &lt;code&gt;true&lt;&#x2F;code&gt; or an autocmd event is
specified. this means that normally lynn will load the plugin after neovim&#x27;s
configuration stage is done.&lt;&#x2F;p&gt;
&lt;p&gt;there are &lt;code&gt;after&lt;&#x2F;code&gt; and &lt;code&gt;before&lt;&#x2F;code&gt; fields but in most cases these should not have
to be used. &lt;code&gt;after&lt;&#x2F;code&gt; will default to loading your config file so any important
code should go there. &lt;code&gt;before&lt;&#x2F;code&gt; is only useful if you want to run code before
the plugin is loaded.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;using-sylvee&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#using-sylvee&quot; aria-label=&quot;achor-using-sylvee&quot;&gt;&lt;&#x2F;a&gt;
using sylvee&lt;&#x2F;h3&gt;
&lt;p&gt;using sylvee is as simple as cloning the repo and running neovim with &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;starting.html#_nvim_appname&quot;&gt;&lt;code&gt;NVIM_APPNAME&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; set to &lt;code&gt;&quot;sylvee&quot;&lt;&#x2F;code&gt;.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;git&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; clone https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;sylvee.git &lt;span class=&quot;z-meta z-group z-expansion z-tilde&quot;&gt;&lt;span class=&quot;z-variable z-language z-tilde z-shell&quot;&gt;~&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&#x2F;.config&#x2F;sylvee&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;NVIM_APPNAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;sylvee&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;nvim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;this can be simplified even more by creating a quick wrapper script for sylvee:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;bash&quot; class=&quot;language-bash z-code&quot;&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;!&#x2F;usr&#x2F;bin&#x2F;env sh&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-begin z-shell&quot;&gt;#&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt; ~&#x2F;.local&#x2F;bin&#x2F;sylvee&lt;&#x2F;span&gt;&lt;span class=&quot;z-comment z-line z-number-sign z-shell&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-shell z-bash&quot;&gt;&lt;span class=&quot;z-variable z-other z-readwrite z-assignment z-shell&quot;&gt;NVIM_APPNAME&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-assignment z-shell&quot;&gt;=&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-unquoted z-shell&quot;&gt;sylvee&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-shell&quot;&gt;&lt;span class=&quot;z-variable z-function z-shell&quot;&gt;nvim&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-function-call z-arguments z-shell&quot;&gt; &lt;span class=&quot;z-string z-quoted z-double z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-expansion z-parameter z-shell&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-shell&quot;&gt;$&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-language z-shell&quot;&gt;@&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-end z-shell&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;what-sylvee-and-lynn-don-t-do&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#what-sylvee-and-lynn-don-t-do&quot; aria-label=&quot;achor-what-sylvee-and-lynn-don-t-do&quot;&gt;&lt;&#x2F;a&gt;
what sylvee and lynn don’t do&lt;&#x2F;h2&gt;
&lt;!--

### section 5: tradeoffs and boundaries

(what sylvee and lynn don’t do, on purpose)

- no snapshot lockfiles (you manage updates yourself)

- no plugin-specific helpers or config DSLs

- no complex lazy-loading rules or nested plugin metadata

- this makes lynn less “powerful” than full managers — but more understandable

--&gt;
&lt;p&gt;sylvee and lynn don&#x27;t aim to solve every problem. they just try to stay out of
your way sylvee is a minimalistic approach that tries to remove the friction of
configuring neovim, and lynn is a small plugin manager that tries to remove
some annoyance with managing plugins. they won&#x27;t solve all the problems in the
neovim space and they won&#x27;t fit every use case.&lt;&#x2F;p&gt;
&lt;p&gt;currently lynn does not go well with a nix-wrapped neovim setup. im working on
adding this by allowing you to disable &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt; within lynn - effectively
making lynn a lazy-loader for local plugins.&lt;&#x2F;p&gt;
&lt;p&gt;lynn also does not support plugin lock files or snapshots since these features
are entirely dependent on neovim-core&#x27;s implementation of &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;pack.html#_plugin-manager&quot;&gt;&lt;code&gt;vim.pack&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;. &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;issues&#x2F;34776&quot;&gt;as soon
as this is added&lt;&#x2F;a&gt; i will make sure lynn doesn&#x27;t get in its way.&lt;&#x2F;p&gt;
&lt;p&gt;lynn currently does not support complex lazy-loading rules like &lt;code&gt;mappings&lt;&#x2F;code&gt; or
&lt;code&gt;cmd&lt;&#x2F;code&gt; fields to load on keymaps and commands since i think these hurt
performance in most situations and are simply not worth the trouble.
additionally, most of these can be implemented manually for specific
edge-cases.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;growing-your-own-garden&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#growing-your-own-garden&quot; aria-label=&quot;achor-growing-your-own-garden&quot;&gt;&lt;&#x2F;a&gt;
growing your own garden&lt;&#x2F;h2&gt;
&lt;!--

### section 6: growing your own garden

(how others can build on this approach)

- using sylvee as a base, or picking just ideas from it

- using lynn standalone in any neovim config

- how the philosophy might scale (or not) for other users

- future thoughts: themed variants, small enhancements, no abstractions

--&gt;
&lt;p&gt;i would also like to note that the philosophy of sylvee and lynn is not to be a
complete solution, but rather a starting point for those that want to build
their own customized configuration.&lt;&#x2F;p&gt;
&lt;p&gt;sylvee is a starting point for your own garden. you can use it as a base, or
pick specific parts that you&#x27;d like to use. it can be a really strong base to
build off of, especially for those that prefer a more minimal setup. finding
features within your editor and knowing some of the basics, like the &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;quickfix.html&quot;&gt;quickfix
list&lt;&#x2F;a&gt;, &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;quickfix.html#_5.-using-:vimgrep-and-:grep&quot;&gt;grep&lt;&#x2F;a&gt; and
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;motion.html#_7.-marks&quot;&gt;marks&lt;&#x2F;a&gt;, will help you build your own garden.&lt;&#x2F;p&gt;
&lt;p&gt;you can also use lynn as a standalone plugin manager for your neovim setup.
this might be useful if you want to keep your neovim setup simple and prefer to
use neovim&#x27;s builtin plugin manager without having to deal with creating your
own lazy-loading solution (ofcourse thats always a viable and fun option).&lt;&#x2F;p&gt;
&lt;!--

### outro

(closing thoughts)

- this setup works because it trusts neovim

- small tools, small files, small surprises

- sylvee and lynn don’t aim to solve every problem
- they just try to stay out of your way

- if that sounds like your kind of garden, give them a try

--&gt;
&lt;p&gt;i hope that this setup works for you. i personally loved working on it and
learned a lot about how powerful of an editor neovim can be if you try to look
into some of its more complex aspects. the neovim core team has worked really
hard on creating an impressive and customizable out-of-the-box experience. i
admire them for all the work they&#x27;ve done and am looking forward to where we&#x27;ll
go next.&lt;&#x2F;p&gt;
&lt;p&gt;i&#x27;ve tried my best to work &lt;em&gt;with&lt;&#x2F;em&gt; what neovim provides and &lt;em&gt;against&lt;&#x2F;em&gt; what most
neovim distros are reaching for. i tried to balance neovim&#x27;s defaults with some
additions that i would love to see in neovim in the future.&lt;&#x2F;p&gt;
&lt;p&gt;if that sounds like your kind of garden, give sylvee and lynn a try. i think
they&#x27;re something interesting to try out. if you have any questions or feedback
please &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;sylvee&#x2F;discussions&quot;&gt;let me know&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;references&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#references&quot; aria-label=&quot;achor-references&quot;&gt;&lt;&#x2F;a&gt;
references&lt;&#x2F;h1&gt;
&lt;p&gt;here are some references that add more context to this blogpost:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;neovim.io&#x2F;doc&#x2F;user&#x2F;lua-plugin.html#_lazy-loading&quot;&gt;section&lt;&#x2F;a&gt; of the neovim docs explaining how to add lazy-loading to your plugin.&lt;&#x2F;li&gt;
&lt;li&gt;a &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;neovim&#x2F;neovim&#x2F;issues&#x2F;35562#issuecomment-3239702727&quot;&gt;comment&lt;&#x2F;a&gt; by &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;justinmk&quot;&gt;justinmk&lt;&#x2F;a&gt; explaining how lazy-loading &lt;em&gt;should&lt;&#x2F;em&gt; be done in neovim.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>evergarden for sublime</title>
          <pubDate>Sun, 22 Jun 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/evergarden-sublime-text-release/</link>
          <guid>https://robinwobin.dev/notes/evergarden-sublime-text-release/</guid>
          <description xml:base="https://robinwobin.dev/notes/evergarden-sublime-text-release/">&lt;p&gt;evergarden is now available for sublime text. simply install it using package
control.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;img&#x2F;ec1f81312bdd39a21ad890a64043beedf104fb62.webp&quot; alt=&quot;sublime package install&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>evergarden palette now on npm</title>
          <pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/evergarden-npm-release/</link>
          <guid>https://robinwobin.dev/notes/evergarden-npm-release/</guid>
          <description xml:base="https://robinwobin.dev/notes/evergarden-npm-release/">&lt;p&gt;you can install the evergarden palette as an npm package: &lt;code&gt;@everviolet&#x2F;palette&lt;&#x2F;code&gt;&lt;&#x2F;p&gt;
&lt;p&gt;here’s how to bring the garden into your stylesheets:&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;css&quot; class=&quot;language-css z-code&quot;&gt;&lt;code class=&quot;language-css&quot; data-lang=&quot;css&quot;&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-comment z-block z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-css&quot;&gt;&#x2F;*&lt;&#x2F;span&gt; if you have it installed with a package manager &amp;amp; a css loader configured &lt;span class=&quot;z-punctuation z-definition z-comment z-css&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-at-rule z-import z-css&quot;&gt;&lt;span class=&quot;z-keyword z-control z-at-rule z-import z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-keyword z-css&quot;&gt;@&lt;&#x2F;span&gt;import&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;@everviolet&#x2F;palette&#x2F;css&#x2F;fall.css&lt;span class=&quot;z-punctuation z-definition z-string z-end z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-comment z-block z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-comment z-css&quot;&gt;&#x2F;*&lt;&#x2F;span&gt; alternatively via unpkg &lt;span class=&quot;z-punctuation z-definition z-comment z-css&quot;&gt;*&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-at-rule z-import z-css&quot;&gt;&lt;span class=&quot;z-keyword z-control z-at-rule z-import z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-keyword z-css&quot;&gt;@&lt;&#x2F;span&gt;import&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-function-call z-css&quot;&gt;&lt;span class=&quot;z-support z-function z-url z-css&quot;&gt;url&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-css&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-string z-quoted z-double z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;https:&#x2F;&#x2F;unpkg.com&#x2F;@everviolet&#x2F;palette&#x2F;css&#x2F;fall.css&lt;span class=&quot;z-punctuation z-definition z-string z-end z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-css&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-selector z-css&quot;&gt;&lt;span class=&quot;z-entity z-other z-attribute-name z-class z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-css&quot;&gt;.&lt;&#x2F;span&gt;button&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-list z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-property-list z-css&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-property-list z-css&quot;&gt;  &lt;span class=&quot;z-meta z-property-name z-css&quot;&gt;&lt;span class=&quot;z-support z-type z-property-name z-css&quot;&gt;background-color&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-css&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-css&quot;&gt;&lt;span class=&quot;z-support z-function z-var z-css&quot;&gt;var&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-css&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-custom-property z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-custom-property z-css&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-custom-property z-name z-css&quot;&gt;ev-winter-green&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-css&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-property-list z-css&quot;&gt;  &lt;span class=&quot;z-meta z-property-name z-css&quot;&gt;&lt;span class=&quot;z-support z-type z-property-name z-css&quot;&gt;color&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-css&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt;&lt;span class=&quot;z-meta z-function-call z-css&quot;&gt;&lt;span class=&quot;z-support z-function z-var z-css&quot;&gt;var&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-begin z-css&quot;&gt;(&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-custom-property z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-custom-property z-css&quot;&gt;--&lt;&#x2F;span&gt;&lt;span class=&quot;z-support z-type z-custom-property z-name z-css&quot;&gt;ev-winter-crust&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-group z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-group z-end z-css&quot;&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-css&quot;&gt;&lt;span class=&quot;z-meta z-property-list z-css&quot;&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-property-list z-css&quot;&gt;}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;pre data-lang=&quot;scss&quot; class=&quot;language-scss z-code&quot;&gt;&lt;code class=&quot;language-scss&quot; data-lang=&quot;scss&quot;&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;&lt;span class=&quot;z-meta z-at-rule z-module z-sass&quot;&gt;&lt;span class=&quot;z-keyword z-control z-at-rule z-module z-sass&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-keyword z-sass&quot;&gt;@&lt;&#x2F;span&gt;use&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-double z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-begin z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;@everviolet&#x2F;palette&#x2F;scss&#x2F;evergarden&lt;span class=&quot;z-punctuation z-definition z-string z-end z-css&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-control z-as z-sass&quot;&gt;as&lt;&#x2F;span&gt; &lt;span class=&quot;z-meta z-generic-name z-sass&quot;&gt;&lt;span class=&quot;z-constant z-language z-import-all z-sass&quot;&gt;*&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-sass&quot;&gt;;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;&lt;span class=&quot;z-meta z-selector z-css&quot;&gt;&lt;span class=&quot;z-entity z-other z-attribute-name z-class z-css&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-entity z-css&quot;&gt;.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-entity z-other z-attribute-name z-class z-css&quot;&gt;button&lt;&#x2F;span&gt; &lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-section z-property-list z-begin z-css&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;  &lt;span class=&quot;z-meta z-property-name z-css&quot;&gt;&lt;span class=&quot;z-support z-type z-property-name z-css&quot;&gt;background-color&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-css&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt; &lt;span class=&quot;z-variable z-other z-sass&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-sass&quot;&gt;$&lt;&#x2F;span&gt;green&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;  &lt;span class=&quot;z-meta z-property-name z-css&quot;&gt;&lt;span class=&quot;z-support z-type z-property-name z-css&quot;&gt;color&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-separator z-key-value z-css&quot;&gt;:&lt;&#x2F;span&gt;&lt;span class=&quot;z-meta z-property-value z-css&quot;&gt; &lt;span class=&quot;z-variable z-other z-sass&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-variable z-sass&quot;&gt;$&lt;&#x2F;span&gt;crust&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-rule z-css&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-scss&quot;&gt;&lt;span class=&quot;z-punctuation z-section z-property-list z-end z-css&quot;&gt;}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
</description>
      </item>
      <item>
          <title>evergarden site is live</title>
          <pubDate>Sun, 06 Apr 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/notes/evergarden-site-release/</link>
          <guid>https://robinwobin.dev/notes/evergarden-site-release/</guid>
          <description xml:base="https://robinwobin.dev/notes/evergarden-site-release/">&lt;p&gt;the little garden&#x27;s grown a bit! the official evergarden theme site is now
available - you can now browse the palette, read about the project, and find
ports for your applications all in one comfy place.&lt;&#x2F;p&gt;
&lt;p&gt;take a peek here: &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;evergarden.moe&quot;&gt;evergarden.moe&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;(more updates, ease of use for developers, and mossy surprises coming soon)&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>creating a colorscheme</title>
          <pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/blog/creating-a-colorscheme/</link>
          <guid>https://robinwobin.dev/blog/creating-a-colorscheme/</guid>
          <description xml:base="https://robinwobin.dev/blog/creating-a-colorscheme/">&lt;p&gt;ever since I started using open source applications and code editors I got
sucked into the magic of syncing the themes of my different applications.
there&#x27;s just something amazing about having all your applications using the
same styles and colors.&lt;&#x2F;p&gt;
&lt;p&gt;naturally I got inspired by the thousands of colorschemes out there and created
my own, and then my next one, and then my next one. I have to admit that my
first few attempts lacked… a certain touch. while it was really fun to change
my applications to use a palette that &lt;em&gt;I&lt;&#x2F;em&gt; created, the end result was pretty
bad. apparently, selecting random colors without thinking about their
relationship to eachother isnt the best recipe for creating a coherent color
scheme.&lt;&#x2F;p&gt;
&lt;p&gt;in this small guide I will attempt to lay out some of tips I can give you in your
own colorscheme journey. these tips are based on my extensive time researching
color theory, both in creating colorschemes and art in
general.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;where-to-start&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#where-to-start&quot; aria-label=&quot;achor-where-to-start&quot;&gt;&lt;&#x2F;a&gt;
where to start&lt;&#x2F;h3&gt;
&lt;p&gt;the best thing is to start with a concept. use a scene, videogame or movie you
like as inspiration. next, collect some images relating to your concept. by
creating a moodboard, you quickly have access to reference material for your
colorscheme.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;finding-your-neutral-colors&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#finding-your-neutral-colors&quot; aria-label=&quot;achor-finding-your-neutral-colors&quot;&gt;&lt;&#x2F;a&gt;
finding your neutral colors&lt;&#x2F;h3&gt;
&lt;p&gt;every colorscheme starts with a background color. it is quite difficult to
select foreground colors until you know which color they will contrast with;
think of black on white for most websites. select a color in your reference
material that has a soft hue to it. try not to use a color that pops. instead
look for the color that is used as a backdrop. this color will often be either
blue, red-ish or purple. this is because most scenery in your daily
life is made of these colors; think of shadowy areas, surfaces lit up by the
sun and night scenery respectively.&lt;&#x2F;p&gt;
&lt;p&gt;after you&#x27;ve selected your background color, we need a foreground color. theres
two ways to go about this. method one is shifting the lightness of your
background color up and shifting the saturation all the way down. using this
method, you get a quite analogous neutral palette. these palettes are perfect
for when you want to add other colors that pop. the second
method is the same as the first one but follows up by shifting the hue of your
foreground color by 180 degrees. this method will result in a complementary
neutral palette, which makes your final colorscheme look quite vibrant.&lt;&#x2F;p&gt;
&lt;p&gt;next up is creating your neutral shades. this can simply be done by
incrementally changing the components of your background color until they reach
the value of your foreground color.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;how-to-select-colors&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#how-to-select-colors&quot; aria-label=&quot;achor-how-to-select-colors&quot;&gt;&lt;&#x2F;a&gt;
how to select colors&lt;&#x2F;h3&gt;
&lt;p&gt;look in your reference material for a &lt;em&gt;single&lt;&#x2F;em&gt; color that you find
representative of your concept. next, crank up the lightness and
saturation until you&#x27;re content with your color. this color will be the main
color used for syntax.&lt;&#x2F;p&gt;
&lt;p&gt;for the rest of your palette, use the same saturation and lightness but move
the hue over about 60 to 90 degrees each time. by selecting colors that
differ only in &lt;em&gt;one&lt;&#x2F;em&gt; component, either hue or lightness or saturation, you
create a palette that looks quite harmonious.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;adjusting-your-colors&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#adjusting-your-colors&quot; aria-label=&quot;achor-adjusting-your-colors&quot;&gt;&lt;&#x2F;a&gt;
adjusting your colors&lt;&#x2F;h3&gt;
&lt;p&gt;you might notice that some of your colors look a little off. this is because
saturation and lightness in the hsl (or hsv) color space is not perceptually
uniform. this means that, to the human eye, colors with the same saturation and
lightness don&#x27;t &lt;em&gt;look&lt;&#x2F;em&gt; like they have the same saturation and lightness. to the
human eye, a blue or purple will look darker than a green or yellow. you
have to take this into account while creating your colorscheme.&lt;&#x2F;p&gt;
&lt;p&gt;if you have a palette that is generally pretty vibrant but some colors look
washed out, try decreasing their brightness and increasing their saturation.
the inverse can be said for a pastel palette: do some colors look darker or
dirtier? try increasing their lightness and decreasing their saturation.&lt;&#x2F;p&gt;
&lt;p&gt;in general, there are a few rules for a coherent palette: your reds and oranges
will have a higher saturation than your other colors, whereas your blues and
greens will have a lower saturation.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;look-at-community-resources&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#look-at-community-resources&quot; aria-label=&quot;achor-look-at-community-resources&quot;&gt;&lt;&#x2F;a&gt;
look at community resources&lt;&#x2F;h3&gt;
&lt;p&gt;to further help you on your journey I have selected a collection of resources I
discovered while researching colorschemes. the end result of these resources
might not look like something &lt;em&gt;you&lt;&#x2F;em&gt; would want to create. nevertheless, it&#x27;s
important to look at the choices these developers made and think about how you
could apply their ideas to your own work.&lt;&#x2F;p&gt;
&lt;p&gt;an important resource that got me started on my colorscheme journey was
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cocopon&quot;&gt;cocopon&lt;&#x2F;a&gt;&#x27;s vimconf 2017 &lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;speakerdeck.com&#x2F;cocopon&#x2F;creating-your-lovely-color-scheme&quot;&gt;presentation&lt;&#x2F;a&gt; on creating a
colorscheme.&lt;&#x2F;p&gt;
&lt;p&gt;next, look at documentation for well-known palettes. many popular themes have
in-depth documentation on their palettes. they may even share some of the
knowledge theyve gained on the journey they took to create the colorscheme.
here&#x27;s a selection of resources to start:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;www.nordtheme.com&#x2F;docs&#x2F;colors-and-palettes&quot;&gt;the nord theme documentation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;rosepinetheme.com&#x2F;palette&#x2F;&quot;&gt;the rose-pine documentation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;catppuccin&#x2F;catppuccin&#x2F;blob&#x2F;main&#x2F;docs&#x2F;style-guide.md&quot;&gt;the catppuccin style guide&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;ethanschoonover.com&#x2F;solarized&#x2F;&quot;&gt;the solarized documentation&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
      <item>
          <title>building this site</title>
          <pubDate>Wed, 22 Jan 2025 00:00:00 +0000</pubDate>
          <author>robin</author>
          <link>https://robinwobin.dev/blog/building-this-site/</link>
          <guid>https://robinwobin.dev/blog/building-this-site/</guid>
          <description xml:base="https://robinwobin.dev/blog/building-this-site/">&lt;h2 id=&quot;static-site-generation&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#static-site-generation&quot; aria-label=&quot;achor-static-site-generation&quot;&gt;&lt;&#x2F;a&gt;
static site generation&lt;&#x2F;h2&gt;
&lt;p&gt;while looking for a static site generator for my site i tried a few interesting
tools, like hugo and astro. i even tried building my own ssg (which failed
miserably). in the end i discovered zola, simple static site generator
written in rust. zola uses tera templates to build sites with minimal effort.&lt;&#x2F;p&gt;
&lt;p&gt;zola separates content from templates. where markdown files can specify which
templates to use.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;templates&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#templates&quot; aria-label=&quot;achor-templates&quot;&gt;&lt;&#x2F;a&gt;
templates&lt;&#x2F;h3&gt;
&lt;p&gt;here is my blog page. it specifies a template to use for the section. in this
template i can use zola&#x27;s section variables to create a dynamic posts page
(which i&#x27;ll get into in a bit).&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;markdown&quot; class=&quot;language-markdown z-code&quot;&gt;&lt;code class=&quot;language-markdown&quot; data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;+++
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;title = &amp;quot;blog&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;description = &amp;quot;questionable ideas put to paper&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;sort_by = &amp;quot;date&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;template = &amp;quot;pages&#x2F;blog.html&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;page_template = &amp;quot;pages&#x2F;post.html&amp;quot;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-html z-markdown&quot;&gt;&lt;span class=&quot;z-meta z-paragraph z-markdown&quot;&gt;+++
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;the blog page also specifies a &lt;code&gt;page_template&lt;&#x2F;code&gt;. this is the template that will
be used for all child pages (my blogposts).&lt;&#x2F;p&gt;
&lt;p&gt;in my &lt;code&gt;pages&#x2F;blog.html&lt;&#x2F;code&gt; template i can use zola&#x27;s section variables to iterate
over all my blogposts and generate a list at build time.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;tera&quot; class=&quot;language-tera z-code&quot;&gt;&lt;code class=&quot;language-tera&quot; data-lang=&quot;tera&quot;&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;{% block content %}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  {{ section.content | safe }}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &amp;lt;ul class=&amp;quot;blog-previews&amp;quot;&amp;gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    {% for page in section.pages %}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;      {% include &amp;quot;partials&#x2F;blogpreview.html&amp;quot; %}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;    {% endfor %}
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;  &amp;lt;&#x2F;ul&amp;gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-text z-plain&quot;&gt;{% endblock content %}
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;build-and-deploy&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#build-and-deploy&quot; aria-label=&quot;achor-build-and-deploy&quot;&gt;&lt;&#x2F;a&gt;
build and deploy&lt;&#x2F;h2&gt;
&lt;p&gt;to ease building and deploying the site i use nix to setup my tools and build.
because the site is static i simply can use github pages to deploy.&lt;&#x2F;p&gt;
&lt;p&gt;the nix builder simply takes zola as a buildinput and runs the build. i then
copy the static content to the &lt;code&gt;$out&lt;&#x2F;code&gt; directory.&lt;&#x2F;p&gt;
&lt;pre data-lang=&quot;nix&quot; class=&quot;language-nix z-code&quot;&gt;&lt;code class=&quot;language-nix&quot; data-lang=&quot;nix&quot;&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-variable z-parameter z-name z-nix&quot;&gt;stdenvNoCC&lt;&#x2F;span&gt;&lt;span class=&quot;z-keyword z-operator z-nix&quot;&gt;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-variable z-parameter z-name z-nix&quot;&gt;mkDerivation&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-attrset-or-function z-nix&quot;&gt;{&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;  &lt;span class=&quot;z-entity z-other z-attribute-name z-multipart z-nix&quot;&gt;src&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bind z-nix&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-unquoted z-path z-nix&quot;&gt;.&#x2F;.&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-bind z-nix&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;  &lt;span class=&quot;z-entity z-other z-attribute-name z-multipart z-nix&quot;&gt;nativeBuildInputs&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bind z-nix&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-punctuation z-definition z-list z-nix&quot;&gt;[&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;    &lt;span class=&quot;z-variable z-parameter z-name z-nix&quot;&gt;zola&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-list z-nix&quot;&gt;]&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-bind z-nix&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;  &lt;span class=&quot;z-entity z-other z-attribute-name z-multipart z-nix&quot;&gt;buildPhase&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bind z-nix&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-other z-start z-nix&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    runHook preBuild
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    zola build
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    runHook postBuild
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-string z-other z-end z-nix&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-bind z-nix&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;  &lt;span class=&quot;z-entity z-other z-attribute-name z-multipart z-nix&quot;&gt;installPhase&lt;&#x2F;span&gt; &lt;span class=&quot;z-keyword z-operator z-bind z-nix&quot;&gt;=&lt;&#x2F;span&gt; &lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-string z-other z-start z-nix&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    runHook preInstall
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    mkdir -p $out
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    cp -r public&#x2F;* $out
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;    runHook postInstall
&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-string z-quoted z-other z-nix&quot;&gt;  &lt;span class=&quot;z-punctuation z-definition z-string z-other z-end z-nix&quot;&gt;&amp;#39;&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;span class=&quot;z-punctuation z-terminator z-bind z-nix&quot;&gt;;&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;span class=&quot;z-source z-nix&quot;&gt;&lt;span class=&quot;z-punctuation z-definition z-attrset z-nix&quot;&gt;}&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;deployment is done using a single github
action you can find
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;site&#x2F;src&#x2F;commit&#x2F;0b94d7338c1d7c50c09635b4d20fbeab552d58fd&#x2F;.github&#x2F;workflows&#x2F;deploy.yml&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;


&lt;aside class=&quot;note&quot;&gt;
  
  &lt;h6&gt;update: codeberg ci&lt;&#x2F;h6&gt;
  
  &lt;p&gt;
    deployment is now done with codeberg ci
using woodpecker using the config you can
find
&lt;a rel=&quot;noopener&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;codeberg.org&#x2F;comfysage&#x2F;site&#x2F;src&#x2F;commit&#x2F;0b94d7338c1d7c50c09635b4d20fbeab552d58fd&#x2F;.woodpecker&#x2F;deploy.yaml&quot;&gt;here&lt;&#x2F;a&gt;
  &lt;&#x2F;p&gt;
&lt;&#x2F;aside&gt;
&lt;h2 id=&quot;resources&quot;&gt;&lt;a class=&quot;heading-anchor&quot; href=&quot;#resources&quot; aria-label=&quot;achor-resources&quot;&gt;&lt;&#x2F;a&gt;
resources&lt;&#x2F;h2&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a class=&quot;rainbow&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&quot;&gt;zola&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    &lt;li&gt;&lt;a class=&quot;rainbow&quot; href=&quot;https:&#x2F;&#x2F;ebil.club&quot;&gt;ebil.club&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    &lt;li&gt;&lt;a class=&quot;rainbow&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;comfysage&#x2F;evergarden&quot;&gt;evergarden&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
    &lt;li&gt;&lt;a class=&quot;rainbow&quot; href=&quot;https:&#x2F;&#x2F;nixos.org&quot;&gt;nix&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;ul&gt;
</description>
      </item>
    </channel>
</rss>
