<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>GitHub Lua Monthly Trending</title>
    <description>Monthly Trending of Lua in GitHub</description>
    <pubDate>Fri, 15 May 2026 01:59:05 GMT</pubDate>
    <link>http://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>koreader/koreader</title>
      <link>https://github.com/koreader/koreader</link>
      <description>&lt;p&gt;An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://koreader.rocks&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/koreader/koreader.github.io/master/koreader-logo.png&quot; alt=&quot;KOReader&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;KOReader is a document viewer primarily aimed at e-ink readers.&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/COPYING&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/koreader/koreader&quot; alt=&quot;AGPL Licence&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/koreader/koreader.svg?sanitize=true&quot; alt=&quot;Latest release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitter.im/koreader/koreader&quot;&gt;&lt;img src=&quot;https://img.shields.io/gitter/room/koreader/koreader?color=red&quot; alt=&quot;Gitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/forum-on_mobileread-lightgrey&quot; alt=&quot;Mobileread&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://circleci.com/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://circleci.com/gh/koreader/koreader.svg?style=shield&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/koreader/koreader/branch/master/graph/badge.svg?sanitize=true&quot; alt=&quot;Coverage Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widgets/koreader/-/koreader/svg-badge.svg?sanitize=true&quot; alt=&quot;Weblate Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;Download&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;User guide&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;Wiki&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Main features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;portable&lt;/strong&gt;: runs on embedded devices (Cervantes, Kindle, Kobo, PocketBook, reMarkable), Android and Linux computers. Developers can run a KOReader emulator in Linux and MacOS.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;multi-format documents&lt;/strong&gt;: supports fixed page formats (PDF, DjVu, CBT, CBZ) and reflowable e-book formats (EPUB, FB2, Mobi, DOC, RTF, HTML, CHM, TXT). Scanned PDF/DjVu documents can also be reflowed with the built-in K2pdfopt library. &lt;a href=&quot;https://github.com/koreader/koreader/wiki/ZIP&quot;&gt;ZIP files&lt;/a&gt; are also supported for some formats.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;full-featured reading&lt;/strong&gt;: multi-lingual user interface with a highly customizable reader view and many typesetting options. You can set arbitrary page margins, override line spacing and choose external fonts and styles. It has multi-lingual hyphenation dictionaries bundled into the application.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;integrated&lt;/strong&gt; with &lt;em&gt;calibre&lt;/em&gt; (search metadata, receive ebooks wirelessly, browse library via OPDS), &lt;em&gt;Wallabag&lt;/em&gt;, &lt;em&gt;Wikipedia&lt;/em&gt;, &lt;em&gt;Google Translate&lt;/em&gt; and other content providers.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;optimized for e-ink devices&lt;/strong&gt;: custom UI without animation, with paginated menus, adjustable text contrast, and easy zoom to fit content or page in paged media.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;extensible&lt;/strong&gt;: via plugins&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;fast&lt;/strong&gt;: on some older devices, it has been measured to have less than half the page-turn delay as the built in reading software.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;and much more&lt;/strong&gt;: look up words with StarDict dictionaries / Wikipedia, add your own online OPDS catalogs and RSS feeds, over-the-air software updates, an FTP client, an SSH server, …&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please check the &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;user guide&lt;/a&gt; and the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt; to discover more features and to help us document them.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Please follow the model specific steps for your device:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Android-devices&quot;&gt;Android&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-BQ-devices&quot;&gt;Cervantes&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kindle-devices&quot;&gt;Kindle&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kobo-devices&quot;&gt;Kobo&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux&quot;&gt;Linux&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-PocketBook-devices&quot;&gt;Pocketbook&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Remarkable&quot;&gt;reMarkable&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building.md&quot;&gt;Setting up a build environment&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Collaborating_with_Git.md&quot;&gt;Collaborating with Git&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building_targets.md&quot;&gt;Building targets&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Porting.md&quot;&gt;Porting&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;KOReader is developed and supported by volunteers all around the world. There are many ways you can help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Abug&quot;&gt;fix bugs&lt;/a&gt; and &lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement&quot;&gt;implement new features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;translate the program into your language&lt;/a&gt; or improve an existing translation&lt;/li&gt; 
 &lt;li&gt;document lesser-known features on the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;help others with your knowledge on the &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;forum&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Right now we only support &lt;a href=&quot;https://liberapay.com/KOReader&quot;&gt;liberapay&lt;/a&gt; donations.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/commits/master&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/koreader/koreader?color=orange&quot; alt=&quot;Last commit&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/pulse&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/koreader/koreader&quot; alt=&quot;Commit activity&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/f40ed12d855e99d33933185c6966a0e699616c6958a3a3c1551a1368299ff97e/koreader/koreader" medium="image" />
      
    </item>
    
    <item>
      <title>iDvel/rime-ice</title>
      <link>https://github.com/iDvel/rime-ice</link>
      <description>&lt;p&gt;Rime 配置：雾凇拼音 | 长期维护的简体词库&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;雾凇拼音&lt;/h1&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/overview.png&quot; alt=&quot;demo&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;雾凇拼音&lt;/strong&gt;是一份开箱即用的简体中文 Rime 输入法配置，词库长期维护，基本功能齐全，使用完全离线，质量稳定可靠。&lt;/p&gt; 
&lt;p&gt;雾凇拼音包含全拼和双拼输入方案、长期维护的精校词库、各类扩展功能和详尽的注释。适配小狼毫 Weasel、鼠须管 Squirrel、Fcitx5、iBus 等几乎所有 Rime 前端。你可以不折腾，一键下载部署后即刻使用；可以借着完善的注释和社区生态，让 AI 帮你定制改造；也可以将之作为深入了解和自定义 Rime 的起点。&lt;/p&gt; 
&lt;p&gt;使用雾凇拼音，享受跨平台一致、隐私友好、个性化门槛低的 Rime 简体中文输入体验。&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E5%AE%89%E8%A3%85&quot;&gt;立即下载安装&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E5%8A%9F%E8%83%BD%E6%BC%94%E7%A4%BA%E5%92%8C%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&quot;&gt;功能演示和教程&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98&quot;&gt;常见问题&lt;/a&gt; | &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/666&quot;&gt;词库共建&lt;/a&gt; | &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/docs/Changelog.md&quot;&gt;更新日志&lt;/a&gt; | &lt;a href=&quot;https://dvel.me/posts/rime-ice/&quot;&gt;详细介绍&lt;/a&gt; ↗ | &lt;a href=&quot;https://www.mintimate.cc/zh/demo/fcitx5Online.html&quot;&gt;在线体验&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt; ↗&lt;/p&gt; 
&lt;h2&gt;安装&lt;/h2&gt; 
&lt;p&gt;到 Rime &lt;a href=&quot;https://rime.im/&quot;&gt;官网&lt;/a&gt; 或 app 商店下载安装 Rime 输入法应用。然后：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;下载 &lt;a href=&quot;https://github.com/iDvel/rime-ice/releases/latest/download/full.zip&quot;&gt;雾凇拼音&lt;/a&gt; 压缩包；&lt;/li&gt; 
 &lt;li&gt;先&lt;strong&gt;清空&lt;/strong&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;输入法 &lt;code&gt;用户文件夹&lt;/code&gt;/&lt;code&gt;用户设定&lt;/code&gt; 内的全部文件，再将压缩包内的所有文件复制进去；&lt;/li&gt; 
 &lt;li&gt;重新部署。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;部署完成后就可以打字了。按 &lt;kbd&gt;F4&lt;/kbd&gt; 可以切换输入方案或开关各项功能。重做以上三步可以更新/还原雾凇拼音。&lt;/p&gt; 
&lt;p&gt;也可以使用 &lt;a href=&quot;https://github.com/rime/plum&quot;&gt;/plum/&lt;/a&gt; ℞ 配方管理工具，一行命令就能安装和更新雾凇拼音：&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;bash rime-install iDvel/rime-ice
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;了解更多细节以及其他支持的安装方式，参考 &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/docs/Installation.md&quot;&gt;详细安装指导&lt;/a&gt;。&lt;/p&gt; 
&lt;h2&gt;介绍&lt;/h2&gt; 
&lt;p&gt;雾凇拼音包含：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;为简体中文设计的全拼和常见双拼方案，包括雾凇拼音（全拼）、智能 ABC、自然码、小鹤双拼、搜狗双拼、微软双拼、紫光双拼、拼音加加、9 键&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt; 和轻量的英文方案。&lt;/li&gt; 
 &lt;li&gt;长期维护、精心调教且开源的百万中英词库：&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E9%95%BF%E6%9C%9F%E7%BB%B4%E6%8A%A4%E7%9A%84%E4%B8%AD%E8%8B%B1%E8%AF%8D%E5%BA%93&quot;&gt;了解 &amp;gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;完善的基础输入体验，以及丰富的扩展功能：&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#%E5%8A%9F%E8%83%BD%E6%BC%94%E7%A4%BA%E5%92%8C%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B&quot;&gt;了解 &amp;gt;&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;对 Rime 部分及主流前端每一项配置的详细注释，方便学习和自定义：&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/default.yaml&quot;&gt;示例 &amp;gt;&lt;/a&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;长期维护的中英词库&lt;/h3&gt; 
&lt;p&gt;因为没有找到一份比较好的词库，干脆自己维护一个。综合了几个不错的词库，精心调教了很多。&lt;/p&gt; 
&lt;p&gt;词库简介：&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;字表： 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;8105&lt;/code&gt; 常用字表，《通用规范汉字表》+基本的扩充。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;41448&lt;/code&gt; Unihan 大字表，默认未启用。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;词库： 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;base&lt;/code&gt; 基础词库，含两字词及调频。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;ext&lt;/code&gt; 扩展词库，小词库，含多音字注音。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;tencent&lt;/code&gt; 扩展词库，大词库，无注音（由 Rime 自动注音），含非多音字、只发一种音的多音字、同义多音字。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;纯手搓的 Emoji&lt;/li&gt; 
 &lt;li&gt;英文词库： 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;en&lt;/code&gt; 20k 左右的常见单词 + 少许补充。&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;en_ext&lt;/code&gt; 扩展词库，大部分是缩写或互联网相关。&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;维护内容主要是异形词、错别字的校对，错误注音的修正，缺失的常用词汇的增添，词频的调整。欢迎在词库方面提 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/666&quot;&gt;issue&lt;/a&gt;，我会及时更新修正。&lt;/p&gt; 
&lt;h3&gt;功能演示和使用教程&lt;/h3&gt; 
&lt;h4 align=&quot;center&quot;&gt;&lt;strong&gt;—— ⌨️ 基础输入 ⌨️ ——&lt;/strong&gt;&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;1. 方案选单&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;2. 中文输入&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E6%96%B9%E6%A1%88%E8%AE%BE%E5%AE%9A_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E4%B8%AD%E6%96%87%E8%BE%93%E5%85%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;3. 英文输入&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;4. 中英混合输入&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E8%8B%B1%E6%96%87%E8%BE%93%E5%85%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E4%B8%AD%E8%8B%B1%E6%B7%B7%E5%90%88%E8%BE%93%E5%85%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;5. Emoji&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;6. 模糊音&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-Emoji_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E6%A8%A1%E7%B3%8A%E9%9F%B3_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;7. 自动纠错&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;8. 繁简转换&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E8%87%AA%E5%8A%A8%E7%BA%A0%E9%94%99_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E7%B9%81%E7%AE%80%E8%BD%AC%E6%8D%A2_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;br /&gt; 
&lt;h4 align=&quot;center&quot;&gt;&lt;strong&gt;—— 🔍 反查和符号 🔍 ——&lt;/strong&gt;&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;1. 拆字反查&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;2. 数字符号转写&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E6%8B%86%E5%AD%97%E5%8F%8D%E6%9F%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E6%95%B0%E5%AD%97%E7%AC%A6%E5%8F%B7%E4%BE%BF%E6%90%BA%E8%BE%93%E5%85%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;碰到生僻字，输入 &lt;kbd&gt;uU&lt;/kbd&gt; + 字的部件拼音，得到汉字和注音&lt;/td&gt; 
   &lt;td&gt;用拼音、英文输入短语中的数字和符号&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;3. 符号输入&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;4. 词汇别名&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E7%AC%A6%E5%8F%B7%E8%BE%93%E5%85%A5_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E5%9F%BA%E7%A1%80-%E8%AF%8D%E6%B1%87%E5%88%AB%E5%90%8D_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;全拼 &lt;kbd&gt;v&lt;/kbd&gt; + 拼音首字母；双拼 &lt;kbd&gt;V&lt;/kbd&gt; + 拼音首字母&lt;/td&gt; 
   &lt;td&gt;部分常用词，自动展示其翻译、别名、化学式、简称等&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;br /&gt; 
&lt;h4 align=&quot;center&quot;&gt;&lt;strong&gt;—— ✨ 扩展功能 ✨ ——&lt;/strong&gt;&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;1. 以词定字&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;2. 辅码检字&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E4%BB%A5%E8%AF%8D%E5%AE%9A%E5%AD%97_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E8%BE%85%E7%A0%81%E6%A3%80%E5%AD%97_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;用左右中括号键，输入候选的开头或末尾的字&lt;/td&gt; 
   &lt;td&gt;输入拼音后，再输入 &lt;kbd&gt;`&lt;/kbd&gt; + 字的偏旁部首拼音，筛选候选&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;3. 错字错音提示&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;4. 英文自动大小写&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E9%94%99%E5%AD%97%E9%94%99%E9%9F%B3%E6%8F%90%E7%A4%BA_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E8%8B%B1%E6%96%87%E8%87%AA%E5%8A%A8%E5%A4%A7%E5%B0%8F%E5%86%99_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;输了错字错音，雾凇会提示正确的音形&lt;/td&gt; 
   &lt;td&gt;大写开头，得到首字母大写的单词；多个大写字母开头，得到全大写的单词&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;5. 日期输入&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;6. 农历输入&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E6%97%B6%E9%97%B4%E6%97%A5%E6%9C%9F_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E5%86%9C%E5%8E%86%E8%BD%AC%E6%8D%A2_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;全拼输 &lt;kbd&gt;rq&lt;/kbd&gt;，双拼输 &lt;kbd&gt;date&lt;/kbd&gt;，得到各种格式的当前日期和时间&lt;/td&gt; 
   &lt;td&gt;全拼输 &lt;kbd&gt;nl&lt;/kbd&gt;，双拼输 &lt;kbd&gt;lunar&lt;/kbd&gt;，获取当前农历；输入 &lt;kbd&gt;N&lt;/kbd&gt; + 日期，获取指定日期农历和节气&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;br /&gt; 
&lt;h4 align=&quot;center&quot;&gt;&lt;strong&gt;—— 🧰 便捷工具 🧰 ——&lt;/strong&gt;&lt;/h4&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;1. 计算器&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;2. Unicode 输入&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E8%AE%A1%E7%AE%97%E5%99%A8_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-Unicode_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;输入 &lt;kbd&gt;cC&lt;/kbd&gt; 后加上算式，得到计算结果&lt;/td&gt; 
   &lt;td&gt;输入 &lt;kbd&gt;U&lt;/kbd&gt; + Unicode 编码，得到对应字符&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;&lt;strong&gt;3. UUID 生成&lt;/strong&gt;&lt;/th&gt; 
   &lt;th&gt;&lt;strong&gt;4. 数字货币转写&lt;/strong&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-uuid_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/%E6%89%A9%E5%B1%95-%E6%95%B0%E5%AD%97%E8%B4%A7%E5%B8%81%E5%A4%A7%E5%86%99_compressed.webp&quot; alt=&quot;&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;输入 &lt;kbd&gt;uuid&lt;/kbd&gt;，得到一个随机生成的 UUID&lt;/td&gt; 
   &lt;td&gt;输入 &lt;kbd&gt;R&lt;/kbd&gt; + 数字，自动转写为数字大写或者人民币大写&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;功能快捷键和行为定制，以及更多其他功能，请参考 lua 文件和方案文件中的注释。&lt;/p&gt; 
&lt;h2&gt;鸣谢&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/docs/Credits.md&quot;&gt;这些项目和脚本&lt;/a&gt; 为雾凇拼音提供的支持和参考。&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;http://www.jiaodui.org/bbs/&quot;&gt;校对标准论坛&lt;/a&gt; 的存在。&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Huandeep&quot;&gt;@Huandeep&lt;/a&gt; 整理的多个词库。&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mirtlecn&quot;&gt;@Mirtle&lt;/a&gt; 完善的多个功能。&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Lithium-7&quot;&gt;@Lithium-7&lt;/a&gt; 对词库的大量修订。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Thanks to JetBrains for the OSS development license.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://jb.gg/OpenSourceSupport&quot;&gt;&lt;img src=&quot;https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg?sanitize=true&quot; alt=&quot;JetBrains&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Thanks to all contributors.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/iDvel/rime-ice/graphs/contributors&quot;&gt;&lt;img src=&quot;https://contrib.rocks/image?repo=iDvel/rime-ice&quot; alt=&quot;Contributors Avatars&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;常见问题&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;🛠️ 怎么修改雾凇拼音的配置&lt;/summary&gt; 
 &lt;p&gt;可以根据注释，直接在文件上修改，这样修改也简单，适合初次尝试。但注意，这会在更新后被覆盖掉。&lt;/p&gt; 
 &lt;p&gt;熟悉后，推荐使用 &lt;a href=&quot;https://dvel.me/posts/rime-ice/#%E4%BB%A5-patch-%E7%9A%84%E6%96%B9%E5%BC%8F%E6%89%93%E8%A1%A5%E4%B8%81&quot;&gt;打补丁的方式&lt;/a&gt; 来覆盖原配置的选项，不修改仓库中已有的文件，这样可放心全量拉取更新，通过 plum 或 git pull 时不用担心由于更新文件导致自定义的配置被覆盖。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;⌨️ 双拼怎么添加自定义短语，怎么让拆字/英文的编码支持双拼&lt;/summary&gt; 
 &lt;p&gt;相对于全拼，双拼的一些配置有所不同：&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;双拼的自定义短语文件默认为 &lt;code&gt;custom_phrase_double.txt&lt;/code&gt;，需要手动创建。&lt;/li&gt; 
  &lt;li&gt;英文方案 &lt;code&gt;melt_eng.schema.yaml&lt;/code&gt; 中有一些不通用的派生规则，默认启用的是全拼的。&lt;/li&gt; 
  &lt;li&gt;部件拆字方案 &lt;code&gt;radical_pinyin.schema.yaml&lt;/code&gt; 的反查和辅码，有一些不通用的派生规则，默认启用的是全拼的。&lt;/li&gt; 
  &lt;li&gt;双拼是显示全拼编码还是双拼编码？比如小鹤双拼输入 &lt;code&gt;zz&lt;/code&gt; 时，是显示 &lt;code&gt;zz&lt;/code&gt; 还是 &lt;code&gt;zou&lt;/code&gt;，默认是转换为全拼编码。&lt;code&gt;translator&lt;/code&gt; 下的 &lt;code&gt;preedit_format&lt;/code&gt; 属性会影响输入框和 Shift+回车时的显示，删除这部分就不转换。&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;双拼可以直接用 plum 自动打补丁，也可以手写，下面以小鹤双拼方案 &lt;code&gt;double_pinyin_flypy.schema.yaml&lt;/code&gt; 为例。&lt;/p&gt; 
 &lt;p&gt;（补丁放到仓库里了 &lt;a href=&quot;https://github.com/iDvel/rime-ice/tree/main/others/%E5%8F%8C%E6%8B%BC%E8%A1%A5%E4%B8%81%E7%A4%BA%E4%BE%8B&quot;&gt;others/双拼补丁示例&lt;/a&gt;）&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;创建 &lt;code&gt;melt_eng.custom.yaml&lt;/code&gt; 修改英文派生规则：&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;patch:
  # 修改为小鹤双拼的拼写派生规则，因为不在同一个文件了，前面要加上文件名
  speller/algebra:
    __include: melt_eng.schema.yaml:/algebra_flypy
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;2&quot;&gt; 
  &lt;li&gt;创建 &lt;code&gt;radical_pinyin.custom.yaml&lt;/code&gt; 修改反查及辅码派生规则：&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;patch:
  # 修改为小鹤双拼的拼写派生规则，因为不在同一个文件了，前面要加上文件名
  speller/algebra:
    __include: radical_pinyin.schema.yaml:/algebra_flypy
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;3&quot;&gt; 
  &lt;li&gt;（按需选择）创建 &lt;code&gt;double_pinyin_flypy.custom.yaml&lt;/code&gt;：&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;patch:
  # （按需选择）清空 preedit_format 中的内容，输入时显示双拼编码
  translator/preedit_format: []
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🔀 能实现全拼双拼混输吗&lt;/summary&gt; 
 &lt;p&gt;参考：&lt;a href=&quot;https://dvel.me/posts/rime-full-pinyin-double-pinyin-mixed-input/&quot;&gt;https://dvel.me/posts/rime-full-pinyin-double-pinyin-mixed-input/&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🚫 xx 字打不出来 / xx 读音没有&lt;/summary&gt; 
 &lt;p&gt;可能为生僻字，请尝试开启大字表。若确实为常用字（如常见于人名、物品名、术语），请 PR 或在 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/666&quot;&gt;https://github.com/iDvel/rime-ice/issues/666&lt;/a&gt; 补充。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🔲 部分候选项变成豆腐块、方块、问号&lt;/summary&gt; 
 &lt;p&gt;系统缺少相关字体导致。请尝试下载或更换显示字体。&lt;/p&gt; 
 &lt;p&gt;关于部分生僻字，参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/841&quot;&gt;https://github.com/iDvel/rime-ice/issues/841&lt;/a&gt; 的推荐。&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hyperos.mi.com/font/zh/rare-word/&quot;&gt;MiSans + MiSans L3&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Fitzgerald-Porthmouth-Koenigsegg/Plangothic-Project&quot;&gt;遍黑体&lt;/a&gt;&lt;/li&gt; 
  &lt;li&gt;花园明朝&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Windows 10 平台部分 Emoji 用系统默认字体无法显示，请尝试下载 &lt;a href=&quot;https://fonts.google.com/noto/specimen/Noto+Color+Emoji&quot;&gt;Noto Color Emoji&lt;/a&gt; 或用 Windows 11 Emoji 字体替换。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;⚠️ 部署失败或者报错&lt;/summary&gt; 
 &lt;p&gt;如果缩进错误，或用了 Tab，可能部署时并不会报错，而是自动加载默认配置。&lt;/p&gt; 
 &lt;p&gt;如果发现方案选单里是朙月拼音，打的是繁体，那可能是配置有问题，Rime 自动加载了默认配置，检查一下修改过的地方。&lt;/p&gt; 
 &lt;p&gt;配置错误也可能导致 &lt;code&gt;default.yaml&lt;/code&gt; 文件被移入 &lt;code&gt;trash/&lt;/code&gt; 目录，你需要移动回来，改好后重新部署，然后可以直接删除 &lt;code&gt;trash/&lt;/code&gt; 目录。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🔄 中英文、大小写切换行为如何修改&lt;/summary&gt; 
 &lt;p&gt;Shift 是否切换中英，切换时的行为等等，参考 &lt;code&gt;default.yaml&lt;/code&gt; 中 &lt;code&gt;ascii_composer&lt;/code&gt; 下的详细注释。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;📝 怎么修改标点符号映射&lt;/summary&gt; 
 &lt;p&gt;标点符号相关配置在 &lt;code&gt;default.yaml&lt;/code&gt; 中定义，再在多个方案中引用。&lt;/p&gt; 
 &lt;p&gt;修改 &lt;code&gt;default.yaml&lt;/code&gt; 或在 &lt;code&gt;default.custom.yaml&lt;/code&gt; 中打补丁即可全局修改。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🎨 怎么设置皮肤横向竖向排列&lt;/summary&gt; 
 &lt;p&gt;皮肤配置不通用，要参考各前端自己的配置方式。&lt;/p&gt; 
 &lt;p&gt;小狼毫由 &lt;code&gt;style/horizontal&lt;/code&gt; 属性决定：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;patch:
  &quot;style/horizontal&quot;: true  # true 横向 | false 竖向
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;鼠须管的 &lt;code&gt;horizontal&lt;/code&gt; 属性已经弃用，在 &lt;code&gt;squirrel.yaml&lt;/code&gt; 皮肤的选项中使用以下两个属性：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;preset_color_schemes:
  皮肤名:
    candidate_list_layout: stacked  # stacked | linear  候选项排列方向
    text_orientation: horizontal    # horizontal | vertical  文字排列方向
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;⚠️ 注意具体皮肤的优先级比 &lt;code&gt;style&lt;/code&gt; 的高。&lt;/p&gt; 
 &lt;p&gt;鼠须管效果展示：&lt;/p&gt; 
 &lt;img width=&quot;668&quot; alt=&quot;图片&quot; src=&quot;https://user-images.githubusercontent.com/14658234/230854033-af8e97ee-1dca-43dd-88d7-eb1ade95b767.png&quot; /&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;📌 怎么自定义短语&lt;/summary&gt; 
 &lt;p&gt;自定义短语用 Tab 分割词汇、编码、权重。&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;custom_phrase.txt&lt;/code&gt; 中是我自己的习惯，仅供参考，这个每个人的习惯都不一样，可以换成自己的。&lt;/p&gt; 
 &lt;p&gt;可以新建一个文件，并在方案的 &lt;code&gt;custom_phrase/user_dict:&lt;/code&gt; 下指定使用哪个文件。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;💱 怎么设置台湾繁体&lt;/summary&gt; 
 &lt;p&gt;默认 OpenCC 的选项 &lt;code&gt;traditionalize/opencc_config: s2t.json&lt;/code&gt; 是香港繁体。&lt;/p&gt; 
 &lt;p&gt;台湾繁体有以下两种方式供参考，先修改为 &lt;code&gt;s2tw.json&lt;/code&gt;：&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/291&quot;&gt;https://github.com/iDvel/rime-ice/issues/291&lt;/a&gt;，修改 opencc&lt;/li&gt; 
  &lt;li&gt;参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/575&quot;&gt;https://github.com/iDvel/rime-ice/issues/575&lt;/a&gt;，补加一个 t2tw （因为不知道什么原因，&lt;code&gt;s2tw.json&lt;/code&gt; 选项并没有真正转换为台湾繁体，所以又补了一个 &lt;code&gt;t2tw.json&lt;/code&gt;） （librime 1.10 已修复，新版本不再需要折腾了。）&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;😀 可以支持颜文字吗？&lt;/summary&gt; 
 &lt;p&gt;没有加入颜文字，可参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/pull/920&quot;&gt;https://github.com/iDvel/rime-ice/pull/920&lt;/a&gt;。&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🐧 Linux 系统无候选 &amp;amp; 雾凇拼音候选后出现拼音注释等&lt;/summary&gt; 
 &lt;p&gt;输入 &lt;code&gt;rq&lt;/code&gt;（双拼是 &lt;code&gt;date&lt;/code&gt;），如若没有出现当前日期，则表示 Lua 没有成功加载，您就可能遇到上述问题。&lt;/p&gt; 
 &lt;p&gt;请确保你已经正确安装了 librime 包，并以插件或其他形式安装了其依赖包 librime-lua（部分发行版——特别是红帽系——需要手动安装）；如果仍存在问题，或者你无法判断是否达成此条件，请：&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;若使用 fcitx 框架，请改用其继承者 fcitx5；若使用 fcitx5 框架，请保证安装的是 &lt;strong&gt;fcitx5-rime&lt;/strong&gt; 而非 &lt;s&gt;fcitx-rime&lt;/s&gt;&lt;/li&gt; 
  &lt;li&gt;若使用 ibus 框架，出现意外，可以考虑使用 &lt;a href=&quot;https://github.com/hchunhui/ibus-rime.AppImage&quot;&gt;AppImage&lt;/a&gt;，以跟进 librime 更新&lt;/li&gt; 
  &lt;li&gt;若使用 fcitx5 框架，出现意外，请考虑使用 &lt;a href=&quot;https://flathub.org/apps/org.fcitx.Fcitx5&quot;&gt;Flatpak&lt;/a&gt;，参考 Fcitx5 官方 &lt;a href=&quot;https://fcitx-im.org/wiki/Install_Fcitx_5#Install_Fcitx_5_from_Flatpak&quot;&gt;wiki&lt;/a&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;AppImage 和 Flatpak 可以确保没有依赖问题。&lt;/p&gt; 
 &lt;p&gt;请参考：&lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/840&quot;&gt;https://github.com/iDvel/rime-ice/issues/840&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🐧 Linux Fcitx5 首次安装雾凇拼音后，无法输入&lt;/summary&gt; 
 &lt;p&gt;请尝试修改任意 yaml 文件，再重新部署 Rime，不要仅依赖重启输入法框架。&lt;/p&gt; 
 &lt;p&gt;请参考 &lt;a href=&quot;https://github.com/iDvel/rime-ice/issues/1439&quot;&gt;https://github.com/iDvel/rime-ice/issues/1439&lt;/a&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🌙 怎么添加或修改 Lua？&lt;/summary&gt; 
 &lt;p&gt;做好自己的 Lua 放在 &lt;code&gt;lua/&lt;/code&gt; 文件夹内，使用&lt;a href=&quot;https://github.com/hchunhui/librime-lua/wiki/Scripting#%E6%96%B0%E7%89%88-librime-lua&quot;&gt;新版 librime-lua 引入模块的方式&lt;/a&gt;，不用修改 &lt;code&gt;rime.lua&lt;/code&gt;：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;- lua_translator@*my_translator  # 多了一个星号
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;比如想将自己修改后的 &lt;code&gt;new_date_translator.lua&lt;/code&gt; 替换掉 &lt;code&gt;date_translator&lt;/code&gt;：&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;# 方式一、复制完整的 translators 的内容过来
patch:
  engine/translators:
    # 。。。
    - lua_translator@*new_date_translator  # 将此处替换为自己的 Lua
    # 。。。

# 方式二、仅替换修改项，但依赖于原始排序（从 0 开始数），如果排序变动就替换错了
patch:
  engine/translators/@2: lua_translator@*new_date_translator
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;📋 我看到了日志里面的 WARNING&lt;/summary&gt; 
 &lt;p&gt;WARNING 日志仅为警告，一般可以忽视。ERROR 文件若有日志，则需要留神。&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;accessing blocking node with unresolved dependencies:
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;这是因为 melt_eng 和 radical_pinyin 引用了自身的节点，RIME build 时认为这可能会导致引用了一个未编译完成的文件，因而抛出警告。无视即可。&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;duplicate definition:
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;因为某些词典有重复的条目，build 时 RIME 认为这可能会造成编码和权重的覆写，因而抛出警告，无视即可。&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2&gt;许可证&lt;/h2&gt; 
&lt;p&gt;GPL-3.0 (only) License.&lt;/p&gt; 
&lt;h2&gt;赞助&lt;/h2&gt; 
&lt;p&gt;如果觉得项目不错，可以请 Dvel 吃个煎饼馃子。&lt;/p&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/others/asserts/sponsor.webp&quot; alt=&quot;请 Dvel 吃个煎饼馃子&quot; width=&quot;300&quot; /&gt; 
&lt;hr class=&quot;footnotes-sep&quot; /&gt; 
&lt;section class=&quot;footnotes&quot;&gt; 
 &lt;ol class=&quot;footnotes-list&quot;&gt; 
  &lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;由 @Mintimate 友情构建 &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;这将清空你之前的用户偏好和词库，如需要，请先备份 &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;九键方案仅适用于 iOS 平台的特定软件 &lt;a href=&quot;https://raw.githubusercontent.com/iDvel/rime-ice/main/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/section&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/b46766b65e74fb22e3e5b9811a75723d33abaf006ea01a9c7c2f846e69a68415/iDvel/rime-ice" medium="image" />
      
    </item>
    
    <item>
      <title>apache/apisix</title>
      <link>https://github.com/apache/apisix</link>
      <description>&lt;p&gt;The Cloud-Native API Gateway and AI Gateway&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Apache APISIX API Gateway ｜ AI Gateway&lt;/h1&gt; 
&lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/logos/apisix-white-bg.jpg&quot; alt=&quot;APISIX logo&quot; height=&quot;150px&quot; align=&quot;right&quot; /&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/apache/apisix/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/apache/apisix/actions/workflows/build.yml/badge.svg?branch=master&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/apache/apisix/raw/master/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-blue.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/apache/apisix/graphs/commit-activity&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/apache/apisix&quot; alt=&quot;Commit activity&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://isitmaintained.com/project/apache/apisix&quot; title=&quot;Average time to resolve an issue&quot;&gt;&lt;img src=&quot;http://isitmaintained.com/badge/resolution/apache/apisix.svg?sanitize=true&quot; alt=&quot;Average time to resolve an issue&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://isitmaintained.com/project/apache/apisix&quot; title=&quot;Percentage of issues still open&quot;&gt;&lt;img src=&quot;http://isitmaintained.com/badge/open/apache/apisix.svg?sanitize=true&quot; alt=&quot;Percentage of issues still open&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://apisix.apache.org/slack&quot;&gt;&lt;img src=&quot;https://badgen.net/badge/Slack/Join%20Apache%20APISIX?icon=slack&quot; alt=&quot;Slack&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Apache APISIX&lt;/strong&gt; is a dynamic, real-time, high-performance API Gateway.&lt;/p&gt; 
&lt;p&gt;APISIX API Gateway provides rich traffic management features such as load balancing, dynamic upstream, canary release, circuit breaking, authentication, observability, and more.&lt;/p&gt; 
&lt;p&gt;APISIX can serve as an &lt;strong&gt;&lt;a href=&quot;https://apisix.apache.org/ai-gateway/&quot;&gt;AI Gateway&lt;/a&gt;&lt;/strong&gt; through its flexible plugin system, providing AI proxying, load balancing for LLMs, retries and fallbacks, token-based rate limiting, and robust security to ensure the efficiency and reliability of AI agents. APISIX also provides the &lt;a href=&quot;https://apisix.apache.org/blog/2025/04/21/host-mcp-server-with-api-gateway/&quot;&gt;&lt;code&gt;mcp-bridge&lt;/code&gt;&lt;/a&gt; plugin to seamlessly convert stdio-based MCP servers to scalable HTTP SSE services.&lt;/p&gt; 
&lt;p&gt;You can use APISIX API Gateway to handle traditional north-south traffic, as well as east-west traffic between services. It can also be used as a &lt;a href=&quot;https://github.com/apache/apisix-ingress-controller&quot;&gt;k8s ingress controller&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The technical architecture of Apache APISIX:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/assets/images/apisix.png&quot; alt=&quot;Technical architecture of Apache APISIX&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Community&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.g2.com/products/apache-apisix/reviews&quot;&gt;Kindly Write a Review&lt;/a&gt; for APISIX in G2.&lt;/li&gt; 
 &lt;li&gt;Mailing List: Mail to &lt;a href=&quot;mailto:dev-subscribe@apisix.apache.org&quot;&gt;dev-subscribe@apisix.apache.org&lt;/a&gt;, follow the reply to subscribe to the mailing list.&lt;/li&gt; 
 &lt;li&gt;Slack Workspace - &lt;a href=&quot;https://apisix.apache.org/slack&quot;&gt;invitation link&lt;/a&gt; (Please open an &lt;a href=&quot;https://apisix.apache.org/docs/general/submit-issue&quot;&gt;issue&lt;/a&gt; if this link is expired), and then join the #apisix channel (Channels -&amp;gt; Browse channels -&amp;gt; search for &quot;apisix&quot;).&lt;/li&gt; 
 &lt;li&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/ApacheAPISIX?style=social&quot; alt=&quot;Twitter Follow&quot; /&gt; - follow and interact with us using hashtag &lt;code&gt;#ApacheAPISIX&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/docs/&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix/discussions&quot;&gt;Discussions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/blog&quot;&gt;Blog&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;p&gt;You can use APISIX API Gateway as a traffic entrance to process all business data, including dynamic routing, dynamic upstream, dynamic certificates, A/B testing, canary release, blue-green deployment, limit rate, defense against malicious attacks, metrics, monitoring alarms, service observability, service governance, etc.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;All platforms&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Cloud-Native: Platform agnostic, No vendor lock-in, APISIX API Gateway can run from bare-metal to Kubernetes.&lt;/li&gt; 
   &lt;li&gt;Supports ARM64: Don&#39;t worry about the lock-in of the infra technology.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Multi protocols&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/stream-proxy.md&quot;&gt;TCP/UDP Proxy&lt;/a&gt;: Dynamic TCP/UDP proxy.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/dubbo-proxy.md&quot;&gt;Dubbo Proxy&lt;/a&gt;: Dynamic HTTP to Dubbo proxy.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/mqtt-proxy.md&quot;&gt;Dynamic MQTT Proxy&lt;/a&gt;: Supports to load balance MQTT by &lt;code&gt;client_id&lt;/code&gt;, both support MQTT &lt;a href=&quot;http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html&quot;&gt;3.1.*&lt;/a&gt;, &lt;a href=&quot;https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html&quot;&gt;5.0&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/grpc-proxy.md&quot;&gt;gRPC proxy&lt;/a&gt;: Proxying gRPC traffic.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/grpc-web.md&quot;&gt;gRPC Web Proxy&lt;/a&gt;: Proxying gRPC Web traffic to gRPC Service.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/grpc-transcode.md&quot;&gt;gRPC transcoding&lt;/a&gt;: Supports protocol transcoding so that clients can access your gRPC API by using HTTP/JSON.&lt;/li&gt; 
   &lt;li&gt;Proxy Websocket&lt;/li&gt; 
   &lt;li&gt;Proxy Protocol&lt;/li&gt; 
   &lt;li&gt;HTTP(S) Forward Proxy&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/certificate.md&quot;&gt;SSL&lt;/a&gt;: Dynamically load an SSL certificate&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/http3.md&quot;&gt;HTTP/3 with QUIC&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Full Dynamic&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/plugin.md&quot;&gt;Hot Updates And Hot Plugins&lt;/a&gt;: Continuously updates its configurations and plugins without restarts!&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/proxy-rewrite.md&quot;&gt;Proxy Rewrite&lt;/a&gt;: Support rewrite the &lt;code&gt;host&lt;/code&gt;, &lt;code&gt;uri&lt;/code&gt;, &lt;code&gt;schema&lt;/code&gt;, &lt;code&gt;method&lt;/code&gt;, &lt;code&gt;headers&lt;/code&gt; of the request before send to upstream.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/response-rewrite.md&quot;&gt;Response Rewrite&lt;/a&gt;: Set customized response status code, body and header to the client.&lt;/li&gt; 
   &lt;li&gt;Dynamic Load Balancing: Round-robin load balancing with weight.&lt;/li&gt; 
   &lt;li&gt;Hash-based Load Balancing: Load balance with consistent hashing sessions.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/tutorials/health-check.md&quot;&gt;Health Checks&lt;/a&gt;: Enable health check on the upstream node and will automatically filter unhealthy nodes during load balancing to ensure system stability.&lt;/li&gt; 
   &lt;li&gt;Circuit-Breaker: Intelligent tracking of unhealthy upstream services.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/proxy-mirror.md&quot;&gt;Proxy Mirror&lt;/a&gt;: Provides the ability to mirror client requests.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/traffic-split.md&quot;&gt;Traffic Split&lt;/a&gt;: Allows users to incrementally direct percentages of traffic between various upstreams.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Fine-grained routing&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-use-libradixtree-in-apisix&quot;&gt;Supports full path matching and prefix matching&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-filter-route-by-nginx-builtin-variable&quot;&gt;Support all Nginx built-in variables as conditions for routing&lt;/a&gt;, so you can use &lt;code&gt;cookie&lt;/code&gt;, &lt;code&gt;args&lt;/code&gt;, etc. as routing conditions to implement canary release, A/B testing, etc.&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://github.com/iresty/lua-resty-radixtree#operator-list&quot;&gt;various operators as judgment conditions for routing&lt;/a&gt;, for example &lt;code&gt;{&quot;arg_age&quot;, &quot;&amp;gt;&quot;, 24}&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://github.com/iresty/lua-resty-radixtree/raw/master/t/filter-fun.t#L10&quot;&gt;custom route matching function&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;IPv6: Use IPv6 to match the route.&lt;/li&gt; 
   &lt;li&gt;Support &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md#route&quot;&gt;TTL&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#3-match-priority&quot;&gt;Support priority&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/batch-requests.md&quot;&gt;Support Batch Http Requests&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/router-radixtree.md#how-to-filter-route-by-graphql-attributes&quot;&gt;Support filtering route by GraphQL attributes&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Security&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Rich authentication &amp;amp; authorization support: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/key-auth.md&quot;&gt;key-auth&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/jwt-auth.md&quot;&gt;JWT&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/basic-auth.md&quot;&gt;basic-auth&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/wolf-rbac.md&quot;&gt;wolf-rbac&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-casbin.md&quot;&gt;casbin&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-keycloak.md&quot;&gt;keycloak&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/authz-casdoor.md&quot;&gt;casdoor&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/ip-restriction.md&quot;&gt;IP Whitelist/Blacklist&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/referer-restriction.md&quot;&gt;Referer Whitelist/Blacklist&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/openid-connect.md&quot;&gt;IdP&lt;/a&gt;: Support external Identity platforms, such as Auth0, okta, etc..&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-req.md&quot;&gt;Limit-req&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-count.md&quot;&gt;Limit-count&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/limit-conn.md&quot;&gt;Limit-concurrency&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Anti-ReDoS(Regular expression Denial of Service): Built-in policies to Anti ReDoS without configuration.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/cors.md&quot;&gt;CORS&lt;/a&gt; Enable CORS(Cross-origin resource sharing) for your API.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/uri-blocker.md&quot;&gt;URI Blocker&lt;/a&gt;: Block client request by URI.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/request-validation.md&quot;&gt;Request Validator&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/csrf.md&quot;&gt;CSRF&lt;/a&gt; Based on the &lt;a href=&quot;https://en.wikipedia.org/wiki/Cross-site_request_forgery#Double_Submit_Cookie&quot;&gt;&lt;code&gt;Double Submit Cookie&lt;/code&gt;&lt;/a&gt; way, protect your API from CSRF attacks.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;OPS friendly&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Zipkin tracing: &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/zipkin.md&quot;&gt;Zipkin&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Open source APM: support &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/skywalking.md&quot;&gt;Apache SkyWalking&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Works with external service discovery: In addition to the built-in etcd, it also supports &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/consul.md&quot;&gt;Consul&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/consul_kv.md&quot;&gt;Consul_kv&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/nacos.md&quot;&gt;Nacos&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/discovery/eureka.md&quot;&gt;Eureka&lt;/a&gt; and &lt;a href=&quot;https://github.com/api7/apisix-seed/raw/main/docs/en/latest/zookeeper.md&quot;&gt;Zookeeper (CP)&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;Monitoring And Metrics: &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/prometheus.md&quot;&gt;Prometheus&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Clustering: APISIX nodes are stateless, creates clustering of the configuration center, please refer to &lt;a href=&quot;https://etcd.io/docs/v3.5/op-guide/clustering/&quot;&gt;etcd Clustering Guide&lt;/a&gt;.&lt;/li&gt; 
   &lt;li&gt;High availability: Support to configure multiple etcd addresses in the same cluster.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix-dashboard&quot;&gt;Dashboard&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Version Control: Supports rollbacks of operations.&lt;/li&gt; 
   &lt;li&gt;CLI: start\stop\reload APISIX through the command line.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/deployment-modes.md#standalone&quot;&gt;Standalone&lt;/a&gt;: Supports to load route rules from local YAML file, it is more friendly such as under the kubernetes(k8s).&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/global-rule.md&quot;&gt;Global Rule&lt;/a&gt;: Allows to run any plugin for all request, eg: limit rate, IP filter etc.&lt;/li&gt; 
   &lt;li&gt;High performance: The single-core QPS reaches 18k with an average delay of fewer than 0.2 milliseconds.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/fault-injection.md&quot;&gt;Fault Injection&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md&quot;&gt;REST Admin API&lt;/a&gt;: Using the REST Admin API to control Apache APISIX, which only allows 127.0.0.1 access by default, you can modify the &lt;code&gt;allow_admin&lt;/code&gt; field in &lt;code&gt;conf/config.yaml&lt;/code&gt; to specify a list of IPs that are allowed to call the Admin API. Also, note that the Admin API uses key auth to verify the identity of the caller.&lt;/li&gt; 
   &lt;li&gt;External Loggers: Export access logs to external log management tools. (&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/http-logger.md&quot;&gt;HTTP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/tcp-logger.md&quot;&gt;TCP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/kafka-logger.md&quot;&gt;Kafka Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/udp-logger.md&quot;&gt;UDP Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/rocketmq-logger.md&quot;&gt;RocketMQ Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/skywalking-logger.md&quot;&gt;SkyWalking Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/sls-logger.md&quot;&gt;Alibaba Cloud Logging(SLS)&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/google-cloud-logging.md&quot;&gt;Google Cloud Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/splunk-hec-logging.md&quot;&gt;Splunk HEC Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/file-logger.md&quot;&gt;File Logger&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/loggly.md&quot;&gt;SolarWinds Loggly Logging&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/tencent-cloud-cls.md&quot;&gt;TencentCloud CLS&lt;/a&gt;).&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/clickhouse-logger.md&quot;&gt;ClickHouse&lt;/a&gt;: push logs to ClickHouse.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/elasticsearch-logger.md&quot;&gt;Elasticsearch&lt;/a&gt;: push logs to Elasticsearch.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/datadog.md&quot;&gt;Datadog&lt;/a&gt;: push custom metrics to the DogStatsD server, comes bundled with &lt;a href=&quot;https://docs.datadoghq.com/agent/&quot;&gt;Datadog agent&lt;/a&gt;, over the UDP protocol. DogStatsD basically is an implementation of StatsD protocol which collects the custom metrics for Apache APISIX agent, aggregates it into a single data point and sends it to the configured Datadog server.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix-helm-chart&quot;&gt;Helm charts&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://www.vaultproject.io/&quot;&gt;HashiCorp Vault&lt;/a&gt;: Support secret management solution for accessing secrets from Vault secure storage backed in a low trust environment. Currently, RS256 keys (public-private key pairs) or secret keys can be linked from vault in jwt-auth authentication plugin using &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/secret.md&quot;&gt;APISIX Secret&lt;/a&gt; resource.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Highly scalable&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugin-develop.md&quot;&gt;Custom plugins&lt;/a&gt;: Allows hooking of common phases, such as &lt;code&gt;rewrite&lt;/code&gt;, &lt;code&gt;access&lt;/code&gt;, &lt;code&gt;header filter&lt;/code&gt;, &lt;code&gt;body filter&lt;/code&gt; and &lt;code&gt;log&lt;/code&gt;, also allows to hook the &lt;code&gt;balancer&lt;/code&gt; stage.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/external-plugin.md&quot;&gt;Plugin can be written in Java/Go/Python&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/wasm.md&quot;&gt;Plugin can be written with Proxy Wasm SDK&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;Custom load balancing algorithms: You can use custom load balancing algorithms during the &lt;code&gt;balancer&lt;/code&gt; phase.&lt;/li&gt; 
   &lt;li&gt;Custom routing: Support users to implement routing algorithms themselves.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Multi-Language support&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;Apache APISIX is a multi-language gateway for plugin development and provides support via &lt;code&gt;RPC&lt;/code&gt; and &lt;code&gt;Wasm&lt;/code&gt;. &lt;img src=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/assets/images/external-plugin.png&quot; alt=&quot;Multi Language Support into Apache APISIX&quot; /&gt;&lt;/li&gt; 
   &lt;li&gt;The RPC way, is the current way. Developers can choose the language according to their needs and after starting an independent process with the RPC, it exchanges data with APISIX through local RPC communication. Till this moment, APISIX has support for &lt;a href=&quot;https://github.com/apache/apisix-java-plugin-runner&quot;&gt;Java&lt;/a&gt;, &lt;a href=&quot;https://github.com/apache/apisix-go-plugin-runner&quot;&gt;Golang&lt;/a&gt;, &lt;a href=&quot;https://github.com/apache/apisix-python-plugin-runner&quot;&gt;Python&lt;/a&gt; and Node.js.&lt;/li&gt; 
   &lt;li&gt;The Wasm or WebAssembly, is an experimental way. APISIX can load and run Wasm bytecode via APISIX &lt;a href=&quot;https://github.com/apache/apisix/raw/master/docs/en/latest/wasm.md&quot;&gt;wasm plugin&lt;/a&gt; written with the &lt;a href=&quot;https://github.com/proxy-wasm/spec#sdks&quot;&gt;Proxy Wasm SDK&lt;/a&gt;. Developers only need to write the code according to the SDK and then compile it into a Wasm bytecode that runs on Wasm VM with APISIX.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Serverless&lt;/strong&gt;&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/serverless.md&quot;&gt;Lua functions&lt;/a&gt;: Invoke functions in each phase in APISIX.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/aws-lambda.md&quot;&gt;AWS Lambda&lt;/a&gt;: Integration with AWS Lambda function as a dynamic upstream to proxy all requests for a particular URI to the AWS API gateway endpoint. Supports authorization via api key and AWS IAM access secret.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/azure-functions.md&quot;&gt;Azure Functions&lt;/a&gt;: Seamless integration with Azure Serverless Function as a dynamic upstream to proxy all requests for a particular URI to the Microsoft Azure cloud.&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins/openwhisk.md&quot;&gt;Apache OpenWhisk&lt;/a&gt;: Seamless integration with Apache OpenWhisk as a dynamic upstream to proxy all requests for a particular URI to your own OpenWhisk cluster.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Get Started&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Installation&lt;/p&gt; &lt;p&gt;Please refer to &lt;a href=&quot;https://apisix.apache.org/docs/apisix/installation-guide/&quot;&gt;install documentation&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Getting started&lt;/p&gt; &lt;p&gt;The getting started guide is a great way to learn the basics of APISIX. Just follow the steps in &lt;a href=&quot;https://apisix.apache.org/docs/apisix/getting-started/&quot;&gt;Getting Started&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Further, you can follow the documentation to try more &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugins&quot;&gt;plugins&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Admin API&lt;/p&gt; &lt;p&gt;Apache APISIX provides &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/admin-api.md&quot;&gt;REST Admin API&lt;/a&gt; to dynamically control the Apache APISIX cluster.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Plugin development&lt;/p&gt; &lt;p&gt;You can refer to &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/plugin-develop.md&quot;&gt;plugin development guide&lt;/a&gt;, and sample plugin &lt;code&gt;example-plugin&lt;/code&gt;&#39;s code implementation. Reading &lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/docs/en/latest/terminology/plugin.md&quot;&gt;plugin concept&lt;/a&gt; would help you learn more about the plugin.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For more documents, please refer to &lt;a href=&quot;https://apisix.apache.org/docs/apisix/getting-started/&quot;&gt;Apache APISIX Documentation site&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Benchmark&lt;/h2&gt; 
&lt;p&gt;Using AWS&#39;s eight-core server, APISIX&#39;s QPS reaches 140,000 with a latency of only 0.2 ms.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/apache/apisix/master/benchmark/run.sh&quot;&gt;Benchmark script&lt;/a&gt; has been open sourced, welcome to try and contribute.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://apisix.apache.org/blog/2022/06/07/installation-performance-test-of-apigateway-apisix-on-aws-graviton3&quot;&gt;APISIX also works perfectly in AWS graviton3 C7g.&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;User Stories&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.efactory-project.eu/post/api-security-gateway-using-apisix-in-the-efactory-platform&quot;&gt;European eFactory Platform: API Security Gateway – Using APISIX in the eFactory Platform&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/COPRS/infrastructure/wiki/Networking-trade-off&quot;&gt;Copernicus Reference System Software&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apisix.apache.org/blog/tags/case-studies/&quot;&gt;More Stories&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Who Uses APISIX API Gateway?&lt;/h2&gt; 
&lt;p&gt;A wide variety of companies and organizations use APISIX API Gateway for research, production and commercial product, below are some of them:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Airwallex&lt;/li&gt; 
 &lt;li&gt;Bilibili&lt;/li&gt; 
 &lt;li&gt;CVTE&lt;/li&gt; 
 &lt;li&gt;European eFactory Platform&lt;/li&gt; 
 &lt;li&gt;European Copernicus Reference System&lt;/li&gt; 
 &lt;li&gt;Geely&lt;/li&gt; 
 &lt;li&gt;HONOR&lt;/li&gt; 
 &lt;li&gt;Horizon Robotics&lt;/li&gt; 
 &lt;li&gt;iQIYI&lt;/li&gt; 
 &lt;li&gt;Lenovo&lt;/li&gt; 
 &lt;li&gt;NASA JPL&lt;/li&gt; 
 &lt;li&gt;Nayuki&lt;/li&gt; 
 &lt;li&gt;OPPO&lt;/li&gt; 
 &lt;li&gt;QingCloud&lt;/li&gt; 
 &lt;li&gt;Swisscom&lt;/li&gt; 
 &lt;li&gt;Tencent Game&lt;/li&gt; 
 &lt;li&gt;Travelsky&lt;/li&gt; 
 &lt;li&gt;vivo&lt;/li&gt; 
 &lt;li&gt;Sina Weibo&lt;/li&gt; 
 &lt;li&gt;WeCity&lt;/li&gt; 
 &lt;li&gt;WPS&lt;/li&gt; 
 &lt;li&gt;XPENG&lt;/li&gt; 
 &lt;li&gt;Zoom&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Logos&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/apache/apisix/tree/master/logos/apache-apisix.png&quot;&gt;Apache APISIX logo(PNG)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://apache.org/logos/#apisix&quot;&gt;Apache APISIX logo source&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Acknowledgments&lt;/h2&gt; 
&lt;p&gt;Inspired by Kong and Orange.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/apache/apisix/tree/master/LICENSE&quot;&gt;Apache 2.0 License&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bfd1cc4ab38df0e1ee76617ee48e9ccd55656fefd3e71170a147b92296d7f66a/apache/apisix" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-lua/kickstart.nvim</title>
      <link>https://github.com/nvim-lua/kickstart.nvim</link>
      <description>&lt;p&gt;A launch point for your personal nvim configuration&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;kickstart.nvim&lt;/h1&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;p&gt;A starting point for Neovim that is:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Small&lt;/li&gt; 
 &lt;li&gt;Single-file&lt;/li&gt; 
 &lt;li&gt;Completely Documented&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;NOT&lt;/strong&gt; a Neovim distribution, but instead a starting point for your configuration.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;h3&gt;Install Neovim&lt;/h3&gt; 
&lt;p&gt;Kickstart.nvim targets &lt;em&gt;only&lt;/em&gt; the latest &lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/stable&quot;&gt;&#39;stable&#39;&lt;/a&gt; and latest &lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/nightly&quot;&gt;&#39;nightly&#39;&lt;/a&gt; of Neovim. If you are experiencing issues, please make sure you have at least the latest stable version. Most likely, you want to install neovim via a &lt;a href=&quot;https://github.com/neovim/neovim/raw/master/INSTALL.md#install-from-package&quot;&gt;package manager&lt;/a&gt;. To check your neovim version, run &lt;code&gt;nvim --version&lt;/code&gt; and make sure it is not below the latest &lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/stable&quot;&gt;&#39;stable&#39;&lt;/a&gt; version. If your chosen install method only gives you an outdated version of neovim, find alternative &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/kickstart.nvim/master/#alternative-neovim-installation-methods&quot;&gt;installation methods below&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Install External Dependencies&lt;/h3&gt; 
&lt;p&gt;External Requirements:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Basic utils: &lt;code&gt;git&lt;/code&gt;, &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;unzip&lt;/code&gt;, C Compiler (&lt;code&gt;gcc&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep#installation&quot;&gt;ripgrep&lt;/a&gt;, &lt;a href=&quot;https://github.com/sharkdp/fd#installation&quot;&gt;fd-find&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter/tree-sitter/raw/master/crates/cli/README.md#installation&quot;&gt;tree-sitter CLI&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Clipboard tool (xclip/xsel/win32yank or other depending on the platform)&lt;/li&gt; 
 &lt;li&gt;A &lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Font&lt;/a&gt;: optional, provides various icons 
  &lt;ul&gt; 
   &lt;li&gt;if you have it set &lt;code&gt;vim.g.have_nerd_font&lt;/code&gt; in &lt;code&gt;init.lua&lt;/code&gt; to true&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Emoji fonts (Ubuntu only, and only if you want emoji!) &lt;code&gt;sudo apt install fonts-noto-color-emoji&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Language Setup: 
  &lt;ul&gt; 
   &lt;li&gt;If you want to write Typescript, you need &lt;code&gt;npm&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;If you want to write Golang, you will need &lt;code&gt;go&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;etc.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/kickstart.nvim/master/#Install-Recipes&quot;&gt;Install Recipes&lt;/a&gt; for additional Windows and Linux specific notes and quick install snippets&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Install Kickstart&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/kickstart.nvim/master/#FAQ&quot;&gt;Backup&lt;/a&gt; your previous configuration (if any exists)&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;Neovim&#39;s configurations are located under the following paths, depending on your OS:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;OS&lt;/th&gt; 
   &lt;th style=&quot;text-align:left&quot;&gt;PATH&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Linux, MacOS&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;$XDG_CONFIG_HOME/nvim&lt;/code&gt;, &lt;code&gt;~/.config/nvim&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Windows (cmd)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;%localappdata%\nvim\&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;Windows (powershell)&lt;/td&gt; 
   &lt;td style=&quot;text-align:left&quot;&gt;&lt;code&gt;$env:LOCALAPPDATA\nvim\&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h4&gt;Recommended Step&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.github.com/en/get-started/quickstart/fork-a-repo&quot;&gt;Fork&lt;/a&gt; this repo so that you have your own copy that you can modify, then install by cloning the fork to your machine using one of the commands below, depending on your OS.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Your fork&#39;s URL will be something like this: &lt;code&gt;https://github.com/&amp;lt;your_github_username&amp;gt;/kickstart.nvim.git&lt;/code&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;You likely want to remove &lt;code&gt;nvim-pack-lock.json&lt;/code&gt; from your fork&#39;s &lt;code&gt;.gitignore&lt;/code&gt; file too - it&#39;s ignored in the kickstart repo to make maintenance easier, but it&#39;s recommended to track it in version control (see &lt;code&gt;:help vim.pack-lockfile&lt;/code&gt;).&lt;/p&gt; 
&lt;h4&gt;Clone kickstart.nvim&lt;/h4&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;If following the recommended step above (i.e., forking the repo), replace &lt;code&gt;nvim-lua&lt;/code&gt; with &lt;code&gt;&amp;lt;your_github_username&amp;gt;&lt;/code&gt; in the commands below&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt;
 &lt;summary&gt; Linux and Mac &lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &quot;${XDG_CONFIG_HOME:-$HOME/.config}&quot;/nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt; Windows &lt;/summary&gt; 
 &lt;p&gt;If you&#39;re using &lt;code&gt;cmd.exe&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &quot;%localappdata%\nvim&quot;
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you&#39;re using &lt;code&gt;powershell.exe&lt;/code&gt;&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;git clone https://github.com/nvim-lua/kickstart.nvim.git &quot;${env:LOCALAPPDATA}\nvim&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Post Installation&lt;/h3&gt; 
&lt;p&gt;Start Neovim&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;That&#39;s it! &lt;code&gt;vim.pack&lt;/code&gt; will install all the plugins from your config. Use &lt;code&gt;:lua vim.pack.update(nil, { offline = true })&lt;/code&gt; to inspect plugin state and &lt;code&gt;:lua vim.pack.update()&lt;/code&gt; to fetch updates (&lt;code&gt;:write&lt;/code&gt; applies updates, &lt;code&gt;:quit&lt;/code&gt; cancels them).&lt;/p&gt; 
&lt;h4&gt;Read The Friendly Documentation&lt;/h4&gt; 
&lt;p&gt;Read through the &lt;code&gt;init.lua&lt;/code&gt; file in your configuration folder for more information about extending and exploring Neovim. That also includes examples of adding popularly requested plugins.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;For more information about a particular plugin check its repository&#39;s documentation.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Getting Started&lt;/h3&gt; 
&lt;p&gt;&lt;a href=&quot;https://youtu.be/m8C0Cq9Uv9o&quot;&gt;The Only Video You Need to Get Started with Neovim&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;FAQ&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;What should I do if I already have a pre-existing Neovim configuration? 
  &lt;ul&gt; 
   &lt;li&gt;You should back it up and then delete all associated files.&lt;/li&gt; 
   &lt;li&gt;This includes your existing init.lua and the Neovim files in &lt;code&gt;~/.local&lt;/code&gt; which can be deleted with &lt;code&gt;rm -rf ~/.local/share/nvim/&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Can I keep my existing configuration in parallel to kickstart? 
  &lt;ul&gt; 
   &lt;li&gt;Yes! You can use &lt;a href=&quot;https://neovim.io/doc/user/starting.html#%24NVIM_APPNAME&quot;&gt;NVIM_APPNAME&lt;/a&gt;&lt;code&gt;=nvim-NAME&lt;/code&gt; to maintain multiple configurations. For example, you can install the kickstart configuration in &lt;code&gt;~/.config/nvim-kickstart&lt;/code&gt; and create an alias:&lt;pre&gt;&lt;code&gt;alias nvim-kickstart=&#39;NVIM_APPNAME=&quot;nvim-kickstart&quot; nvim&#39;
&lt;/code&gt;&lt;/pre&gt; When you run Neovim using &lt;code&gt;nvim-kickstart&lt;/code&gt; alias it will use the alternative config directory and the matching local directory &lt;code&gt;~/.local/share/nvim-kickstart&lt;/code&gt;. You can apply this approach to any Neovim distribution that you would like to try out.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;What if I want to &quot;uninstall&quot; this configuration: 
  &lt;ul&gt; 
   &lt;li&gt;Remove your config directory and local data directory (for example, &lt;code&gt;~/.config/nvim&lt;/code&gt; and &lt;code&gt;~/.local/share/nvim&lt;/code&gt;).&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Why is the kickstart &lt;code&gt;init.lua&lt;/code&gt; a single file? Wouldn&#39;t it make sense to split it into multiple files? 
  &lt;ul&gt; 
   &lt;li&gt;The main purpose of kickstart is to serve as a teaching tool and a reference configuration that someone can easily use to &lt;code&gt;git clone&lt;/code&gt; as a basis for their own. As you progress in learning Neovim and Lua, you might consider splitting &lt;code&gt;init.lua&lt;/code&gt; into smaller parts. A fork of kickstart that does this while maintaining the same functionality is available here: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://github.com/dam9000/kickstart-modular.nvim&quot;&gt;kickstart-modular.nvim&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;Discussions on this topic can be found here: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim/issues/218&quot;&gt;Restructure the configuration&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim/pull/473&quot;&gt;Reorganize init.lua into a multi-file setup&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Install Recipes&lt;/h3&gt; 
&lt;p&gt;Below you can find OS specific install instructions for Neovim and dependencies.&lt;/p&gt; 
&lt;p&gt;After installing all the dependencies continue with the &lt;a href=&quot;https://raw.githubusercontent.com/nvim-lua/kickstart.nvim/master/#install-kickstart&quot;&gt;Install Kickstart&lt;/a&gt; step.&lt;/p&gt; 
&lt;h4&gt;Windows Installation&lt;/h4&gt; 
&lt;details&gt;
 &lt;summary&gt;Windows with Microsoft C++ Build Tools and CMake&lt;/summary&gt; Kickstart&#39;s default config is make-only for `telescope-fzf-native.nvim`. If `make` is unavailable, the plugin is skipped. 
 &lt;p&gt;Recommended: install &lt;code&gt;make&lt;/code&gt; (see the chocolatey section below).&lt;/p&gt; 
 &lt;p&gt;If you want a CMake-only setup, customize &lt;code&gt;init.lua&lt;/code&gt; in two places:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Include &lt;code&gt;telescope-fzf-native.nvim&lt;/code&gt; when &lt;code&gt;cmake&lt;/code&gt; is available:&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;if vim.fn.executable &#39;make&#39; == 1 or vim.fn.executable &#39;cmake&#39; == 1 then
  table.insert(plugins, gh &#39;nvim-telescope/telescope-fzf-native.nvim&#39;)
end
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;2&quot;&gt; 
  &lt;li&gt;In the &lt;code&gt;PackChanged&lt;/code&gt; hook, use CMake when &lt;code&gt;make&lt;/code&gt; is unavailable:&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;if name == &#39;telescope-fzf-native.nvim&#39; then
  if vim.fn.executable &#39;make&#39; == 1 then
    run_build(name, { &#39;make&#39; }, ev.data.path)
  elseif vim.fn.executable &#39;cmake&#39; == 1 then
    run_build(name, { &#39;cmake&#39;, &#39;-S.&#39;, &#39;-Bbuild&#39;, &#39;-DCMAKE_BUILD_TYPE=Release&#39; }, ev.data.path)
    run_build(name, { &#39;cmake&#39;, &#39;--build&#39;, &#39;build&#39;, &#39;--config&#39;, &#39;Release&#39;, &#39;--target&#39;, &#39;install&#39; }, ev.data.path)
  end
  return
end
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;See &lt;code&gt;telescope-fzf-native&lt;/code&gt; documentation for &lt;a href=&quot;https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation&quot;&gt;build details&lt;/a&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Windows with gcc/make using chocolatey&lt;/summary&gt; Alternatively, one can install gcc and make which don&#39;t require changing the config, the easiest way is to use choco: 
 &lt;ol&gt; 
  &lt;li&gt;install &lt;a href=&quot;https://chocolatey.org/install&quot;&gt;chocolatey&lt;/a&gt; either follow the instructions on the page or use winget, run in cmd as &lt;strong&gt;admin&lt;/strong&gt;:&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code&gt;winget install --accept-source-agreements chocolatey.chocolatey
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ol start=&quot;2&quot;&gt; 
  &lt;li&gt;install all requirements using choco, exit the previous cmd and open a new one so that choco path is set, and run in cmd as &lt;strong&gt;admin&lt;/strong&gt;:&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;pre&gt;&lt;code&gt;choco install -y neovim git ripgrep wget fd unzip gzip mingw make tree-sitter
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;WSL (Windows Subsystem for Linux)&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;wsl --install
wsl
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip neovim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h4&gt;Linux Install&lt;/h4&gt; 
&lt;details&gt;
 &lt;summary&gt;Ubuntu Install Steps&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip neovim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Debian Install Steps&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;sudo apt update
sudo apt install make gcc ripgrep fd-find tree-sitter-cli unzip git xclip curl

# Now we install nvim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
sudo rm -rf /opt/nvim-linux-x86_64
sudo mkdir -p /opt/nvim-linux-x86_64
sudo chmod a+rX /opt/nvim-linux-x86_64
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz

# make it available in /usr/local/bin, distro installs to /usr/bin
sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Fedora Install Steps&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;sudo dnf install -y gcc make git ripgrep fd-find tree-sitter-cli unzip neovim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Arch Install Steps&lt;/summary&gt; 
 &lt;pre&gt;&lt;code&gt;sudo pacman -S --noconfirm --needed gcc make git ripgrep fd tree-sitter-cli unzip neovim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Alternative neovim installation methods&lt;/h3&gt; 
&lt;p&gt;For some systems it is not unexpected that the &lt;a href=&quot;https://github.com/neovim/neovim/raw/master/INSTALL.md#install-from-package&quot;&gt;package manager installation method&lt;/a&gt; recommended by neovim is significantly behind. If that is the case for you, pick one of the following methods that are known to deliver fresh neovim versions very quickly. They have been picked for their popularity and because they make installing and updating neovim to the latest versions easy. You can also find more detail about the available methods being discussed &lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim/issues/1583&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;details&gt;
 &lt;summary&gt;Bob&lt;/summary&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/MordechaiHadad/bob&quot;&gt;Bob&lt;/a&gt; is a Neovim version manager for all platforms. Simply install &lt;a href=&quot;https://rust-lang.github.io/rustup/installation/other.html&quot;&gt;rustup&lt;/a&gt;, and run the following commands:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;rustup default stable
rustup update stable
cargo install bob-nvim
bob use stable
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Homebrew&lt;/summary&gt; 
 &lt;p&gt;&lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt; is a package manager popular on Mac and Linux. Simply install using &lt;a href=&quot;https://formulae.brew.sh/formula/neovim&quot;&gt;&lt;code&gt;brew install&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;Flatpak&lt;/summary&gt; 
 &lt;p&gt;Flatpak is a package manager for applications that allows developers to package their applications just once to make it available on all Linux systems. Simply &lt;a href=&quot;https://flatpak.org/setup/&quot;&gt;install flatpak&lt;/a&gt; and setup &lt;a href=&quot;https://flathub.org/setup&quot;&gt;flathub&lt;/a&gt; to &lt;a href=&quot;https://flathub.org/apps/io.neovim.nvim&quot;&gt;install neovim&lt;/a&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt;
 &lt;summary&gt;asdf and mise-en-place&lt;/summary&gt; 
 &lt;p&gt;&lt;a href=&quot;https://asdf-vm.com/&quot;&gt;asdf&lt;/a&gt; and &lt;a href=&quot;https://mise.jdx.dev/&quot;&gt;mise&lt;/a&gt; are tool version managers, mostly aimed towards project-specific tool versioning. However both support managing tools globally in the user-space as well:&lt;/p&gt; 
 &lt;details&gt;
  &lt;summary&gt;mise&lt;/summary&gt; 
  &lt;p&gt;&lt;a href=&quot;https://mise.jdx.dev/getting-started.html&quot;&gt;Install mise&lt;/a&gt;, then run:&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mise plugins install neovim
mise use neovim@stable
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/details&gt; 
 &lt;details&gt;
  &lt;summary&gt;asdf&lt;/summary&gt; 
  &lt;p&gt;&lt;a href=&quot;https://asdf-vm.com/guide/getting-started.html&quot;&gt;Install asdf&lt;/a&gt;, then run:&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;asdf plugin add neovim
asdf install neovim stable
asdf set neovim stable --home
asdf reshim neovim
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/details&gt; 
&lt;/details&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/4d9f0b49ccbd058afdb3f13854a6d35a1e3df37e39d221113bfaf425a9696ca4/nvim-lua/kickstart.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>NeogitOrg/neogit</title>
      <link>https://github.com/NeogitOrg/neogit</link>
      <description>&lt;p&gt;An interactive and powerful Git interface for Neovim, inspired by Magit&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;div&gt; 
  &lt;div&gt;
   &lt;img src=&quot;https://github.com/NeogitOrg/neogit/assets/7228095/7684545f-47b5-40e2-aedd-ccf56e0553f4&quot; width=&quot;400px&quot; /&gt;
  &lt;/div&gt; 
  &lt;div&gt;
   &lt;h1&gt;Neogit&lt;/h1&gt;
  &lt;/div&gt; 
 &lt;/div&gt; 
 &lt;table&gt; 
  &lt;tbody&gt;
   &lt;tr&gt; 
    &lt;td&gt; &lt;strong&gt;A git interface for &lt;a href=&quot;https://neovim.io&quot;&gt;Neovim&lt;/a&gt;, inspired by &lt;a href=&quot;https://magit.vc&quot;&gt;Magit&lt;/a&gt;.&lt;/strong&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt;
 &lt;/table&gt; 
 &lt;p&gt;&lt;a href=&quot;http://www.lua.org&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Lua-blue.svg?style=for-the-badge&amp;amp;logo=lua&quot; alt=&quot;Lua&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://neovim.io&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Neovim%200.10+-green.svg?style=for-the-badge&amp;amp;logo=neovim&quot; alt=&quot;Neovim&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/MIT-yellow.svg?style=for-the-badge&quot; alt=&quot;MIT&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://dotfyle.com/plugins/NeogitOrg/neogit&quot;&gt; &lt;img src=&quot;https://dotfyle.com/plugins/NeogitOrg/neogit/shield?style=for-the-badge&quot; /&gt; &lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/NeogitOrg/neogit/assets/7228095/d964cbb4-a557-4e97-ac5b-ea571a001f5c&quot; alt=&quot;preview&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Here&#39;s an example spec for &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;Lazy&lt;/a&gt;, but you&#39;re free to use whichever plugin manager suits you.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;NeogitOrg/neogit&quot;,
  lazy = true,
  dependencies = {
    -- Only one of these is needed.
    &quot;sindrets/diffview.nvim&quot;,        -- optional
    &quot;esmuellert/codediff.nvim&quot;,      -- optional

    -- For a custom log pager
    &quot;m00qek/baleia.nvim&quot;,            -- optional

    -- Only one of these is needed.
    &quot;nvim-telescope/telescope.nvim&quot;, -- optional
    &quot;ibhagwan/fzf-lua&quot;,              -- optional
    &quot;nvim-mini/mini.pick&quot;,           -- optional
    &quot;folke/snacks.nvim&quot;,             -- optional
  },
  cmd = &quot;Neogit&quot;,
  keys = {
    { &quot;&amp;lt;leader&amp;gt;gg&quot;, &quot;&amp;lt;cmd&amp;gt;Neogit&amp;lt;cr&amp;gt;&quot;, desc = &quot;Show Neogit UI&quot; }
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;You can either open Neogit by using the &lt;code&gt;Neogit&lt;/code&gt; command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:Neogit             &quot; Open the status buffer in a new tab
:Neogit cwd=&amp;lt;cwd&amp;gt;   &quot; Use a different repository path
:Neogit cwd=%:p:h   &quot; Uses the repository of the current file
:Neogit kind=&amp;lt;kind&amp;gt; &quot; Open specified popup directly
:Neogit commit      &quot; Open commit popup

&quot; Map it to a key
nnoremap &amp;lt;leader&amp;gt;gg &amp;lt;cmd&amp;gt;Neogit&amp;lt;cr&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Or via lua api
vim.keymap.set(&quot;n&quot;, &quot;&amp;lt;leader&amp;gt;gg&quot;, &quot;&amp;lt;cmd&amp;gt;Neogit&amp;lt;cr&amp;gt;&quot;, { desc = &quot;Open Neogit UI&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or using the lua api:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local neogit = require(&#39;neogit&#39;)

-- open using defaults
neogit.open()

-- open a specific popup
neogit.open({ &quot;commit&quot; })

-- open as a split
neogit.open({ kind = &quot;split&quot; })

-- open with different project
neogit.open({ cwd = &quot;~&quot; })

-- You can map this to a key
vim.keymap.set(&quot;n&quot;, &quot;&amp;lt;leader&amp;gt;gg&quot;, neogit.open, { desc = &quot;Open Neogit UI&quot; })

-- Wrap in a function to pass additional arguments
vim.keymap.set(
    &quot;n&quot;,
    &quot;&amp;lt;leader&amp;gt;gg&quot;,
    function() neogit.open({ kind = &quot;split&quot; }) end,
    { desc = &quot;Open Neogit UI&quot; }
)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;kind&lt;/code&gt; option can be one of the following values:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;tab&lt;/code&gt; (default)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;replace&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;split&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;split_above&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;split_above_all&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;split_below&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;split_below_all&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;vsplit&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;floating&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;auto&lt;/code&gt; (&lt;code&gt;vsplit&lt;/code&gt; if window would have 80 cols, otherwise &lt;code&gt;split&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;p&gt;You can configure neogit by running the &lt;code&gt;require(&#39;neogit&#39;).setup {}&lt;/code&gt; function, passing a table as the argument.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Default Config&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local neogit = require(&quot;neogit&quot;)

neogit.setup {
  -- Use Treesitter to apply syntax highlighting to diff hunks
  treesitter_diff_highlight = true,
  -- Apply word-diff highlights to diff hunks
  word_diff_highlight = true,
  -- Hides the hints at the top of the status buffer
  disable_hint = false,
  -- Disables changing the buffer highlights based on where the cursor is.
  disable_context_highlighting = false,
  -- Disables signs for sections/items/hunks
  disable_signs = false,
  -- Path to git executable. Defaults to &quot;git&quot;. Can be used to specify a custom git binary or wrapper script.
  git_executable = &quot;git&quot;,
  -- Offer to force push when branches diverge
  prompt_force_push = true,
  -- Request confirmation when amending already published commits
  prompt_amend_commit = true,
  -- Changes what mode the Commit Editor starts in. `true` will leave nvim in normal mode, `false` will change nvim to
  -- insert mode, and `&quot;auto&quot;` will change nvim to insert mode IF the commit message is empty, otherwise leaving it in
  -- normal mode.
  disable_insert_on_commit = &quot;auto&quot;,
  -- When enabled, will watch the `.git/` directory for changes and refresh the status buffer in response to filesystem
  -- events.
  filewatcher = {
    interval = 1000,
    enabled = true,
  },
  -- &quot;ascii&quot;   is the graph the git CLI generates
  -- &quot;unicode&quot; is the graph like https://github.com/rbong/vim-flog
  -- &quot;kitty&quot;   is the graph like https://github.com/isakbm/gitgraph.nvim - use https://github.com/rbong/flog-symbols if you don&#39;t use Kitty
  graph_style = &quot;ascii&quot;,
  -- Show relative date by default. When set, use `strftime` to display dates
  commit_date_format = nil,
  log_date_format = nil,
  -- When set, used to format the diff. Requires *baleia* to colorize text with ANSI escape sequences. An example for `Delta` is `{ &#39;delta&#39;, &#39;--width&#39;, &#39;117&#39; }`. For `Delta`, hyperlinks must be disabled when called by `neogit`, for text to be colorized properly.
  log_pager = nil,
  -- Show message with spinning animation when a git command is running.
  process_spinner = false,
  -- Used to generate URL&#39;s for branch popup action &quot;pull request&quot;, &quot;open commit&quot; and &quot;open tree&quot;
  git_services = {
    [&quot;github.com&quot;] = {
      pull_request = &quot;https://github.com/${owner}/${repository}/compare/${branch_name}?expand=1&quot;,
      commit = &quot;https://github.com/${owner}/${repository}/commit/${oid}&quot;,
      tree = &quot;https://${host}/${owner}/${repository}/tree/${branch_name}&quot;,
    },
    [&quot;bitbucket.org&quot;] = {
      pull_request = &quot;https://bitbucket.org/${owner}/${repository}/pull-requests/new?source=${branch_name}&amp;amp;t=1&quot;,
      commit = &quot;https://bitbucket.org/${owner}/${repository}/commits/${oid}&quot;,
      tree = &quot;https://bitbucket.org/${owner}/${repository}/branch/${branch_name}&quot;,
    },
    [&quot;gitlab.com&quot;] = {
      pull_request = &quot;https://gitlab.com/${owner}/${repository}/merge_requests/new?merge_request[source_branch]=${branch_name}&quot;,
      commit = &quot;https://gitlab.com/${owner}/${repository}/-/commit/${oid}&quot;,
      tree = &quot;https://gitlab.com/${owner}/${repository}/-/tree/${branch_name}?ref_type=heads&quot;,
    },
    [&quot;azure.com&quot;] = {
      pull_request = &quot;https://dev.azure.com/${owner}/_git/${repository}/pullrequestcreate?sourceRef=${branch_name}&amp;amp;targetRef=${target}&quot;,
      commit = &quot;&quot;,
      tree = &quot;&quot;,
    },
    [&quot;codeberg.org&quot;] = {
      pull_request = &quot;https://${host}/${owner}/${repository}/compare/${branch_name}&quot;,
      commit = &quot;https://${host}/${owner}/${repository}/commit/${oid}&quot;,
      tree = &quot;https://${host}/${owner}/${repository}/src/branch/${branch_name}&quot;,
    },
  },
  -- Allows a different telescope sorter. Defaults to &#39;fuzzy_with_index_bias&#39;. The example below will use the native fzf
  -- sorter instead. By default, this function returns `nil`.
  telescope_sorter = function()
    return require(&quot;telescope&quot;).extensions.fzf.native_fzf_sorter()
  end,
  -- Persist the values of switches/options within and across sessions
  remember_settings = true,
  -- Scope persisted settings on a per-project basis
  use_per_project_settings = true,
  -- Table of settings to never persist. Uses format &quot;Filetype--cli-value&quot;
  ignored_settings = {},
  -- Configure highlight group features
  highlight = {
    italic = true,
    bold = true,
    underline = true
  },
  -- Set to false if you want to be responsible for creating _ALL_ keymappings
  use_default_keymaps = true,
  -- Neogit refreshes its internal state after specific events, which can be expensive depending on the repository size.
  -- Disabling `auto_refresh` will make it so you have to manually refresh the status after you open it.
  auto_refresh = true,
  -- Value used for `--sort` option for `git branch` command
  -- By default, branches will be sorted by commit date descending
  -- Flag description: https://git-scm.com/docs/git-branch#Documentation/git-branch.txt---sortltkeygt
  -- Sorting keys: https://git-scm.com/docs/git-for-each-ref#_options
  sort_branches = &quot;-committerdate&quot;,
  -- Value passed to the `--&amp;lt;commit_order&amp;gt;-order` flag of the `git log` command
  -- Determines how commits are traversed and displayed in the log / graph:
  --   &quot;topo&quot;         topological order (parents always before children, good for graphs, slower on large repos)
  --   &quot;date&quot;         chronological order by commit date
  --   &quot;author-date&quot;  chronological order by author date
  --   &quot;&quot;             disable explicit ordering (fastest, recommended for very large repos)
  commit_order = &quot;topo&quot;,
  -- Default for new branch name prompts
  initial_branch_name = &quot;&quot;,
  -- Default for rename branch prompt. If not set, the current branch name is used
  initial_branch_rename = nil,
  -- Change the default way of opening neogit
  kind = &quot;tab&quot;,
  -- Floating window style 
  floating = {
    relative = &quot;editor&quot;,
    width = 0.8,
    height = 0.7,
    style = &quot;minimal&quot;,
    border = &quot;rounded&quot;,
  },
  -- Disable line numbers
  disable_line_numbers = true,
  -- Disable relative line numbers
  disable_relative_line_numbers = true,
  -- The time after which an output console is shown for slow running commands
  console_timeout = 2000,
  -- Automatically show console if a command takes more than console_timeout milliseconds
  auto_show_console = true,
  -- Automatically close the console if the process exits with a 0 (success) status
  auto_close_console = true,
  notification_icon = &quot;󰊢&quot;,
  status = {
    show_head_commit_hash = true,
    recent_commit_count = 10,
    HEAD_padding = 10,
    HEAD_folded = false,
    mode_padding = 3,
    mode_text = {
      M = &quot;modified&quot;,
      N = &quot;new file&quot;,
      A = &quot;added&quot;,
      D = &quot;deleted&quot;,
      C = &quot;copied&quot;,
      U = &quot;updated&quot;,
      R = &quot;renamed&quot;,
      T = &quot;changed&quot;,
      DD = &quot;unmerged&quot;,
      AU = &quot;unmerged&quot;,
      UD = &quot;unmerged&quot;,
      UA = &quot;unmerged&quot;,
      DU = &quot;unmerged&quot;,
      AA = &quot;unmerged&quot;,
      UU = &quot;unmerged&quot;,
      [&quot;?&quot;] = &quot;&quot;,
    },
  },
  commit_editor = {
    kind = &quot;tab&quot;,
    show_staged_diff = true,
    -- Accepted values:
    -- &quot;split&quot; to show the staged diff below the commit editor
    -- &quot;vsplit&quot; to show it to the right
    -- &quot;split_above&quot; Like :top split
    -- &quot;vsplit_left&quot; like :vsplit, but open to the left
    -- &quot;auto&quot; &quot;vsplit&quot; if window would have 80 cols, otherwise &quot;split&quot;
    staged_diff_split_kind = &quot;split&quot;,
    spell_check = true,
  },
  commit_select_view = {
    kind = &quot;tab&quot;,
  },
  commit_view = {
    kind = &quot;vsplit&quot;,
    verify_commit = vim.fn.executable(&quot;gpg&quot;) == 1, -- Can be set to true or false, otherwise we try to find the binary
  },
  log_view = {
    kind = &quot;tab&quot;,
  },
  rebase_editor = {
    kind = &quot;auto&quot;,
  },
  reflog_view = {
    kind = &quot;tab&quot;,
  },
  merge_editor = {
    kind = &quot;auto&quot;,
  },
  preview_buffer = {
    kind = &quot;floating_console&quot;,
  },
  popup = {
    kind = &quot;split&quot;,
    show_title = false,
  },
  stash = {
    kind = &quot;tab&quot;,
  },
  refs_view = {
    kind = &quot;tab&quot;,
  },
  signs = {
    -- { CLOSED, OPENED }
    hunk = { &quot;&quot;, &quot;&quot; },
    item = { &quot;&amp;gt;&quot;, &quot;v&quot; },
    section = { &quot;&amp;gt;&quot;, &quot;v&quot; },
  },
  -- Each Integration is auto-detected through plugin presence, however, it can be disabled by setting to `false`
  integrations = {
    -- If enabled, use telescope for menu selection rather than vim.ui.select.
    -- Allows multi-select and some things that vim.ui.select doesn&#39;t.
    telescope = nil,
    -- Neogit only provides inline diffs. If you want a more traditional way to look at diffs, you can use `diffview`.
    -- The diffview integration enables the diff popup.
    --
    -- Requires you to have `sindrets/diffview.nvim` installed.
    diffview = nil,

    -- Alternative diff viewer integration.
    -- Requires you to have `esmuellert/codediff.nvim` installed.
    codediff = nil,

    -- If enabled, uses fzf-lua for menu selection. If the telescope integration
    -- is also selected then telescope is used instead
    -- Requires you to have `ibhagwan/fzf-lua` installed.
    fzf_lua = nil,

    -- If enabled, uses mini.pick for menu selection. If the telescope integration
    -- is also selected then telescope is used instead
    -- Requires you to have `echasnovski/mini.pick` installed.
    mini_pick = nil,

    -- If enabled, uses snacks.picker for menu selection. If the telescope integration
    -- is also selected then telescope is used instead
    -- Requires you to have `folke/snacks.nvim` installed.
    snacks = nil,
  },
  -- Which diff viewer to use. nil = auto-detect (tries diffview first, then codediff).
  -- Can be &quot;diffview&quot; or &quot;codediff&quot;.
  diff_viewer = nil,
  sections = {
    -- Reverting/Cherry Picking
    sequencer = {
      folded = false,
      hidden = false,
    },
    untracked = {
      folded = false,
      hidden = false,
    },
    unstaged = {
      folded = false,
      hidden = false,
    },
    staged = {
      folded = false,
      hidden = false,
    },
    stashes = {
      folded = true,
      hidden = false,
    },
    unpulled_upstream = {
      folded = true,
      hidden = false,
    },
    unmerged_upstream = {
      folded = false,
      hidden = false,
    },
    unpulled_pushRemote = {
      folded = true,
      hidden = false,
    },
    unmerged_pushRemote = {
      folded = false,
      hidden = false,
    },
    recent = {
      folded = true,
      hidden = false,
    },
    rebase = {
      folded = true,
      hidden = false,
    },
  },
  mappings = {
    commit_editor = {
      [&quot;q&quot;] = &quot;Close&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-c&amp;gt;&quot;] = &quot;Submit&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-k&amp;gt;&quot;] = &quot;Abort&quot;,
      [&quot;&amp;lt;m-p&amp;gt;&quot;] = &quot;PrevMessage&quot;,
      [&quot;&amp;lt;m-n&amp;gt;&quot;] = &quot;NextMessage&quot;,
      [&quot;&amp;lt;m-r&amp;gt;&quot;] = &quot;ResetMessage&quot;,
    },
    commit_editor_I = {
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-c&amp;gt;&quot;] = &quot;Submit&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-k&amp;gt;&quot;] = &quot;Abort&quot;,
    },
    rebase_editor = {
      [&quot;p&quot;] = &quot;Pick&quot;,
      [&quot;r&quot;] = &quot;Reword&quot;,
      [&quot;e&quot;] = &quot;Edit&quot;,
      [&quot;s&quot;] = &quot;Squash&quot;,
      [&quot;f&quot;] = &quot;Fixup&quot;,
      [&quot;x&quot;] = &quot;Execute&quot;,
      [&quot;d&quot;] = &quot;Drop&quot;,
      [&quot;b&quot;] = &quot;Break&quot;,
      [&quot;q&quot;] = &quot;Close&quot;,
      [&quot;&amp;lt;cr&amp;gt;&quot;] = &quot;OpenCommit&quot;,
      [&quot;gk&quot;] = &quot;MoveUp&quot;,
      [&quot;gj&quot;] = &quot;MoveDown&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-c&amp;gt;&quot;] = &quot;Submit&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-k&amp;gt;&quot;] = &quot;Abort&quot;,
      [&quot;[c&quot;] = &quot;OpenOrScrollUp&quot;,
      [&quot;]c&quot;] = &quot;OpenOrScrollDown&quot;,
    },
    rebase_editor_I = {
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-c&amp;gt;&quot;] = &quot;Submit&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&amp;lt;c-k&amp;gt;&quot;] = &quot;Abort&quot;,
    },
    finder = {
      [&quot;&amp;lt;cr&amp;gt;&quot;] = &quot;Select&quot;,
      [&quot;&amp;lt;c-c&amp;gt;&quot;] = &quot;Close&quot;,
      [&quot;&amp;lt;esc&amp;gt;&quot;] = &quot;Close&quot;,
      [&quot;&amp;lt;c-n&amp;gt;&quot;] = &quot;Next&quot;,
      [&quot;&amp;lt;c-p&amp;gt;&quot;] = &quot;Previous&quot;,
      [&quot;&amp;lt;down&amp;gt;&quot;] = &quot;Next&quot;,
      [&quot;&amp;lt;up&amp;gt;&quot;] = &quot;Previous&quot;,
      [&quot;&amp;lt;tab&amp;gt;&quot;] = &quot;InsertCompletion&quot;,
      [&quot;&amp;lt;c-y&amp;gt;&quot;] = &quot;CopySelection&quot;,
      [&quot;&amp;lt;space&amp;gt;&quot;] = &quot;MultiselectToggleNext&quot;,
      [&quot;&amp;lt;s-space&amp;gt;&quot;] = &quot;MultiselectTogglePrevious&quot;,
      [&quot;&amp;lt;c-j&amp;gt;&quot;] = &quot;NOP&quot;,
      [&quot;&amp;lt;ScrollWheelDown&amp;gt;&quot;] = &quot;ScrollWheelDown&quot;,
      [&quot;&amp;lt;ScrollWheelUp&amp;gt;&quot;] = &quot;ScrollWheelUp&quot;,
      [&quot;&amp;lt;ScrollWheelLeft&amp;gt;&quot;] = &quot;NOP&quot;,
      [&quot;&amp;lt;ScrollWheelRight&amp;gt;&quot;] = &quot;NOP&quot;,
      [&quot;&amp;lt;LeftMouse&amp;gt;&quot;] = &quot;MouseClick&quot;,
      [&quot;&amp;lt;2-LeftMouse&amp;gt;&quot;] = &quot;NOP&quot;,
    },
    -- Setting any of these to `false` will disable the mapping.
    popup = {
      [&quot;?&quot;] = &quot;HelpPopup&quot;,
      [&quot;A&quot;] = &quot;CherryPickPopup&quot;,
      [&quot;d&quot;] = &quot;DiffPopup&quot;,
      [&quot;M&quot;] = &quot;RemotePopup&quot;,
      [&quot;P&quot;] = &quot;PushPopup&quot;,
      [&quot;X&quot;] = &quot;ResetPopup&quot;,
      [&quot;Z&quot;] = &quot;StashPopup&quot;,
      [&quot;i&quot;] = &quot;IgnorePopup&quot;,
      [&quot;t&quot;] = &quot;TagPopup&quot;,
      [&quot;b&quot;] = &quot;BranchPopup&quot;,
      [&quot;B&quot;] = &quot;BisectPopup&quot;,
      [&quot;w&quot;] = &quot;WorktreePopup&quot;,
      [&quot;c&quot;] = &quot;CommitPopup&quot;,
      [&quot;f&quot;] = &quot;FetchPopup&quot;,
      [&quot;l&quot;] = &quot;LogPopup&quot;,
      [&quot;m&quot;] = &quot;MergePopup&quot;,
      [&quot;p&quot;] = &quot;PullPopup&quot;,
      [&quot;r&quot;] = &quot;RebasePopup&quot;,
      [&quot;v&quot;] = &quot;RevertPopup&quot;,
    },
    status = {
      [&quot;j&quot;] = &quot;MoveDown&quot;,
      [&quot;k&quot;] = &quot;MoveUp&quot;,
      [&quot;o&quot;] = &quot;OpenTree&quot;,
      [&quot;q&quot;] = &quot;Close&quot;,
      [&quot;I&quot;] = &quot;InitRepo&quot;,
      [&quot;1&quot;] = &quot;Depth1&quot;,
      [&quot;2&quot;] = &quot;Depth2&quot;,
      [&quot;3&quot;] = &quot;Depth3&quot;,
      [&quot;4&quot;] = &quot;Depth4&quot;,
      [&quot;Q&quot;] = &quot;Command&quot;,
      [&quot;&amp;lt;tab&amp;gt;&quot;] = &quot;Toggle&quot;,
      [&quot;za&quot;] = &quot;Toggle&quot;,
      [&quot;zo&quot;] = &quot;OpenFold&quot;,
      [&quot;x&quot;] = &quot;Discard&quot;,
      [&quot;s&quot;] = &quot;Stage&quot;,
      [&quot;S&quot;] = &quot;StageUnstaged&quot;,
      [&quot;&amp;lt;c-s&amp;gt;&quot;] = &quot;StageAll&quot;,
      [&quot;u&quot;] = &quot;Unstage&quot;,
      [&quot;K&quot;] = &quot;Untrack&quot;,
      [&quot;U&quot;] = &quot;UnstageStaged&quot;,
      [&quot;y&quot;] = &quot;ShowRefs&quot;,
      [&quot;$&quot;] = &quot;CommandHistory&quot;,
      [&quot;Y&quot;] = &quot;YankSelected&quot;,
      [&quot;gp&quot;] = &quot;GoToParentRepo&quot;,
      [&quot;&amp;lt;c-r&amp;gt;&quot;] = &quot;RefreshBuffer&quot;,
      [&quot;&amp;lt;cr&amp;gt;&quot;] = &quot;GoToFile&quot;,
      [&quot;&amp;lt;s-cr&amp;gt;&quot;] = &quot;PeekFile&quot;,
      [&quot;&amp;lt;c-v&amp;gt;&quot;] = &quot;VSplitOpen&quot;,
      [&quot;&amp;lt;c-x&amp;gt;&quot;] = &quot;SplitOpen&quot;,
      [&quot;&amp;lt;c-t&amp;gt;&quot;] = &quot;TabOpen&quot;,
      [&quot;{&quot;] = &quot;GoToPreviousHunkHeader&quot;,
      [&quot;}&quot;] = &quot;GoToNextHunkHeader&quot;,
      [&quot;[c&quot;] = &quot;OpenOrScrollUp&quot;,
      [&quot;]c&quot;] = &quot;OpenOrScrollDown&quot;,
      [&quot;&amp;lt;c-k&amp;gt;&quot;] = &quot;PeekUp&quot;,
      [&quot;&amp;lt;c-j&amp;gt;&quot;] = &quot;PeekDown&quot;,
      [&quot;&amp;lt;c-n&amp;gt;&quot;] = &quot;NextSection&quot;,
      [&quot;&amp;lt;c-p&amp;gt;&quot;] = &quot;PreviousSection&quot;,
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Popups&lt;/h2&gt; 
&lt;p&gt;The following popup menus are available from all buffers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Bisect&lt;/li&gt; 
 &lt;li&gt;Branch + Branch Config&lt;/li&gt; 
 &lt;li&gt;Cherry Pick&lt;/li&gt; 
 &lt;li&gt;Commit&lt;/li&gt; 
 &lt;li&gt;Diff&lt;/li&gt; 
 &lt;li&gt;Fetch&lt;/li&gt; 
 &lt;li&gt;Ignore&lt;/li&gt; 
 &lt;li&gt;Log&lt;/li&gt; 
 &lt;li&gt;Merge&lt;/li&gt; 
 &lt;li&gt;Pull&lt;/li&gt; 
 &lt;li&gt;Push&lt;/li&gt; 
 &lt;li&gt;Rebase&lt;/li&gt; 
 &lt;li&gt;Remote + Remote Config&lt;/li&gt; 
 &lt;li&gt;Reset&lt;/li&gt; 
 &lt;li&gt;Revert&lt;/li&gt; 
 &lt;li&gt;Stash&lt;/li&gt; 
 &lt;li&gt;Tag&lt;/li&gt; 
 &lt;li&gt;Worktree&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Many popups will use whatever is currently under the cursor or selected as input for an action. For example, to cherry-pick a range of commits from the log view, a linewise visual selection can be made, and using either &lt;code&gt;apply&lt;/code&gt; or &lt;code&gt;pick&lt;/code&gt; from the cherry-pick menu will use the selection.&lt;/p&gt; 
&lt;p&gt;This works for just about everything that has an object-ID in git, and if you find one that you think &lt;em&gt;should&lt;/em&gt; work but doesn&#39;t, open an issue 😃&lt;/p&gt; 
&lt;h2&gt;Highlight Groups&lt;/h2&gt; 
&lt;p&gt;See the built-in documentation for a comprehensive list of highlight groups. If your theme doesn&#39;t style a particular group, we&#39;ll try our best to do a nice job.&lt;/p&gt; 
&lt;h2&gt;Events&lt;/h2&gt; 
&lt;p&gt;Neogit emits the following events:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Event&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Event Data&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitStatusRefreshed&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Status has been reloaded&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitCommitComplete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Commit has been created&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitPushComplete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Push has completed&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitPullComplete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Pull has completed&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitFetchComplete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fetch has completed&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{}&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitBranchCreate&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Branch was created, starting from &lt;code&gt;base&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch_name: string, base: string? }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitBranchDelete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Branch was deleted&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch_name: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitBranchCheckout&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Branch was checked out&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch_name: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitBranchReset&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Branch was reset to a commit/branch&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch_name: string, resetting_to: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitBranchRename&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Branch was renamed&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch_name: string, new_name: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitRebase&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A rebase finished&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ commit: string, status: &quot;ok&quot;|&quot;conflict&quot; }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitReset&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A branch was reset to a certain commit&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ commit: string, mode: &quot;soft&quot;|&quot;mixed&quot;|&quot;hard&quot;|&quot;keep&quot;|&quot;index&quot; }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitTagCreate&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A tag was placed on a certain commit&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ name: string, ref: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitTagDelete&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A tag was removed&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ name: string }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitCherryPick&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;One or more commits were cherry-picked&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ commits: string[] }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitMerge&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A merge finished&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ branch: string, args = string[], status: &quot;ok&quot;|&quot;conflict&quot; }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;NeogitStash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A stash finished&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;{ success: boolean }&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Versioning&lt;/h2&gt; 
&lt;p&gt;Neogit follows semantic versioning.&lt;/p&gt; 
&lt;h2&gt;Compatibility&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;master&lt;/code&gt; branch will always be compatible with the latest &lt;strong&gt;stable&lt;/strong&gt; release of Neovim, and usually with the latest &lt;strong&gt;nightly&lt;/strong&gt; build as well.&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://github.com/NeogitOrg/neogit/raw/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;a href=&quot;https://github.com/NeogitOrg/Neogit/graphs/contributors&quot;&gt; &lt;img src=&quot;https://contrib.rocks/image?repo=NeogitOrg/Neogit&quot; /&gt; &lt;/a&gt; 
&lt;h2&gt;Special Thanks&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kolja&quot;&gt;kolja&lt;/a&gt; for the Neogit Logo&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/isakbm/gitgraph.nvim&quot;&gt;gitgraph.nvim&lt;/a&gt; for the &quot;kitty&quot; git graph renderer&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/rbong/vim-flog&quot;&gt;vim-flog&lt;/a&gt; for the &quot;unicode&quot; git graph renderer&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/affb301c6bff8012b1cda20c1d9b1ad860952a6acecb11e10cde614db3477e88/NeogitOrg/neogit" medium="image" />
      
    </item>
    
    <item>
      <title>MeanderingProgrammer/render-markdown.nvim</title>
      <link>https://github.com/MeanderingProgrammer/render-markdown.nvim</link>
      <description>&lt;p&gt;Improve viewing Markdown in Neovim&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;render-markdown.nvim&lt;/h1&gt; 
&lt;p&gt;Improve viewing Markdown in Neovim&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Screenshot&lt;/th&gt; 
   &lt;th&gt;Video&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/40655575-b091-4ab8-b830-38f8004d7746&quot; alt=&quot;Heading&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/03f629ea-f6da-4f05-a035-827fd944e8be&quot; alt=&quot;Heading&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7d021918-e89c-4b7d-b33a-869390f9a826&quot; alt=&quot;Table&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/fdbcfbfa-5f9e-49b7-8c19-f7e837979a7a&quot; alt=&quot;Table&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/822ae62c-bc0f-40a7-b8bb-fb3a885a95f9&quot; alt=&quot;Quote&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/aa002ac7-b30f-4079-bba9-505160a4ad78&quot; alt=&quot;Quote&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e468a463-bc8d-420c-bb4c-da1263795092&quot; alt=&quot;Callout&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d56cc5c7-43cd-4ce7-ad33-6164c2e23875&quot; alt=&quot;Callout&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/68f27ff3-49c8-42b5-bb7a-3b89c1e98401&quot; alt=&quot;Latex&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/41e657a6-bcc2-464d-ab8c-a23bfcb80b0f&quot; alt=&quot;Latex&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contained: runs entirely inside Neovim with no external windows&lt;/li&gt; 
 &lt;li&gt;Configurable: all components, padding, icons, and colors can be modified&lt;/li&gt; 
 &lt;li&gt;File type agnostic: can render &lt;code&gt;markdown&lt;/code&gt; injected into any file 
  &lt;ul&gt; 
   &lt;li&gt;Automatically runs on lazy load file types defined in &lt;code&gt;lazy.nvim&lt;/code&gt; &lt;code&gt;ft&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Injections: can directly manipulate treesitter to add logical &lt;code&gt;markdown&lt;/code&gt; sections&lt;/li&gt; 
 &lt;li&gt;Modal rendering: changes between &lt;code&gt;rendered&lt;/code&gt; and &lt;code&gt;raw&lt;/code&gt; view based on mode&lt;/li&gt; 
 &lt;li&gt;Anti-conceal: hides virtual text added by this plugin on cursor line&lt;/li&gt; 
 &lt;li&gt;Window options: changes option values between &lt;code&gt;rendered&lt;/code&gt; and &lt;code&gt;raw&lt;/code&gt; view&lt;/li&gt; 
 &lt;li&gt;Large files: only renders visible range, can be entirely disabled based on size&lt;/li&gt; 
 &lt;li&gt;Custom rendering: provides extension point where user can add anything&lt;/li&gt; 
 &lt;li&gt;Renders the following &lt;code&gt;markdown&lt;/code&gt; components out of the box: 
  &lt;ul&gt; 
   &lt;li&gt;Headings: icon, color, border, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;, width&lt;/li&gt; 
   &lt;li&gt;Code blocks: background, language icon &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:1&quot;&gt;[1:1]&lt;/a&gt;&lt;/sup&gt; &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn2&quot; id=&quot;fnref2&quot;&gt;[2]&lt;/a&gt;&lt;/sup&gt;, border, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:2&quot;&gt;[1:2]&lt;/a&gt;&lt;/sup&gt;, width&lt;/li&gt; 
   &lt;li&gt;Code inline: background&lt;/li&gt; 
   &lt;li&gt;Horizontal breaks: icon, color, width&lt;/li&gt; 
   &lt;li&gt;List bullets: icon, color, padding &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:3&quot;&gt;[1:3]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Checkboxes: icon, color, user defined states&lt;/li&gt; 
   &lt;li&gt;Block quotes: icon, color, line breaks &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:4&quot;&gt;[1:4]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Callouts: icon, color, user defined values, Github &amp;amp; Obsidian defaults&lt;/li&gt; 
   &lt;li&gt;Tables: border, color, alignment indicator, auto align cells &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:5&quot;&gt;[1:5]&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt; 
   &lt;li&gt;Links &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:6&quot;&gt;[1:6]&lt;/a&gt;&lt;/sup&gt;: icon, color, user defined destinations&lt;/li&gt; 
   &lt;li&gt;Latex blocks &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn3&quot; id=&quot;fnref3&quot;&gt;[3]&lt;/a&gt;&lt;/sup&gt;: renders formulas&lt;/li&gt; 
   &lt;li&gt;Org indent mode &lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fn1&quot; id=&quot;fnref1:7&quot;&gt;[1:7]&lt;/a&gt;&lt;/sup&gt;: per level padding&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Requirements&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &lt;code&gt;&amp;gt;= 0.9.0&lt;/code&gt; (minimum) &lt;code&gt;&amp;gt;= 0.10.0&lt;/code&gt; (recommended)&lt;/li&gt; 
 &lt;li&gt;Nerd font symbols: &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Fonts&quot;&gt;more details&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter&quot;&gt;treesitter&lt;/a&gt; parsers: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter-grammars/tree-sitter-markdown&quot;&gt;markdown &amp;amp; markdown_inline&lt;/a&gt;: Used to parse &lt;code&gt;markdown&lt;/code&gt; files&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter/tree-sitter-html&quot;&gt;html&lt;/a&gt; (Optional): Used to conceal &lt;code&gt;HTML&lt;/code&gt; comments&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/latex-lsp/tree-sitter-latex&quot;&gt;latex&lt;/a&gt; (Optional): Used to get &lt;code&gt;latex&lt;/code&gt; blocks from &lt;code&gt;markdown&lt;/code&gt; files&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/tree-sitter-grammars/tree-sitter-yaml&quot;&gt;yaml&lt;/a&gt; (Optional): Used to render elements in &lt;code&gt;frontmatter&lt;/code&gt; metadata&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Icon provider plugin (Optional): Used for icon above code blocks 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.nvim/raw/main/readmes/mini-icons.md&quot;&gt;mini.icons&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;System dependencies: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://github.com/bartp5/libtexprintf&quot;&gt;libtexprintf&lt;/a&gt; (Optional): Used to transform &lt;code&gt;latex&lt;/code&gt; strings to appropriate unicode using &lt;code&gt;utftex&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://pypi.org/project/pylatexenc/&quot;&gt;pylatexenc&lt;/a&gt; (Optional): Used to transform &lt;code&gt;latex&lt;/code&gt; strings to appropriate unicode using &lt;code&gt;latex2text&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Install&lt;/h1&gt; 
&lt;h2&gt;vim.pack&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add({
    &#39;https://github.com/nvim-treesitter/nvim-treesitter&#39;,
    &#39;https://github.com/nvim-mini/mini.nvim&#39;,            -- if you use the mini.nvim suite
    -- &#39;https://github.com/nvim-mini/mini.icons&#39;,        -- if you use standalone mini plugins
    -- &#39;https://github.com/nvim-tree/nvim-web-devicons&#39;, -- if you prefer nvim-web-devicons
    &#39;https://github.com/MeanderingProgrammer/render-markdown.nvim&#39;,
})
require(&#39;render-markdown&#39;).setup({}) -- only mandatory if you want to set custom options
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;lazy.nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;MeanderingProgrammer/render-markdown.nvim&#39;,
    dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-mini/mini.nvim&#39; },            -- if you use the mini.nvim suite
    -- dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-mini/mini.icons&#39; },        -- if you use standalone mini plugins
    -- dependencies = { &#39;nvim-treesitter/nvim-treesitter&#39;, &#39;nvim-tree/nvim-web-devicons&#39; }, -- if you prefer nvim-web-devicons
    ---@module &#39;render-markdown&#39;
    ---@type render.md.UserConfig
    opts = {},
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;rocks.nvim&lt;/h2&gt; 
&lt;p&gt;This plugin is available on &lt;a href=&quot;https://luarocks.org/modules/MeanderingProgrammer/render-markdown.nvim&quot;&gt;LuaRocks&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;:Rocks install render-markdown.nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;packer.nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;use({
    &#39;MeanderingProgrammer/render-markdown.nvim&#39;,
    after = { &#39;nvim-treesitter&#39; },
    requires = { &#39;nvim-mini/mini.nvim&#39;, opt = true },            -- if you use the mini.nvim suite
    -- requires = { &#39;nvim-mini/mini.icons&#39;, opt = true },        -- if you use standalone mini plugins
    -- requires = { &#39;nvim-tree/nvim-web-devicons&#39;, opt = true }, -- if you prefer nvim-web-devicons
    config = function()
        require(&#39;render-markdown&#39;).setup({})
    end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Commands&lt;/h1&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Lua Function&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;enable&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown enable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set(true)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_enable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_enable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf(true)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown disable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).disable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set(false)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_disable&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_disable()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf(false)&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown toggle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).toggle()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set()&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown buf_toggle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).buf_toggle()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Alias for &lt;code&gt;set_buf()&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown get&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).get()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Return current state&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown set bool?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).set(bool?)&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sets state, &lt;code&gt;nil&lt;/code&gt; to toggle&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown set_buf bool?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).set_buf(bool?)&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Sets state for current buffer, &lt;code&gt;nil&lt;/code&gt; to toggle&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown preview&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).preview()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show rendered buffer to the side&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown log&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).log()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Opens the log file for this plugin&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown expand&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).expand()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Increase anti-conceal margin above and below by 1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown contract&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).contract()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Decrease anti-conceal margin above and below by 1&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown debug&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).debug()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Prints information about marks on current line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;:RenderMarkdown config&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;require(&#39;render-markdown&#39;).config()&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Prints difference between config and default&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Completions&lt;/h1&gt; 
&lt;p&gt;This plugin provides completions for both checkboxes and callouts provided you follow the relevant setup.&lt;/p&gt; 
&lt;h2&gt;in-process lsp&lt;/h2&gt; 
&lt;p&gt;The recommended way of getting completions from this plugin. Only requires being enabled with no additional configuration, assuming you have general LSP completions.&lt;/p&gt; 
&lt;p&gt;Works automatically with &lt;code&gt;nvim-cmp&lt;/code&gt; and &lt;code&gt;blink.cmp&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    completions = { lsp = { enabled = true } },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;coq_nvim&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    completions = { coq = { enabled = true } },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Setup&lt;/h1&gt; 
&lt;p&gt;Checkout the &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki&quot;&gt;Wiki&lt;/a&gt; for examples and images associated with different configuration options.&lt;/p&gt; 
&lt;p&gt;The full default configuration is provided below for reference.&lt;/p&gt; 
&lt;p&gt;Any part of it can be modified however for many fields this does not make much sense.&lt;/p&gt; 
&lt;p&gt;Some of the more useful fields are discussed further down.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Default Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    -- Whether markdown should be rendered by default.
    enabled = true,
    -- Vim modes that will show a rendered view of the markdown file, :h mode(), for all enabled
    -- components. Individual components can be enabled for other modes. Remaining modes will be
    -- unaffected by this plugin.
    render_modes = { &#39;n&#39;, &#39;c&#39;, &#39;t&#39; },
    -- Milliseconds that must pass before updating marks, updates occur.
    -- within the context of the visible window, not the entire buffer.
    debounce = 100,
    -- Pre configured settings that will attempt to mimic various target user experiences.
    -- User provided settings will take precedence.
    -- | obsidian | mimic Obsidian UI                                          |
    -- | lazy     | will attempt to stay up to date with LazyVim configuration |
    -- | none     | does nothing                                               |
    preset = &#39;none&#39;,
    -- The level of logs to write to file: vim.fn.stdpath(&#39;state&#39;) .. &#39;/render-markdown.log&#39;.
    -- Only intended to be used for plugin development / debugging.
    log_level = &#39;error&#39;,
    -- Print runtime of main update method.
    -- Only intended to be used for plugin development / debugging.
    log_runtime = false,
    -- Filetypes this plugin will run on.
    file_types = { &#39;markdown&#39; },
    -- Maximum file size (in MB) that this plugin will attempt to render.
    -- File larger than this will effectively be ignored.
    max_file_size = 10.0,
    -- Takes buffer as input, if it returns true this plugin will not attach to the buffer.
    ignore = function()
        return false
    end,
    -- Whether markdown should be rendered when nested inside markdown, i.e. markdown code block
    -- inside markdown file.
    nested = true,
    -- Additional events that will trigger this plugin&#39;s render loop.
    change_events = {},
    -- Whether the treesitter highlighter should be restarted after this plugin attaches to its
    -- first buffer for the first time. May be necessary if this plugin is lazy loaded to clear
    -- highlights that have been dynamically disabled.
    restart_highlighter = false,
    injections = {
        -- Out of the box language injections for known filetypes that allow markdown to be interpreted
        -- in specified locations, see :h treesitter-language-injections.
        -- Set enabled to false in order to disable.

        gitcommit = {
            enabled = true,
            query = [[
                ((message) @injection.content
                    (#set! injection.combined)
                    (#set! injection.include-children)
                    (#set! injection.language &quot;markdown&quot;))
            ]],
        },
    },
    patterns = {
        -- Highlight patterns to disable for filetypes, i.e. lines concealed around code blocks

        markdown = {
            disable = true,
            directives = {
                { id = 17, name = &#39;conceal_lines&#39; },
                { id = 18, name = &#39;conceal_lines&#39; },
            },
        },
    },
    anti_conceal = {
        -- This enables hiding added text on the line the cursor is on.
        enabled = true,
        -- Modes to disable anti conceal feature.
        disabled_modes = false,
        -- Number of lines above cursor to show.
        above = 0,
        -- Number of lines below cursor to show.
        below = 0,
        -- Which elements to always show, ignoring anti conceal behavior. Values can either be
        -- booleans to fix the behavior or string lists representing modes where anti conceal
        -- behavior will be ignored. Valid values are:
        --   bullet
        --   callout
        --   check_icon, check_scope
        --   code_background, code_border, code_language
        --   dash
        --   head_background, head_border, head_icon
        --   indent
        --   latex
        --   link
        --   quote
        --   sign
        --   table_border
        --   virtual_lines
        ignore = {
            code_background = true,
            indent = true,
            sign = true,
            virtual_lines = true,
        },
    },
    padding = {
        -- Highlight to use when adding whitespace, should match background.
        highlight = &#39;Normal&#39;,
    },
    latex = {
        -- Turn on / off latex rendering.
        enabled = true,
        -- Additional modes to render latex.
        render_modes = false,
        -- Executable used to convert latex formula to rendered unicode.
        -- If a list is provided the commands run in order until the first success.
        converter = { &#39;utftex&#39;, &#39;latex2text&#39; },
        -- Highlight for latex blocks.
        highlight = &#39;RenderMarkdownMath&#39;,
        -- Determines where latex formula is rendered relative to block.
        -- | above  | above latex block                               |
        -- | below  | below latex block                               |
        -- | center | centered with latex block (must be single line) |
        position = &#39;center&#39;,
        -- Number of empty lines above latex blocks.
        top_pad = 0,
        -- Number of empty lines below latex blocks.
        bottom_pad = 0,
    },
    on = {
        -- Called when plugin initially attaches to a buffer.
        attach = function() end,
        -- Called before adding marks to the buffer for the first time.
        initial = function() end,
        -- Called after plugin renders a buffer.
        render = function() end,
        -- Called after plugin clears a buffer.
        clear = function() end,
    },
    completions = {
        -- Settings for blink.cmp completions source
        blink = { enabled = false },
        -- Settings for coq_nvim completions source
        coq = { enabled = false },
        -- Settings for in-process language server completions
        lsp = { enabled = false },
        filter = {
            callout = function()
                -- example to exclude obsidian callouts
                -- return value.category ~= &#39;obsidian&#39;
                return true
            end,
            checkbox = function()
                return true
            end,
        },
    },
    heading = {
        -- Useful context to have when evaluating values.
        -- | level    | the number of &#39;#&#39; in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |

        -- Turn on / off heading icon &amp;amp; background rendering.
        enabled = true,
        -- Additional modes to render headings.
        render_modes = false,
        -- Turn on / off atx heading rendering.
        atx = true,
        -- Turn on / off setext heading rendering.
        setext = true,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Replaces &#39;#+&#39; of &#39;atx_h._marker&#39;.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`              |
        -- | string[] | `cycle(value, context.level)` |
        icons = { &#39;󰲡 &#39;, &#39;󰲣 &#39;, &#39;󰲥 &#39;, &#39;󰲧 &#39;, &#39;󰲩 &#39;, &#39;󰲫 &#39; },
        -- Determines how icons fill the available space.
        -- | eol     | &#39;#&#39;s are concealed and icon is placed at right most column   |
        -- | right   | &#39;#&#39;s are concealed and icon is appended to right side        |
        -- | inline  | &#39;#&#39;s are concealed and icon is inlined on left side          |
        -- | overlay | icon is left padded with spaces and overlayed hiding all &#39;#&#39; |
        position = &#39;overlay&#39;,
        -- Added to the sign column if enabled.
        -- Output is evaluated by `cycle(value, context.level)`.
        signs = { &#39;󰫎 &#39; },
        -- Width of the heading background.
        -- | block | width of the heading text |
        -- | full  | full width of the window  |
        -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of headings.
        -- Margin available space is computed after accounting for padding.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
        left_margin = 0,
        -- Amount of padding to add to the left of headings.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        left_pad = 0,
        -- Amount of padding to add to the right of headings when width is &#39;block&#39;.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        right_pad = 0,
        -- Minimum width to use for headings when width is &#39;block&#39;.
        -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
        min_width = 0,
        -- Determines if a border is added above and below headings.
        -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
        border = false,
        -- Always use virtual lines for heading borders instead of attempting to use empty lines.
        border_virtual = false,
        -- Highlight the start of the border using the foreground highlight.
        border_prefix = false,
        -- Used above heading for border.
        above = &#39;▄&#39;,
        -- Used below heading for border.
        below = &#39;▀&#39;,
        -- Highlight for the heading icon and extends through the entire line.
        -- Output is evaluated by `clamp(value, context.level)`.
        backgrounds = {
            &#39;RenderMarkdownH1Bg&#39;,
            &#39;RenderMarkdownH2Bg&#39;,
            &#39;RenderMarkdownH3Bg&#39;,
            &#39;RenderMarkdownH4Bg&#39;,
            &#39;RenderMarkdownH5Bg&#39;,
            &#39;RenderMarkdownH6Bg&#39;,
        },
        -- Highlight for the heading and sign icons.
        -- Output is evaluated using the same logic as &#39;backgrounds&#39;.
        foregrounds = {
            &#39;RenderMarkdownH1&#39;,
            &#39;RenderMarkdownH2&#39;,
            &#39;RenderMarkdownH3&#39;,
            &#39;RenderMarkdownH4&#39;,
            &#39;RenderMarkdownH5&#39;,
            &#39;RenderMarkdownH6&#39;,
        },
        -- Define custom heading patterns which allow you to override various properties based on
        -- the contents of a heading.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern    | matched against the heading text @see :h lua-patterns |
        -- | icon       | optional override for the icon                        |
        -- | background | optional override for the background                  |
        -- | foreground | optional override for the foreground                  |
        custom = {},
    },
    paragraph = {
        -- Useful context to have when evaluating values.
        -- | text | text value of the node |

        -- Turn on / off paragraph rendering.
        enabled = true,
        -- Additional modes to render paragraphs.
        render_modes = false,
        -- Amount of margin to add to the left of paragraphs.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | number   | `value`          |
        left_margin = 0,
        -- Amount of padding to add to the first line of each paragraph.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        indent = 0,
        -- Minimum width to use for paragraphs.
        min_width = 0,
    },
    code = {
        -- Turn on / off code block &amp;amp; inline code rendering.
        enabled = true,
        -- Additional modes to render code blocks.
        render_modes = false,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Whether to conceal nodes at the top and bottom of code blocks.
        conceal_delimiters = true,
        -- Turn on / off language heading related rendering.
        language = true,
        -- Determines where language icon is rendered.
        -- | center | center of code block |
        -- | right  | right of code block  |
        -- | left   | left of code block   |
        position = &#39;left&#39;,
        -- Whether to include the language icon above code blocks.
        language_icon = true,
        -- Whether to include the language name above code blocks.
        language_name = true,
        -- Whether to include the language info above code blocks.
        language_info = true,
        -- Amount of padding to add around the language.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        language_pad = 0,
        -- A list of language names for which rendering will be disabled.
        disable = {},
        -- A list of language names for which background highlighting will be disabled.
        -- Likely because that language has background highlights itself.
        -- Use a boolean to make behavior apply to all languages.
        -- Borders above &amp;amp; below blocks will continue to be rendered.
        disable_background = { &#39;diff&#39; },
        -- Number of lines from start/end to skip rendering background.
        background_inset = 1,
        -- Width of the code block background.
        -- | block | width of the code block  |
        -- | full  | full width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Margin available space is computed after accounting for padding.
        left_margin = 0,
        -- Amount of padding to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_pad = 0,
        -- Amount of padding to add to the right of code blocks when width is &#39;block&#39;.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        right_pad = 0,
        -- Minimum width to use for code blocks when width is &#39;block&#39;.
        min_width = 0,
        -- Determines how the top / bottom of code block are rendered.
        -- | none  | do not render a border                               |
        -- | thick | use the same highlight as the code body              |
        -- | thin  | when lines are empty overlay the above &amp;amp; below icons |
        -- | hide  | conceal lines unless language name or icon is added  |
        border = &#39;hide&#39;,
        -- Used above code blocks to fill remaining space around language.
        language_border = &#39;█&#39;,
        -- Added to the left of language.
        language_left = &#39;&#39;,
        -- Added to the right of language.
        language_right = &#39;&#39;,
        -- Used above code blocks for thin border.
        above = &#39;▄&#39;,
        -- Used below code blocks for thin border.
        below = &#39;▀&#39;,
        -- Turn on / off inline code related rendering.
        inline = true,
        -- Icon to add to the left of inline code.
        inline_left = &#39;&#39;,
        -- Icon to add to the right of inline code.
        inline_right = &#39;&#39;,
        -- Padding to add to the left &amp;amp; right of inline code.
        inline_pad = 0,
        -- Priority to assign to code background highlight.
        priority = 140,
        -- Highlight for code blocks.
        highlight = &#39;RenderMarkdownCode&#39;,
        -- Highlight for code info section, after the language.
        highlight_info = &#39;RenderMarkdownCodeInfo&#39;,
        -- Highlight for language, overrides icon provider value.
        highlight_language = nil,
        -- Highlight for border, use false to add no highlight.
        highlight_border = &#39;RenderMarkdownCodeBorder&#39;,
        -- Highlight for language, used if icon provider does not have a value.
        highlight_fallback = &#39;RenderMarkdownCodeFallback&#39;,
        -- Highlight for inline code.
        highlight_inline = &#39;RenderMarkdownCodeInline&#39;,
        -- Highlight for inline code left icon, default to reverse of highlight_inline.
        highlight_inline_left = nil,
        -- Highlight for inline code right icon, default to reverse of highlight_inline.
        highlight_inline_right = nil,
        -- Determines how code blocks &amp;amp; inline code are rendered.
        -- | none     | { enabled = false }                           |
        -- | normal   | { language = false }                          |
        -- | language | { disable_background = true, inline = false } |
        -- | full     | uses all default values                       |
        style = &#39;full&#39;,
    },
    dash = {
        -- Useful context to have when evaluating values.
        -- | width | width of the current window |

        -- Turn on / off thematic break rendering.
        enabled = true,
        -- Additional modes to render dash.
        render_modes = false,
        -- Replaces &#39;---&#39;|&#39;***&#39;|&#39;___&#39;|&#39;* * *&#39; of &#39;thematic_break&#39;.
        -- The icon gets repeated across the window&#39;s width.
        icon = &#39;─&#39;,
        -- Width of the generated line.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`    |
        -- | number   | `value`             |
        -- | full     | width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of dash.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_margin = 0,
        -- Priority to assign to dash.
        priority = nil,
        -- Highlight for the whole line generated from the icon.
        highlight = &#39;RenderMarkdownDash&#39;,
    },
    document = {
        -- Turn on / off document rendering.
        enabled = true,
        -- Additional modes to render document.
        render_modes = false,
        -- Ability to conceal arbitrary ranges of text based on lua patterns, @see :h lua-patterns.
        -- Relies entirely on user to set patterns that handle their edge cases.
        conceal = {
            -- Matched ranges will be concealed using character level conceal.
            char_patterns = {},
            -- Matched ranges will be concealed using line level conceal.
            line_patterns = {},
        },
    },
    bullet = {
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |

        -- Turn on / off list bullet rendering
        enabled = true,
        -- Additional modes to render list bullets
        render_modes = false,
        -- Replaces &#39;-&#39;|&#39;+&#39;|&#39;*&#39; of &#39;list_item&#39;.
        -- If the item is a &#39;checkbox&#39; a conceal is used to hide the bullet instead.
        -- Output is evaluated depending on the type.
        -- | function   | `value(context)`                                    |
        -- | string     | `value`                                             |
        -- | string[]   | `cycle(value, context.level)`                       |
        -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
        icons = { &#39;●&#39;, &#39;○&#39;, &#39;◆&#39;, &#39;◇&#39; },
        -- Replaces &#39;n.&#39;|&#39;n)&#39; of &#39;list_item&#39;.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        ordered_icons = function(ctx)
            local value = vim.trim(ctx.value)
            local index = tonumber(value:sub(1, #value - 1))
            return (&#39;%d.&#39;):format(index &amp;gt; 1 and index or ctx.index)
        end,
        -- Padding to add to the left of bullet point.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | integer  | `value`          |
        left_pad = 0,
        -- Padding to add to the right of bullet point.
        -- Output is evaluated using the same logic as &#39;left_pad&#39;.
        right_pad = 0,
        -- Highlight for the bullet icon.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        highlight = &#39;RenderMarkdownBullet&#39;,
        -- Highlight for item associated with the bullet point.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        scope_highlight = {},
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
    checkbox = {
        -- Checkboxes are a special instance of a &#39;list_item&#39; that start with a &#39;shortcut_link&#39;.
        -- There are two special states for unchecked &amp;amp; checked defined in the markdown grammar.

        -- Turn on / off checkbox state rendering.
        enabled = true,
        -- Additional modes to render checkboxes.
        render_modes = false,
        -- Render the bullet point before the checkbox.
        bullet = false,
        -- Padding to add to the left of checkboxes.
        left_pad = 0,
        -- Padding to add to the right of checkboxes.
        right_pad = 1,
        unchecked = {
            -- Replaces &#39;[ ]&#39; of &#39;task_list_marker_unchecked&#39;.
            icon = &#39;󰄱 &#39;,
            -- Highlight for the unchecked icon.
            highlight = &#39;RenderMarkdownUnchecked&#39;,
            -- Highlight for item associated with unchecked checkbox.
            scope_highlight = nil,
        },
        checked = {
            -- Replaces &#39;[x]&#39; of &#39;task_list_marker_checked&#39;.
            icon = &#39;󰱒 &#39;,
            -- Highlight for the checked icon.
            highlight = &#39;RenderMarkdownChecked&#39;,
            -- Highlight for item associated with checked checkbox.
            scope_highlight = nil,
        },
        -- Define custom checkbox states, more involved, not part of the markdown grammar.
        -- As a result this requires neovim &amp;gt;= 0.10.0 since it relies on &#39;inline&#39; extmarks.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw             | matched against the raw text of a &#39;shortcut_link&#39;           |
        -- | rendered        | replaces the &#39;raw&#39; value when rendering                     |
        -- | highlight       | highlight for the &#39;rendered&#39; icon                           |
        -- | scope_highlight | optional highlight for item associated with custom checkbox |
        -- stylua: ignore
        custom = {
            todo = { raw = &#39;[-]&#39;, rendered = &#39;󰥔 &#39;, highlight = &#39;RenderMarkdownTodo&#39;, scope_highlight = nil },
        },
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
    quote = {
        -- Turn on / off block quote &amp;amp; callout rendering.
        enabled = true,
        -- Additional modes to render quotes.
        render_modes = false,
        -- Replaces &#39;&amp;gt;&#39; of &#39;block_quote&#39;.
        icon = &#39;▋&#39;,
        -- Whether to repeat icon on wrapped lines. Requires neovim &amp;gt;= 0.10. This will obscure text
        -- if incorrectly configured with :h &#39;showbreak&#39;, :h &#39;breakindent&#39; and :h &#39;breakindentopt&#39;.
        -- A combination of these that is likely to work follows.
        -- | showbreak      | &#39;  &#39; (2 spaces)   |
        -- | breakindent    | true              |
        -- | breakindentopt | &#39;&#39; (empty string) |
        -- These are not validated by this plugin. If you want to avoid adding these to your main
        -- configuration then set them in win_options for this plugin.
        repeat_linebreak = false,
        -- Highlight for the quote icon.
        -- If a list is provided output is evaluated by `cycle(value, level)`.
        highlight = {
            &#39;RenderMarkdownQuote1&#39;,
            &#39;RenderMarkdownQuote2&#39;,
            &#39;RenderMarkdownQuote3&#39;,
            &#39;RenderMarkdownQuote4&#39;,
            &#39;RenderMarkdownQuote5&#39;,
            &#39;RenderMarkdownQuote6&#39;,
        },
    },
    render = {
        -- Whether to render when window is in diff-mode.
        diff = false,
    },
    pipe_table = {
        -- Turn on / off pipe table rendering.
        enabled = true,
        -- Additional modes to render pipe tables.
        render_modes = false,
        -- Pre configured settings largely for setting table border easier.
        -- | heavy  | use thicker border characters     |
        -- | double | use double line border characters |
        -- | round  | use round border corners          |
        -- | none   | does nothing                      |
        preset = &#39;none&#39;,
        -- Determines how individual cells of a table are rendered.
        -- | overlay | writes completely over the table, removing conceal behavior and highlights |
        -- | raw     | replaces only the &#39;|&#39; characters in each row, leaving the cells unmodified |
        -- | padded  | raw + cells are padded to maximum visual width for each column             |
        -- | trimmed | padded except empty space is subtracted from visual width calculation      |
        cell = &#39;padded&#39;,
        -- Adjust the computed width of table cells using custom logic.
        cell_offset = function()
            return 0
        end,
        -- Amount of space to put between cell contents and border.
        padding = 1,
        -- Minimum column width to use for padded or trimmed cell.
        min_width = 0,
        -- Characters used to replace table border.
        -- Correspond to top(3), delimiter(3), bottom(3), vertical, &amp;amp; horizontal.
        -- stylua: ignore
        border = {
            &#39;┌&#39;, &#39;┬&#39;, &#39;┐&#39;,
            &#39;├&#39;, &#39;┼&#39;, &#39;┤&#39;,
            &#39;└&#39;, &#39;┴&#39;, &#39;┘&#39;,
            &#39;│&#39;, &#39;─&#39;,
        },
        -- Turn on / off top &amp;amp; bottom lines.
        border_enabled = true,
        -- Always use virtual lines for table borders instead of attempting to use empty lines.
        -- Will be automatically enabled if indentation module is enabled.
        border_virtual = false,
        -- Gets placed in delimiter row for each column, position is based on alignment.
        alignment_indicator = &#39;━&#39;,
        -- Highlight for table heading, delimiter, and the line above.
        head = &#39;RenderMarkdownTableHead&#39;,
        -- Highlight for everything else, main table rows and the line below.
        row = &#39;RenderMarkdownTableRow&#39;,
        -- Determines how the table as a whole is rendered.
        -- | none   | { enabled = false }        |
        -- | normal | { border_enabled = false } |
        -- | full   | uses all default values    |
        style = &#39;full&#39;,
    },
    callout = {
        -- Callouts are a special instance of a &#39;block_quote&#39; that start with a &#39;shortcut_link&#39;.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a &#39;shortcut_link&#39;, case insensitive |
        -- | rendered   | replaces the &#39;raw&#39; value when rendering                             |
        -- | highlight  | highlight for the &#39;rendered&#39; text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        -- | category   | optional metadata useful for filtering                              |

        note      = { raw = &#39;[!NOTE]&#39;,      rendered = &#39;󰋽 Note&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;github&#39;   },
        tip       = { raw = &#39;[!TIP]&#39;,       rendered = &#39;󰌶 Tip&#39;,       highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;github&#39;   },
        important = { raw = &#39;[!IMPORTANT]&#39;, rendered = &#39;󰅾 Important&#39;, highlight = &#39;RenderMarkdownHint&#39;,    category = &#39;github&#39;   },
        warning   = { raw = &#39;[!WARNING]&#39;,   rendered = &#39;󰀪 Warning&#39;,   highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;github&#39;   },
        caution   = { raw = &#39;[!CAUTION]&#39;,   rendered = &#39;󰳦 Caution&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;github&#39;   },
        -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
        abstract  = { raw = &#39;[!ABSTRACT]&#39;,  rendered = &#39;󰨸 Abstract&#39;,  highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        summary   = { raw = &#39;[!SUMMARY]&#39;,   rendered = &#39;󰨸 Summary&#39;,   highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        tldr      = { raw = &#39;[!TLDR]&#39;,      rendered = &#39;󰨸 Tldr&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        info      = { raw = &#39;[!INFO]&#39;,      rendered = &#39;󰋽 Info&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        todo      = { raw = &#39;[!TODO]&#39;,      rendered = &#39;󰗡 Todo&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        hint      = { raw = &#39;[!HINT]&#39;,      rendered = &#39;󰌶 Hint&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        success   = { raw = &#39;[!SUCCESS]&#39;,   rendered = &#39;󰄬 Success&#39;,   highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        check     = { raw = &#39;[!CHECK]&#39;,     rendered = &#39;󰄬 Check&#39;,     highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        done      = { raw = &#39;[!DONE]&#39;,      rendered = &#39;󰄬 Done&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        question  = { raw = &#39;[!QUESTION]&#39;,  rendered = &#39;󰘥 Question&#39;,  highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        help      = { raw = &#39;[!HELP]&#39;,      rendered = &#39;󰘥 Help&#39;,      highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        faq       = { raw = &#39;[!FAQ]&#39;,       rendered = &#39;󰘥 Faq&#39;,       highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        attention = { raw = &#39;[!ATTENTION]&#39;, rendered = &#39;󰀪 Attention&#39;, highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        failure   = { raw = &#39;[!FAILURE]&#39;,   rendered = &#39;󰅖 Failure&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        fail      = { raw = &#39;[!FAIL]&#39;,      rendered = &#39;󰅖 Fail&#39;,      highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        missing   = { raw = &#39;[!MISSING]&#39;,   rendered = &#39;󰅖 Missing&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        danger    = { raw = &#39;[!DANGER]&#39;,    rendered = &#39;󱐌 Danger&#39;,    highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        error     = { raw = &#39;[!ERROR]&#39;,     rendered = &#39;󱐌 Error&#39;,     highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        bug       = { raw = &#39;[!BUG]&#39;,       rendered = &#39;󰨰 Bug&#39;,       highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        example   = { raw = &#39;[!EXAMPLE]&#39;,   rendered = &#39;󰉹 Example&#39;,   highlight = &#39;RenderMarkdownHint&#39; ,   category = &#39;obsidian&#39; },
        quote     = { raw = &#39;[!QUOTE]&#39;,     rendered = &#39;󱆨 Quote&#39;,     highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
        cite      = { raw = &#39;[!CITE]&#39;,      rendered = &#39;󱆨 Cite&#39;,      highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
    },
    link = {
        -- Turn on / off inline link icon rendering.
        enabled = true,
        -- Additional modes to render links.
        render_modes = false,
        -- How to handle footnote links, start with a &#39;^&#39;.
        footnote = {
            -- Turn on / off footnote rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󰯔 &#39;,
            -- Custom processing for footnote body to show.
            -- Runs before prefix / suffix are added and superscript processing.
            body = function(ctx)
                return ctx.text
            end,
            -- Replace value with superscript equivalent.
            superscript = true,
            -- Added before link content.
            prefix = &#39;&#39;,
            -- Added after link content.
            suffix = &#39;&#39;,
        },
        -- Inlined with &#39;image&#39; elements.
        image = &#39;󰥶 &#39;,
        -- Check custom for &#39;image&#39; elements.
        image_custom = true,
        -- Inlined with &#39;email_autolink&#39; elements.
        email = &#39;󰀓 &#39;,
        -- Fallback icon for &#39;inline_link&#39; and &#39;uri_autolink&#39; elements.
        hyperlink = &#39;󰌹 &#39;,
        -- Applies to the inlined icon as a fallback.
        highlight = &#39;RenderMarkdownLink&#39;,
        -- Applies to the link title.
        highlight_title = &#39;RenderMarkdownLinkTitle&#39;,
        -- Applies to WikiLink elements.
        wiki = {
            -- Turn on / off WikiLink rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󱗖 &#39;,
            -- Hide destination if there is an alias.
            conceal_destination = true,
            -- Custom processing for WikiLink body to show.
            body = function()
                return nil
            end,
            -- Applies to the inlined icon.
            highlight = &#39;RenderMarkdownWikiLink&#39;,
            -- Highlight for item associated with the WikiLink.
            scope_highlight = nil,
        },
        -- Define custom destination patterns so icons can quickly inform you of what a link
        -- contains. Applies to &#39;image&#39;, &#39;inline_link&#39;, &#39;uri_autolink&#39;, and WikiLink nodes.
        -- When multiple patterns match a link the one with the longer pattern is used.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | icon      | gets inlined before the link text                               |
        -- | pattern   | matched against the destination text                            |
        -- | kind      | optional determines how pattern is checked                      |
        -- |           | pattern | @see :h lua-patterns, is the default if not set       |
        -- |           | suffix  | @see :h vim.endswith()                                |
        -- |           | url     | similar to pattern with additional prefix checks      |
        -- | priority  | optional used when multiple match, uses pattern length if empty |
        -- | highlight | optional highlight for &#39;icon&#39;, uses fallback highlight if empty |
        -- stylua: ignore
        custom = {
            web = { icon = &#39;󰖟 &#39;, pattern = &#39;^http&#39; },
            apple = { icon = &#39; &#39;, pattern = &#39;apple%.com&#39;, kind = &#39;url&#39; },
            discord = { icon = &#39;󰙯 &#39;, pattern = &#39;discord%.com&#39;, kind = &#39;url&#39; },
            github = { icon = &#39;󰊤 &#39;, pattern = &#39;github%.com&#39;, kind = &#39;url&#39; },
            gitlab = { icon = &#39;󰮠 &#39;, pattern = &#39;gitlab%.com&#39;, kind = &#39;url&#39; },
            google = { icon = &#39;󰊭 &#39;, pattern = &#39;google%.com&#39;, kind = &#39;url&#39; },
            hackernews = { icon = &#39; &#39;, pattern = &#39;ycombinator%.com&#39;, kind = &#39;url&#39; },
            linkedin = { icon = &#39;󰌻 &#39;, pattern = &#39;linkedin%.com&#39;, kind = &#39;url&#39; },
            microsoft = { icon = &#39; &#39;, pattern = &#39;microsoft%.com&#39;, kind = &#39;url&#39; },
            neovim = { icon = &#39; &#39;, pattern = &#39;neovim%.io&#39;, kind = &#39;url&#39; },
            reddit = { icon = &#39;󰑍 &#39;, pattern = &#39;reddit%.com&#39;, kind = &#39;url&#39; },
            slack = { icon = &#39;󰒱 &#39;, pattern = &#39;slack%.com&#39;, kind = &#39;url&#39; },
            stackoverflow = { icon = &#39;󰓌 &#39;, pattern = &#39;stackoverflow%.com&#39;, kind = &#39;url&#39; },
            steam = { icon = &#39; &#39;, pattern = &#39;steampowered%.com&#39;, kind = &#39;url&#39; },
            twitter = { icon = &#39; &#39;, pattern = &#39;twitter%.com&#39;, kind = &#39;url&#39; },
            wikipedia = { icon = &#39;󰖬 &#39;, pattern = &#39;wikipedia%.org&#39;, kind = &#39;url&#39; },
            x = { icon = &#39; &#39;, pattern = &#39;x%.com&#39;, kind = &#39;url&#39; },
            youtube = { icon = &#39;󰗃 &#39;, pattern = &#39;youtube[^.]*%.com&#39;, kind = &#39;url&#39; },
            youtube_short = { icon = &#39;󰗃 &#39;, pattern = &#39;youtu%.be&#39;, kind = &#39;url&#39; },
        },
    },
    sign = {
        -- Turn on / off sign rendering.
        enabled = true,
        -- Priority to assign to sign.
        priority = nil,
        -- Applies to background of sign text.
        highlight = &#39;RenderMarkdownSign&#39;,
    },
    inline_highlight = {
        -- Mimics Obsidian inline highlights when content is surrounded by double equals.
        -- The equals on both ends are concealed and the inner content is highlighted.

        -- Turn on / off inline highlight rendering.
        enabled = true,
        -- Additional modes to render inline highlights.
        render_modes = false,
        -- Applies to background of surrounded text.
        highlight = &#39;RenderMarkdownInlineHighlight&#39;,
        -- Define custom highlights based on text prefix.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | prefix    | matched against text body, @see :h vim.startswith() |
        -- | highlight | highlight for text body                             |
        custom = {},
    },
    indent = {
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the
        -- level of the heading. Indenting starts from level 2 headings onward by default.

        -- Turn on / off org-indent-mode.
        enabled = false,
        -- Additional modes to render indents.
        render_modes = false,
        -- Amount of additional padding added for each heading level.
        per_level = 2,
        -- Heading levels &amp;lt;= this value will not be indented.
        -- Use 0 to begin indenting from the very first level.
        skip_level = 1,
        -- Do not indent heading titles, only the body.
        skip_heading = false,
        -- Prefix added when indenting, one per level.
        icon = &#39;▎&#39;,
        -- Priority to assign to extmarks.
        priority = 0,
        -- Applied to icon.
        highlight = &#39;RenderMarkdownIndent&#39;,
    },
    html = {
        -- Turn on / off all HTML rendering.
        enabled = true,
        -- Additional modes to render HTML.
        render_modes = false,
        comment = {
            -- Useful context to have when evaluating values.
            -- | text | text value of the comment node |

            -- Turn on / off HTML comment concealing.
            conceal = true,
            -- Text to inline before the concealed comment.
            -- Output is evaluated depending on the type.
            -- | function | `value(context)` |
            -- | string   | `value`          |
            -- | nil      | nothing          |
            text = nil,
            -- Highlight for the inlined text.
            highlight = &#39;RenderMarkdownHtmlComment&#39;,
        },
        -- HTML tags whose start and end will be hidden and icon shown.
        -- The key is matched against the tag name, value type below.
        -- | icon            | optional icon inlined at start of tag           |
        -- | highlight       | optional highlight for the icon                 |
        -- | scope_highlight | optional highlight for item associated with tag |
        tag = {},
    },
    win_options = {
        -- Window options to use that change between rendered and raw view.

        -- @see :h &#39;conceallevel&#39;
        conceallevel = {
            -- Used when not being rendered, get user setting.
            default = vim.o.conceallevel,
            -- Used when being rendered, concealed text is completely hidden.
            rendered = 3,
        },
        -- @see :h &#39;concealcursor&#39;
        concealcursor = {
            -- Used when not being rendered, get user setting.
            default = vim.o.concealcursor,
            -- Used when being rendered, show concealed text in all modes.
            rendered = &#39;&#39;,
        },
    },
    overrides = {
        -- More granular configuration mechanism, allows different aspects of buffers to have their own
        -- behavior. Values default to the top level configuration if no override is provided. Supports
        -- the following fields:
        --   enabled, render_modes, debounce, anti_conceal, bullet, callout, checkbox, code, dash,
        --   document, heading, html, indent, inline_highlight, latex, link, padding, paragraph,
        --   pipe_table, quote, sign, win_options, yaml

        -- Override for different buflisted values, @see :h &#39;buflisted&#39;.
        buflisted = {},
        -- Override for different buftype values, @see :h &#39;buftype&#39;.
        buftype = {
            nofile = {
                render_modes = true,
                padding = { highlight = &#39;NormalFloat&#39; },
                sign = { enabled = false },
            },
        },
        -- Override for different filetype values, @see :h &#39;filetype&#39;.
        filetype = {},
        -- Override for preview buffer.
        preview = {
            render_modes = true,
        },
    },
    custom_handlers = {
        -- Mapping from treesitter language to user defined handlers.
        -- @see [Custom Handlers](doc/custom-handlers.md)
    },
    yaml = {
        -- Turn on / off all yaml rendering.
        enabled = true,
        -- Additional modes to render yaml.
        render_modes = false,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;We use the following definitions when discussing indexing into lists:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Cycle: Indexed &lt;code&gt;mod&lt;/code&gt; the length. Example: &lt;code&gt;{ 1, 2, 3 }&lt;/code&gt; @ 4 = 1.&lt;/li&gt; 
 &lt;li&gt;Clamp: Indexed normally but larger values use the last value in the list. Example: &lt;code&gt;{ 1, 2, 3 }&lt;/code&gt; @ 4 = 3.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Headings&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Headings&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Heading Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    heading = {
        -- Useful context to have when evaluating values.
        -- | level    | the number of &#39;#&#39; in the heading marker         |
        -- | sections | for each level how deeply nested the heading is |

        -- Turn on / off heading icon &amp;amp; background rendering.
        enabled = true,
        -- Additional modes to render headings.
        render_modes = false,
        -- Turn on / off atx heading rendering.
        atx = true,
        -- Turn on / off setext heading rendering.
        setext = true,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Replaces &#39;#+&#39; of &#39;atx_h._marker&#39;.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`              |
        -- | string[] | `cycle(value, context.level)` |
        icons = { &#39;󰲡 &#39;, &#39;󰲣 &#39;, &#39;󰲥 &#39;, &#39;󰲧 &#39;, &#39;󰲩 &#39;, &#39;󰲫 &#39; },
        -- Determines how icons fill the available space.
        -- | eol     | &#39;#&#39;s are concealed and icon is placed at right most column   |
        -- | right   | &#39;#&#39;s are concealed and icon is appended to right side        |
        -- | inline  | &#39;#&#39;s are concealed and icon is inlined on left side          |
        -- | overlay | icon is left padded with spaces and overlayed hiding all &#39;#&#39; |
        position = &#39;overlay&#39;,
        -- Added to the sign column if enabled.
        -- Output is evaluated by `cycle(value, context.level)`.
        signs = { &#39;󰫎 &#39; },
        -- Width of the heading background.
        -- | block | width of the heading text |
        -- | full  | full width of the window  |
        -- Can also be a list of the above values evaluated by `clamp(value, context.level)`.
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of headings.
        -- Margin available space is computed after accounting for padding.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Can also be a list of numbers evaluated by `clamp(value, context.level)`.
        left_margin = 0,
        -- Amount of padding to add to the left of headings.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        left_pad = 0,
        -- Amount of padding to add to the right of headings when width is &#39;block&#39;.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        right_pad = 0,
        -- Minimum width to use for headings when width is &#39;block&#39;.
        -- Can also be a list of integers evaluated by `clamp(value, context.level)`.
        min_width = 0,
        -- Determines if a border is added above and below headings.
        -- Can also be a list of booleans evaluated by `clamp(value, context.level)`.
        border = false,
        -- Always use virtual lines for heading borders instead of attempting to use empty lines.
        border_virtual = false,
        -- Highlight the start of the border using the foreground highlight.
        border_prefix = false,
        -- Used above heading for border.
        above = &#39;▄&#39;,
        -- Used below heading for border.
        below = &#39;▀&#39;,
        -- Highlight for the heading icon and extends through the entire line.
        -- Output is evaluated by `clamp(value, context.level)`.
        backgrounds = {
            &#39;RenderMarkdownH1Bg&#39;,
            &#39;RenderMarkdownH2Bg&#39;,
            &#39;RenderMarkdownH3Bg&#39;,
            &#39;RenderMarkdownH4Bg&#39;,
            &#39;RenderMarkdownH5Bg&#39;,
            &#39;RenderMarkdownH6Bg&#39;,
        },
        -- Highlight for the heading and sign icons.
        -- Output is evaluated using the same logic as &#39;backgrounds&#39;.
        foregrounds = {
            &#39;RenderMarkdownH1&#39;,
            &#39;RenderMarkdownH2&#39;,
            &#39;RenderMarkdownH3&#39;,
            &#39;RenderMarkdownH4&#39;,
            &#39;RenderMarkdownH5&#39;,
            &#39;RenderMarkdownH6&#39;,
        },
        -- Define custom heading patterns which allow you to override various properties based on
        -- the contents of a heading.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | pattern    | matched against the heading text @see :h lua-patterns |
        -- | icon       | optional override for the icon                        |
        -- | background | optional override for the background                  |
        -- | foreground | optional override for the foreground                  |
        custom = {},
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Paragraphs&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Paragraphs&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Paragraph Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    paragraph = {
        -- Useful context to have when evaluating values.
        -- | text | text value of the node |

        -- Turn on / off paragraph rendering.
        enabled = true,
        -- Additional modes to render paragraphs.
        render_modes = false,
        -- Amount of margin to add to the left of paragraphs.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | number   | `value`          |
        left_margin = 0,
        -- Amount of padding to add to the first line of each paragraph.
        -- Output is evaluated using the same logic as &#39;left_margin&#39;.
        indent = 0,
        -- Minimum width to use for paragraphs.
        min_width = 0,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Code Blocks&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/CodeBlocks&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Code Block Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    code = {
        -- Turn on / off code block &amp;amp; inline code rendering.
        enabled = true,
        -- Additional modes to render code blocks.
        render_modes = false,
        -- Turn on / off sign column related rendering.
        sign = true,
        -- Whether to conceal nodes at the top and bottom of code blocks.
        conceal_delimiters = true,
        -- Turn on / off language heading related rendering.
        language = true,
        -- Determines where language icon is rendered.
        -- | center | center of code block |
        -- | right  | right of code block  |
        -- | left   | left of code block   |
        position = &#39;left&#39;,
        -- Whether to include the language icon above code blocks.
        language_icon = true,
        -- Whether to include the language name above code blocks.
        language_name = true,
        -- Whether to include the language info above code blocks.
        language_info = true,
        -- Amount of padding to add around the language.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        language_pad = 0,
        -- A list of language names for which rendering will be disabled.
        disable = {},
        -- A list of language names for which background highlighting will be disabled.
        -- Likely because that language has background highlights itself.
        -- Use a boolean to make behavior apply to all languages.
        -- Borders above &amp;amp; below blocks will continue to be rendered.
        disable_background = { &#39;diff&#39; },
        -- Number of lines from start/end to skip rendering background.
        background_inset = 1,
        -- Width of the code block background.
        -- | block | width of the code block  |
        -- | full  | full width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Margin available space is computed after accounting for padding.
        left_margin = 0,
        -- Amount of padding to add to the left of code blocks.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_pad = 0,
        -- Amount of padding to add to the right of code blocks when width is &#39;block&#39;.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        right_pad = 0,
        -- Minimum width to use for code blocks when width is &#39;block&#39;.
        min_width = 0,
        -- Determines how the top / bottom of code block are rendered.
        -- | none  | do not render a border                               |
        -- | thick | use the same highlight as the code body              |
        -- | thin  | when lines are empty overlay the above &amp;amp; below icons |
        -- | hide  | conceal lines unless language name or icon is added  |
        border = &#39;hide&#39;,
        -- Used above code blocks to fill remaining space around language.
        language_border = &#39;█&#39;,
        -- Added to the left of language.
        language_left = &#39;&#39;,
        -- Added to the right of language.
        language_right = &#39;&#39;,
        -- Used above code blocks for thin border.
        above = &#39;▄&#39;,
        -- Used below code blocks for thin border.
        below = &#39;▀&#39;,
        -- Turn on / off inline code related rendering.
        inline = true,
        -- Icon to add to the left of inline code.
        inline_left = &#39;&#39;,
        -- Icon to add to the right of inline code.
        inline_right = &#39;&#39;,
        -- Padding to add to the left &amp;amp; right of inline code.
        inline_pad = 0,
        -- Priority to assign to code background highlight.
        priority = 140,
        -- Highlight for code blocks.
        highlight = &#39;RenderMarkdownCode&#39;,
        -- Highlight for code info section, after the language.
        highlight_info = &#39;RenderMarkdownCodeInfo&#39;,
        -- Highlight for language, overrides icon provider value.
        highlight_language = nil,
        -- Highlight for border, use false to add no highlight.
        highlight_border = &#39;RenderMarkdownCodeBorder&#39;,
        -- Highlight for language, used if icon provider does not have a value.
        highlight_fallback = &#39;RenderMarkdownCodeFallback&#39;,
        -- Highlight for inline code.
        highlight_inline = &#39;RenderMarkdownCodeInline&#39;,
        -- Highlight for inline code left icon, default to reverse of highlight_inline.
        highlight_inline_left = nil,
        -- Highlight for inline code right icon, default to reverse of highlight_inline.
        highlight_inline_right = nil,
        -- Determines how code blocks &amp;amp; inline code are rendered.
        -- | none     | { enabled = false }                           |
        -- | normal   | { language = false }                          |
        -- | language | { disable_background = true, inline = false } |
        -- | full     | uses all default values                       |
        style = &#39;full&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Dashed Line&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/DashedLine&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Dashed Line Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    dash = {
        -- Useful context to have when evaluating values.
        -- | width | width of the current window |

        -- Turn on / off thematic break rendering.
        enabled = true,
        -- Additional modes to render dash.
        render_modes = false,
        -- Replaces &#39;---&#39;|&#39;***&#39;|&#39;___&#39;|&#39;* * *&#39; of &#39;thematic_break&#39;.
        -- The icon gets repeated across the window&#39;s width.
        icon = &#39;─&#39;,
        -- Width of the generated line.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)`    |
        -- | number   | `value`             |
        -- | full     | width of the window |
        width = &#39;full&#39;,
        -- Amount of margin to add to the left of dash.
        -- If a float &amp;lt; 1 is provided it is treated as a percentage of available window space.
        left_margin = 0,
        -- Priority to assign to dash.
        priority = nil,
        -- Highlight for the whole line generated from the icon.
        highlight = &#39;RenderMarkdownDash&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;List Bullets&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/ListBullets&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Bullet Point Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    bullet = {
        -- Useful context to have when evaluating values.
        -- | level | how deeply nested the list is, 1-indexed          |
        -- | index | how far down the item is at that level, 1-indexed |
        -- | value | text value of the marker node                     |

        -- Turn on / off list bullet rendering
        enabled = true,
        -- Additional modes to render list bullets
        render_modes = false,
        -- Replaces &#39;-&#39;|&#39;+&#39;|&#39;*&#39; of &#39;list_item&#39;.
        -- If the item is a &#39;checkbox&#39; a conceal is used to hide the bullet instead.
        -- Output is evaluated depending on the type.
        -- | function   | `value(context)`                                    |
        -- | string     | `value`                                             |
        -- | string[]   | `cycle(value, context.level)`                       |
        -- | string[][] | `clamp(cycle(value, context.level), context.index)` |
        icons = { &#39;●&#39;, &#39;○&#39;, &#39;◆&#39;, &#39;◇&#39; },
        -- Replaces &#39;n.&#39;|&#39;n)&#39; of &#39;list_item&#39;.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        ordered_icons = function(ctx)
            local value = vim.trim(ctx.value)
            local index = tonumber(value:sub(1, #value - 1))
            return (&#39;%d.&#39;):format(index &amp;gt; 1 and index or ctx.index)
        end,
        -- Padding to add to the left of bullet point.
        -- Output is evaluated depending on the type.
        -- | function | `value(context)` |
        -- | integer  | `value`          |
        left_pad = 0,
        -- Padding to add to the right of bullet point.
        -- Output is evaluated using the same logic as &#39;left_pad&#39;.
        right_pad = 0,
        -- Highlight for the bullet icon.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        highlight = &#39;RenderMarkdownBullet&#39;,
        -- Highlight for item associated with the bullet point.
        -- Output is evaluated using the same logic as &#39;icons&#39;.
        scope_highlight = {},
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Checkboxes&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Checkboxes&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Checkbox Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    checkbox = {
        -- Checkboxes are a special instance of a &#39;list_item&#39; that start with a &#39;shortcut_link&#39;.
        -- There are two special states for unchecked &amp;amp; checked defined in the markdown grammar.

        -- Turn on / off checkbox state rendering.
        enabled = true,
        -- Additional modes to render checkboxes.
        render_modes = false,
        -- Render the bullet point before the checkbox.
        bullet = false,
        -- Padding to add to the left of checkboxes.
        left_pad = 0,
        -- Padding to add to the right of checkboxes.
        right_pad = 1,
        unchecked = {
            -- Replaces &#39;[ ]&#39; of &#39;task_list_marker_unchecked&#39;.
            icon = &#39;󰄱 &#39;,
            -- Highlight for the unchecked icon.
            highlight = &#39;RenderMarkdownUnchecked&#39;,
            -- Highlight for item associated with unchecked checkbox.
            scope_highlight = nil,
        },
        checked = {
            -- Replaces &#39;[x]&#39; of &#39;task_list_marker_checked&#39;.
            icon = &#39;󰱒 &#39;,
            -- Highlight for the checked icon.
            highlight = &#39;RenderMarkdownChecked&#39;,
            -- Highlight for item associated with checked checkbox.
            scope_highlight = nil,
        },
        -- Define custom checkbox states, more involved, not part of the markdown grammar.
        -- As a result this requires neovim &amp;gt;= 0.10.0 since it relies on &#39;inline&#39; extmarks.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw             | matched against the raw text of a &#39;shortcut_link&#39;           |
        -- | rendered        | replaces the &#39;raw&#39; value when rendering                     |
        -- | highlight       | highlight for the &#39;rendered&#39; icon                           |
        -- | scope_highlight | optional highlight for item associated with custom checkbox |
        -- stylua: ignore
        custom = {
            todo = { raw = &#39;[-]&#39;, rendered = &#39;󰥔 &#39;, highlight = &#39;RenderMarkdownTodo&#39;, scope_highlight = nil },
        },
        -- Priority to assign to scope highlight.
        scope_priority = nil,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Block Quotes&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/BlockQuotes&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Block Quote Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    quote = {
        -- Turn on / off block quote &amp;amp; callout rendering.
        enabled = true,
        -- Additional modes to render quotes.
        render_modes = false,
        -- Replaces &#39;&amp;gt;&#39; of &#39;block_quote&#39;.
        icon = &#39;▋&#39;,
        -- Whether to repeat icon on wrapped lines. Requires neovim &amp;gt;= 0.10. This will obscure text
        -- if incorrectly configured with :h &#39;showbreak&#39;, :h &#39;breakindent&#39; and :h &#39;breakindentopt&#39;.
        -- A combination of these that is likely to work follows.
        -- | showbreak      | &#39;  &#39; (2 spaces)   |
        -- | breakindent    | true              |
        -- | breakindentopt | &#39;&#39; (empty string) |
        -- These are not validated by this plugin. If you want to avoid adding these to your main
        -- configuration then set them in win_options for this plugin.
        repeat_linebreak = false,
        -- Highlight for the quote icon.
        -- If a list is provided output is evaluated by `cycle(value, level)`.
        highlight = {
            &#39;RenderMarkdownQuote1&#39;,
            &#39;RenderMarkdownQuote2&#39;,
            &#39;RenderMarkdownQuote3&#39;,
            &#39;RenderMarkdownQuote4&#39;,
            &#39;RenderMarkdownQuote5&#39;,
            &#39;RenderMarkdownQuote6&#39;,
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Tables&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Tables&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Table Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    pipe_table = {
        -- Turn on / off pipe table rendering.
        enabled = true,
        -- Additional modes to render pipe tables.
        render_modes = false,
        -- Pre configured settings largely for setting table border easier.
        -- | heavy  | use thicker border characters     |
        -- | double | use double line border characters |
        -- | round  | use round border corners          |
        -- | none   | does nothing                      |
        preset = &#39;none&#39;,
        -- Determines how individual cells of a table are rendered.
        -- | overlay | writes completely over the table, removing conceal behavior and highlights |
        -- | raw     | replaces only the &#39;|&#39; characters in each row, leaving the cells unmodified |
        -- | padded  | raw + cells are padded to maximum visual width for each column             |
        -- | trimmed | padded except empty space is subtracted from visual width calculation      |
        cell = &#39;padded&#39;,
        -- Adjust the computed width of table cells using custom logic.
        cell_offset = function()
            return 0
        end,
        -- Amount of space to put between cell contents and border.
        padding = 1,
        -- Minimum column width to use for padded or trimmed cell.
        min_width = 0,
        -- Characters used to replace table border.
        -- Correspond to top(3), delimiter(3), bottom(3), vertical, &amp;amp; horizontal.
        -- stylua: ignore
        border = {
            &#39;┌&#39;, &#39;┬&#39;, &#39;┐&#39;,
            &#39;├&#39;, &#39;┼&#39;, &#39;┤&#39;,
            &#39;└&#39;, &#39;┴&#39;, &#39;┘&#39;,
            &#39;│&#39;, &#39;─&#39;,
        },
        -- Turn on / off top &amp;amp; bottom lines.
        border_enabled = true,
        -- Always use virtual lines for table borders instead of attempting to use empty lines.
        -- Will be automatically enabled if indentation module is enabled.
        border_virtual = false,
        -- Gets placed in delimiter row for each column, position is based on alignment.
        alignment_indicator = &#39;━&#39;,
        -- Highlight for table heading, delimiter, and the line above.
        head = &#39;RenderMarkdownTableHead&#39;,
        -- Highlight for everything else, main table rows and the line below.
        row = &#39;RenderMarkdownTableRow&#39;,
        -- Determines how the table as a whole is rendered.
        -- | none   | { enabled = false }        |
        -- | normal | { border_enabled = false } |
        -- | full   | uses all default values    |
        style = &#39;full&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Callouts&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Callouts&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Callout Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    callout = {
        -- Callouts are a special instance of a &#39;block_quote&#39; that start with a &#39;shortcut_link&#39;.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | raw        | matched against the raw text of a &#39;shortcut_link&#39;, case insensitive |
        -- | rendered   | replaces the &#39;raw&#39; value when rendering                             |
        -- | highlight  | highlight for the &#39;rendered&#39; text and quote markers                 |
        -- | quote_icon | optional override for quote.icon value for individual callout       |
        -- | category   | optional metadata useful for filtering                              |

        note      = { raw = &#39;[!NOTE]&#39;,      rendered = &#39;󰋽 Note&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;github&#39;   },
        tip       = { raw = &#39;[!TIP]&#39;,       rendered = &#39;󰌶 Tip&#39;,       highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;github&#39;   },
        important = { raw = &#39;[!IMPORTANT]&#39;, rendered = &#39;󰅾 Important&#39;, highlight = &#39;RenderMarkdownHint&#39;,    category = &#39;github&#39;   },
        warning   = { raw = &#39;[!WARNING]&#39;,   rendered = &#39;󰀪 Warning&#39;,   highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;github&#39;   },
        caution   = { raw = &#39;[!CAUTION]&#39;,   rendered = &#39;󰳦 Caution&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;github&#39;   },
        -- Obsidian: https://help.obsidian.md/Editing+and+formatting/Callouts
        abstract  = { raw = &#39;[!ABSTRACT]&#39;,  rendered = &#39;󰨸 Abstract&#39;,  highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        summary   = { raw = &#39;[!SUMMARY]&#39;,   rendered = &#39;󰨸 Summary&#39;,   highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        tldr      = { raw = &#39;[!TLDR]&#39;,      rendered = &#39;󰨸 Tldr&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        info      = { raw = &#39;[!INFO]&#39;,      rendered = &#39;󰋽 Info&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        todo      = { raw = &#39;[!TODO]&#39;,      rendered = &#39;󰗡 Todo&#39;,      highlight = &#39;RenderMarkdownInfo&#39;,    category = &#39;obsidian&#39; },
        hint      = { raw = &#39;[!HINT]&#39;,      rendered = &#39;󰌶 Hint&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        success   = { raw = &#39;[!SUCCESS]&#39;,   rendered = &#39;󰄬 Success&#39;,   highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        check     = { raw = &#39;[!CHECK]&#39;,     rendered = &#39;󰄬 Check&#39;,     highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        done      = { raw = &#39;[!DONE]&#39;,      rendered = &#39;󰄬 Done&#39;,      highlight = &#39;RenderMarkdownSuccess&#39;, category = &#39;obsidian&#39; },
        question  = { raw = &#39;[!QUESTION]&#39;,  rendered = &#39;󰘥 Question&#39;,  highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        help      = { raw = &#39;[!HELP]&#39;,      rendered = &#39;󰘥 Help&#39;,      highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        faq       = { raw = &#39;[!FAQ]&#39;,       rendered = &#39;󰘥 Faq&#39;,       highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        attention = { raw = &#39;[!ATTENTION]&#39;, rendered = &#39;󰀪 Attention&#39;, highlight = &#39;RenderMarkdownWarn&#39;,    category = &#39;obsidian&#39; },
        failure   = { raw = &#39;[!FAILURE]&#39;,   rendered = &#39;󰅖 Failure&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        fail      = { raw = &#39;[!FAIL]&#39;,      rendered = &#39;󰅖 Fail&#39;,      highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        missing   = { raw = &#39;[!MISSING]&#39;,   rendered = &#39;󰅖 Missing&#39;,   highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        danger    = { raw = &#39;[!DANGER]&#39;,    rendered = &#39;󱐌 Danger&#39;,    highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        error     = { raw = &#39;[!ERROR]&#39;,     rendered = &#39;󱐌 Error&#39;,     highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        bug       = { raw = &#39;[!BUG]&#39;,       rendered = &#39;󰨰 Bug&#39;,       highlight = &#39;RenderMarkdownError&#39;,   category = &#39;obsidian&#39; },
        example   = { raw = &#39;[!EXAMPLE]&#39;,   rendered = &#39;󰉹 Example&#39;,   highlight = &#39;RenderMarkdownHint&#39; ,   category = &#39;obsidian&#39; },
        quote     = { raw = &#39;[!QUOTE]&#39;,     rendered = &#39;󱆨 Quote&#39;,     highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
        cite      = { raw = &#39;[!CITE]&#39;,      rendered = &#39;󱆨 Cite&#39;,      highlight = &#39;RenderMarkdownQuote&#39;,   category = &#39;obsidian&#39; },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Links&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Links&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Link Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    link = {
        -- Turn on / off inline link icon rendering.
        enabled = true,
        -- Additional modes to render links.
        render_modes = false,
        -- How to handle footnote links, start with a &#39;^&#39;.
        footnote = {
            -- Turn on / off footnote rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󰯔 &#39;,
            -- Custom processing for footnote body to show.
            -- Runs before prefix / suffix are added and superscript processing.
            body = function(ctx)
                return ctx.text
            end,
            -- Replace value with superscript equivalent.
            superscript = true,
            -- Added before link content.
            prefix = &#39;&#39;,
            -- Added after link content.
            suffix = &#39;&#39;,
        },
        -- Inlined with &#39;image&#39; elements.
        image = &#39;󰥶 &#39;,
        -- Check custom for &#39;image&#39; elements.
        image_custom = true,
        -- Inlined with &#39;email_autolink&#39; elements.
        email = &#39;󰀓 &#39;,
        -- Fallback icon for &#39;inline_link&#39; and &#39;uri_autolink&#39; elements.
        hyperlink = &#39;󰌹 &#39;,
        -- Applies to the inlined icon as a fallback.
        highlight = &#39;RenderMarkdownLink&#39;,
        -- Applies to the link title.
        highlight_title = &#39;RenderMarkdownLinkTitle&#39;,
        -- Applies to WikiLink elements.
        wiki = {
            -- Turn on / off WikiLink rendering.
            enabled = true,
            -- Inlined with content.
            icon = &#39;󱗖 &#39;,
            -- Hide destination if there is an alias.
            conceal_destination = true,
            -- Custom processing for WikiLink body to show.
            body = function()
                return nil
            end,
            -- Applies to the inlined icon.
            highlight = &#39;RenderMarkdownWikiLink&#39;,
            -- Highlight for item associated with the WikiLink.
            scope_highlight = nil,
        },
        -- Define custom destination patterns so icons can quickly inform you of what a link
        -- contains. Applies to &#39;image&#39;, &#39;inline_link&#39;, &#39;uri_autolink&#39;, and WikiLink nodes.
        -- When multiple patterns match a link the one with the longer pattern is used.
        -- The key is for healthcheck and to allow users to change its values, value type below.
        -- | icon      | gets inlined before the link text                               |
        -- | pattern   | matched against the destination text                            |
        -- | kind      | optional determines how pattern is checked                      |
        -- |           | pattern | @see :h lua-patterns, is the default if not set       |
        -- |           | suffix  | @see :h vim.endswith()                                |
        -- |           | url     | similar to pattern with additional prefix checks      |
        -- | priority  | optional used when multiple match, uses pattern length if empty |
        -- | highlight | optional highlight for &#39;icon&#39;, uses fallback highlight if empty |
        -- stylua: ignore
        custom = {
            web = { icon = &#39;󰖟 &#39;, pattern = &#39;^http&#39; },
            apple = { icon = &#39; &#39;, pattern = &#39;apple%.com&#39;, kind = &#39;url&#39; },
            discord = { icon = &#39;󰙯 &#39;, pattern = &#39;discord%.com&#39;, kind = &#39;url&#39; },
            github = { icon = &#39;󰊤 &#39;, pattern = &#39;github%.com&#39;, kind = &#39;url&#39; },
            gitlab = { icon = &#39;󰮠 &#39;, pattern = &#39;gitlab%.com&#39;, kind = &#39;url&#39; },
            google = { icon = &#39;󰊭 &#39;, pattern = &#39;google%.com&#39;, kind = &#39;url&#39; },
            hackernews = { icon = &#39; &#39;, pattern = &#39;ycombinator%.com&#39;, kind = &#39;url&#39; },
            linkedin = { icon = &#39;󰌻 &#39;, pattern = &#39;linkedin%.com&#39;, kind = &#39;url&#39; },
            microsoft = { icon = &#39; &#39;, pattern = &#39;microsoft%.com&#39;, kind = &#39;url&#39; },
            neovim = { icon = &#39; &#39;, pattern = &#39;neovim%.io&#39;, kind = &#39;url&#39; },
            reddit = { icon = &#39;󰑍 &#39;, pattern = &#39;reddit%.com&#39;, kind = &#39;url&#39; },
            slack = { icon = &#39;󰒱 &#39;, pattern = &#39;slack%.com&#39;, kind = &#39;url&#39; },
            stackoverflow = { icon = &#39;󰓌 &#39;, pattern = &#39;stackoverflow%.com&#39;, kind = &#39;url&#39; },
            steam = { icon = &#39; &#39;, pattern = &#39;steampowered%.com&#39;, kind = &#39;url&#39; },
            twitter = { icon = &#39; &#39;, pattern = &#39;twitter%.com&#39;, kind = &#39;url&#39; },
            wikipedia = { icon = &#39;󰖬 &#39;, pattern = &#39;wikipedia%.org&#39;, kind = &#39;url&#39; },
            x = { icon = &#39; &#39;, pattern = &#39;x%.com&#39;, kind = &#39;url&#39; },
            youtube = { icon = &#39;󰗃 &#39;, pattern = &#39;youtube[^.]*%.com&#39;, kind = &#39;url&#39; },
            youtube_short = { icon = &#39;󰗃 &#39;, pattern = &#39;youtu%.be&#39;, kind = &#39;url&#39; },
        },
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Signs&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Signs&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Sign Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    sign = {
        -- Turn on / off sign rendering.
        enabled = true,
        -- Priority to assign to sign.
        priority = nil,
        -- Applies to background of sign text.
        highlight = &#39;RenderMarkdownSign&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Indent&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/wiki/Indent&quot;&gt;Wiki Page&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Indent Configuration&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    indent = {
        -- Mimic org-indent-mode behavior by indenting everything under a heading based on the
        -- level of the heading. Indenting starts from level 2 headings onward by default.

        -- Turn on / off org-indent-mode.
        enabled = false,
        -- Additional modes to render indents.
        render_modes = false,
        -- Amount of additional padding added for each heading level.
        per_level = 2,
        -- Heading levels &amp;lt;= this value will not be indented.
        -- Use 0 to begin indenting from the very first level.
        skip_level = 1,
        -- Do not indent heading titles, only the body.
        skip_heading = false,
        -- Prefix added when indenting, one per level.
        icon = &#39;▎&#39;,
        -- Priority to assign to extmarks.
        priority = 0,
        -- Applied to icon.
        highlight = &#39;RenderMarkdownIndent&#39;,
    },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h1&gt;Colors&lt;/h1&gt; 
&lt;p&gt;The table below shows all the highlight groups with their default link&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Highlight Group&lt;/th&gt; 
   &lt;th&gt;Default Group&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH1&lt;/td&gt; 
   &lt;td&gt;@markup.heading.1.markdown&lt;/td&gt; 
   &lt;td&gt;H1 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH2&lt;/td&gt; 
   &lt;td&gt;@markup.heading.2.markdown&lt;/td&gt; 
   &lt;td&gt;H2 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH3&lt;/td&gt; 
   &lt;td&gt;@markup.heading.3.markdown&lt;/td&gt; 
   &lt;td&gt;H3 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH4&lt;/td&gt; 
   &lt;td&gt;@markup.heading.4.markdown&lt;/td&gt; 
   &lt;td&gt;H4 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH5&lt;/td&gt; 
   &lt;td&gt;@markup.heading.5.markdown&lt;/td&gt; 
   &lt;td&gt;H5 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH6&lt;/td&gt; 
   &lt;td&gt;@markup.heading.6.markdown&lt;/td&gt; 
   &lt;td&gt;H6 icons&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH1Bg&lt;/td&gt; 
   &lt;td&gt;DiffText&lt;/td&gt; 
   &lt;td&gt;H1 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH2Bg&lt;/td&gt; 
   &lt;td&gt;DiffAdd&lt;/td&gt; 
   &lt;td&gt;H2 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH3Bg&lt;/td&gt; 
   &lt;td&gt;DiffChange&lt;/td&gt; 
   &lt;td&gt;H3 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH4Bg&lt;/td&gt; 
   &lt;td&gt;DiffDelete&lt;/td&gt; 
   &lt;td&gt;H4 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH5Bg&lt;/td&gt; 
   &lt;td&gt;Visual&lt;/td&gt; 
   &lt;td&gt;H5 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownH6Bg&lt;/td&gt; 
   &lt;td&gt;CursorColumn&lt;/td&gt; 
   &lt;td&gt;H6 background line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;ColorColumn&lt;/td&gt; 
   &lt;td&gt;Code block background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeInfo&lt;/td&gt; 
   &lt;td&gt;@label&lt;/td&gt; 
   &lt;td&gt;Code info, after language&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeBorder&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;Code border background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeFallback&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;Fallback for code language&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownCodeInline&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCode&lt;/td&gt; 
   &lt;td&gt;Inline code background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;@markup.quote&lt;/td&gt; 
   &lt;td&gt;Default for block quote&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote1&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 1 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote2&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 2 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote3&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 3 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote4&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 4 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote5&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 5 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownQuote6&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownQuote&lt;/td&gt; 
   &lt;td&gt;Level 6 block quote marker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownInlineHighlight&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownCodeInline&lt;/td&gt; 
   &lt;td&gt;Inline highlights contents&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownBullet&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;List item bullet points&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownDash&lt;/td&gt; 
   &lt;td&gt;LineNr&lt;/td&gt; 
   &lt;td&gt;Thematic break line&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownSign&lt;/td&gt; 
   &lt;td&gt;SignColumn&lt;/td&gt; 
   &lt;td&gt;Sign column background&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownMath&lt;/td&gt; 
   &lt;td&gt;@markup.math&lt;/td&gt; 
   &lt;td&gt;Latex lines&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownIndent&lt;/td&gt; 
   &lt;td&gt;Whitespace&lt;/td&gt; 
   &lt;td&gt;Indent icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownHtmlComment&lt;/td&gt; 
   &lt;td&gt;@comment&lt;/td&gt; 
   &lt;td&gt;HTML comment inline text&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownLink&lt;/td&gt; 
   &lt;td&gt;@markup.link.label.markdown_inline&lt;/td&gt; 
   &lt;td&gt;Link icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownLinkTitle&lt;/td&gt; 
   &lt;td&gt;@markup.link.markdown_inline&lt;/td&gt; 
   &lt;td&gt;Link title&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownWikiLink&lt;/td&gt; 
   &lt;td&gt;RenderMarkdownLink&lt;/td&gt; 
   &lt;td&gt;WikiLink icon&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownUnchecked&lt;/td&gt; 
   &lt;td&gt;@markup.list.unchecked&lt;/td&gt; 
   &lt;td&gt;Unchecked checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownChecked&lt;/td&gt; 
   &lt;td&gt;@markup.list.checked&lt;/td&gt; 
   &lt;td&gt;Checked checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTodo&lt;/td&gt; 
   &lt;td&gt;@markup.raw&lt;/td&gt; 
   &lt;td&gt;Todo custom checkbox&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTableHead&lt;/td&gt; 
   &lt;td&gt;@markup.heading&lt;/td&gt; 
   &lt;td&gt;Pipe table heading rows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownTableRow&lt;/td&gt; 
   &lt;td&gt;Normal&lt;/td&gt; 
   &lt;td&gt;Pipe table body rows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownSuccess&lt;/td&gt; 
   &lt;td&gt;DiagnosticOk&lt;/td&gt; 
   &lt;td&gt;Success related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownInfo&lt;/td&gt; 
   &lt;td&gt;DiagnosticInfo&lt;/td&gt; 
   &lt;td&gt;Info related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownHint&lt;/td&gt; 
   &lt;td&gt;DiagnosticHint&lt;/td&gt; 
   &lt;td&gt;Hint related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownWarn&lt;/td&gt; 
   &lt;td&gt;DiagnosticWarn&lt;/td&gt; 
   &lt;td&gt;Warning related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;RenderMarkdownError&lt;/td&gt; 
   &lt;td&gt;DiagnosticError&lt;/td&gt; 
   &lt;td&gt;Error related callouts&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Info&lt;/h1&gt; 
&lt;h2&gt;vimwiki&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/vimwiki/vimwiki&quot;&gt;vimwiki&lt;/a&gt; overrides the &lt;code&gt;filetype&lt;/code&gt; of &lt;code&gt;markdown&lt;/code&gt; files, as such there are additional setup steps.&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Add &lt;code&gt;vimwiki&lt;/code&gt; to the &lt;code&gt;file_types&lt;/code&gt; configuration of this plugin&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;render-markdown&#39;).setup({
    file_types = { &#39;markdown&#39;, &#39;vimwiki&#39; },
})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Register &lt;code&gt;markdown&lt;/code&gt; as the parser for &lt;code&gt;vimwiki&lt;/code&gt; files&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.treesitter.language.register(&#39;markdown&#39;, &#39;vimwiki&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h2&gt;obsidian.nvim&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://github.com/epwalsh/obsidian.nvim&quot;&gt;obsidian.nvim&lt;/a&gt; provides UI functionality that is enabled by default. While there may be a way to have the 2 work together, for the foreseeable future only one of these plugins should be used for the UI. If you choose this plugin disable the &lt;code&gt;obsidian.nvim&lt;/code&gt; UI with:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;obsidian&#39;).setup({
    ui = { enable = false },
})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;You can also do something more custom like lazy loading this plugin via a command and adding logic to the config method to disable &lt;code&gt;obsidian.nvim&lt;/code&gt; as suggested in &lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim/issues/116&quot;&gt;#116&lt;/a&gt;, though things like this can break at any time given the reliance on internal logic.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Images&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;p&gt;Images are only supported so far as this plugin will not interfere with others like &lt;a href=&quot;https://github.com/3rd/image.nvim&quot;&gt;image.nvim&lt;/a&gt;, however nothing is done natively by this plugin. It is recommended to enable the &lt;code&gt;only_render_image_at_cursor&lt;/code&gt; option.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Additional&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/limitations.md&quot;&gt;Limitations&lt;/a&gt;: Known limitations of this plugin&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/custom-handlers.md&quot;&gt;Custom Handlers&lt;/a&gt;: Allow users to integrate custom rendering for either unsupported languages or to override / extend builtin implementations&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/troubleshooting.md&quot;&gt;Troubleshooting Guide&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/purpose.md&quot;&gt;Purpose&lt;/a&gt;: Why this plugin exists&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/doc/markdown-ecosystem.md&quot;&gt;Markdown Ecosystem&lt;/a&gt;: Information about other &lt;code&gt;markdown&lt;/code&gt; related plugins and how they co-exist&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Acknowledgments&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lukas-reineke/headlines.nvim&quot;&gt;headlines.nvim&lt;/a&gt;: The plugin that inspired me to create this one and whose implementation I used as a reference for the original version&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Saecki/crates.nvim&quot;&gt;crates.nvim&lt;/a&gt;: Used the in-process lsp implementation as an awesome reference &lt;a href=&quot;https://github.com/saecki/crates.nvim/raw/main/lua/crates/lsp.lua&quot;&gt;lsp.lua&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h1&gt;Donate&lt;/h1&gt; 
&lt;p&gt;I enjoy working on these projects and will continue to do so with the time I can find. Any support is appreciated including starring the repo and reporting issues. Money is also nice: &lt;a href=&quot;https://donate.stripe.com/4gw2bSbwA5gw5s48ww&quot;&gt;Donate via Stripe&lt;/a&gt;.&lt;/p&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;hr class=&quot;footnotes-sep&quot; /&gt; 
&lt;section class=&quot;footnotes&quot;&gt; 
 &lt;ol class=&quot;footnotes-list&quot;&gt; 
  &lt;li id=&quot;fn1&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires neovim &amp;gt;= &lt;code&gt;0.10.0&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:1&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:4&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:5&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:6&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref1:7&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn2&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires icon provider, &lt;code&gt;mini.icons&lt;/code&gt; or &lt;code&gt;nvim-web-devicons&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref2&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li id=&quot;fn3&quot; class=&quot;footnote-item&quot;&gt;&lt;p&gt;Requires &lt;code&gt;latex&lt;/code&gt; parser and &lt;code&gt;pylatexenc&lt;/code&gt; &lt;a href=&quot;https://raw.githubusercontent.com/MeanderingProgrammer/render-markdown.nvim/main/#fnref3&quot; class=&quot;footnote-backref&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/section&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/25df7e2ddad5f1c04c7fcdca6081545024515f7435eaa3af334bab7070c3d66c/MeanderingProgrammer/render-markdown.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>Kong/kong</title>
      <link>https://github.com/Kong/kong</link>
      <description>&lt;p&gt;🦍 The API and AI Gateway&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://konghq.com/&quot;&gt;&lt;img src=&quot;https://konghq.com/wp-content/uploads/2018/05/kong-logo-github-readme.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/stars/Kong/kong?style=flat-square&quot; alt=&quot;Stars&quot; /&gt; &lt;img src=&quot;https://img.shields.io/docker/pulls/_/kong?style=flat-square&quot; alt=&quot;GitHub commit activity&quot; /&gt; &lt;a href=&quot;https://github.com/Kong/kong/actions&quot;&gt;&lt;img src=&quot;https://github.com/Kong/kong/actions/workflows/build_and_test.yml/badge.svg?branch=master&amp;amp;event=push&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/Kong/kong?color=green&amp;amp;label=Version&amp;amp;style=flat-square&quot; alt=&quot;Version&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/License-Apache%202.0-blue?style=flat-square&quot; alt=&quot;License&quot; /&gt; &lt;a href=&quot;https://x.com/thekonginc&quot;&gt;&lt;img src=&quot;https://img.shields.io/twitter/follow/thekonginc?style=social&quot; alt=&quot;Twitter Follow&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Kong or Kong Gateway is a cloud-native, platform-agnostic, scalable &lt;strong&gt;API 𖧹 LLM 𖧹 MCP&lt;/strong&gt; Gateway distinguished for its high performance and extensibility via plugins. It also provides advanced AI traffic capabilities with multi-LLM support, semantic security, MCP traffic security and analytics, and more.&lt;/p&gt; 
&lt;p&gt;By providing functionality for proxying, routing, load balancing, health checking, authentication (and &lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/#features&quot;&gt;more&lt;/a&gt;), Kong serves as the central layer for orchestrating microservices or conventional API traffic - and agentic LLM and MCP as well - with ease.&lt;/p&gt; 
&lt;p&gt;Kong runs natively on Kubernetes thanks to its official &lt;a href=&quot;https://github.com/Kong/kubernetes-ingress-controller&quot;&gt;Kubernetes Ingress Controller&lt;/a&gt;.&lt;/p&gt; 
&lt;br /&gt; 
&lt;p&gt;&lt;a href=&quot;https://konghq.com/&quot;&gt;&lt;img src=&quot;https://assets.prd.mktg.konghq.com/images/2025/09/68cc1bfd-kong-diagram.png?v=2&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;p&gt;&lt;a href=&quot;https://konghq.com/install/#kong-community&quot;&gt;Installation&lt;/a&gt; | &lt;a href=&quot;https://docs.konghq.com&quot;&gt;Documentation&lt;/a&gt; | &lt;a href=&quot;https://github.com/Kong/kong/discussions&quot;&gt;Discussions&lt;/a&gt; | &lt;a href=&quot;https://discuss.konghq.com&quot;&gt;Forum&lt;/a&gt; | &lt;a href=&quot;https://konghq.com/blog&quot;&gt;Blog&lt;/a&gt; | &lt;a href=&quot;https://hub.docker.com/r/kong/kong/tags&quot;&gt;Builds&lt;/a&gt; | &lt;a href=&quot;https://konghq.com/products/kong-ai-gateway&quot;&gt;AI Gateway&lt;/a&gt; | &lt;a href=&quot;https://konghq.com/kong-konnect/&quot;&gt;Cloud Hosted Kong&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;If you prefer to use a cloud-hosted Kong, you can &lt;a href=&quot;https://konghq.com/products/kong-konnect/register?utm_medium=Referral&amp;amp;utm_source=Github&amp;amp;utm_campaign=kong-gateway&amp;amp;utm_content=konnect-promo-in-gateway&amp;amp;utm_term=get-started&quot;&gt;sign up for a free trial of Kong Konnect&lt;/a&gt; and get started in minutes. If not, you can follow the instructions below to get started with Kong on your own infrastructure.&lt;/p&gt; 
&lt;p&gt;Let’s test drive Kong by adding authentication to an API in under 5 minutes.&lt;/p&gt; 
&lt;p&gt;We suggest using the docker-compose distribution via the instructions below, but there is also a &lt;a href=&quot;https://docs.konghq.com/gateway/latest/install/docker/#install-kong-gateway-in-db-less-mode&quot;&gt;docker installation&lt;/a&gt; procedure if you’d prefer to run the Kong Gateway in DB-less mode.&lt;/p&gt; 
&lt;p&gt;Whether you’re running in the cloud, on bare metal, or using containers, you can find every supported distribution on our &lt;a href=&quot;https://konghq.com/install/#kong-community&quot;&gt;official installation&lt;/a&gt; page.&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;To start, clone the Docker repository and navigate to the compose folder.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;  $ git clone https://github.com/Kong/docker-kong
  $ cd docker-kong/compose/
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;2&quot;&gt; 
 &lt;li&gt;Start the Gateway stack using:&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code class=&quot;language-cmd&quot;&gt;  $ KONG_DATABASE=postgres docker-compose --profile database up
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The Gateway is now available on the following ports on localhost:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:8000&lt;/code&gt; - send traffic to your service via Kong&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:8001&lt;/code&gt; - configure Kong using Admin API or via &lt;a href=&quot;https://github.com/kong/deck&quot;&gt;decK&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:8002&lt;/code&gt; - access Kong&#39;s management Web UI (&lt;a href=&quot;https://github.com/Kong/kong-manager&quot;&gt;Kong Manager&lt;/a&gt;) on &lt;a href=&quot;http://localhost:8002&quot;&gt;localhost:8002&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Next, follow the &lt;a href=&quot;https://docs.konghq.com/gateway-oss/latest/getting-started/configuring-a-service/&quot;&gt;quick start guide&lt;/a&gt; to tour the Gateway features.&lt;/p&gt; 
&lt;h3&gt;Getting started with AI Gateway for LLM and MCP&lt;/h3&gt; 
&lt;p&gt;If you would like to get started with Kong AI Gateway capabilities including LLM and MCP features, please refer to the &lt;a href=&quot;https://developer.konghq.com/ai-gateway/&quot;&gt;official AI documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;p&gt;By centralizing common API, AI and MCP functionality across all your organization&#39;s services, Kong Gateway creates more freedom for engineering teams to focus on the challenges that matter most.&lt;/p&gt; 
&lt;p&gt;The top Kong features include:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Advanced routing, load balancing, health checking - all configurable via a RESTful admin API or declarative configuration.&lt;/li&gt; 
 &lt;li&gt;Authentication and authorization for APIs using methods like JWT, basic auth, OAuth, ACLs and more.&lt;/li&gt; 
 &lt;li&gt;Universal LLM API to route across multiple providers like OpenAI, Anthropic, GCP Gemini, AWS Bedrock, Azure AI, Databricks, Mistral, Huggingface and more.&lt;/li&gt; 
 &lt;li&gt;MCP traffic governance, MCP security and MCP observability in addition to MCP autogeneration from any RESTful API.&lt;/li&gt; 
 &lt;li&gt;60+ AI features like AI observability, semantic security and caching, semantic routing and more.&lt;/li&gt; 
 &lt;li&gt;Proxy, SSL/TLS termination, and connectivity support for L4 or L7 traffic.&lt;/li&gt; 
 &lt;li&gt;Plugins for enforcing traffic controls, rate limiting, req/res transformations, logging, monitoring and including a plugin developer hub.&lt;/li&gt; 
 &lt;li&gt;Sophisticated deployment models like Declarative Databaseless Deployment and Hybrid Deployment (control plane/data plane separation) without any vendor lock-in.&lt;/li&gt; 
 &lt;li&gt;Native &lt;a href=&quot;https://github.com/Kong/kubernetes-ingress-controller&quot;&gt;ingress controller&lt;/a&gt; support for serving Kubernetes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;a href=&quot;https://konghq.com/&quot;&gt;&lt;img src=&quot;https://konghq.com/wp-content/uploads/2018/05/kong-benefits-github-readme.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;Plugin Hub&lt;/h3&gt; 
&lt;p&gt;Plugins provide advanced functionality that extends the use of the Gateway. Many of the Kong Inc. and community-developed plugins like AWS Lambda, Correlation ID, and Response Transformer are showcased at the &lt;a href=&quot;https://docs.konghq.com/hub/&quot;&gt;Plugin Hub&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Contribute to the Plugin Hub and ensure your next innovative idea is published and available to the broader community!&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;We ❤️ pull requests, and we’re continually working hard to make it as easy as possible for developers to contribute. Before beginning development with the Kong Gateway, please familiarize yourself with the following developer resources:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Community Pledge (&lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/COMMUNITY_PLEDGE.md&quot;&gt;COMMUNITY_PLEDGE.md&lt;/a&gt;) for our pledge to interact with you, the open source community.&lt;/li&gt; 
 &lt;li&gt;Contributor Guide (&lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;) to learn about how to contribute to Kong.&lt;/li&gt; 
 &lt;li&gt;Development Guide (&lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/DEVELOPER.md&quot;&gt;DEVELOPER.md&lt;/a&gt;): Setting up your development environment.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/CODE_OF_CONDUCT.md&quot;&gt;CODE_OF_CONDUCT&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/COPYRIGHT&quot;&gt;COPYRIGHT&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Use the &lt;a href=&quot;https://docs.konghq.com/latest/plugin-development/&quot;&gt;Plugin Development Guide&lt;/a&gt; for building new and creative plugins, or browse the online version of Kong&#39;s source code documentation in the &lt;a href=&quot;https://docs.konghq.com/latest/pdk/&quot;&gt;Plugin Development Kit (PDK) Reference&lt;/a&gt;. Developers can build plugins in &lt;a href=&quot;https://docs.konghq.com/gateway/latest/plugin-development/&quot;&gt;Lua&lt;/a&gt;, &lt;a href=&quot;https://docs.konghq.com/gateway-oss/latest/external-plugins/#developing-go-plugins&quot;&gt;Go&lt;/a&gt; or &lt;a href=&quot;https://docs.konghq.com/gateway-oss/latest/external-plugins/#developing-javascript-plugins&quot;&gt;JavaScript&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Releases&lt;/h2&gt; 
&lt;p&gt;Please see the &lt;a href=&quot;https://raw.githubusercontent.com/Kong/kong/master/CHANGELOG.md&quot;&gt;Changelog&lt;/a&gt; for more details about a given release. The &lt;a href=&quot;https://semver.org&quot;&gt;SemVer Specification&lt;/a&gt; is followed when versioning Gateway releases.&lt;/p&gt; 
&lt;h2&gt;Join the Community&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Check out the &lt;a href=&quot;https://docs.konghq.com/&quot;&gt;docs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Join the &lt;a href=&quot;https://github.com/Kong/kong/discussions&quot;&gt;Kong discussions forum&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Join the Kong discussions at the Kong Nation forum: &lt;a href=&quot;https://discuss.konghq.com/&quot;&gt;https://discuss.konghq.com/&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Join our &lt;a href=&quot;http://kongcommunity.slack.com/&quot;&gt;Community Slack&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Read up on the latest happenings at our &lt;a href=&quot;https://konghq.com/blog/&quot;&gt;blog&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Follow us on &lt;a href=&quot;https://x.com/thekonginc&quot;&gt;X&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Subscribe to our &lt;a href=&quot;https://www.youtube.com/c/KongInc/videos&quot;&gt;YouTube channel&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Visit our &lt;a href=&quot;https://konghq.com/&quot;&gt;homepage&lt;/a&gt; to learn more&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Konnect Cloud&lt;/h2&gt; 
&lt;p&gt;Kong Inc. offers commercial subscriptions that enhance the Kong Gateway in a variety of ways. Customers of Kong&#39;s &lt;a href=&quot;https://konghq.com/kong-konnect/&quot;&gt;Konnect Cloud&lt;/a&gt; subscription take advantage of additional gateway functionality, commercial support, and access to Kong&#39;s managed (SaaS) control plane platform. The Konnect Cloud platform features include real-time analytics, a service catalog, developer portals, and so much more! &lt;a href=&quot;https://konghq.com/products/kong-konnect/register?utm_medium=Referral&amp;amp;utm_source=Github&amp;amp;utm_campaign=kong-gateway&amp;amp;utm_content=konnect-promo-in-gateway&amp;amp;utm_term=get-started&quot;&gt;Get started&lt;/a&gt; with Konnect Cloud.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;Copyright 2016-2026 Kong Inc.

Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &quot;AS IS&quot; BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
&lt;/code&gt;&lt;/pre&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5c5a8cec182529b1e445c2441b7b231da7b6a5ea6c4c5ab040de3cd646ea825e/Kong/kong" medium="image" />
      
    </item>
    
    <item>
      <title>Grokitach/Stalker_GAMMA</title>
      <link>https://github.com/Grokitach/Stalker_GAMMA</link>
      <description>&lt;p&gt;S.T.A.L.K.E.R. G.A.M.M.A. modpack for Anomaly&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/gamma-v0.9.5-f5dd42?style=flat-square&amp;amp;logoColor=%23FFFFFF&quot; alt=&quot;Static Badge&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/launcher-v8.6-ffc72b?style=flat-square&amp;amp;logoColor=%23FFFFFF&quot; alt=&quot;Static Badge&quot; /&gt; &lt;a href=&quot;https://github.com/Grokitach/Stalker_GAMMA/wiki/Installing-GAMMA&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/install-ready-00ba1f?style=flat-square&amp;amp;logoColor=%23FFFFFF&quot; alt=&quot;Static Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://discord.gg/stalker-gamma&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/912320241713958912?style=flat-square&amp;amp;logo=discord&amp;amp;logoColor=%23FFFFFF&amp;amp;label=discord&amp;amp;link=https%3A%2F%2Fdiscord.gg%2Fstalker-gamma&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.stalker-game.com/en/modding/gamma&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GSC-official%20page-blue?style=flat-square&quot; alt=&quot;Static Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gog.com/en/game/stalker_gamma&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/GOG-store%20page-8A2BE2?style=flat-square&amp;amp;logo=gogdotcom&amp;amp;logoColor=%23FFFFFF&quot; alt=&quot;Static Badge&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.paypal.com/paypalme/GrokitachGAMMA&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/PayPal-donations-002991?style=flat-square&amp;amp;logo=paypal&amp;amp;logoColor=%23FFFFFF&quot; alt=&quot;Static Badge&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/84c1bc08-f957-4372-bc98-3bef29f666d1&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;Description&lt;/h2&gt; 
&lt;p&gt;G.A.M.M.A. stands for Grok&#39;s Automated Modular Modpack for Anomaly. This modpack for the 100% free and standalone STALKER Anomaly changes &lt;em&gt;every&lt;/em&gt; aspect of the game, from the entire economy to the minute detail statistic of every gun and artefact.&lt;/p&gt; 
&lt;p&gt;From a technical point of view, the main motivation behind this project is to provide an easy to install, automatically updated and modular modding platform for Stalker Anomaly. From a gameplay point of view, the default parameters and mods activated with G.A.M.M.A. aim at providing a balanced survival, scavenging, cooking, crafting and repairing focused experience with a streamlined gameplay. GAMMA aims at creating a meaningful and enjoyable sense of progression in the sandbox Chernobyl Exclusion Zone of STALKER Anomaly.&lt;/p&gt; 
&lt;p&gt;The sense of progression in GAMMA is achieved through different aspects, that you can customise to some extent:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The more to the north you go, the more dangerous the Zone is (stronger stalkers, stronger mutants, more deadly anomalies, stronger radiations) but the better are the rewards (better gear, better toolkits, better artefacts).&lt;/li&gt; 
 &lt;li&gt;Gear acquisition is locked behind getting toolkits that are obtained by visiting rare stashes acquired by accomplishing several maps.&lt;/li&gt; 
 &lt;li&gt;Guns with green barrels will deal full damage and just need few parts of good quality to stop jamming (without the need of toolkits or repair kits).&lt;/li&gt; 
 &lt;li&gt;The gear you find on enemies need to be repaired using repair kits crafted using toolkits.&lt;/li&gt; 
 &lt;li&gt;The artefacts you find are immediately useable but need to be empowered by combining artefacts to achieve higher protection levels (using a specific tool buyable at Ecologists).&lt;/li&gt; 
 &lt;li&gt;Access to the North of the Zone is locked behind completing the Miracle Machine and the Brain Scorcher.&lt;/li&gt; 
 &lt;li&gt;GAMMA removes all gear trading, meaning you cannot buy or sell weapons or armor.&lt;/li&gt; 
 &lt;li&gt;GAMMA removes random stash loot, so you can&#39;t just run to the meta stashes and have endgame equipment instantly.&lt;/li&gt; 
 &lt;li&gt;The healing system uses multiple body parts that get damaged individually and that you heal by using first-aid kits/bandages/stimpacks followed by post-heal items such as antibiotics, antidotes, painkillers, and anti-inflammatory drugs.&lt;/li&gt; 
 &lt;li&gt;GAMMA completely revamps the STALKER Anomaly graphics, gun models, animations, A-life, Combat AI and much more thanks to the many mods made by the community.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This modpack is 100% copyright free since it redistributes little to no copyrighted content developed by other modders. Indeed, G.A.M.M.A. downloads every add-on directly from moddb or github, and installs them automatically. You will thus directly support modders by installing G.A.M.M.A. On top of this, each addon original source (moddb or github page) is directly accessible from the Mod Organizer 2 instance by right-clicking addons &amp;gt; visit &lt;a href=&quot;http://moddb.com&quot;&gt;moddb.com&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;S.T.A.L.K.E.R. G.A.M.M.A. can be installed following the &lt;a href=&quot;https://github.com/Grokitach/Stalker_GAMMA/wiki/Installing-GAMMA&quot;&gt;wiki guide&lt;/a&gt; (short and concise) or the &lt;a href=&quot;http://discord.gg/stalker-gamma&quot;&gt;discord guide&lt;/a&gt; (in depth, with lot of images).&lt;/p&gt; 
&lt;p&gt;It can also be installed using GOG one-click mod install system (simplest installation procedure), which however requires to own one of the base games: &lt;a href=&quot;https://www.gog.com/en/game/stalker_gamma&quot;&gt;https://www.gog.com/en/game/stalker_gamma&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Any Pull Request should be made &lt;strong&gt;to the dev2 branch&lt;/strong&gt;. Anyone can contribute to this project.&lt;/p&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;S.T.A.L.K.E.R. G.A.M.M.A. is a fan-created modification for S.T.A.L.K.E.R. games, developed and wholly owned by GSC Game World. S.T.A.L.K.E.R. G.A.M.M.A. is not an official product of GSC Game World and is a derivative work based on their S.T.A.L.K.E.R. games.&lt;/p&gt; 
&lt;p&gt;You can support GSC by buying the original games here (although, they are not needed to play GAMMA):&lt;/p&gt; 
&lt;p&gt;Steam: &lt;a href=&quot;https://store.steampowered.com/franchise/stalker&quot;&gt;https://store.steampowered.com/franchise/stalker&lt;/a&gt; GOG: &lt;a href=&quot;https://www.gog.com/en/game/stalker_shadow_of_chernobyl&quot;&gt;https://www.gog.com/en/game/stalker_shadow_of_chernobyl&lt;/a&gt; | &lt;a href=&quot;https://www.gog.com/en/game/stalker_clear_sky&quot;&gt;https://www.gog.com/en/game/stalker_clear_sky&lt;/a&gt; | &lt;a href=&quot;https://www.gog.com/en/game/stalker_call_of_pripyat&quot;&gt;https://www.gog.com/en/game/stalker_call_of_pripyat&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;GAMMA is a large project using the work of many talented modders, and each and everyone one of them are contributing to making Stalker Anomaly a better experience. You can check the entire modlist, modder names and mod pages link used by GAMMA here: &lt;a href=&quot;https://stalker-gamma.com/api/list&quot;&gt;https://stalker-gamma.com/api/list&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;I would like to thank all the modders involved in this project by making all the GAMMA addons free to use, edit and repost with modifications as long as the source is indicated (original addon author, from Stalker GAMMA). For numbered addons (105-), original authors must be contacted before repost and modifications. Repost of unmodified individual parts of this project are not recommended and may harm the community in the long run because updates happen quite often in this repository and it is thus better to directly post links to the relevant files stored here.&lt;/p&gt; 
&lt;h2&gt;Other Projects&lt;/h2&gt; 
&lt;p&gt;A similar logic was applied to a modpack built for Dragon&#39;s Dogma 2 called &quot;Dragon&#39;s Dogamma&quot;, for whic the entire gear looting system as been remade to put more emphasis on exploration and boss hunting instead of buying gear from shops: &lt;a href=&quot;https://github.com/Grokitach/Dragons-Dogamma&quot;&gt;https://github.com/Grokitach/Dragons-Dogamma&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/ceff2e06df14d1bfcf9e718a5d2048245da655d1d0be60e1f0e8266141cf523d/Grokitach/Stalker_GAMMA" medium="image" />
      
    </item>
    
    <item>
      <title>milanglacier/minuet-ai.nvim</title>
      <link>https://github.com/milanglacier/minuet-ai.nvim</link>
      <description>&lt;p&gt;💃 Dance with Intelligence in Your Code. Minuet offers code completion as-you-type from popular LLMs including OpenAI, Gemini, Claude, Ollama, Llama.cpp, Codestral, and more.&lt;/p&gt;&lt;hr&gt;&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet&quot;&gt;Minuet&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#quick-start&quot;&gt;Quick Start&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#virtual-text-setup&quot;&gt;Virtual Text Setup&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#nvim-cmp-setup&quot;&gt;Nvim-cmp setup&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#blink-cmp-setup&quot;&gt;Blink-cmp Setup&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#in-process-lsp-for-built-in-completion-and-inline-completion&quot;&gt;In-Process LSP for Built-in Completion and Inline Completion&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#completion&quot;&gt;Completion&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#inline-completion&quot;&gt;Inline completion&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#llm-provider-examples&quot;&gt;LLM Provider Examples&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#openrouter-deepseek-v4-flash&quot;&gt;Openrouter deepseek-v4-flash&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#opencode-go-deepseek-v4-flash&quot;&gt;Opencode Go deepseek-v4-flash&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#deepseek-deepseek-v4-flash&quot;&gt;Deepseek deepseek-v4-flash&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#ollama-qwen-25-coder7b&quot;&gt;Ollama Qwen-2.5-coder:7b&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#llamacpp-qwen-25-coder15b&quot;&gt;Llama.cpp Qwen-2.5-coder:1.5b&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#selecting-a-provider-or-model&quot;&gt;Selecting a Provider or Model&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#understanding-model-speed&quot;&gt;Understanding Model Speed&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#api-keys&quot;&gt;API Keys&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#prompt&quot;&gt;Prompt&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#prefix-first-vs-suffix-first&quot;&gt;Prefix-First vs. Suffix-First&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#providers&quot;&gt;Providers&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#openai&quot;&gt;OpenAI&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#claude&quot;&gt;Claude&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#codestral&quot;&gt;Codestral&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#mercury-coder&quot;&gt;Mercury Coder&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#gemini&quot;&gt;Gemini&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#openai-compatible&quot;&gt;OpenAI-compatible&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#openai-fim-compatible&quot;&gt;OpenAI-FIM-compatible&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#non-openai-fim-compatible-apis&quot;&gt;Non-OpenAI-FIM-Compatible APIs&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#commands&quot;&gt;Commands&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-change_provider-minuet-change_model&quot;&gt;&lt;code&gt;Minuet change_provider&lt;/code&gt;, &lt;code&gt;Minuet change_model&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-change_preset&quot;&gt;&lt;code&gt;Minuet change_preset&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-blink-minuet-cmp&quot;&gt;&lt;code&gt;Minuet blink&lt;/code&gt;, &lt;code&gt;Minuet cmp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-virtualtext&quot;&gt;&lt;code&gt;Minuet virtualtext&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-duet&quot;&gt;&lt;code&gt;Minuet duet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-lsp&quot;&gt;&lt;code&gt;Minuet lsp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#duet-next-edit-prediction&quot;&gt;Duet (Next Edit Prediction)&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#todo&quot;&gt;TODO&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#default-config&quot;&gt;Default Config&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#api&quot;&gt;API&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#virtual-text&quot;&gt;Virtual Text&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#duet&quot;&gt;Duet&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#lualine&quot;&gt;Lualine&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#minuet-event&quot;&gt;Minuet Event&lt;/a&gt; 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#standard-completion-events&quot;&gt;Standard Completion Events&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#duet-events&quot;&gt;Duet Events&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#event-data&quot;&gt;Event Data&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#faq&quot;&gt;FAQ&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#customize-cmp-ui-for-source-icon-and-kind-icon&quot;&gt;Customize &lt;code&gt;cmp&lt;/code&gt; ui for source icon and kind icon&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#customize-blink-ui-for-source-icon-and-kind-icon&quot;&gt;Customize &lt;code&gt;blink&lt;/code&gt; ui for source icon and kind icon&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#significant-input-delay-when-moving-to-a-new-line-with-nvim-cmp&quot;&gt;Significant Input Delay When Moving to a New Line with &lt;code&gt;nvim-cmp&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#integration-with-lazyvim&quot;&gt;Integration with &lt;code&gt;lazyvim&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#enhancement&quot;&gt;Enhancement&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#rag-experimental&quot;&gt;RAG (Experimental)&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#acknowledgement&quot;&gt;Acknowledgement&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Minuet&lt;/h1&gt; 
&lt;p&gt;Minuet: Dance with Intelligence in Your Code 💃.&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Minuet&lt;/code&gt; brings the grace and harmony of a minuet to your coding process. Just as dancers move during a minuet.&lt;/p&gt; 
&lt;h1&gt;Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;AI-powered code completion with dual modes: 
  &lt;ul&gt; 
   &lt;li&gt;Specialized prompts and various enhancements for chat-based LLMs on code completion tasks.&lt;/li&gt; 
   &lt;li&gt;Fill-in-the-middle (FIM) completion for compatible models (DeepSeek, Codestral, Qwen, and others).&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Support for multiple AI providers (OpenAI, Claude, Gemini, Codestral, Ollama, Llama-cpp, and OpenAI-compatible services).&lt;/li&gt; 
 &lt;li&gt;Customizable configuration options.&lt;/li&gt; 
 &lt;li&gt;Streaming support to enable completion delivery even with slower LLMs.&lt;/li&gt; 
 &lt;li&gt;No proprietary binary running in the background. Just curl and your preferred LLM provider.&lt;/li&gt; 
 &lt;li&gt;Support &lt;code&gt;virtual-text&lt;/code&gt;, &lt;code&gt;nvim-cmp&lt;/code&gt;, &lt;code&gt;blink-cmp&lt;/code&gt;, &lt;code&gt;built-in&lt;/code&gt;, &lt;code&gt;mini.completion&lt;/code&gt; frontend.&lt;/li&gt; 
 &lt;li&gt;Act as an &lt;strong&gt;in-process LSP&lt;/strong&gt; server to provide completions (opt-in feature).&lt;/li&gt; 
 &lt;li&gt;Accept multi-line suggestions line-by-line, so longer suggestions can be pulled in incrementally in your own pace.&lt;/li&gt; 
 &lt;li&gt;When your typed text matches the start of a suggestion, Minuet keeps the completion in sync of your typed text rather than discarding it, to reduce unnecessary LLM requests and conserving resources.&lt;/li&gt; 
 &lt;li&gt;Support next-edit prediction (NES) via &lt;code&gt;Minuet duet&lt;/code&gt; commands. This feature is highly experimental.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;With nvim-cmp / blink-cmp frontend&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/assets/example-cmp.png&quot; alt=&quot;example-cmp&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;With builtin completion frontend&lt;/strong&gt; (requires nvim 0.11+):&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/assets/example-builtin-completion.jpg&quot; alt=&quot;example-builtin-completion&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;With virtual text frontend&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/assets/example-virtual-text.png&quot; alt=&quot;example-virtual-text&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/e0c4f2bd-0361-45b4-8eb4-0f49356bd7d9&quot;&gt;https://github.com/user-attachments/assets/e0c4f2bd-0361-45b4-8eb4-0f49356bd7d9&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;With duet (next-edit prediction)&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/b98699d5-b81d-4061-a1b3-d6f581c6b9b0&quot;&gt;https://github.com/user-attachments/assets/b98699d5-b81d-4061-a1b3-d6f581c6b9b0&lt;/a&gt;&lt;/p&gt; 
&lt;!-- The link above is a showcase video for the virtual text feature, hosted --&gt; 
&lt;!-- externally on GitHub. --&gt; 
&lt;h1&gt;Requirements&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim 0.10+.&lt;/li&gt; 
 &lt;li&gt;optional: &lt;a href=&quot;https://github.com/hrsh7th/nvim-cmp&quot;&gt;nvim-cmp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;optional: &lt;a href=&quot;https://github.com/Saghen/blink.cmp&quot;&gt;blink.cmp&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;An API key for at least one of the supported AI providers&lt;/li&gt; 
 &lt;li&gt;&lt;s&gt;&lt;a href=&quot;https://github.com/nvim-lua/plenary.nvim&quot;&gt;plenary.nvim&lt;/a&gt;&lt;/s&gt; Minuet now uses the builtin &lt;code&gt;vim.system&lt;/code&gt; and no longer requires plenary.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Installation&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;Lazy.nvim&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;specs = {
    {
        &#39;milanglacier/minuet-ai.nvim&#39;,
        config = function()
            require(&#39;minuet&#39;).setup {
                -- Your configuration options here
            }
        end,
    },
    -- optional, if you are using virtual-text frontend, nvim-cmp is not
    -- required.
    { &#39;hrsh7th/nvim-cmp&#39; },
    -- optional, if you are using virtual-text frontend, blink is not required.
    { &#39;Saghen/blink.cmp&#39; },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;Rocks.nvim&lt;/strong&gt;:&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;Minuet&lt;/code&gt; is available on &lt;a href=&quot;http://luarocks.org&quot;&gt;luarocks.org&lt;/a&gt;. Simply run &lt;code&gt;Rocks install minuet-ai.nvim&lt;/code&gt; to install it like any other luarocks package.&lt;/p&gt; 
&lt;h1&gt;Quick Start&lt;/h1&gt; 
&lt;h2&gt;Virtual Text Setup&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    virtualtext = {
        auto_trigger_ft = {},
        keymap = {
            -- accept whole completion
            accept = &#39;&amp;lt;A-A&amp;gt;&#39;,
            -- accept one line
            accept_line = &#39;&amp;lt;A-a&amp;gt;&#39;,
            -- accept n lines (prompts for number)
            -- e.g. &quot;A-z 2 CR&quot; will accept 2 lines
            accept_n_lines = &#39;&amp;lt;A-z&amp;gt;&#39;,
            -- Cycle to prev completion item, or manually invoke completion
            prev = &#39;&amp;lt;A-[&amp;gt;&#39;,
            -- Cycle to next completion item, or manually invoke completion
            next = &#39;&amp;lt;A-]&amp;gt;&#39;,
            dismiss = &#39;&amp;lt;A-e&amp;gt;&#39;,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Nvim-cmp setup&lt;/h2&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;cmp&#39;).setup {
    sources = {
        {
             -- Include minuet as a source to enable autocompletion
            { name = &#39;minuet&#39; },
            -- and your other sources
        }
    },
    performance = {
        -- It is recommended to increase the timeout duration due to
        -- the typically slower response speed of LLMs compared to
        -- other completion sources. This is not needed when you only
        -- need manual completion.
        fetching_timeout = 2000,
    },
}


-- If you wish to invoke completion manually,
-- The following configuration binds `A-y` key
-- to invoke the configuration manually.
require(&#39;cmp&#39;).setup {
    mapping = {
        [&quot;&amp;lt;A-y&amp;gt;&quot;] = require(&#39;minuet&#39;).make_cmp_map()
        -- and your other keymappings
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Blink-cmp Setup&lt;/h2&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;blink-cmp&#39;).setup {
    keymap = {
        -- Manually invoke minuet completion.
        [&#39;&amp;lt;A-y&amp;gt;&#39;] = require(&#39;minuet&#39;).make_blink_map(),
    },
    sources = {
         -- Enable minuet for autocomplete
        default = { &#39;lsp&#39;, &#39;path&#39;, &#39;buffer&#39;, &#39;snippets&#39;, &#39;minuet&#39; },
        -- For manual completion only, remove &#39;minuet&#39; from default
        providers = {
            minuet = {
                name = &#39;minuet&#39;,
                module = &#39;minuet.blink&#39;,
                async = true,
                -- Should match minuet.config.request_timeout * 1000,
                -- since minuet.config.request_timeout is in seconds
                timeout_ms = 3000,
                score_offset = 50, -- Gives minuet higher priority among suggestions
            },
        },
    },
    -- Recommended to avoid unnecessary request
    completion = { trigger = { prefetch_on_insert = false } },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;In-Process LSP for Built-in Completion and Inline Completion&lt;/h2&gt; 
&lt;details&gt; 
 &lt;p&gt;&lt;strong&gt;Requirements:&lt;/strong&gt;&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Neovim version 0.11 or higher is necessary for built-in completion.&lt;/li&gt; 
  &lt;li&gt;Neovim version 0.12 or higher is necessary for &lt;code&gt;vim.lsp.inline_completion&lt;/code&gt;.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;code&gt;config.lsp.completion.enable&lt;/code&gt; and &lt;code&gt;config.lsp.inline_completion.enable&lt;/code&gt; are setup-time options. Minuet decides which LSP capabilities to expose when &lt;code&gt;require(&#39;minuet&#39;).setup()&lt;/code&gt; runs, so changing either option later will not enable the feature for an already-running Minuet LSP server.&lt;/p&gt; 
 &lt;p&gt;If you might want to use one of these features later in the same session, enable it during setup first, then control only its per-buffer auto-trigger behavior at runtime.&lt;/p&gt; 
 &lt;h3&gt;Completion&lt;/h3&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    lsp = {
        enabled_ft = { &#39;toml&#39;, &#39;lua&#39;, &#39;cpp&#39; },
        completion = {
            -- Enables automatic completion triggering using `vim.lsp.completion.enable`
            enabled_auto_trigger_ft = { &#39;cpp&#39;, &#39;lua&#39; },
        },
    }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The &lt;code&gt;completion.enabled_auto_trigger_ft&lt;/code&gt; setting is relevant only for built-in completion (&lt;code&gt;vim.lsp.completion&lt;/code&gt;). &lt;code&gt;Mini.Completion&lt;/code&gt; users can ignore this option, as Mini.Completion uses &lt;strong&gt;all&lt;/strong&gt; available LSPs for &lt;strong&gt;auto-triggered&lt;/strong&gt; completion.&lt;/p&gt; 
 &lt;p&gt;For manually triggered completion, ensure &lt;code&gt;vim.bo.omnifunc&lt;/code&gt; is set to &lt;code&gt;v:lua.vim.lsp.omnifunc&lt;/code&gt; and use &lt;code&gt;&amp;lt;C-x&amp;gt;&amp;lt;C-o&amp;gt;&lt;/code&gt; in Insert mode.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;For users of &lt;code&gt;blink-cmp&lt;/code&gt; and &lt;code&gt;nvim-cmp&lt;/code&gt;, it is recommended to use the native source rather than through LSP for two main reasons:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt; &lt;p&gt;&lt;code&gt;blink-cmp&lt;/code&gt; and &lt;code&gt;nvim-cmp&lt;/code&gt; offer better sorting and async management when Minuet is utilized as a separate source rather than alongside a regular LSP such as &lt;code&gt;clangd&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;With &lt;code&gt;blink-cmp&lt;/code&gt; and &lt;code&gt;nvim-cmp&lt;/code&gt; native sources, it&#39;s possible to configure Minuet for manual completion only, disabling automatic completion. However, when Minuet operates as an LSP server, it is impossible to determine whether completion is triggered automatically or manually.&lt;/p&gt; &lt;p&gt;The LSP protocol specification defines three &lt;code&gt;triggerKind&lt;/code&gt; values: &lt;code&gt;Invoked&lt;/code&gt;, &lt;code&gt;TriggerCharacter&lt;/code&gt;, and &lt;code&gt;TriggerForIncompleteCompletions&lt;/code&gt;. However, none of these specifically differentiates between manual and automatic completion requests.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;An upstream issue (&lt;a href=&quot;https://github.com/neovim/neovim/issues/32972&quot;&gt;tracked here&lt;/a&gt;) may cause unexpected indentation behavior when accepting multi-line completions.&lt;/p&gt; &lt;p&gt;Currently, Minuet offers the config option &lt;code&gt;config.lsp.completion.adjust_indentation&lt;/code&gt; (enabled by default) as a temporary workaround. However, the author acknowledges that this solution is incomplete and may introduce additional edge cases when enabled.&lt;/p&gt; &lt;p&gt;Therefore, consider the following practices when using built-in completion:&lt;/p&gt; 
   &lt;ul&gt; 
    &lt;li&gt;Ensure &lt;code&gt;config.add_single_line_entry = true&lt;/code&gt; and only accept single-line completions.&lt;/li&gt; 
    &lt;li&gt;Avoid using Minuet and built-in completion with languages where indentation affects semantics, such as Python.&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Users might call &lt;code&gt;vim.lsp.completion.enable {autotrigger = true}&lt;/code&gt; during the &lt;code&gt;LspAttach&lt;/code&gt; event when the client supports completion. However, this is not the desired behavior for Minuet. As an LLM completion source, Minuet can face significant rate limits during automatic triggering.&lt;/p&gt; &lt;p&gt;Therefore, it&#39;s recommended to enable Minuet for automatic triggering using the &lt;code&gt;config.lsp.completion.enabled_auto_trigger_ft&lt;/code&gt; setting.&lt;/p&gt; &lt;p&gt;For users who uses &lt;code&gt;LspAttach&lt;/code&gt; event, it is recommeded to verify that the server is not the Minuet server before enabling autotrigger. An example configuration is shown below:&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.api.nvim_create_autocmd(&#39;LspAttach&#39;, {
    callback = function(args)
        local client_id = args.data.client_id
        local bufnr = args.buf
        local client = vim.lsp.get_client_by_id(client_id)
        if not client then
            return
        end

        if client.server_capabilities.completionProvider and client.name ~= &#39;minuet&#39; then
            vim.lsp.completion.enable(true, client_id, bufnr, { autotrigger = true })
        end
    end,
    desc = &#39;Enable built-in auto completion&#39;,
})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h3&gt;Inline completion&lt;/h3&gt; 
 &lt;p&gt;Minuet can also expose suggestions through Neovim&#39;s built-in &lt;code&gt;vim.lsp.inline_completion&lt;/code&gt; interface:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    lsp = {
        enabled_ft = { &#39;toml&#39;, &#39;lua&#39;, &#39;cpp&#39; },
        -- It is recommended to disable completion when use inline_completion
        completion = { enable = false },
        inline_completion = {
            enable = true,
            enabled_auto_trigger_ft = { &#39;cpp&#39;, &#39;lua&#39; },
        },
    },
}

vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-x&amp;gt;&#39;, function()
    vim.lsp.inline_completion.get()
end, { desc = &#39;accept&#39; })
vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-c&amp;gt;&#39;, function()
    vim.lsp.inline_completion.select { count = 1 }
end, { desc = &#39;cycle to next&#39; })
vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-v&amp;gt;&#39;, function()
    vim.lsp.inline_completion.select { count = -1 }
end, { desc = &#39;cycle to prev&#39; })
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you prefer not to use inline completion at startup but still want the option to enable it for specific buffers later, set &lt;code&gt;config.lsp.inline_completion.enable = true&lt;/code&gt; during setup and leave &lt;code&gt;config.lsp.inline_completion.enabled_auto_trigger_ft&lt;/code&gt; empty. You can then enable it at runtime for the current buffer with: &lt;code&gt;:Minuet lsp inline_completion enable_auto_trigger&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt;&lt;/p&gt; 
 &lt;p&gt;If you want inline suggestions, Minuet&#39;s own &lt;code&gt;virtualtext&lt;/code&gt; frontend is still the &lt;strong&gt;recommended&lt;/strong&gt; choice. Neovim&#39;s built-in &lt;code&gt;inline_completion&lt;/code&gt; support is a useful baseline, but in practice it only covers automatic triggering. Minuet&#39;s &lt;code&gt;virtualtext&lt;/code&gt; frontend supports a much more comprehensive workflow: it supports both manual invocation and automatic triggering, keeps suggestions in sync as you continue typing, and lets you accept longer suggestions incrementally, including accepting only part of a completion instead of the entire suggestion at once.&lt;/p&gt; 
 &lt;p&gt;When using LSP inline completion, avoid enabling Minuet &lt;code&gt;virtualtext&lt;/code&gt; at the same time.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2&gt;LLM Provider Examples&lt;/h2&gt; 
&lt;h3&gt;Openrouter deepseek-v4-flash&lt;/h3&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;openai_compatible&#39;,
    request_timeout = 2.5,
    throttle = 1500, -- Increase to reduce costs and avoid rate limits
    debounce = 600, -- Increase to reduce costs and avoid rate limits
    provider_options = {
        openai_compatible = {
            api_key = &#39;OPENROUTER_API_KEY&#39;,
            end_point = &#39;https://openrouter.ai/api/v1/chat/completions&#39;,
            model = &#39;deepseek/deepseek-v4-flash&#39;,
            name = &#39;Openrouter&#39;,
            optional = {
                max_tokens = 56,
                top_p = 0.9,
                provider = {
                     -- Prioritize throughput for faster completion
                    sort = &#39;throughput&#39;,
                },
                -- disable thinking to avoid first token latency
                reasoning_effort = &#39;none&#39;
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Opencode Go deepseek-v4-flash&lt;/h3&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;openai_compatible&#39;,
    request_timeout = 2.5,
    throttle = 1500, -- Increase to reduce costs and avoid rate limits
    debounce = 600, -- Increase to reduce costs and avoid rate limits
    provider_options = {
        openai_compatible = {
            api_key = &#39;OPENCODE_GO_API_KEY&#39;,
            end_point = &#39;https://opencode.ai/zen/go/v1/chat/completions&#39;,
            model = &#39;deepseek-v4-flash&#39;,
            name = &#39;Opencode&#39;,
            optional = {
                max_tokens = 56,
                top_p = 0.9,
                -- disable thinking to avoid first token latency
                thinking = { type = &#39;disabled&#39; },
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Deepseek deepseek-v4-flash&lt;/h3&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;openai_fim_compatible&#39;,
    provider_options = {
        openai_fim_compatible = {
            api_key = &#39;DEEPSEEK_API_KEY&#39;,
            name = &#39;deepseek&#39;,
            optional = {
                max_tokens = 256,
                top_p = 0.9,
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Ollama Qwen-2.5-coder:7b&lt;/h3&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;openai_fim_compatible&#39;,
    n_completions = 1, -- recommend for local model for resource saving
    -- I recommend beginning with a small context window size and incrementally
    -- expanding it, depending on your local computing power. A context window
    -- of 512, serves as an good starting point to estimate your computing
    -- power. Once you have a reliable estimate of your local computing power,
    -- you should adjust the context window to a larger value.
    context_window = 512,
    provider_options = {
        openai_fim_compatible = {
            -- For Windows users, TERM may not be present in environment variables.
            -- Consider using APPDATA instead.
            api_key = &#39;TERM&#39;,
            name = &#39;Ollama&#39;,
            end_point = &#39;http://localhost:11434/v1/completions&#39;,
            model = &#39;qwen2.5-coder:7b&#39;,
            optional = {
                max_tokens = 56,
                top_p = 0.9,
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Llama.cpp Qwen-2.5-coder:1.5b&lt;/h3&gt; 
&lt;details&gt; 
 &lt;p&gt;First, launch the &lt;code&gt;llama-server&lt;/code&gt; with your chosen model.&lt;/p&gt; 
 &lt;p&gt;Here&#39;s an example of a bash script to start the server if your system has less than 8GB of VRAM:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;llama-server \
    -hf ggml-org/Qwen2.5-Coder-1.5B-Q8_0-GGUF \
    --port 8012 -ngl 99 -fa -ub 1024 -b 1024 \
    --ctx-size 0 --cache-reuse 256
&lt;/code&gt;&lt;/pre&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;openai_fim_compatible&#39;,
    n_completions = 1, -- recommend for local model for resource saving
    -- I recommend beginning with a small context window size and incrementally
    -- expanding it, depending on your local computing power. A context window
    -- of 512, serves as an good starting point to estimate your computing
    -- power. Once you have a reliable estimate of your local computing power,
    -- you should adjust the context window to a larger value.
    context_window = 512,
    provider_options = {
        openai_fim_compatible = {
            -- For Windows users, TERM may not be present in environment variables.
            -- Consider using APPDATA instead.
            api_key = &#39;TERM&#39;,
            name = &#39;Llama.cpp&#39;,
            end_point = &#39;http://localhost:8012/v1/completions&#39;,
            -- The model is set by the llama-cpp server and cannot be altered
            -- post-launch.
            model = &#39;PLACEHOLDER&#39;,
            optional = {
                max_tokens = 56,
                top_p = 0.9,
            },
            -- Llama.cpp does not support the `suffix` option in FIM completion.
            -- Therefore, we must disable it and manually populate the special
            -- tokens required for FIM completion.
            template = {
                prompt = function(context_before_cursor, context_after_cursor, _)
                    return &#39;&amp;lt;|fim_prefix|&amp;gt;&#39;
                        .. context_before_cursor
                        .. &#39;&amp;lt;|fim_suffix|&amp;gt;&#39;
                        .. context_after_cursor
                        .. &#39;&amp;lt;|fim_middle|&amp;gt;&#39;
                end,
                suffix = false,
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: Special tokens such as &lt;code&gt;&amp;lt;|fim_prefix|&amp;gt;&lt;/code&gt; vary across different models. The example code provided uses the tokens specific to &lt;code&gt;Qwen-2.5-coder&lt;/code&gt;. If you intend to use a different model, ensure the &lt;code&gt;llama-cpp&lt;/code&gt; template is updated to reflect the corresponding special tokens for your chosen model.&lt;/p&gt; 
 &lt;p&gt;For additional example bash scripts to run llama.cpp based on your local computing power, please refer to &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/recipes.md&quot;&gt;recipes.md&lt;/a&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h1&gt;Selecting a Provider or Model&lt;/h1&gt; 
&lt;p&gt;The &lt;code&gt;gemini-2.0-flash&lt;/code&gt; and &lt;code&gt;codestral&lt;/code&gt; models offer high-quality output with free and fast processing. The &lt;code&gt;deepseek-v4-flash&lt;/code&gt; model, used with the &lt;code&gt;openai_fim_compatible&lt;/code&gt; provider, is an alternative for low-cost APIs and fast inference. For local LLM inference, you can deploy either &lt;code&gt;qwen-2.5-coder&lt;/code&gt; or &lt;code&gt;deepseek-coder-v2&lt;/code&gt; through Ollama using the &lt;code&gt;openai-fim-compatible&lt;/code&gt; provider.&lt;/p&gt; 
&lt;p&gt;We &lt;strong&gt;do not&lt;/strong&gt; recommend using thinking models, as this mode significantly increases latency—even with the fastest models. However, if you choose to use thinking models, please ensure that their thinking capabilities are disabled. Refer to the following examples for guidance on how to disable the thinking feature.&lt;/p&gt; 
&lt;h2&gt;Understanding Model Speed&lt;/h2&gt; 
&lt;p&gt;For cloud-based providers, &lt;a href=&quot;https://openrouter.ai/google/gemini-2.0-flash-001/providers&quot;&gt;Openrouter&lt;/a&gt; offers a valuable resource for comparing the speed of both closed-source and open-source models hosted by various cloud inference providers.&lt;/p&gt; 
&lt;p&gt;When assessing model speed, two key metrics are latency (time to first token) and throughput (tokens per second). Latency is often a more critical factor than throughput.&lt;/p&gt; 
&lt;p&gt;Ideally, one would aim for a latency of less than 1 second and a throughput exceeding 100 tokens per second.&lt;/p&gt; 
&lt;p&gt;For local LLM, &lt;a href=&quot;https://github.com/ggml-org/llama.cpp/discussions/4167&quot;&gt;llama.cpp#4167&lt;/a&gt; provides valuable data on model speed for 7B models running on Apple M-series chips. The two crucial metrics are &lt;code&gt;Q4_0 PP [t/s]&lt;/code&gt;, which measures latency (tokens per second to process the KV cache, equivalent to the time to generate the first token), and &lt;code&gt;Q4_0 TG [t/s]&lt;/code&gt;, which indicates the tokens per second generation speed.&lt;/p&gt; 
&lt;h1&gt;Configuration&lt;/h1&gt; 
&lt;p&gt;Minuet AI comes with the following defaults:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;default_config = {
    -- Enable or disable auto-completion. Note that you still need to add
    -- Minuet to your cmp/blink sources. This option controls whether cmp/blink
    -- will attempt to invoke minuet when minuet is included in cmp/blink
    -- sources. This setting has no effect on manual completion; Minuet will
    -- always be enabled when invoked manually. You can use the command
    -- `Minuet cmp/blink toggle` to toggle this option.
    cmp = {
        enable_auto_complete = true,
    },
    blink = {
        enable_auto_complete = true,
    },
    -- LSP is recommended only for built-in completion. If you are using
    -- `cmp` or `blink`, utilizing LSP for code completion from Minuet is *not*
    -- recommended.
    lsp = {
        enabled_ft = {},
        -- Filetypes excluded from LSP activation. Useful when `enabled_ft` = { &#39;*&#39; }
        disabled_ft = {},
        completion = {
            enable = true,
            -- if true, warn the user that they should use the native source
            -- instead when the user is using blink or nvim-cmp.
            warn_on_blink_or_cmp = true,
            -- See README In-Process LSP section for more details on this option.
            adjust_indentation = true,
            -- Enables automatic completion triggering using `vim.lsp.completion.enable`
            enabled_auto_trigger_ft = {},
            -- Filetypes excluded from autotriggering. Useful when `enabled_auto_trigger_ft` = { &#39;*&#39; }
            disabled_auto_trigger_ft = {},
        },
        -- Minuet&#39;s own virtualtext frontend is recommended **over** lsp.inline_completion
        inline_completion = {
            enable = false,
            -- if true, warn when LSP inline completion is enabled while
            -- Minuet virtual text is also configured for use.
            warn_on_virtualtext = true,
            -- if true, warn when both LSP completion and inline completion
            -- are enabled. Enabling only one of them is recommended.
            warn_on_lsp_completion = true,
            -- Enables automatic inline completion using `vim.lsp.inline_completion.enable`
            -- for these filetypes.
            enabled_auto_trigger_ft = {},
            -- Filetypes excluded from inline completion autotriggering.
            disabled_auto_trigger_ft = {},
        },
    },
    virtualtext = {
        -- Specify the filetypes to enable automatic virtual text completion,
        -- e.g., { &#39;python&#39;, &#39;lua&#39; }. Note that you can still invoke manual
        -- completion even if the filetype is not on your auto_trigger_ft list.
        auto_trigger_ft = {},
        -- specify file types where automatic virtual text completion should be
        -- disabled. This option is useful when auto-completion is enabled for
        -- all file types i.e., when auto_trigger_ft = { &#39;*&#39; }
        auto_trigger_ignore_ft = {},
        keymap = {
            accept = nil,
            accept_line = nil,
            accept_n_lines = nil,
            -- Cycle to next completion item, or manually invoke completion
            next = nil,
            -- Cycle to prev completion item, or manually invoke completion
            prev = nil,
            dismiss = nil,
        },
        -- Whether show virtual text suggestion when the completion menu
        -- (nvim-cmp or blink-cmp) is visible.
        show_on_completion_menu = false,
    },
    provider = &#39;codestral&#39;,
    -- the maximum total characters of the context before and after the cursor
    -- 16000 characters typically equate to approximately 4,000 tokens for
    -- LLMs.
    context_window = 16000,
    -- when the total characters exceed the context window, the ratio of
    -- context before cursor and after cursor, the larger the ratio the more
    -- context before cursor will be used. This option should be between 0 and
    -- 1, context_ratio = 0.75 means the ratio will be 3:1.
    context_ratio = 0.75,
    throttle = 1000, -- only send the request every x milliseconds, use 0 to disable throttle.
    -- debounce the request in x milliseconds, set to 0 to disable debounce
    debounce = 400,
    -- Control notification display for request status
    -- Notification options:
    -- false: Disable all notifications (use boolean false, not string &quot;false&quot;)
    -- &quot;debug&quot;: Display all notifications (comprehensive debugging)
    -- &quot;verbose&quot;: Display most notifications
    -- &quot;warn&quot;: Display warnings and errors only
    -- &quot;error&quot;: Display errors only
    notify = &#39;warn&#39;,
    -- The request timeout, measured in seconds. When streaming is enabled
    -- (stream = true), setting a shorter request_timeout allows for faster
    -- retrieval of completion items, albeit potentially incomplete.
    -- Conversely, with streaming disabled (stream = false), a timeout
    -- occurring before the LLM returns results will yield no completion items.
    request_timeout = 3,
    -- Command used to make HTTP requests.
    curl_cmd = &#39;curl&#39;,
    -- Extra arguments passed to curl (list of strings).
    curl_extra_args = {},
    -- If completion item has multiple lines, create another completion item
    -- only containing its first line. This option only has impact for cmp and
    -- blink. For virtualtext, no single line entry will be added.
    add_single_line_entry = true,
    -- The number of completion items encoded as part of the prompt for the
    -- chat LLM. For FIM model, this is the number of requests to send. It&#39;s
    -- important to note that when &#39;add_single_line_entry&#39; is set to true, the
    -- actual number of returned items may exceed this value. Additionally, the
    -- LLM cannot guarantee the exact number of completion items specified, as
    -- this parameter serves only as a prompt guideline.
    n_completions = 3,
    --  Length of context after cursor used to filter completion text.
    --
    -- This setting helps prevent the language model from generating redundant
    -- text.  When filtering completions, the system compares the suffix of a
    -- completion candidate with the text immediately following the cursor.
    --
    -- If the length of the longest common substring between the end of the
    -- candidate and the beginning of the post-cursor context exceeds this
    -- value, that common portion is trimmed from the candidate.
    --
    -- For example, if the value is 15, and a completion candidate ends with a
    -- 20-character string that exactly matches the 20 characters following the
    -- cursor, the candidate will be truncated by those 20 characters before
    -- being delivered.
    after_cursor_filter_length = 15,
    -- Similar to after_cursor_filter_length but trim the completion item from
    -- prefix instead of suffix.
    before_cursor_filter_length = 2,
    -- proxy port to use
    proxy = nil,
    -- **List** of functions to execute. If any function returns `false`, Minuet
    -- will not trigger auto-completion. Manual completion can still be invoked,
    -- even if these functions evaluate to `false`, when using `nvim-cmp`,
    -- `blink-cmp`, or virtual text (excluding LSP).
    -- When this list is empty (the default), it always evaluates to `true`.
    -- Note that this is called each time Minuet attempts to trigger
    -- auto-completion, so ensure the functions in this list are highly efficient.
    enable_predicates = {},
    provider_options = {
        -- see the documentation in each provider in the following part.
    },
    -- see the documentation in the `Prompt` section
    default_system = {
        template = &#39;...&#39;,
        prompt = &#39;...&#39;,
        guidelines = &#39;...&#39;,
        n_completion_template = &#39;...&#39;,
    },
    default_system_prefix_first = {
        template = &#39;...&#39;,
        prompt = &#39;...&#39;,
        guidelines = &#39;...&#39;,
        n_completion_template = &#39;...&#39;,
    },
    default_fim_template = {
        prompt = &#39;...&#39;,
        suffix = &#39;...&#39;,
    },
    default_few_shots = { &#39;...&#39; },
    default_chat_input = { &#39;...&#39; },
    default_few_shots_prefix_first = { &#39;...&#39; },
    default_chat_input_prefix_first = { &#39;...&#39; },
    -- Config options for `Minuet change_preset` command
    presets = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;API Keys&lt;/h1&gt; 
&lt;p&gt;Minuet AI requires API keys to function. Set the following environment variables:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;OPENAI_API_KEY&lt;/code&gt; for OpenAI&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;GEMINI_API_KEY&lt;/code&gt; for Gemini&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ANTHROPIC_API_KEY&lt;/code&gt; for Claude&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;CODESTRAL_API_KEY&lt;/code&gt; for Codestral&lt;/li&gt; 
 &lt;li&gt;Custom environment variable for OpenAI-compatible services (as specified in your configuration)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Provide the name of the environment variable to Minuet, not the actual value. For instance, pass &lt;code&gt;OPENAI_API_KEY&lt;/code&gt; to Minuet, not the value itself (e.g., &lt;code&gt;sk-xxxx&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;If using Ollama, you need to assign an arbitrary, non-null environment variable as a placeholder for it to function.&lt;/p&gt; 
&lt;p&gt;Alternatively, you can provide a function that returns the API key. This function should return the result instantly as it will be called for each completion request.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider_options = {
        openai_compatible = {
            -- good
            api_key = &#39;FIREWORKS_API_KEY&#39;, -- will read the environment variable FIREWORKS_API_KEY
            -- good
            api_key = function() return &#39;sk-xxxx&#39; end,
            -- bad
            api_key = &#39;sk-xxxx&#39;,
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;Prompt&lt;/h1&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/prompt.md&quot;&gt;prompt&lt;/a&gt; for the default prompt used by &lt;code&gt;minuet&lt;/code&gt; and instructions on customization.&lt;/p&gt; 
&lt;p&gt;Note that &lt;code&gt;minuet&lt;/code&gt; employs two distinct prompt systems:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;A system designed for chat-based LLMs (OpenAI, OpenAI-Compatible, Claude, and Gemini)&lt;/li&gt; 
 &lt;li&gt;A separate system designed for Codestral and OpenAI-FIM-compatible models&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Prefix-First vs. Suffix-First&lt;/h2&gt; 
&lt;p&gt;When use chat-based LLMs, there are two ways for constructing the prompt: placing the prefix (context before the cursor) before the suffix (context after the cursor), or placing the suffix before the prefix.&lt;/p&gt; 
&lt;p&gt;By default, &lt;code&gt;minuet&lt;/code&gt; uses the &lt;strong&gt;prefix-first&lt;/strong&gt; style for the OpenAI, Gemini, and OpenAI-Compatible (with &lt;code&gt;deepseek-v4-flash&lt;/code&gt; as the default model) providers, and the &lt;strong&gt;suffix-first&lt;/strong&gt; style for Claude providers. It is recommended that you experiment with both strategies to determine which yields the best results, particularly if you are using an OpenAI-compatible provider with various models.&lt;/p&gt; 
&lt;p&gt;Below is an example code snippet demonstrating how to switch between these two prompt construction methods:&lt;/p&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local mc = require &#39;minuet.config&#39;

-- Prefix-first style
require(&#39;minuet&#39;).setup {
    provider_options = {
        openai_compatible = {
            system = mc.default_system_prefix_first,
            chat_input = mc.default_chat_input_prefix_first,
            few_shots = mc.default_few_shots_prefix_first,
        },
    },
}

-- Suffix-first style
require(&#39;minuet&#39;).setup {
    provider_options = {
        openai_compatible = {
            system = mc.default_system,
            few_shots = mc.default_few_shots,
            chat_input = mc.default_chat_input,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h1&gt;Providers&lt;/h1&gt; 
&lt;p&gt;You need to set the field &lt;code&gt;provider&lt;/code&gt; in the config, the default provider is &lt;code&gt;codestral&lt;/code&gt;. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    provider = &#39;gemini&#39;
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;OpenAI&lt;/h2&gt; 
&lt;details&gt; 
 &lt;p&gt;the following is the default configuration for OpenAI:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai = {
        model = &#39;gpt-5.4-nano&#39;,
        end_point = &#39;https://api.openai.com/v1/chat/completions&#39;,
        system = &quot;see [Prompt] section for the default value&quot;,
        few_shots = &quot;see [Prompt] section for the default value&quot;,
        chat_input = &quot;See [Prompt Section for default value]&quot;,
        stream = true,
        api_key = &#39;OPENAI_API_KEY&#39;,
        optional = {
            -- pass any additional parameters you want to send to OpenAI request,
            -- e.g.
            -- stop = { &#39;end&#39; },
            -- max_completion_tokens = 256,
            -- top_p = 0.9,
            -- reasoning_effort = &#39;minimal&#39;
            -- reasoning_effort = &#39;none&#39;
        },
        -- a list of functions to transform the endpoint, header, and request body
        transform = {},
    },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The following configuration is not the default, but recommended to prevent request timeout from outputing too many tokens.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
	openai = {
		optional = {
			max_completion_tokens = 128,
			-- for thinking models
			reasoning_effort = &#39;none&#39;
			-- reasoning_effort = &quot;minimal&quot;,
			-- Set to &quot;minimal&quot; if your chosen model doesn&#39;t support &quot;none&quot;
		},
	},
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Note: If you intend to use GPT-5 series models (e.g., &lt;code&gt;gpt-5-mini&lt;/code&gt; or &lt;code&gt;gpt-5.4-nano&lt;/code&gt;), keep the following points in mind:&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Use &lt;code&gt;max_completion_tokens&lt;/code&gt; instead of &lt;code&gt;max_tokens&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;These models do not support &lt;code&gt;top_p&lt;/code&gt; or &lt;code&gt;temperature&lt;/code&gt; adjustments.&lt;/li&gt; 
  &lt;li&gt;Disable thinking by setting &lt;code&gt;reasoning_effort&lt;/code&gt; to &lt;code&gt;none&lt;/code&gt;, or use &lt;code&gt;minimal&lt;/code&gt; if your chosen model does not support &lt;code&gt;none&lt;/code&gt;.&lt;/li&gt; 
 &lt;/ol&gt; 
&lt;/details&gt; 
&lt;h2&gt;Claude&lt;/h2&gt; 
&lt;details&gt; 
 &lt;p&gt;the following is the default configuration for Claude:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    claude = {
        max_tokens = 256,
        model = &#39;claude-haiku-4.5&#39;,
        system = &quot;see [Prompt] section for the default value&quot;,
        few_shots = &quot;see [Prompt] section for the default value&quot;,
        chat_input = &quot;See [Prompt Section for default value]&quot;,
        stream = true,
        api_key = &#39;ANTHROPIC_API_KEY&#39;,
        end_point = &#39;https://api.anthropic.com/v1/messages&#39;,
        optional = {
            -- pass any additional parameters you want to send to claude request,
            -- e.g.
            -- stop_sequences = nil,
        },
        -- a list of functions to transform the endpoint, header, and request body
        transform = {},
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Codestral&lt;/h2&gt; 
&lt;details&gt; 
 &lt;p&gt;Codestral is a text completion model, not a chat model, so the system prompt and few shot examples does not apply. Note that you should use the &lt;code&gt;CODESTRAL_API_KEY&lt;/code&gt;, not the &lt;code&gt;MISTRAL_API_KEY&lt;/code&gt;, as they are using different endpoint. To use the Mistral endpoint, simply modify the &lt;code&gt;end_point&lt;/code&gt; and &lt;code&gt;api_key&lt;/code&gt; parameters in the configuration.&lt;/p&gt; 
 &lt;p&gt;the following is the default configuration for Codestral:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    codestral = {
        model = &#39;codestral-latest&#39;,
        end_point = &#39;https://codestral.mistral.ai/v1/fim/completions&#39;,
        api_key = &#39;CODESTRAL_API_KEY&#39;,
        stream = true,
        template = {
            prompt = &quot;See [Prompt Section for default value]&quot;,
            suffix = &quot;See [Prompt Section for default value]&quot;,
        },
        optional = {
            stop = nil, -- the identifier to stop the completion generation
            max_tokens = nil,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The following configuration is not the default, but recommended to prevent request timeout from outputing too many tokens.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    codestral = {
        optional = {
            max_tokens = 256,
            stop = { &#39;\n\n&#39; },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Mercury Coder&lt;/h2&gt; 
&lt;p&gt;Developed by Inception, Mercury Coder is described as a diffusion-based large language model that accelerates code generation through iterative refinement rather than autoregressive token prediction. According to the claim, this approach is intended to deliver faster and more efficient code completions. To begin, obtain an API key from the Inception Platform and configure it as the &lt;code&gt;INCEPTION_API_KEY&lt;/code&gt; environment variable.&lt;/p&gt; 
&lt;details&gt; 
 &lt;p&gt;You can access Mercury Coder via the OpenAI compatible FIM endpoint using the following configuration:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai_fim_compatible = {
        model = &quot;mercury-coder&quot;,
        end_point = &quot;https://api.inceptionlabs.ai/v1/fim/completions&quot;,
        api_key = &quot;INCEPTION_API_KEY&quot;, -- environment variable name
        stream = true,
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Gemini&lt;/h2&gt; 
&lt;p&gt;You should register the account and use the service from Google AI Studio instead of Google Cloud. You can get an API key via their &lt;a href=&quot;https://makersuite.google.com/app/apikey&quot;&gt;Google API page&lt;/a&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;p&gt;The following config is the default.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    gemini = {
        model = &#39;gemini-2.0-flash&#39;,
        system = &quot;see [Prompt] section for the default value&quot;,
        few_shots = &quot;see [Prompt] section for the default value&quot;,
        chat_input = &quot;See [Prompt Section for default value]&quot;,
        stream = true,
        api_key = &#39;GEMINI_API_KEY&#39;,
        end_point = &#39;https://generativelanguage.googleapis.com/v1beta/models&#39;,
        optional = {},
        -- a list of functions to transform the endpoint, header, and request body
        transform = {},
    },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The following configuration is not the default, but recommended to prevent request timeout from outputing too many tokens. You can also adjust the safety settings following the example:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    gemini = {
        optional = {
            generationConfig = {
                maxOutputTokens = 256,
                thinkingConfig = {
                    -- Disable thinking for gemini 2.5 models
                    thinkingBudget = 0,
                    -- Disable thinking for gemini 3.x models
                    thinkingLevel = &#39;minimal&#39;,
                    -- Setting only one of the above options is sufficient.
                },
            },
            safetySettings = {
                {
                    -- HARM_CATEGORY_HATE_SPEECH,
                    -- HARM_CATEGORY_HARASSMENT
                    -- HARM_CATEGORY_SEXUALLY_EXPLICIT
                    category = &#39;HARM_CATEGORY_DANGEROUS_CONTENT&#39;,
                    -- BLOCK_NONE
                    threshold = &#39;BLOCK_ONLY_HIGH&#39;,
                },
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;We recommend using &lt;code&gt;gemini-2.0-flash&lt;/code&gt; over &lt;code&gt;gemini-2.5-flash&lt;/code&gt;, as the 2.0 version offers significantly lower costs with comparable performance. The primary improvement in version 2.5 lies in its extended thinking mode, which provides minimal value for code completion scenarios. Furthermore, the thinking mode substantially increases latency, so we recommend disabling it entirely.&lt;/p&gt; 
&lt;/details&gt; 
&lt;h2&gt;OpenAI-compatible&lt;/h2&gt; 
&lt;p&gt;Use any providers compatible with OpenAI&#39;s chat completion API.&lt;/p&gt; 
&lt;p&gt;For example, you can set the &lt;code&gt;end_point&lt;/code&gt; to &lt;code&gt;http://localhost:11434/v1/chat/completions&lt;/code&gt; to use &lt;code&gt;ollama&lt;/code&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;p&gt;Note that not all openAI compatible services has streaming support, you should change &lt;code&gt;stream=false&lt;/code&gt; to disable streaming in case your services do not support it.&lt;/p&gt; 
 &lt;p&gt;The following config is the default.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai_compatible = {
        model = &#39;deepseek/deepseek-v4-flash&#39;,
        system = &quot;see [Prompt] section for the default value&quot;,
        few_shots = &quot;see [Prompt] section for the default value&quot;,
        chat_input = &quot;See [Prompt Section for default value]&quot;,
        stream = true,
        end_point = &#39;https://openrouter.ai/api/v1/chat/completions&#39;,
        api_key = &#39;OPENROUTER_API_KEY&#39;,
        name = &#39;Openrouter&#39;,
        optional = {
            stop = nil,
            max_tokens = nil,
        },
        -- a list of functions to transform the endpoint, header, and request body
        transform = {},
    }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;Disabling thinking for reasoning models:&lt;/strong&gt;&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Provider&lt;/th&gt; 
    &lt;th&gt;Configuration&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;OpenRouter&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;reasoning = { effort = &#39;none&#39; }&lt;/code&gt; (or &lt;code&gt;&#39;minimal&#39;&lt;/code&gt;, depending on the model)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;DeepSeek API&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;thinking = { type = &#39;disabled&#39; }&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Various Provider&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;reasoning_effort = &#39;none&#39;&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai_compatible = {
        optional = {
            -- Disable thinking for reasoning models
            reasoning = { effort = &#39;none&#39; }, -- or &quot;minimal&quot;, depending on the model (OpenRouter)
            -- reasoning_effort = &#39;none&#39;, -- or &quot;minimal&quot;, depending on the model (various providers)
            -- thinking = { type = &#39;disabled&#39; } -- DeepSeek API
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;OpenAI-FIM-compatible&lt;/h2&gt; 
&lt;p&gt;Use any provider compatible with OpenAI&#39;s completion API. This request uses the text &lt;code&gt;/completions&lt;/code&gt; endpoint, &lt;strong&gt;not&lt;/strong&gt; &lt;code&gt;/chat/completions&lt;/code&gt; endpoint, so system prompts and few-shot examples are not applicable.&lt;/p&gt; 
&lt;p&gt;For example, you can set the &lt;code&gt;end_point&lt;/code&gt; to &lt;code&gt;http://localhost:11434/v1/completions&lt;/code&gt; to use &lt;code&gt;ollama&lt;/code&gt;, &lt;code&gt;http://localhost:8012/v1/completions&lt;/code&gt; to use &lt;code&gt;llama.cpp&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Cmdline completion is available for models supported by these providers: &lt;code&gt;deepseek&lt;/code&gt;, &lt;code&gt;ollama&lt;/code&gt;, and &lt;code&gt;siliconflow&lt;/code&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;p&gt;Refer to the &lt;a href=&quot;https://platform.openai.com/docs/api-reference/completions&quot;&gt;Completions Legacy&lt;/a&gt; section of the OpenAI documentation for details.&lt;/p&gt; 
 &lt;p&gt;Please note that not all OpenAI-compatible services support streaming. If your service does not support streaming, you should set &lt;code&gt;stream=false&lt;/code&gt; to disable it.&lt;/p&gt; 
 &lt;p&gt;Additionally, for Ollama users, it is essential to verify whether the model&#39;s template supports FIM completion. For example, qwen2.5-coder offers FIM support, as suggested in its &lt;a href=&quot;https://ollama.com/library/qwen2.5-coder/blobs/e94a8ecb9327&quot;&gt;template&lt;/a&gt;. However it may come as a surprise to some users that, &lt;code&gt;deepseek-coder&lt;/code&gt; does not support the FIM template, and you should use &lt;code&gt;deepseek-coder-v2&lt;/code&gt; instead.&lt;/p&gt; 
 &lt;p&gt;For example bash scripts to run llama.cpp based on your local computing power, please refer to &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/recipes.md&quot;&gt;recipes.md&lt;/a&gt;. Note that the model for &lt;code&gt;llama.cpp&lt;/code&gt; must be determined when you launch the &lt;code&gt;llama.cpp&lt;/code&gt; server and cannot be changed thereafter.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai_fim_compatible = {
        model = &#39;deepseek-v4-flash&#39;,
        end_point = &#39;https://api.deepseek.com/beta/completions&#39;,
        api_key = &#39;DEEPSEEK_API_KEY&#39;,
        name = &#39;Deepseek&#39;,
        stream = true,
        template = {
            prompt = &quot;See [Prompt Section for default value]&quot;,
            suffix = &quot;See [Prompt Section for default value]&quot;,
        },
        -- a list of functions to transform the endpoint, header, and request body
        transform = {},
        -- Custom function to extract LLM-generated text from JSON output
        get_text_fn = {}
        optional = {
            stop = nil,
            max_tokens = nil,
        },
    }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;The following configuration is not the default, but recommended to prevent request timeout from outputing too many tokens.&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options = {
    openai_fim_compatible = {
        optional = {
            max_tokens = 256,
            stop = { &#39;\n\n&#39; },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Non-OpenAI-FIM-Compatible APIs&lt;/h3&gt; 
&lt;p&gt;For providers like &lt;strong&gt;DeepInfra FIM&lt;/strong&gt; (&lt;code&gt;https://api.deepinfra.com/v1/inference/&lt;/code&gt;), refer to &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/recipes.md&quot;&gt;recipes.md&lt;/a&gt; for advanced configuration instructions.&lt;/p&gt; 
&lt;h1&gt;Commands&lt;/h1&gt; 
&lt;h2&gt;&lt;code&gt;Minuet change_provider&lt;/code&gt;, &lt;code&gt;Minuet change_model&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;change_provider&lt;/code&gt; command allows you to change the provider after &lt;code&gt;Minuet&lt;/code&gt; has been setup.&lt;/p&gt; 
&lt;p&gt;Example usage: &lt;code&gt;Minuet change_provider claude&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;The &lt;code&gt;change_model&lt;/code&gt; command allows you to change both the provider and model in one command. When called without arguments, it will open an interactive selection menu using &lt;code&gt;vim.ui.select&lt;/code&gt; to choose from available models. When called with an argument, the format is &lt;code&gt;provider:model&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Example usage:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;Minuet change_model&lt;/code&gt; - Opens interactive model selection&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;Minuet change_model gemini:gemini-1.5-pro-latest&lt;/code&gt; - Directly sets the model&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note: For &lt;code&gt;openai_compatible&lt;/code&gt; and &lt;code&gt;openai_fim_compatible&lt;/code&gt; providers, the model completions in cmdline are determined by the &lt;code&gt;name&lt;/code&gt; field in your configuration. For example, if you configured:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;provider_options.openai_compatible.name = &#39;Fireworks&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;When entering &lt;code&gt;Minuet change_model openai_compatible:&lt;/code&gt; in the cmdline, you&#39;ll see model completions specific to the Fireworks provider.&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;Minuet change_preset&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;change_preset&lt;/code&gt; command allows you to switch between config presets that were defined during initial setup. Presets provide a convenient way to toggle between different config sets. This is particularly useful when you need to:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Switch between different cloud providers (such as Fireworks or Groq) for the &lt;code&gt;openai_compatible&lt;/code&gt; provider&lt;/li&gt; 
 &lt;li&gt;Apply different throttle and debounce settings for different providers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;When called, the command merges the selected preset with the current config table to create an updated configuration.&lt;/p&gt; 
&lt;p&gt;Usage syntax: &lt;code&gt;Minuet change_preset preset_1&lt;/code&gt;&lt;/p&gt; 
&lt;p&gt;Presets can be configured during the initial setup process.&lt;/p&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    presets = {
        preset_1 = {
            -- Configuration for cloud-based requests with large context window
            context_window = 20000,
            request_timeout = 4,
            throttle = 3000,
            debounce = 1000,
            provider = &#39;openai_compatible&#39;,
            provider_options = {
                openai_compatible = {
                    model = &#39;llama-3.3-70b-versatile&#39;,
                    api_key = &#39;GROQ_API_KEY&#39;,
                    name = &#39;Groq&#39;
                }
            }
        },
        preset_2 = {
            -- Configuration for local model with smaller context window
            provider = &#39;openai_fim_compatible&#39;,
            context_window = 2000,
            throttle = 400,
            debounce = 100,
            provider_options = {
                openai_fim_compatible = {
                    api_key = &#39;TERM&#39;,
                    name = &#39;Ollama&#39;,
                    end_point = &#39;http://localhost:11434/v1/completions&#39;,
                    model = &#39;qwen2.5-coder:7b&#39;,
                    optional = {
                        max_tokens = 256,
                        top_p = 0.9
                    }
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;&lt;code&gt;Minuet blink&lt;/code&gt;, &lt;code&gt;Minuet cmp&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;Enable or disable autocompletion for &lt;code&gt;nvim-cmp&lt;/code&gt; or &lt;code&gt;blink.cmp&lt;/code&gt;. While Minuet must be added to your cmp/blink sources, this command only controls whether Minuet is triggered during autocompletion. The command does not affect manual completion behavior - Minuet remains active and available when manually invoked.&lt;/p&gt; 
&lt;p&gt;Example usage: &lt;code&gt;Minuet blink toggle&lt;/code&gt;, &lt;code&gt;Minuet blink enable&lt;/code&gt;, &lt;code&gt;Minuet blink disable&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;Minuet virtualtext&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;Enable or disable the automatic display of &lt;code&gt;virtual-text&lt;/code&gt; completion in the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;Example usage: &lt;code&gt;Minuet virtualtext toggle&lt;/code&gt;, &lt;code&gt;Minuet virtualtext enable&lt;/code&gt;, &lt;code&gt;Minuet virtualtext disable&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;&lt;code&gt;Minuet duet&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;The Minuet duet command provides manual next-edit prediction controls:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet duet predict&lt;/code&gt;: Request an NES prediction for the current editable region and show it as a preview.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet duet apply&lt;/code&gt;: Apply the current duet prediction.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet duet dismiss&lt;/code&gt;: Dismiss the current duet prediction preview.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;&lt;code&gt;Minuet lsp&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;The Minuet LSP command provides commands for managing the in-process LSP server:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp attach&lt;/code&gt;: Attach the Minuet LSP server to the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp detach&lt;/code&gt;: Detach the Minuet LSP server from the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp completion enable_auto_trigger&lt;/code&gt;: Enable auto-triggered &lt;code&gt;vim.lsp.completion&lt;/code&gt; for the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp completion disable_auto_trigger&lt;/code&gt;: Disable auto-triggered &lt;code&gt;vim.lsp.completion&lt;/code&gt; for the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp inline_completion enable_auto_trigger&lt;/code&gt;: Enable &lt;code&gt;vim.lsp.inline_completion&lt;/code&gt; auto-triggering for the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:Minuet lsp inline_completion disable_auto_trigger&lt;/code&gt;: Disable &lt;code&gt;vim.lsp.inline_completion&lt;/code&gt; auto-triggering for the &lt;strong&gt;current buffer&lt;/strong&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Duet (Next Edit Prediction)&lt;/h1&gt; 
&lt;p&gt;&lt;code&gt;Minuet duet&lt;/code&gt; is Minuet&#39;s highly experimental next-edit prediction (NES) feature.&lt;/p&gt; 
&lt;p&gt;Basic usage is manual. Bind the duet commands to your preferred keymaps, then:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Trigger &lt;code&gt;:Minuet duet predict&lt;/code&gt; to request a prediction for the current edit.&lt;/li&gt; 
 &lt;li&gt;Review the preview rendered in the buffer.&lt;/li&gt; 
 &lt;li&gt;Apply it with &lt;code&gt;:Minuet duet apply&lt;/code&gt; or discard it with &lt;code&gt;:Minuet duet dismiss&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Example keymaps:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;mp&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet predict&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet predict&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;ma&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet apply&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet apply&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;md&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet dismiss&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet dismiss&#39; })
vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-z&amp;gt;&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet predict&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet predict&#39; })
vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-a&amp;gt;&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet apply&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet apply&#39; })
vim.keymap.set(&#39;i&#39;, &#39;&amp;lt;A-x&amp;gt;&#39;, &#39;&amp;lt;cmd&amp;gt;Minuet duet dismiss&amp;lt;cr&amp;gt;&#39;, { desc = &#39;Minuet duet dismiss&#39; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The recommended model at the moment is &lt;code&gt;gemini-3-flash-preview&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    duet = {
        provider = &#39;gemini&#39;,
        provider_options = {
            gemini = {
                model = &#39;gemini-3-flash-preview&#39;,
                optional = {
                    generationConfig = {
                        thinkingConfig = {
                            -- Disable thinking is recommended
                            thinkingLevel = &#39;minimal&#39;,
                        },
                    },
                },
            },
            openai_compatible = {
                model = &#39;google/gemini-3.1-flash-lite&#39;,
                optional = {
                    -- Disable thinking is recommended.
                    reasoning_effort = &#39;none&#39;,
                    -- prioritize throughput for faster completion
                    provider = {
                        sort = &#39;throughput&#39;,
                    },
                },
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;This feature is highly experimental:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;It only targets general-purpose LLMs rather than NES-specialized models, as I lack local GPU resources for testing.&lt;/li&gt; 
 &lt;li&gt;Comparable small models from competitors of Google—&lt;code&gt;claude-haiku-4.5&lt;/code&gt; and &lt;code&gt;gpt-5.4-mini&lt;/code&gt;—perform poorly.&lt;/li&gt; 
 &lt;li&gt;Given completion latency constraints, automatic duet prediction is not implemented.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;It is recommended to configure the thinking levels of the models; refer to the &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#providers&quot;&gt;provider sections&lt;/a&gt; for guidance on managing thinking settings for each provider.&lt;/p&gt; 
&lt;p&gt;Avoid setting a small &lt;code&gt;max_tokens&lt;/code&gt; or &lt;code&gt;max_completion_tokens&lt;/code&gt; limit for duet requests. Duet expects the model to return the complete rewritten editable region, including the cursor marker; if the response is truncated, the parser will reject it. Leave the limit unset when the provider allows that, or set it large enough to cover the full rewritten region.&lt;/p&gt; 
&lt;h2&gt;TODO&lt;/h2&gt; 
&lt;ul class=&quot;task-list&quot;&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_0&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_0&quot;&gt; Implement a proper diff mechanism to include recent edit changes in prompts.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_1&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_1&quot;&gt; Add support for specialized NES models (Zeta, Sweep).&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_2&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_2&quot;&gt; Integrate with Inception&#39;s hosted API.&lt;/label&gt;&lt;/li&gt; 
 &lt;li class=&quot;task-list-item&quot;&gt;&lt;input type=&quot;checkbox&quot; id=&quot;cbx_3&quot; disabled=&quot;true&quot; /&gt;&lt;label for=&quot;cbx_3&quot;&gt; Implement automatically triggered duet prediction.&lt;/label&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Default Config&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;minuet&#39;).setup {
    duet = {
        provider = &#39;gemini&#39;, -- Provider used by `:Minuet duet predict`.
        request_timeout = 15, -- Timeout in seconds for a single duet request.
        editable_region = {
            lines_before = 8, -- Number of editable lines included before the cursor.
            lines_after = 15, -- Number of editable lines included after the cursor.
            before_region_filter_length = 30, -- Trim duplicated text from the start of the model output when it repeats non-editable text before the region.
            after_region_filter_length = 30, -- Trim duplicated text from the end of the model output when it repeats non-editable text after the region.
        },
        non_editable_region = {
            context_window = 40000, -- Maximum characters of non-editable context included around the editable region.
            context_ratio = 0.75, -- Ratio of non-editable context before vs. after the editable region when truncation is needed.
        },
        markers = {
            editable_region_start = &#39;&amp;lt;editable_region&amp;gt;&#39;, -- Marker that wraps the start of the editable region in prompts and responses.
            editable_region_end = &#39;&amp;lt;/editable_region&amp;gt;&#39;, -- Marker that wraps the end of the editable region in prompts and responses.
            cursor_position = &#39;&amp;lt;cursor_position/&amp;gt;&#39;, -- Marker the model must preserve exactly once to indicate the final cursor position.
        },
        preview = {
            cursor = &#39;&#39;, -- Virtual marker shown at the predicted cursor location in the preview.
        },
        provider_options = {
            openai = {
                model = &#39;gpt-5.4-mini&#39;, -- Default OpenAI model for duet requests.
                api_key = &#39;OPENAI_API_KEY&#39;, -- Environment variable name, or a function that returns the API key.
                end_point = &#39;https://api.openai.com/v1/chat/completions&#39;, -- OpenAI chat completions endpoint.
                system = { ... }, -- Duet system prompt config; keep the default unless you need a custom rewrite prompt.
                few_shots = { ... }, -- Example user/assistant turns used to steer the rewrite.
                chat_input = { ... }, -- Template that serializes editable and non-editable buffer regions.
                optional = {}, -- Extra request body fields passed through to the OpenAI API.
                transform = {}, -- Optional endpoint/header/body transforms applied before sending the request.
            },
            claude = {
                model = &#39;claude-haiku-4-5&#39;,
                api_key = &#39;ANTHROPIC_API_KEY&#39;,
                end_point = &#39;https://api.anthropic.com/v1/messages&#39;,
                system = { ... },
                few_shots = { ... },
                chat_input = { ... },
                max_tokens = 8192,
                optional = {},
                transform = {},
            },
            gemini = {
                model = &#39;gemini-3-flash-preview&#39;, -- Recommended duet model at the moment.
                api_key = &#39;GEMINI_API_KEY&#39;,
                end_point = &#39;https://generativelanguage.googleapis.com/v1beta/models&#39;,
                system = { ... },
                few_shots = { ... },
                chat_input = { ... },
                optional = {},
                transform = {},
            },
            openai_compatible = {
                model = &#39;google/gemini-3.1-flash-lite&#39;,
                api_key = &#39;OPENROUTER_API_KEY&#39;,
                end_point = &#39;https://openrouter.ai/api/v1/chat/completions&#39;,
                name = &#39;Openrouter&#39;,
                system = { ... },
                few_shots = { ... },
                chat_input = { ... },
                optional = {},
                transform = {},
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h1&gt;API&lt;/h1&gt; 
&lt;h2&gt;Virtual Text&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;minuet-ai.nvim&lt;/code&gt; offers the following functions to customize your key mappings:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    -- accept whole completion
    require(&#39;minuet.virtualtext&#39;).action.accept,
    -- accept by line
    require(&#39;minuet.virtualtext&#39;).action.accept_line,
    -- accept n lines (prompts for number)
    require(&#39;minuet.virtualtext&#39;).action.accept_n_lines,
    require(&#39;minuet.virtualtext&#39;).action.next,
    require(&#39;minuet.virtualtext&#39;).action.prev,
    require(&#39;minuet.virtualtext&#39;).action.dismiss,
    -- whether the virtual text is visible in current buffer
    require(&#39;minuet.virtualtext&#39;).action.is_visible,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Duet&lt;/h2&gt; 
&lt;p&gt;The duet module provides functions to programmatically control duet prediction:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    require(&#39;minuet.duet&#39;).action.predict,
    require(&#39;minuet.duet&#39;).action.apply,
    require(&#39;minuet.duet&#39;).action.dismiss,
    -- Check if a duet preview is currently visible in the current buffer
    require(&#39;minuet.duet&#39;).action.is_visible,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Lualine&lt;/h2&gt; 
&lt;p&gt;Minuet provides a Lualine component that displays the current status of Minuet requests. This component shows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;The name of the active provider and model&lt;/li&gt; 
 &lt;li&gt;The current request count (e.g., &quot;1/3&quot;)&lt;/li&gt; 
 &lt;li&gt;An animated spinner while processing&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To use the Minuet Lualine component, add it to your Lualine configuration:&lt;/p&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;lualine&#39;).setup {
    sections = {
        lualine_x = {
            {
                require &#39;minuet.lualine&#39;,
                -- the follwing is the default configuration
                -- the name displayed in the lualine. Set to &quot;provider&quot;, &quot;model&quot; or &quot;both&quot;
                -- display_name = &#39;both&#39;,
                -- separator between provider and model name for option &quot;both&quot;
                -- provider_model_separator = &#39;:&#39;,
                -- whether show display_name when no completion requests are active
                -- display_on_idle = false,
            },
            &#39;encoding&#39;,
            &#39;fileformat&#39;,
            &#39;filetype&#39;,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Minuet Event&lt;/h2&gt; 
&lt;h3&gt;Standard Completion Events&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetRequestStartedPre&lt;/strong&gt;: Triggered before a completion request is initiated. This allows for pre-request operations, such as logging or updating the user interface.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetRequestStarted&lt;/strong&gt;: Triggered immediately after the completion request is dispatched, signaling that the request is in progress.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetRequestFinished&lt;/strong&gt;: Triggered upon completion of the request.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Duet Events&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetDuetRequestStartedPre&lt;/strong&gt;: Triggered before a duet request is initiated.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetDuetRequestStarted&lt;/strong&gt;: Triggered immediately after the duet request is dispatched.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MinuetDuetRequestFinished&lt;/strong&gt;: Triggered upon completion of the duet request.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Event Data&lt;/h3&gt; 
&lt;p&gt;Each event includes a &lt;code&gt;data&lt;/code&gt; field containing the following properties:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;provider&lt;/code&gt;: A string indicating the provider type (e.g., &#39;openai_compatible&#39;).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;name&lt;/code&gt;: A string specifying the provider&#39;s name (e.g., &#39;OpenAI&#39;, &#39;Groq&#39;, &#39;Ollama&#39;).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;model&lt;/code&gt;: A string containing the model name (e.g., &#39;gemini-2.0-flash&#39;).&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;n_requests&lt;/code&gt;: The number of requests encompassed in this completion cycle.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;request_idx&lt;/code&gt; (optional): The index of the current request, applicable when providers make multiple requests.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;timestamp&lt;/code&gt;: A Unix timestamp representing the start of the request cycle (corresponding to the &lt;code&gt;MinuetRequestStartedPre&lt;/code&gt; event).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;FAQ&lt;/h1&gt; 
&lt;h2&gt;Customize &lt;code&gt;cmp&lt;/code&gt; ui for source icon and kind icon&lt;/h2&gt; 
&lt;p&gt;You can configure the icons of completion items returned by &lt;code&gt;minuet&lt;/code&gt; by using the following snippet (referenced from &lt;a href=&quot;https://github.com/hrsh7th/nvim-cmp/wiki/Menu-Appearance#basic-customisations&quot;&gt;cmp&#39;s wiki&lt;/a&gt;):&lt;/p&gt; 
&lt;details&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local kind_icons = {
    Number = &#39;󰎠&#39;,
    Array = &#39;&#39;,
    Variable = &#39;&#39;,
    -- and other icons
    -- LLM Provider icons
    claude = &#39;󰋦&#39;,
    openai = &#39;󱢆&#39;,
    codestral = &#39;󱎥&#39;,
    gemini = &#39;&#39;,
    Groq = &#39;&#39;,
    Openrouter = &#39;󱂇&#39;,
    Ollama = &#39;󰳆&#39;,
    [&#39;Llama.cpp&#39;] = &#39;󰳆&#39;,
    Deepseek = &#39;&#39;
    -- FALLBACK
    fallback = &#39;&#39;,
}

local source_icons = {
    minuet = &#39;󱗻&#39;,
    nvim_lsp = &#39;&#39;,
    lsp = &#39;&#39;,
    buffer = &#39;&#39;,
    luasnip = &#39;&#39;,
    snippets = &#39;&#39;,
    path = &#39;&#39;,
    git = &#39;&#39;,
    tags = &#39;&#39;,
    -- FALLBACK
    fallback = &#39;󰜚&#39;,
}

local cmp = require &#39;cmp&#39;
cmp.setup {
    formatting = {
        format = function(entry, vim_item)
            -- Kind icons
            -- This concatenates the icons with the name of the item kind
            vim_item.kind = string.format(&#39;%s %s&#39;, kind_icons[vim_item.kind] or kind_icons.fallback, vim_item.kind)
            -- Source
            vim_item.menu = source_icons[entry.source.name] or source_icons.fallback
            return vim_item
        end,
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Customize &lt;code&gt;blink&lt;/code&gt; ui for source icon and kind icon&lt;/h2&gt; 
&lt;p&gt;You can configure the icons of completion items returned by &lt;code&gt;minuet&lt;/code&gt; by the following snippet:&lt;/p&gt; 
&lt;details&gt; 
 &lt;p&gt;To customize the kind icons:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local kind_icons = {
    -- LLM Provider icons
    claude = &#39;󰋦&#39;,
    openai = &#39;󱢆&#39;,
    codestral = &#39;󱎥&#39;,
    gemini = &#39;&#39;,
    Groq = &#39;&#39;,
    Openrouter = &#39;󱂇&#39;,
    Ollama = &#39;󰳆&#39;,
    [&#39;Llama.cpp&#39;] = &#39;󰳆&#39;,
    Deepseek = &#39;&#39;
}

require(&#39;blink-cmp&#39;).setup {
    appearance = {
        use_nvim_cmp_as_default = true,
        nerd_font_variant = &#39;normal&#39;,
        kind_icons = kind_icons
    },
}

&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;To customize the source icons:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local source_icons = {
    minuet = &#39;󱗻&#39;,
    orgmode = &#39;&#39;,
    otter = &#39;󰼁&#39;,
    nvim_lsp = &#39;&#39;,
    lsp = &#39;&#39;,
    buffer = &#39;&#39;,
    luasnip = &#39;&#39;,
    snippets = &#39;&#39;,
    path = &#39;&#39;,
    git = &#39;&#39;,
    tags = &#39;&#39;,
    cmdline = &#39;󰘳&#39;,
    latex_symbols = &#39;&#39;,
    cmp_nvim_r = &#39;󰟔&#39;,
    codeium = &#39;󰩂&#39;,
    -- FALLBACK
    fallback = &#39;󰜚&#39;,
}

require(&#39;blink-cmp&#39;).setup {
    appearance = {
        use_nvim_cmp_as_default = true,
        nerd_font_variant = &#39;normal&#39;,
        kind_icons = kind_icons
    },
    completion = {
        menu = {
            draw = {
                columns = {
                    { &#39;label&#39;, &#39;label_description&#39;, gap = 1 },
                    { &#39;kind_icon&#39;, &#39;kind&#39; },
                    { &#39;source_icon&#39; },
                },
                components = {
                    source_icon = {
                        -- don&#39;t truncate source_icon
                        ellipsis = false,
                        text = function(ctx)
                            return source_icons[ctx.source_name:lower()] or source_icons.fallback
                        end,
                        highlight = &#39;BlinkCmpSource&#39;,
                    },
                },
            },
        },
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Significant Input Delay When Moving to a New Line with &lt;code&gt;nvim-cmp&lt;/code&gt;&lt;/h2&gt; 
&lt;p&gt;When using Minuet with auto-complete enabled, you may occasionally experience a noticeable delay when pressing &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; to move to the next line. This occurs because Minuet triggers autocompletion at the start of a new line, while cmp blocks the &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; key, awaiting Minuet&#39;s response.&lt;/p&gt; 
&lt;p&gt;To address this issue, consider the following solutions:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Unbind the &lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt; key from your cmp keymap.&lt;/li&gt; 
 &lt;li&gt;Utilize cmp&#39;s internal API to avoid blocking calls, though be aware that this API may change without prior notice.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;Here&#39;s an example of the second approach using Lua:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local cmp = require &#39;cmp&#39;
opts.mapping = {
    [&#39;&amp;lt;CR&amp;gt;&#39;] = cmp.mapping(function(fallback)
        -- use the internal non-blocking call to check if cmp is visible
        if cmp.core.view:visible() then
            cmp.confirm { select = true }
        else
            fallback()
        end
    end),
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Integration with &lt;code&gt;lazyvim&lt;/code&gt;&lt;/h2&gt; 
&lt;details&gt; 
 &lt;p&gt;&lt;strong&gt;With nvim-cmp&lt;/strong&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;milanglacier/minuet-ai.nvim&#39;,
    config = function()
        require(&#39;minuet&#39;).setup {
            -- Your configuration options here
        }
    end
},
{
    &#39;nvim-cmp&#39;,
    optional = true,
    opts = function(_, opts)
        -- if you wish to use autocomplete
        table.insert(opts.sources, 1, {
            name = &#39;minuet&#39;,
            group_index = 1,
            priority = 100,
        })

        opts.performance = {
            -- It is recommended to increase the timeout duration due to
            -- the typically slower response speed of LLMs compared to
            -- other completion sources. This is not needed when you only
            -- need manual completion.
            fetching_timeout = 2000,
        }

        opts.mapping = vim.tbl_deep_extend(&#39;force&#39;, opts.mapping or {}, {
            -- if you wish to use manual complete
            [&#39;&amp;lt;A-y&amp;gt;&#39;] = require(&#39;minuet&#39;).make_cmp_map(),
        })
    end,
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;strong&gt;With blink-cmp&lt;/strong&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- set the following line in your config/options.lua
vim.g.lazyvim_blink_main = true

{
    &#39;milanglacier/minuet-ai.nvim&#39;,
    config = function()
        require(&#39;minuet&#39;).setup {
            -- Your configuration options here
        }
    end,
},
{
    &#39;saghen/blink.cmp&#39;,
    optional = true,
    opts = {
        keymap = {
            [&#39;&amp;lt;A-y&amp;gt;&#39;] = {
                function(cmp)
                    cmp.show { providers = { &#39;minuet&#39; } }
                end,
            },
        },
        sources = {
            -- if you want to use auto-complete
            default =  { &#39;minuet&#39; },
            providers = {
                minuet = {
                    name = &#39;minuet&#39;,
                    module = &#39;minuet.blink&#39;,
                    score_offset = 100,
                },
            },
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h1&gt;Enhancement&lt;/h1&gt; 
&lt;h2&gt;RAG (Experimental)&lt;/h2&gt; 
&lt;p&gt;You can enhance the content sent to the LLM for code completion by leveraging RAG support through the &lt;a href=&quot;https://github.com/Davidyz/VectorCode&quot;&gt;VectorCode&lt;/a&gt; package.&lt;/p&gt; 
&lt;p&gt;VectorCode contains two main components. The first is a standalone CLI program written in Python, available for installation via PyPI. This program is responsible for creating the vector database and processing RAG queries. The second component is a Neovim plugin that provides utility functions to send queries and manage buffer-related RAG information within Neovim.&lt;/p&gt; 
&lt;p&gt;We offer two example recipes demonstrating VectorCode integration: one for chat-based LLMs (Gemini) and another for the FIM model (Qwen-2.5-Coder), available in &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/recipes.md&quot;&gt;recipes.md&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;For detailed instructions on setting up and using VectorCode, please refer to the &lt;a href=&quot;https://github.com/Davidyz/VectorCode/tree/main/docs/neovim&quot;&gt;official VectorCode documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h1&gt;Troubleshooting&lt;/h1&gt; 
&lt;p&gt;If your setup failed, there are two most likely reasons:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;You may set the API key incorrectly. Checkout the &lt;a href=&quot;https://raw.githubusercontent.com/milanglacier/minuet-ai.nvim/main/#api-keys&quot;&gt;API Key&lt;/a&gt; section to see how to correctly specify the API key.&lt;/li&gt; 
 &lt;li&gt;You are using a model or a context window that is too large, causing completion items to timeout before returning any tokens. This is particularly common with local LLM. It is recommended to start with the following settings to have a better understanding of your provider&#39;s inference speed. 
  &lt;ul&gt; 
   &lt;li&gt;Begin by testing with manual completions.&lt;/li&gt; 
   &lt;li&gt;Use a smaller context window (e.g., &lt;code&gt;config.context_window = 768&lt;/code&gt;)&lt;/li&gt; 
   &lt;li&gt;Use a smaller model&lt;/li&gt; 
   &lt;li&gt;Set a longer request timeout (e.g., &lt;code&gt;config.request_timeout = 5&lt;/code&gt;)&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;To diagnose issues, set &lt;code&gt;config.notify = debug&lt;/code&gt; and examine the output.&lt;/p&gt; 
&lt;h1&gt;Contributing&lt;/h1&gt; 
&lt;p&gt;Contributions are welcome! Please feel free to submit a Pull Request.&lt;/p&gt; 
&lt;h1&gt;Acknowledgement&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tzachar/cmp-ai&quot;&gt;cmp-ai&lt;/a&gt;: Reference for the integration with &lt;code&gt;nvim-cmp&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.continue.dev&quot;&gt;continue.dev&lt;/a&gt;: not a neovim plugin, but I find a lot LLM models from here.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/zbirenbaum/copilot.lua&quot;&gt;copilot.lua&lt;/a&gt;: Reference for the virtual text frontend.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ggml-org/llama.vim&quot;&gt;llama.vim&lt;/a&gt;: Reference for CLI parameters used to launch the llama-cpp server.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/saecki/crates.nvim&quot;&gt;crates.nvim&lt;/a&gt;: Reference for in-process LSP implemtation to provide completion.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/8e8ce6bbdde6eea1dc670022869b95b709a23339b83b1f29f5095396f864d474/milanglacier/minuet-ai.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>neovim/nvim-lspconfig</title>
      <link>https://github.com/neovim/nvim-lspconfig</link>
      <description>&lt;p&gt;Quickstart configs for Nvim LSP&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;nvim-lspconfig&lt;/h1&gt; 
&lt;p&gt;nvim-lspconfig is a collection of LSP server configurations for the &lt;a href=&quot;https://neovim.io/doc/user/lsp.html&quot;&gt;Nvim LSP client&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;View &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md&quot;&gt;all configs&lt;/a&gt;, or run &lt;code&gt;:help lspconfig-all&lt;/code&gt; from Nvim.&lt;/p&gt; 
&lt;h2&gt;Important ⚠️&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;require(&#39;lspconfig&#39;)&lt;/code&gt; (the legacy &quot;framework&quot; of nvim-lspconfig) &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/issues/3693&quot;&gt;is &lt;strong&gt;deprecated&lt;/strong&gt;&lt;/a&gt; in favor of &lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-config&quot;&gt;vim.lsp.config&lt;/a&gt; (Nvim 0.11+). 
  &lt;ul&gt; 
   &lt;li&gt;The &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lua/lspconfig.lua&quot;&gt;lspconfig.lua&lt;/a&gt; &lt;em&gt;module&lt;/em&gt; will be dropped. Calls to &lt;code&gt;require(&#39;lspconfig&#39;)&lt;/code&gt; will show a warning, which will later become an error.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;nvim-lspconfig itself is &lt;strong&gt;NOT deprecated&lt;/strong&gt;. It provides server-specific configs. 
  &lt;ul&gt; 
   &lt;li&gt;The configs live in the &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lsp/&quot;&gt;lsp/&lt;/a&gt; directory. &lt;code&gt;vim.lsp.config&lt;/code&gt; automatically finds them and merges them with any local &lt;code&gt;lsp/*.lua&lt;/code&gt; configs defined by you or a plugin.&lt;/li&gt; 
   &lt;li&gt;The old configs in &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lua/lspconfig/&quot;&gt;lua/lspconfig/&lt;/a&gt; are &lt;strong&gt;deprecated&lt;/strong&gt; and will be removed.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Migration instructions&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Upgrade to Nvim 0.11+&lt;/li&gt; 
 &lt;li&gt;(Optional) Use &lt;code&gt;vim.lsp.config(&#39;…&#39;)&lt;/code&gt; (not &lt;code&gt;require&#39;lspconfig&#39;.….setup{}&lt;/code&gt;) to &lt;em&gt;customize&lt;/em&gt; or &lt;em&gt;define&lt;/em&gt; a config.&lt;/li&gt; 
 &lt;li&gt;Use &lt;code&gt;vim.lsp.enable(&#39;…&#39;)&lt;/code&gt; (not &lt;code&gt;require&#39;lspconfig&#39;.….setup{}&lt;/code&gt;) to &lt;em&gt;enable&lt;/em&gt; a config, so that it activates for its &lt;code&gt;filetypes&lt;/code&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;These configs are &lt;strong&gt;best-effort and supported by the community (you).&lt;/strong&gt; See &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/#contributions&quot;&gt;contributions&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Ask questions on &lt;a href=&quot;https://github.com/neovim/neovim/discussions&quot;&gt;GitHub Discussions&lt;/a&gt;, not the issue tracker.&lt;/li&gt; 
 &lt;li&gt;If you found a bug in Nvim LSP (&lt;code&gt;:help lsp&lt;/code&gt;), &lt;a href=&quot;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&quot;&gt;report it to Neovim core&lt;/a&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;&lt;strong&gt;Do not&lt;/strong&gt; report it here. Only configuration data lives here.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/neovim/nvim-lspconfig&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/neovim/nvim-lspconfig?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Requires Nvim 0.11.3+. 
  &lt;ul&gt; 
   &lt;li&gt;Support for Nvim 0.10 &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/issues/3693&quot;&gt;will be removed&lt;/a&gt;. Upgrade Nvim and nvim-lspconfig before reporting an issue.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;With Nvim 0.12+, you can use the builtin &lt;code&gt;vim.pack&lt;/code&gt; plugin manager:&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add{
  { src = &#39;https://github.com/neovim/nvim-lspconfig&#39; },
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Or install nvim-lspconfig using Vim&#39;s &quot;packages&quot; feature:&lt;pre&gt;&lt;code&gt;git clone https://github.com/neovim/nvim-lspconfig ~/.config/nvim/pack/nvim/start/nvim-lspconfig
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Or use a 3rd-party plugin manager.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Install a language server, e.g. &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md#pyright&quot;&gt;pyright&lt;/a&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;npm i -g pyright
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Enable its config in your init.lua (&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-quickstart&quot;&gt;:help lsp-quickstart&lt;/a&gt;).&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.enable(&#39;pyright&#39;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Ensure your project/workspace contains a root marker as specified in &lt;code&gt;:help lspconfig-all&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;Open a code file in Nvim. LSP will attach and provide diagnostics.&lt;pre&gt;&lt;code&gt;nvim main.py
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt; to see the status or to troubleshoot.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;See &lt;code&gt;:help lspconfig-all&lt;/code&gt; for the full list of server-specific details. For servers not on your &lt;code&gt;$PATH&lt;/code&gt; (e.g., &lt;code&gt;jdtls&lt;/code&gt;, &lt;code&gt;elixirls&lt;/code&gt;), you must manually set the &lt;code&gt;cmd&lt;/code&gt; parameter:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;jdtls&#39;, {
  cmd = { &#39;/path/to/jdtls&#39; },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:LspInfo&lt;/code&gt; (alias to &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;) shows the status of active and configured language servers.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp enable [&amp;lt;config_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspStart&lt;/code&gt; for Nvim 0.11 or older) Start the requested server name. Will only successfully start if the command detects a root directory matching the current config.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp disable [&amp;lt;config_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspStop&lt;/code&gt; for Nvim 0.11 or older) Stops the given server. Defaults to stopping all servers active on the current buffer. To force stop use &lt;code&gt;:LspStop!&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:lsp restart [&amp;lt;client_name&amp;gt;]&lt;/code&gt; (&lt;code&gt;:LspRestart&lt;/code&gt; for Nvim 0.11 or older) Restarts the given client, and attempts to reattach to all previously attached buffers. Defaults to restarting all active servers.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;p&gt;Nvim sets default options and mappings when LSP is active in a buffer:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-defaults&quot;&gt;:help lsp-defaults&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/diagnostic.html#diagnostic-defaults&quot;&gt;:help diagnostic-defaults&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To customize, see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-attach&quot;&gt;:help lsp-attach&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-buf&quot;&gt;:help lsp-buf&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Extra settings can be specified for each LSP server. With Nvim 0.11+ you can &lt;a href=&quot;https://neovim.io/doc/user/lsp.html#lsp-config&quot;&gt;extend a config&lt;/a&gt; by calling &lt;code&gt;vim.lsp.config(&#39;…&#39;, {…})&lt;/code&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;rust_analyzer&#39;, {
  -- Server-specific settings. See `:help lsp-quickstart`
  settings = {
    [&#39;rust-analyzer&#39;] = {},
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Config priority&lt;/h3&gt; 
&lt;p&gt;Configs are sourced in this order:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;code&gt;lsp/&lt;/code&gt; in &#39;runtimepath&#39;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;after/lsp/&lt;/code&gt; in &#39;runtimepath&#39;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;vim.lsp.config()&lt;/code&gt;&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;If you install nvim-lspconfig or similar plugins, the order that configs are applied depends on the load order. To ensure that your own config &quot;wins&quot; and overrides the others, use &lt;code&gt;after/lsp/&lt;/code&gt; and/or &lt;code&gt;vim.lsp.config()&lt;/code&gt; to override/extend the defaults.&lt;/p&gt; 
&lt;h2&gt;Creating a config&lt;/h2&gt; 
&lt;h3&gt;As code&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Run &lt;code&gt;:lua vim.lsp.config(&#39;foo&#39;, {cmd={&#39;true&#39;}})&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:lua vim.lsp.enable(&#39;foo&#39;)&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;, the new config is listed under &quot;Enabled Configurations&quot;. 😎&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;As a file&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Create a file &lt;code&gt;after/lsp/foo.lua&lt;/code&gt; somewhere on your &#39;runtimepath&#39;.&lt;pre&gt;&lt;code&gt;:exe &#39;edit&#39; stdpath(&#39;config&#39;) .. &#39;/after/lsp/foo.lua&#39;
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Add this code to the file (or copy any of the examples from the &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/lsp/&quot;&gt;lsp/ directory&lt;/a&gt; in this repo):&lt;pre&gt;&lt;code&gt;return {
  cmd = { &#39;true&#39; },
}
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Save the file (with &lt;code&gt;++p&lt;/code&gt; to ensure its parent directory is created).&lt;pre&gt;&lt;code&gt;:write ++p
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Enable the config.&lt;pre&gt;&lt;code&gt;:lua vim.lsp.enable(&#39;foo&#39;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;, the new config is listed under &quot;Enabled Configurations&quot;. 🌈&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;LSP Settings Type Annotations&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;nvim-lspconfig&lt;/code&gt; generates Lua type definitions for each supported LSP server. By manually adding annotations (e.g., &lt;code&gt;---@type lspconfig.settings.server_name&lt;/code&gt;), you enable auto-completion and diagnostics for your server settings.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;---@type vim.lsp.Config
local config = {
  ---@type lspconfig.settings.lua_ls
  settings = {
    Lua = {
      runtime = {
        version = &#39;LuaJIT&#39;,
      },
      workspace = {
        preloadFileSize = 10000,
        library = {
          vim.env.VIMRUNTIME,
        }
      },
    },
  },
}

vim.lsp.config(&#39;lua_ls&#39;, config)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;p&gt;Start with &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt; to troubleshoot. The most common reasons a language server does not start or attach are:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Language server is not installed. nvim-lspconfig does not install language servers for you. You should be able to run the &lt;code&gt;cmd&lt;/code&gt; defined in the config from the command line and see that the language server starts. If the &lt;code&gt;cmd&lt;/code&gt; is a name instead of an absolute path, ensure it is on your &lt;code&gt;$PATH&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Missing filetype plugins. Some languages are not detected by Nvim because they have not yet been added to the filetype detection system. Ensure &lt;code&gt;:set filetype?&lt;/code&gt; shows the filetype and not an empty value.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Not triggering root detection. Some language servers require a &quot;workspace&quot;, which is found by looking for an ancestor directory that contains a &quot;root marker&quot;. The most common root marker is &lt;code&gt;.git/&lt;/code&gt;, but each config defines other &quot;root marker&quot; names. Root markers/directories are listed in &lt;code&gt;:help lspconfig-all&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;You can also explicitly set a root instead of relying on automatic detection by enabling &lt;code&gt;&#39;exrc&#39;&lt;/code&gt; and adding an &lt;code&gt;.nvim.lua&lt;/code&gt; at the desired root dir with the following code:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.config(&#39;&amp;lt;client name&amp;gt;&#39;, {
  root_dir = vim.fn.fnamemodify(debug.getinfo(1, &#39;S&#39;).source:sub(2), &#39;:p:h&#39;),
})
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;Note that prior to nvim 0.12 &lt;code&gt;exrc&lt;/code&gt; file is executed only if it&#39;s inside of a cwd where you start &lt;code&gt;nvim&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Bug reports&lt;/h2&gt; 
&lt;p&gt;If you found a bug with LSP functionality, &lt;a href=&quot;https://github.com/neovim/neovim/issues/new?assignees=&amp;amp;labels=bug%2Clsp&amp;amp;template=lsp_bug_report.yml&quot;&gt;report it to Neovim core&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Before reporting a bug, check your logs and the output of &lt;code&gt;:checkhealth vim.lsp&lt;/code&gt;. Add this to your init.lua to enable verbose logging:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.lsp.log.set_level(&#39;debug&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Attempt to run the language server, then run &lt;code&gt;:LspLog&lt;/code&gt; to open the log. Most of the time, the reason for failure is present in the logs.&lt;/p&gt; 
&lt;h2&gt;Contributions&lt;/h2&gt; 
&lt;p&gt;If a language server is missing from &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/doc/configs.md&quot;&gt;configs.md&lt;/a&gt;, contributing a new configuration for it helps others, especially if the server requires special setup. Follow these steps:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Read &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Create a new file at &lt;code&gt;lsp/&amp;lt;server_name&amp;gt;.lua&lt;/code&gt;. 
  &lt;ul&gt; 
   &lt;li&gt;Copy an &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/tree/master/lsp&quot;&gt;existing config&lt;/a&gt; to get started. Most configs are simple. For an extensive example see &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/raw/master/lsp/texlab.lua&quot;&gt;texlab.lua&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;Ask questions on &lt;a href=&quot;https://github.com/neovim/neovim/discussions&quot;&gt;GitHub Discussions&lt;/a&gt; or in the &lt;a href=&quot;https://app.element.io/#/room/#neovim:matrix.org&quot;&gt;Neovim Matrix room&lt;/a&gt;.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Release process&lt;/h2&gt; 
&lt;p&gt;To publish a release:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Create and push a new &lt;a href=&quot;https://github.com/neovim/nvim-lspconfig/tags&quot;&gt;tag&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;After pushing the tag, a &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/.github/workflows/release.yml&quot;&gt;GitHub action&lt;/a&gt; will automatically package the plugin and publish the release to LuaRocks.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;Copyright Neovim contributors. All rights reserved.&lt;/p&gt; 
&lt;p&gt;nvim-lspconfig is licensed under the terms of the Apache 2.0 license.&lt;/p&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/neovim/nvim-lspconfig/master/LICENSE.md&quot;&gt;LICENSE.md&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/3223e224373f2cfab2c8bfb7ff2e537c413565efe74d231297a7921413f585dc/neovim/nvim-lspconfig" medium="image" />
      
    </item>
    
    <item>
      <title>overextended/ox_inventory</title>
      <link>https://github.com/overextended/ox_inventory</link>
      <description>&lt;p&gt;Slot-based inventory with metadata.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;ox_inventory&lt;/h1&gt; 
&lt;p&gt;A complete inventory system for FiveM, implementing items, weapons, shops, and more without any strict framework dependency.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://img.shields.io/github/downloads/overextended/ox_inventory/total?logo=github&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/downloads/overextended/ox_inventory/latest/total?logo=github&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/contributors/overextended/ox_inventory?logo=github&quot; alt=&quot;&quot; /&gt; &lt;img src=&quot;https://img.shields.io/github/v/release/overextended/ox_inventory?logo=github&quot; alt=&quot;&quot; /&gt;&lt;/p&gt; 
&lt;h2&gt;📚 Documentation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://overextended.dev/ox_inventory&quot;&gt;https://overextended.dev/ox_inventory&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;💾 Download&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/overextended/ox_inventory/releases/latest/download/ox_inventory.zip&quot;&gt;https://github.com/overextended/ox_inventory/releases/latest/download/ox_inventory.zip&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Supported frameworks&lt;/h2&gt; 
&lt;p&gt;We do not guarantee compatibility or support for third-party resources.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/overextended/ox_core&quot;&gt;ox_core&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/esx-framework/esx_core&quot;&gt;esx&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Qbox-project/qbx_core&quot;&gt;qbox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ND-Framework/ND_Core&quot;&gt;nd_core&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Server-side security ensures interactions with items, shops, and stashes are all validated.&lt;/li&gt; 
 &lt;li&gt;Logging for important events, such as purchases, item movement, and item creation or removal.&lt;/li&gt; 
 &lt;li&gt;Supports player-owned vehicles, licenses, and group systems implemented by frameworks.&lt;/li&gt; 
 &lt;li&gt;Fully synchronised, allowing multiple players to &lt;a href=&quot;https://user-images.githubusercontent.com/65407488/230926091-c0033732-d293-48c9-9d62-6f6ae0a8a488.mp4&quot;&gt;access the same inventory&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Items&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Inventory items are stored per-slot, with customisable metadata to support item uniqueness.&lt;/li&gt; 
 &lt;li&gt;Overrides default weapon-system with weapons as items.&lt;/li&gt; 
 &lt;li&gt;Weapon attachments and ammo system, including special ammo types.&lt;/li&gt; 
 &lt;li&gt;Durability, allowing items to be depleted or removed overtime.&lt;/li&gt; 
 &lt;li&gt;Internal item system provides secure and easy handling for item use effects.&lt;/li&gt; 
 &lt;li&gt;Compatibility with 3rd party framework item registration.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Shops&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Restricted access based on groups and licenses.&lt;/li&gt; 
 &lt;li&gt;Support different currency for items (black money, poker chips, etc).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Stashes&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Personal stashes, linking a stash with a specific identifier or creating per-player instances.&lt;/li&gt; 
 &lt;li&gt;Restricted access based on groups.&lt;/li&gt; 
 &lt;li&gt;Registration of new stashes from any resource.&lt;/li&gt; 
 &lt;li&gt;Containers allow access to stashes when using an item, like a paperbag or backpack.&lt;/li&gt; 
 &lt;li&gt;Access gloveboxes and trunks for any vehicle.&lt;/li&gt; 
 &lt;li&gt;Random item generation inside dumpsters and unowned vehicles.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Copyright&lt;/h2&gt; 
&lt;p&gt;Copyright © 2024 Overextended &lt;a href=&quot;https://github.com/overextended&quot;&gt;https://github.com/overextended&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.&lt;/p&gt; 
&lt;p&gt;This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.&lt;/p&gt; 
&lt;p&gt;You should have received a copy of the GNU General Public License along with this program. If not, see &lt;a href=&quot;https://www.gnu.org/licenses/&quot;&gt;https://www.gnu.org/licenses/&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2478c1702ccd3d570cbbb63d64cd6ec22a8481cbbeb7b06cbf99db537a1e6608/overextended/ox_inventory" medium="image" />
      
    </item>
    
    <item>
      <title>mason-org/mason.nvim</title>
      <link>https://github.com/mason-org/mason.nvim</link>
      <description>&lt;p&gt;Portable package manager for Neovim that runs everywhere Neovim runs. Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/Linux-%23.svg?logo=linux&amp;amp;color=FCC624&amp;amp;logoColor=black&quot; alt=&quot;Linux&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/macOS-%23.svg?logo=apple&amp;amp;color=000000&amp;amp;logoColor=white&quot; alt=&quot;macOS&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Windows-%23.svg?logo=windows&amp;amp;color=0078D6&amp;amp;logoColor=white&quot; alt=&quot;Windows&quot; /&gt; &lt;a href=&quot;https://github.com/mason-org/mason.nvim/actions?query=workflow%3ATests+branch%3Amain+event%3Apush&quot;&gt;&lt;img src=&quot;https://github.com/mason-org/mason.nvim/workflows/Tests/badge.svg?sanitize=true&quot; alt=&quot;GitHub CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/sponsors/williamboman&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/sponsors/williamboman&quot; alt=&quot;Sponsors&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt; &lt;img src=&quot;https://user-images.githubusercontent.com/6705160/177613416-0c0354d2-f431-40d8-87f0-21310f0bba0e.png&quot; alt=&quot;mason.nvim&quot; /&gt; &lt;/h1&gt; 
&lt;p align=&quot;center&quot;&gt; Portable package manager for Neovim that runs everywhere Neovim runs.&lt;br /&gt; Easily install and manage LSP servers, DAP servers, linters, and formatters.&lt;br /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;code&gt;:help mason.nvim&lt;/code&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;sup&gt;Latest version: v2.2.1&lt;/sup&gt; 
 &lt;!-- x-release-please-version --&gt; &lt;/p&gt; 
&lt;h2&gt;Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#installation--usage&quot;&gt;Installation &amp;amp; Usage&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#recommended-setup-for-lazynvim&quot;&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#commands&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#registries&quot;&gt;Registries&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#screenshots&quot;&gt;Screenshots&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Introduction&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L11&quot;&gt;&lt;code&gt;:h mason-introduction&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is a Neovim plugin that allows you to easily manage external editor tooling such as LSP servers, DAP servers, linters, and formatters through a single interface. It runs everywhere Neovim runs (across Linux, macOS, Windows, etc.), with only a small set of &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#requirements&quot;&gt;external requirements&lt;/a&gt; needed.&lt;/p&gt; 
&lt;p&gt;Packages are installed in Neovim&#39;s data directory (&lt;a href=&quot;https://neovim.io/doc/user/starting.html#standard-path&quot;&gt;&lt;code&gt;:h standard-path&lt;/code&gt;&lt;/a&gt;) by default. Executables are linked to a single &lt;code&gt;bin/&lt;/code&gt; directory, which &lt;code&gt;mason.nvim&lt;/code&gt; will add to Neovim&#39;s PATH during setup, allowing seamless access from Neovim builtins (LSP client, shell, terminal, etc.) as well as other 3rd party plugins.&lt;/p&gt; 
&lt;p&gt;For a list of all available packages, see &lt;a href=&quot;https://mason-registry.dev/registry/list&quot;&gt;https://mason-registry.dev/registry/list&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Installation &amp;amp; Usage&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L42&quot;&gt;&lt;code&gt;:h mason-quickstart&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Install using your plugin manager of choice. &lt;strong&gt;Setup is required&lt;/strong&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason&quot;).setup()
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; is optimized to load as little as possible during setup. Lazy-loading the plugin, or somehow deferring the setup, is not recommended.&lt;/p&gt; 
&lt;p&gt;Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#configuration&quot;&gt;Configuration&lt;/a&gt; section for information about which settings are available.&lt;/p&gt; 
&lt;h3&gt;Recommended setup for &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;The following is the recommended setup when using &lt;code&gt;lazy.nvim&lt;/code&gt;. It will set up the plugin for you, meaning &lt;strong&gt;you don&#39;t have to call &lt;code&gt;require(&quot;mason&quot;).setup()&lt;/code&gt; yourself&lt;/strong&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason.nvim&quot;,
    opts = {}
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L25&quot;&gt;&lt;code&gt;:h mason-requirements&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;code&gt;mason.nvim&lt;/code&gt; relaxes the minimum requirements by attempting multiple different utilities (for example, &lt;code&gt;wget&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;, and &lt;code&gt;Invoke-WebRequest&lt;/code&gt; are all perfect substitutes). The &lt;em&gt;minimum&lt;/em&gt; recommended requirements are:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;neovim &lt;code&gt;&amp;gt;= 0.10.0&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;For Unix systems: 
  &lt;ul&gt; 
   &lt;li&gt;&lt;code&gt;git(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;curl(1)&lt;/code&gt; or &lt;code&gt;GNU wget(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;unzip(1)&lt;/code&gt;&lt;/li&gt; 
   &lt;li&gt;GNU tar (&lt;code&gt;tar(1)&lt;/code&gt; or &lt;code&gt;gtar(1)&lt;/code&gt; depending on platform)&lt;/li&gt; 
   &lt;li&gt;&lt;code&gt;gzip(1)&lt;/code&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;For Windows systems: 
  &lt;ul&gt; 
   &lt;li&gt;pwsh or powershell&lt;/li&gt; 
   &lt;li&gt;git&lt;/li&gt; 
   &lt;li&gt;GNU tar&lt;/li&gt; 
   &lt;li&gt;One of the following: 
    &lt;ul&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.7-zip.org/&quot;&gt;7zip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://peazip.github.io/&quot;&gt;peazip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://github.com/mholt/archiver&quot;&gt;archiver&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.winzip.com/&quot;&gt;winzip&lt;/a&gt;&lt;/li&gt; 
     &lt;li&gt;&lt;a href=&quot;https://www.win-rar.com/&quot;&gt;WinRAR&lt;/a&gt;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Note that &lt;code&gt;mason.nvim&lt;/code&gt; will regularly shell out to external package managers, such as &lt;code&gt;cargo&lt;/code&gt; and &lt;code&gt;npm&lt;/code&gt;. Depending on your personal usage, some of these will also need to be installed. Refer to &lt;code&gt;:checkhealth mason&lt;/code&gt; for a full list.&lt;/p&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L140&quot;&gt;&lt;code&gt;:h mason-commands&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:Mason&lt;/code&gt; - opens a graphical status window&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUpdate&lt;/code&gt; - updates all managed registries&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonInstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - installs/re-installs the provided packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUninstall &amp;lt;package&amp;gt; ...&lt;/code&gt; - uninstalls the provided packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonUninstallAll&lt;/code&gt; - uninstalls all packages&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:MasonLog&lt;/code&gt; - opens the &lt;code&gt;mason.nvim&lt;/code&gt; log file in a new tab window&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Registries&lt;/h2&gt; 
&lt;p&gt;Mason&#39;s core package registry is located at &lt;a href=&quot;https://github.com/mason-org/mason-registry&quot;&gt;mason-org/mason-registry&lt;/a&gt;. Before any packages can be used, the registry needs to be downloaded. This is done automatically for you when using the different Mason commands (e.g. &lt;code&gt;:MasonInstall&lt;/code&gt;), but can also be done manually by using the &lt;code&gt;:MasonUpdate&lt;/code&gt; command.&lt;/p&gt; 
&lt;p&gt;If you&#39;re utilizing Mason&#39;s Lua APIs to access packages, it&#39;s recommended to use the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L520&quot;&gt;&lt;code&gt;:h mason-registry.refresh()&lt;/code&gt;&lt;/a&gt; or &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L513&quot;&gt;&lt;code&gt;:h mason-registry.update()&lt;/code&gt;&lt;/a&gt; functions to ensure you have the latest package information before retrieving packages.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Main window&quot; src=&quot;https://github.com/user-attachments/assets/b9a57d21-f551-45ad-a1e5-a9fd66291510&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Language search&quot; src=&quot;https://github.com/user-attachments/assets/3d24fb7b-2c57-4948-923b-0a42bb627cbe&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Language filter&quot; src=&quot;https://github.com/user-attachments/assets/c0ca5818-3c74-4071-bc41-427a2cd1056d&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Package information&quot; src=&quot;https://github.com/user-attachments/assets/6f9f6819-ac97-483d-a77c-8f6c6131ac85&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;New package versions&quot; src=&quot;https://github.com/user-attachments/assets/ff1adc4d-2fcc-46df-ab4c-291c891efa50&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img alt=&quot;Help window&quot; src=&quot;https://github.com/user-attachments/assets/1fbe75e4-fe69-4417-83e3-82329e1c236e&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt#L200&quot;&gt;&lt;code&gt;:h mason-settings&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;You may optionally configure certain behavior of &lt;code&gt;mason.nvim&lt;/code&gt; when calling the &lt;code&gt;.setup()&lt;/code&gt; function. Refer to the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/#default-configuration&quot;&gt;default configuration&lt;/a&gt; for a list of all available settings.&lt;/p&gt; 
&lt;p&gt;Example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;mason&quot;).setup({
    ui = {
        icons = {
            package_installed = &quot;✓&quot;,
            package_pending = &quot;➜&quot;,
            package_uninstalled = &quot;✗&quot;
        }
    }
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configuration using &lt;code&gt;lazy.nvim&lt;/code&gt;&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &quot;mason-org/mason.nvim&quot;,
    opts = {
        ui = {
            icons = {
                package_installed = &quot;✓&quot;,
                package_pending = &quot;➜&quot;,
                package_uninstalled = &quot;✗&quot;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Default configuration&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;---@class MasonSettings
local DEFAULT_SETTINGS = {
    ---@since 1.0.0
    -- The directory in which to install packages.
    install_root_dir = path.concat { vim.fn.stdpath &quot;data&quot;, &quot;mason&quot; },

    ---@since 1.0.0
    -- Where Mason should put its bin location in your PATH. Can be one of:
    -- - &quot;prepend&quot; (default, Mason&#39;s bin location is put first in PATH)
    -- - &quot;append&quot; (Mason&#39;s bin location is put at the end of PATH)
    -- - &quot;skip&quot; (doesn&#39;t modify PATH)
    ---@type &#39;&quot;prepend&quot;&#39; | &#39;&quot;append&quot;&#39; | &#39;&quot;skip&quot;&#39;
    PATH = &quot;prepend&quot;,

    ---@since 1.0.0
    -- Controls to which degree logs are written to the log file. It&#39;s useful to set this to vim.log.levels.DEBUG when
    -- debugging issues with package installations.
    log_level = vim.log.levels.INFO,

    ---@since 1.0.0
    -- Limit for the maximum amount of packages to be installed at the same time. Once this limit is reached, any further
    -- packages that are requested to be installed will be put in a queue.
    max_concurrent_installers = 4,

    ---@since 1.0.0
    -- [Advanced setting]
    -- The registries to source packages from. Accepts multiple entries. Should a package with the same name exist in
    -- multiple registries, the registry listed first will be used.
    registries = {
        &quot;github:mason-org/mason-registry&quot;,
    },

    ---@since 2.3.0
    -- [Advanced setting]
    -- The registries to source system packages from. Accepts multiple entries. Should a package with the same name exist in
    -- multiple registries, the registry listed first will be used.
    system_registries = {
        &quot;github:mason-org/mason-system-registry&quot;,
    },

    ---@since 1.0.0
    -- The provider implementations to use for resolving supplementary package metadata (e.g., all available versions).
    -- Accepts multiple entries, where later entries will be used as fallback should prior providers fail.
    -- Builtin providers are:
    --   - mason.providers.registry-api  - uses the https://api.mason-registry.dev API
    --   - mason.providers.client        - uses only client-side tooling to resolve metadata
    providers = {
        &quot;mason.providers.registry-api&quot;,
        &quot;mason.providers.client&quot;,
    },

    github = {
        ---@since 1.0.0
        -- The template URL to use when downloading assets from GitHub.
        -- The placeholders are the following (in order):
        -- 1. The repository (e.g. &quot;rust-lang/rust-analyzer&quot;)
        -- 2. The release version (e.g. &quot;v0.3.0&quot;)
        -- 3. The asset name (e.g. &quot;rust-analyzer-v0.3.0-x86_64-unknown-linux-gnu.tar.gz&quot;)
        download_url_template = &quot;https://github.com/%s/releases/download/%s/%s&quot;,
    },

    pip = {
        ---@since 1.0.0
        -- Whether to upgrade pip to the latest version in the virtual environment before installing packages.
        upgrade_pip = false,

        ---@since 1.0.0
        -- These args will be added to `pip install` calls. Note that setting extra args might impact intended behavior
        -- and is not recommended.
        --
        -- Example: { &quot;--proxy&quot;, &quot;https://proxyserver&quot; }
        install_args = {},
    },

    npm = {
        ---@since 2.3.0
        -- These args will be added to `npm install` calls. Note that setting extra args might impact intended behavior
        -- and is not recommended.
        --
        -- Example: { &quot;--registry&quot;, &quot;https://registry.npmjs.org/&quot; }
        install_args = {},
    },

    ui = {
        ---@since 1.0.0
        -- Whether to automatically check for new versions when opening the :Mason window.
        check_outdated_packages_on_open = true,

        ---@since 1.0.0
        -- The border to use for the UI window. Accepts same border values as |nvim_open_win()|.
        -- Defaults to `:h &#39;winborder&#39;` if nil.
        border = nil,

        ---@since 1.11.0
        -- The backdrop opacity. 0 is fully opaque, 100 is fully transparent.
        backdrop = 60,

        ---@since 1.0.0
        -- Width of the window. Accepts:
        -- - Integer greater than 1 for fixed width.
        -- - Float in the range of 0-1 for a percentage of screen width.
        width = 0.8,

        ---@since 1.0.0
        -- Height of the window. Accepts:
        -- - Integer greater than 1 for fixed height.
        -- - Float in the range of 0-1 for a percentage of screen height.
        height = 0.9,

        icons = {
            ---@since 1.0.0
            -- The list icon to use for installed packages.
            package_installed = &quot;◍&quot;,
            ---@since 1.0.0
            -- The list icon to use for packages that are installing, or queued for installation.
            package_pending = &quot;◍&quot;,
            ---@since 1.0.0
            -- The list icon to use for packages that are not installed.
            package_uninstalled = &quot;◍&quot;,
        },

        keymaps = {
            ---@since 1.0.0
            -- Keymap to expand a package
            toggle_package_expand = &quot;&amp;lt;CR&amp;gt;&quot;,
            ---@since 1.0.0
            -- Keymap to install the package under the current cursor position
            install_package = &quot;i&quot;,
            ---@since 1.0.0
            -- Keymap to reinstall/update the package under the current cursor position
            update_package = &quot;u&quot;,
            ---@since 1.0.0
            -- Keymap to check for new version for the package under the current cursor position
            check_package_version = &quot;c&quot;,
            ---@since 1.0.0
            -- Keymap to update all installed packages
            update_all_packages = &quot;U&quot;,
            ---@since 1.0.0
            -- Keymap to check which installed packages are outdated
            check_outdated_packages = &quot;C&quot;,
            ---@since 1.0.0
            -- Keymap to uninstall a package
            uninstall_package = &quot;X&quot;,
            ---@since 1.0.0
            -- Keymap to cancel a package installation
            cancel_installation = &quot;&amp;lt;C-c&amp;gt;&quot;,
            ---@since 1.0.0
            -- Keymap to apply language filter
            apply_language_filter = &quot;&amp;lt;C-f&amp;gt;&quot;,
            ---@since 1.1.0
            -- Keymap to toggle viewing package installation log
            toggle_package_install_log = &quot;&amp;lt;CR&amp;gt;&quot;,
            ---@since 1.8.0
            -- Keymap to toggle the help view
            toggle_help = &quot;g?&quot;,
        },
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;sup&gt; 👋 didn&#39;t find what you were looking for? Try looking in the &lt;a href=&quot;https://raw.githubusercontent.com/mason-org/mason.nvim/main/doc/mason.txt&quot;&gt;help docs&lt;/a&gt; &lt;code&gt;:help mason.nvim&lt;/code&gt;! &lt;/sup&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/d825f25865e9947a565af2b91057b515dafb67fd0491c23bbc03d99600638386/mason-org/mason.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>lewis6991/gitsigns.nvim</title>
      <link>https://github.com/lewis6991/gitsigns.nvim</link>
      <description>&lt;p&gt;Git integration for buffers&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;gitsigns.nvim&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/lewis6991/gitsigns.nvim/actions?query=workflow%3ACI&quot;&gt;&lt;img src=&quot;https://github.com/lewis6991/gitsigns.nvim/actions/workflows/ci.yml/badge.svg?branch=main&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/lewis6991/gitsigns.nvim/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/lewis6991/gitsigns.nvim&quot; alt=&quot;Version&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://luarocks.org/modules/lewis6991/gitsigns.nvim&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/lewis6991/gitsigns.nvim?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-MIT-yellow.svg?sanitize=true&quot; alt=&quot;License: MIT&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://dotfyle.com/plugins/lewis6991/gitsigns.nvim&quot;&gt;&lt;img src=&quot;https://dotfyle.com/plugins/lewis6991/gitsigns.nvim/shield&quot; alt=&quot;Dotfyle&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Deep buffer integration for Git&lt;/p&gt; 
&lt;h2&gt;👀 Preview&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Hunk Actions&lt;/th&gt; 
   &lt;th&gt;Line Blame&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lewis6991/media/main/gitsigns_actions.gif&quot; width=&quot;450em&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://raw.githubusercontent.com/lewis6991/media/main/gitsigns_blame.gif&quot; width=&quot;450em&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Signs&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;Adds signs to the sign column to indicate added, changed, and deleted lines.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e49ea0bf-c427-41fb-a67f-77c2d413a7cf&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Supports different signs for staged changes.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/28a3e286-96fa-478c-93a3-8028f9bd7123&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Add counts to signs.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d007b924-6811-44ea-b936-d8da4dc00b68&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Hunk Actions&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;Stage/unstage hunks with &lt;code&gt;:Gitsigns stage_hunk&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Reset hunks with &lt;code&gt;:Gitsigns reset_hunk&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Also works on partial hunks in visual mode.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Preview hunks inline with &lt;code&gt;:Gitsigns preview_hunk_inline&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/60acd664-f4a8-4737-ba65-969f1efa7971&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Preview hunks in popup with &lt;code&gt;:Gitsigns preview_hunk&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d2a9b801-5857-4054-80a8-195d111f4e8c&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Navigate between hunks with &lt;code&gt;:Gitsigns nav_hunk next/prev&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Blame&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;Show blame of current buffer using &lt;code&gt;:Gitsigns blame&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7d881e94-6e16-4f98-a526-7e785b11acf9&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Show blame information for the current line in popup with &lt;code&gt;:Gitsigns blame_line&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/03ff7557-b538-4cd1-9478-f893bf7e616e&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Show blame information for the current line in virtual text.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0c79e880-6a6d-4c3f-aa62-33f734725cfd&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; 
   &lt;ul&gt; 
    &lt;li&gt;Enable with &lt;code&gt;setup({ current_line_blame = true })&lt;/code&gt;.&lt;/li&gt; 
    &lt;li&gt;Toggle with &lt;code&gt;:Gitsigns toggle_current_line_blame&lt;/code&gt;&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Diff&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;Change the revision for the signs with &lt;code&gt;:Gitsigns change_base &amp;lt;REVISION&amp;gt;&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Show the diff of the current buffer with the index or any revision with &lt;code&gt;:Gitsigns diffthis &amp;lt;REVISION&amp;gt;&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Show intra-line word-diff in the buffer.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/409a1f91-5cee-404b-8b12-66b7db3ecac7&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; 
   &lt;ul&gt; 
    &lt;li&gt;Enable with &lt;code&gt;setup({ word_diff = true })&lt;/code&gt;.&lt;/li&gt; 
    &lt;li&gt;Toggle with &lt;code&gt;:Gitsigns toggle_word_diff&lt;/code&gt;.&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Show hunks Quickfix/Location List&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;Set the quickfix/location list with changes with &lt;code&gt;:Gitsign setqflist/setloclist&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c17001a5-b9cf-4a00-9891-5b130c0b4745&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt; &lt;p&gt;Can show hunks for:&lt;/p&gt; 
   &lt;ul&gt; 
    &lt;li&gt;whole repository (&lt;code&gt;target=all&lt;/code&gt;)&lt;/li&gt; 
    &lt;li&gt;attached buffers (&lt;code&gt;target=attached&lt;/code&gt;)&lt;/li&gt; 
    &lt;li&gt;a specific buffer (&lt;code&gt;target=[integer]&lt;/code&gt;).&lt;/li&gt; 
   &lt;/ul&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Text Object&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Select hunks as a text object.&lt;/li&gt; 
  &lt;li&gt;Can use &lt;code&gt;vim.keymap.set({&#39;o&#39;, &#39;x&#39;}, &#39;ih&#39;, &#39;&amp;lt;Cmd&amp;gt;Gitsigns select_hunk&amp;lt;CR&amp;gt;&#39;)&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Status Line Integration&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Use &lt;code&gt;b:gitsigns_status&lt;/code&gt; or &lt;code&gt;b:gitsigns_status_dict&lt;/code&gt;. &lt;code&gt;b:gitsigns_status&lt;/code&gt; is formatted using &lt;code&gt;config.status_formatter&lt;/code&gt;. &lt;code&gt;b:gitsigns_status_dict&lt;/code&gt; is a dictionary with the keys &lt;code&gt;added&lt;/code&gt;, &lt;code&gt;removed&lt;/code&gt;, &lt;code&gt;changed&lt;/code&gt; and &lt;code&gt;head&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;Example:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-viml&quot;&gt;set statusline+=%{get(b:,&#39;gitsigns_status&#39;,&#39;&#39;)}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;For the current branch use the variable &lt;code&gt;b:gitsigns_head&lt;/code&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Show different revisions of buffers&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;Use &lt;code&gt;:Gitsigns show &amp;lt;REVISION&amp;gt;&lt;/code&gt; to &lt;code&gt;:edit&lt;/code&gt; the current buffer at &lt;code&gt;&amp;lt;REVISION&amp;gt;&lt;/code&gt;&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2&gt;📋 Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &amp;gt;= 0.9.0&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;If your version of Neovim is too old, then you can use a past &lt;a href=&quot;https://github.com/lewis6991/gitsigns.nvim/releases&quot;&gt;release&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;If you are running a development version of Neovim (aka &lt;code&gt;master&lt;/code&gt;), then breakage may occur if your build is behind latest.&lt;/p&gt; 
&lt;/div&gt; 
&lt;ul&gt; 
 &lt;li&gt;Newish version of git. Older versions may not work with some features.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;🛠️ Installation &amp;amp; Usage&lt;/h2&gt; 
&lt;p&gt;Install using your package manager of choice. No setup required.&lt;/p&gt; 
&lt;p&gt;Optional configuration can be passed to the setup function. Here is an example with most of the default settings:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;gitsigns&#39;).setup {
  signs = {
    add          = { text = &#39;┃&#39; },
    change       = { text = &#39;┃&#39; },
    delete       = { text = &#39;_&#39; },
    topdelete    = { text = &#39;‾&#39; },
    changedelete = { text = &#39;~&#39; },
    untracked    = { text = &#39;┆&#39; },
  },
  signs_staged = {
    add          = { text = &#39;┃&#39; },
    change       = { text = &#39;┃&#39; },
    delete       = { text = &#39;_&#39; },
    topdelete    = { text = &#39;‾&#39; },
    changedelete = { text = &#39;~&#39; },
    untracked    = { text = &#39;┆&#39; },
  },
  signs_staged_enable = true,
  signcolumn = true,  -- Toggle with `:Gitsigns toggle_signs`
  numhl      = false, -- Toggle with `:Gitsigns toggle_numhl`
  linehl     = false, -- Toggle with `:Gitsigns toggle_linehl`
  word_diff  = false, -- Toggle with `:Gitsigns toggle_word_diff`
  watch_gitdir = {
    follow_files = true
  },
  auto_attach = true,
  attach_to_untracked = false,
  current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
  current_line_blame_opts = {
    virt_text = true,
    virt_text_pos = &#39;eol&#39;, -- &#39;eol&#39; | &#39;overlay&#39; | &#39;right_align&#39;
    delay = 1000,
    ignore_whitespace = false,
    virt_text_priority = 100,
    use_focus = true,
  },
  current_line_blame_formatter = &#39;&amp;lt;author&amp;gt;, &amp;lt;author_time:%R&amp;gt; - &amp;lt;summary&amp;gt;&#39;,
  blame_formatter = nil, -- Use default
  sign_priority = 6,
  update_debounce = 100,
  status_formatter = nil, -- Use default
  max_file_length = 40000, -- Disable if file is longer than this (in lines)
  preview_config = {
    -- Options passed to nvim_open_win
    style = &#39;minimal&#39;,
    relative = &#39;cursor&#39;,
    row = 0,
    col = 1
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For information on configuring Neovim via lua please see &lt;a href=&quot;https://neovim.io/doc/user/lua-guide.html&quot;&gt;nvim-lua-guide&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;🎹 Keymaps&lt;/h3&gt; 
&lt;p&gt;Gitsigns provides an &lt;code&gt;on_attach&lt;/code&gt; callback which can be used to setup buffer mappings.&lt;/p&gt; 
&lt;p&gt;Here is a suggested example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;gitsigns&#39;).setup{
  ...
  on_attach = function(bufnr)
    local gitsigns = require(&#39;gitsigns&#39;)

    local function map(mode, l, r, opts)
      opts = opts or {}
      opts.buffer = bufnr
      vim.keymap.set(mode, l, r, opts)
    end

    -- Navigation
    map(&#39;n&#39;, &#39;]c&#39;, function()
      if vim.wo.diff then
        vim.cmd.normal({&#39;]c&#39;, bang = true})
      else
        gitsigns.nav_hunk(&#39;next&#39;)
      end
    end)

    map(&#39;n&#39;, &#39;[c&#39;, function()
      if vim.wo.diff then
        vim.cmd.normal({&#39;[c&#39;, bang = true})
      else
        gitsigns.nav_hunk(&#39;prev&#39;)
      end
    end)

    -- Actions
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hs&#39;, gitsigns.stage_hunk)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hr&#39;, gitsigns.reset_hunk)

    map(&#39;v&#39;, &#39;&amp;lt;leader&amp;gt;hs&#39;, function()
      gitsigns.stage_hunk({ vim.fn.line(&#39;.&#39;), vim.fn.line(&#39;v&#39;) })
    end)

    map(&#39;v&#39;, &#39;&amp;lt;leader&amp;gt;hr&#39;, function()
      gitsigns.reset_hunk({ vim.fn.line(&#39;.&#39;), vim.fn.line(&#39;v&#39;) })
    end)

    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hS&#39;, gitsigns.stage_buffer)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hR&#39;, gitsigns.reset_buffer)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hp&#39;, gitsigns.preview_hunk)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hi&#39;, gitsigns.preview_hunk_inline)

    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hb&#39;, function()
      gitsigns.blame_line({ full = true })
    end)

    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hd&#39;, gitsigns.diffthis)

    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hD&#39;, function()
      gitsigns.diffthis(&#39;~&#39;)
    end)

    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hQ&#39;, function() gitsigns.setqflist(&#39;all&#39;) end)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;hq&#39;, gitsigns.setqflist)

    -- Toggles
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;tb&#39;, gitsigns.toggle_current_line_blame)
    map(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;tw&#39;, gitsigns.toggle_word_diff)

    -- Text object
    map({&#39;o&#39;, &#39;x&#39;}, &#39;ih&#39;, gitsigns.select_hunk)
  end
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;🔗 Plugin Integrations&lt;/h2&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;vim-fugitive&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;When viewing revisions of a file (via &lt;code&gt;:0Gclog&lt;/code&gt; for example), Gitsigns will attach to the fugitive buffer with the base set to the commit immediately before the commit of that revision. This means the signs placed in the buffer reflect the changes introduced by that revision of the file.&lt;/p&gt; 
&lt;h3&gt;&lt;a href=&quot;https://github.com/folke/trouble.nvim&quot;&gt;trouble.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;If installed and enabled (via &lt;code&gt;config.trouble&lt;/code&gt;; defaults to true if installed), &lt;code&gt;:Gitsigns setqflist&lt;/code&gt; or &lt;code&gt;:Gitsigns setloclist&lt;/code&gt; will open Trouble instead of Neovim&#39;s built-in quickfix or location list windows.&lt;/p&gt; 
&lt;h2&gt;🚫 Non-Goals&lt;/h2&gt; 
&lt;h3&gt;Implement every feature in &lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;vim-fugitive&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;This plugin is actively developed and by one of the most well regarded vim plugin developers. Gitsigns will only implement features of this plugin if: it is simple, or, the technologies leveraged by Gitsigns (LuaJIT, Libuv, Neovim&#39;s API, etc) can provide a better experience.&lt;/p&gt; 
&lt;h3&gt;Support for other VCS&lt;/h3&gt; 
&lt;p&gt;There aren&#39;t any active developers of this plugin who use other kinds of VCS, so adding support for them isn&#39;t feasible. However a well written PR with a commitment of future support could change this.&lt;/p&gt; 
&lt;h2&gt;🔌 Similar plugins&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/echasnovski/mini.diff&quot;&gt;mini.diff&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/neoclide/coc-git&quot;&gt;coc-git&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/airblade/vim-gitgutter&quot;&gt;vim-gitgutter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mhinz/vim-signify&quot;&gt;vim-signify&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- links --&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bcbef4971c9dba77bfac581207d3bece6a911332da7cf35d7c0f3274457e5911/lewis6991/gitsigns.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>nvim-telescope/telescope.nvim</title>
      <link>https://github.com/nvim-telescope/telescope.nvim</link>
      <description>&lt;p&gt;Find, Filter, Preview, Pick. All lua, all the time.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;telescope.nvim&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/Conni2461/telescope.nvim&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/Conni2461/telescope.nvim?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Gaze deeply into unknown regions using the power of the moon.&lt;/p&gt; 
&lt;h2&gt;What Is Telescope?&lt;/h2&gt; 
&lt;p&gt;&lt;code&gt;telescope.nvim&lt;/code&gt; is a highly extendable fuzzy finder over lists. Built on the latest awesome features from &lt;code&gt;neovim&lt;/code&gt; core. Telescope is centered around modularity, allowing for easy customization.&lt;/p&gt; 
&lt;p&gt;Community driven builtin &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;pickers&lt;/a&gt;, &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#sorters&quot;&gt;sorters&lt;/a&gt; and &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#previewers&quot;&gt;previewers&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/TTTja6t.gif&quot; alt=&quot;Preview&quot; /&gt; &lt;sub&gt;For more showcases of Telescope, please visit the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Showcase&quot;&gt;Showcase section&lt;/a&gt; in the Telescope Wiki&lt;/sub&gt;&lt;/p&gt; 
&lt;h2&gt;Telescope Table of Contents&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#getting-started&quot;&gt;Getting Started&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#usage&quot;&gt;Usage&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#customization&quot;&gt;Customization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#default-mappings&quot;&gt;Default Mappings&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;Pickers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#previewers&quot;&gt;Previewers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#sorters&quot;&gt;Sorters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#layout-display&quot;&gt;Layout&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#themes&quot;&gt;Themes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#vim-commands&quot;&gt;Commands&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#autocmds&quot;&gt;Autocmds&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#extensions&quot;&gt;Extensions&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#api&quot;&gt;API&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#media&quot;&gt;Media&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#contributing&quot;&gt;Contributing&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/raw/master/doc/telescope_changelog.txt&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;This section should guide you to run your first builtin pickers.&lt;/p&gt; 
&lt;h3&gt;Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/v0.11.6&quot;&gt;Neovim &amp;gt;=v0.11.7&lt;/a&gt; built &lt;strong&gt;with LuaJIT&lt;/strong&gt; (check &lt;code&gt;:version&lt;/code&gt;).&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-lua/plenary.nvim&quot;&gt;nvim-lua/plenary.nvim&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;Only the &lt;strong&gt;latest version&lt;/strong&gt; (&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/stable&quot;&gt;&lt;code&gt;stable&lt;/code&gt;&lt;/a&gt;) and the &lt;strong&gt;latest commit of &lt;code&gt;HEAD&lt;/code&gt;&lt;/strong&gt; (&lt;a href=&quot;https://github.com/neovim/neovim/releases/tag/nightly&quot;&gt;&lt;code&gt;nightly&lt;/code&gt;&lt;/a&gt;) are tested and supported; before opening an issue, download the latest available release and confirm that the problem persists.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Recommended dependencies&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;BurntSushi/ripgrep&lt;/a&gt; is required for &lt;code&gt;live_grep&lt;/code&gt; and &lt;code&gt;grep_string&lt;/code&gt; and is the first priority for &lt;code&gt;find_files&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;sharkdp/fd&lt;/a&gt; (finder)&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;devicons&lt;/a&gt; (icons)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;We also strongly suggest installing a native telescope sorter to significantly improve sorting performance:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope-fzf-native.nvim&quot;&gt;telescope-fzf-native.nvim&lt;/a&gt; or&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope-fzy-native.nvim&quot;&gt;telescope-fzy-native.nvim&lt;/a&gt;. For more information and a performance benchmark take a look at the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Extensions&quot;&gt;Extensions&lt;/a&gt; wiki.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Installation&lt;/h3&gt; 
&lt;p&gt;We recommend pinning to the latest release &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/tags&quot;&gt;tag&lt;/a&gt;, e.g. using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
    &#39;nvim-telescope/telescope.nvim&#39;, version = &#39;*&#39;,
    dependencies = {
        &#39;nvim-lua/plenary.nvim&#39;,
        -- optional but recommended
        { &#39;nvim-telescope/telescope-fzf-native.nvim&#39;, build = &#39;make&#39; },
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Checkhealth&lt;/h3&gt; 
&lt;p&gt;Make sure you call &lt;code&gt;:checkhealth telescope&lt;/code&gt; after installing telescope to ensure everything is set up correctly.&lt;/p&gt; 
&lt;p&gt;After this setup you can continue reading here or switch to &lt;code&gt;:help telescope&lt;/code&gt; to get an understanding of how to use Telescope and how to configure it.&lt;/p&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Try the command &lt;code&gt;:Telescope find_files&lt;/code&gt; to see if &lt;code&gt;telescope.nvim&lt;/code&gt; is installed correctly.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local builtin = require(&#39;telescope.builtin&#39;)
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;ff&#39;, builtin.find_files, { desc = &#39;Telescope find files&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fg&#39;, builtin.live_grep, { desc = &#39;Telescope live grep&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fb&#39;, builtin.buffers, { desc = &#39;Telescope buffers&#39; })
vim.keymap.set(&#39;n&#39;, &#39;&amp;lt;leader&amp;gt;fh&#39;, builtin.help_tags, { desc = &#39;Telescope help tags&#39; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;builtin pickers&lt;/a&gt; for a list of all builtin functions.&lt;/p&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;This section should help you explore available options to configure and customize your &lt;code&gt;telescope.nvim&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Unlike most vim plugins, &lt;code&gt;telescope.nvim&lt;/code&gt; can be customized by either applying customizations globally, or individually per picker.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Global Customization&lt;/strong&gt; affecting all pickers can be done through the main &lt;code&gt;setup()&lt;/code&gt; method (see defaults below)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Individual Customization&lt;/strong&gt; affecting a single picker by passing &lt;code&gt;opts&lt;/code&gt; to builtin pickers (e.g. &lt;code&gt;builtin.find_files(opts)&lt;/code&gt;) see &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Configuration-Recipes&quot;&gt;Configuration recipes&lt;/a&gt; wiki page for ideas.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Telescope setup structure&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup{
  defaults = {
    -- Default configuration for telescope goes here:
    -- config_key = value,
    mappings = {
      i = {
        -- map actions.which_key to &amp;lt;C-h&amp;gt; (default: &amp;lt;C-/&amp;gt;)
        -- actions.which_key shows the mappings for your picker,
        -- e.g. git_{create, delete, ...}_branch for the git_branches picker
        [&quot;&amp;lt;C-h&amp;gt;&quot;] = &quot;which_key&quot;
      }
    }
  },
  pickers = {
    -- Default configuration for builtin pickers goes here:
    -- picker_name = {
    --   picker_config_key = value,
    --   ...
    -- }
    -- Now the picker_config_key will be applied every time you call this
    -- builtin picker
  },
  extensions = {
    -- Your extension configuration goes here:
    -- extension_name = {
    --   extension_config_key = value,
    -- }
    -- please take a look at the readme of the extension you want to configure
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To look at what default configuration options exist please read: &lt;code&gt;:help telescope.setup()&lt;/code&gt;. For picker specific &lt;code&gt;opts&lt;/code&gt; please read: &lt;code&gt;:help telescope.builtin&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;To embed the above code snippet in a &lt;code&gt;.vim&lt;/code&gt; file (for example in &lt;code&gt;after/plugin/telescope.nvim.vim&lt;/code&gt;), wrap it in &lt;code&gt;lua &amp;lt;&amp;lt; EOF code-snippet EOF&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;lua &amp;lt;&amp;lt; EOF
require(&#39;telescope&#39;).setup{
  -- ...
}
EOF
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Default Mappings&lt;/h2&gt; 
&lt;p&gt;Mappings are fully customizable. Many familiar mapping patterns are set up as defaults.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Mappings&lt;/th&gt; 
   &lt;th&gt;Action&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-n&amp;gt;/&amp;lt;Down&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Next item&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-p&amp;gt;/&amp;lt;Up&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Previous item&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;j/k&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Next/previous (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;H/M/L&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Select High/Middle/Low (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;gg/G&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Select the first/last item (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;CR&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Confirm selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-x&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to file selection as a split&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-v&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to file selection as a vsplit&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-t&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Go to a file in a new tab&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-u&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll up in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll down in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll left in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll right in preview window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll left in results window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll right in results window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-/&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show mappings for picker actions (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Show mappings for picker actions (normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-c&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close telescope (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;Esc&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close telescope (in normal mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle selection and move to next selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;S-Tab&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle selection and move to prev selection&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-q&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Send all items not filtered to quickfixlist (qflist)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;M-q&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Send all selected items to qflist&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-w&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cword in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-a&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cWORD in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cfile in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-r&amp;gt;&amp;lt;C-l&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Insert cline in original window into prompt (insert mode)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;To see the full list of mappings, check out &lt;code&gt;lua/telescope/mappings.lua&lt;/code&gt; and the &lt;code&gt;default_mappings&lt;/code&gt; table.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: you can use &lt;code&gt;&amp;lt;C-/&amp;gt;&lt;/code&gt; and &lt;code&gt;?&lt;/code&gt; in insert and normal mode, respectively, to show the actions mapped to your picker.&lt;/p&gt; 
&lt;p&gt;Much like &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/#pickers&quot;&gt;builtin pickers&lt;/a&gt;, there are a number of &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/raw/master/lua/telescope/actions/init.lua&quot;&gt;actions&lt;/a&gt; you can pick from to remap your telescope buffer mappings, or create a new custom action:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Built-in actions
local transform_mod = require(&#39;telescope.actions.mt&#39;).transform_mod

-- or create your custom action
local my_cool_custom_action = transform_mod({
  x = function(prompt_bufnr)
    print(&quot;This function ran after another action. Prompt_bufnr: &quot; .. prompt_bufnr)
    -- Enter your function logic here. You can take inspiration from lua/telescope/actions.lua
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To remap telescope mappings, please read &lt;code&gt;:help telescope.defaults.mappings&lt;/code&gt;. To do picker specific mappings, its suggested to do this with the &lt;code&gt;pickers&lt;/code&gt; table in &lt;code&gt;telescope.setup&lt;/code&gt;. Each picker accepts a &lt;code&gt;mappings&lt;/code&gt; table like its explained in &lt;code&gt;:help telescope.defaults.mappings&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Pickers&lt;/h2&gt; 
&lt;p&gt;Built-in functions. Ready to be bound to any key you like.&lt;/p&gt; 
&lt;h3&gt;File Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.find_files&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists files in your current working directory, respects .gitignore&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_files&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fuzzy search through the output of &lt;code&gt;git ls-files&lt;/code&gt; command, respects .gitignore&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.grep_string&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Searches for the string under your cursor or selection in your current working directory&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.live_grep&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Search for a string in your current working directory and get results live as you type, respects .gitignore. (Requires &lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;ripgrep&lt;/a&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Vim Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.buffers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists open buffers in current neovim instance&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.oldfiles&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists previously open files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.commands&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available plugin/user commands and runs them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists tags in current directory with tag location file preview (users are required to run ctags -R to generate tags or update when introducing new changes)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.command_history&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists commands that were executed recently, and reruns them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.search_history&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists searches that were executed recently, and reruns them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.help_tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available help tags and opens a new window with the relevant help info on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.man_pages&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists manpage entries, opens them in a help window on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.marks&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim marks and their value&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.colorscheme&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists available colorschemes and applies them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.quickfix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists items in the quickfix list&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.quickfixhistory&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all quickfix lists in your history and open them with &lt;code&gt;builtin.quickfix&lt;/code&gt; or quickfix window&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.loclist&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists items from the current window&#39;s location list&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.jumplist&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Jump List entries&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.vim_options&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim options, allows you to edit the current value on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.registers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim registers, pastes the contents of the register on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.autocommands&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists vim autocommands and goes to their declaration on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.spell_suggest&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists spelling suggestions for the current word under the cursor, replaces word with selected suggestion on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.keymaps&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists normal mode keymappings&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.filetypes&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all available filetypes&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.highlights&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all available highlights&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.current_buffer_fuzzy_find&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Live fuzzy search inside of the currently open buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.current_buffer_tags&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all of the tags for the currently open buffer, with a preview&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.resume&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists the results incl. multi-selections of the previous picker&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.pickers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists the previous pickers incl. multi-selections (see &lt;code&gt;:h telescope.defaults.cache_picker&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Neovim LSP Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_references&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP references for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_incoming_calls&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP incoming calls for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_outgoing_calls&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP outgoing calls for word under the cursor&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_document_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP document symbols in the current buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists LSP document symbols in the current workspace&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_dynamic_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Dynamically Lists LSP for all workspace symbols&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.diagnostics&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Diagnostics for all open buffers or a specific buffer. Use option &lt;code&gt;bufnr=0&lt;/code&gt; for current buffer.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_implementations&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the implementation of the word under the cursor if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_definitions&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the definition of the word under the cursor, if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.lsp_type_definitions&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Goto the definition of the type of the word under the cursor, if there&#39;s only one, otherwise show all options in Telescope&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Git Pickers&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_commits&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists git commits with diff preview, checkout action &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;, reset mixed &lt;code&gt;&amp;lt;C-r&amp;gt;m&lt;/code&gt;, reset soft &lt;code&gt;&amp;lt;C-r&amp;gt;s&lt;/code&gt; and reset hard &lt;code&gt;&amp;lt;C-r&amp;gt;h&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_bcommits&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists buffer&#39;s git commits with diff preview and checks them out on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_bcommits_range&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists buffer&#39;s git commits in a range of lines. Use options &lt;code&gt;from&lt;/code&gt; and &lt;code&gt;to&lt;/code&gt; to specify the range. In visual mode, lists commits for the selected lines&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_branches&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all branches with log preview, checkout action &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;, track action &lt;code&gt;&amp;lt;C-t&amp;gt;&lt;/code&gt;, rebase action&lt;code&gt;&amp;lt;C-r&amp;gt;&lt;/code&gt;, create action &lt;code&gt;&amp;lt;C-a&amp;gt;&lt;/code&gt;, switch action &lt;code&gt;&amp;lt;C-s&amp;gt;&lt;/code&gt;, delete action &lt;code&gt;&amp;lt;C-d&amp;gt;&lt;/code&gt; and merge action &lt;code&gt;&amp;lt;C-y&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_status&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists current changes per file with diff preview and add action. (Multi-selection still WIP)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.git_stash&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists stash items in current repository with ability to apply them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Treesitter Picker&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.treesitter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Function names, variables, ... using treesitter &lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter/raw/main/CONTRIBUTING.md#locals&quot;&gt;&lt;code&gt;locals&lt;/code&gt; queries&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Lists Picker&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Functions&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.planets&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use the telescope...&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.builtin&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Built-in pickers and run them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.reloader&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists Lua modules and reload them on &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;builtin.symbols&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Lists symbols inside a file &lt;code&gt;data/telescope-sources/*.json&lt;/code&gt; found in your rtp. More info and symbol sources can be found &lt;a href=&quot;https://github.com/nvim-telescope/telescope-symbols.nvim&quot;&gt;here&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Previewers&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Previewers&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_cat.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for files. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_vimgrep.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for grep and similar. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vim_buffer_qflist.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Default previewer for qflist. Uses vim buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.cat.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for files. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.vimgrep.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for grep and similar. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;previewers.qflist.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Terminal previewer for qflist. Uses &lt;code&gt;cat&lt;/code&gt;/&lt;code&gt;bat&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;The default previewers are from now on &lt;code&gt;vim_buffer_&lt;/code&gt; previewers. They use vim buffers for displaying files and use tree-sitter or regex for file highlighting.&lt;/p&gt; 
&lt;p&gt;These previewers are using &lt;code&gt;vim.filetype&lt;/code&gt; to guess the filetype for the selected file. The guessing is done by inspecting the filename, the head of the file(shebang) and the tail of the file (modeline). If you have trouble with filetype detection you should read &lt;code&gt;:help vim.filetype&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;We need to do it manually because we can&#39;t determine the filetype in the traditional way: We don&#39;t do &lt;code&gt;bufload&lt;/code&gt; and instead read the file asynchronously with &lt;code&gt;vim.uv.fs_&lt;/code&gt; and attach only a highlighter; otherwise the speed of the previewer would slow down considerably.&lt;/p&gt; 
&lt;p&gt;If you want to configure the &lt;code&gt;vim_buffer_&lt;/code&gt; previewer (e.g. you want the line to wrap), do this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.api.nvim_create_autocmd(&quot;User&quot;, {
  pattern = &quot;TelescopePreviewerLoaded&quot;,
  callback = function(args)
    if args.data.filetype ~= &quot;help&quot; then
      vim.wo.number = true
    elseif args.data.bufname:match(&quot;*.csv&quot;) then
      vim.wo.wrap = false
    end
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;A data field is passed to the callback, which contains the filetype and the buffer name.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  title: string, # preview window title
  filetype: string,
  bufname: string,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Sorters&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Sorters&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_fuzzy_file&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Telescope&#39;s default sorter for files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_generic_fuzzy_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Telescope&#39;s default sorter for everything else&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_levenshtein_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Using Levenshtein distance algorithm (don&#39;t use 😄)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.get_fzy_sorter&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Using fzy algorithm&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;sorters.fuzzy_with_index_bias&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Used to list stuff with consideration to when the item is added&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;A &lt;code&gt;Sorter&lt;/code&gt; is called by the &lt;code&gt;Picker&lt;/code&gt; on each item returned by the &lt;code&gt;Finder&lt;/code&gt;. It returns a number, which is equivalent to the &quot;distance&quot; between the current &lt;code&gt;prompt&lt;/code&gt; and the &lt;code&gt;entry&lt;/code&gt; returned by a &lt;code&gt;finder&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Layout (display)&lt;/h2&gt; 
&lt;p&gt;Layout can be configured by choosing a specific &lt;code&gt;layout_strategy&lt;/code&gt; and specifying a particular &lt;code&gt;layout_config&lt;/code&gt; for that strategy. For more details on available strategies and configuration options, see &lt;code&gt;:help telescope.layout&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Some options for configuring sizes in layouts are &quot;resolvable&quot;. This means that they can take different forms, and will be interpreted differently according to which form they take. For example, if we wanted to set the &lt;code&gt;width&lt;/code&gt; of a picker using the &lt;code&gt;vertical&lt;/code&gt; layout strategy to 50% of the screen width, we would specify that width as &lt;code&gt;0.5&lt;/code&gt;, but if we wanted to specify the &lt;code&gt;width&lt;/code&gt; to be exactly 80 characters wide, we would specify it as &lt;code&gt;80&lt;/code&gt;. For more details on resolving sizes, see &lt;code&gt;:help telescope.resolve&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;As an example, if we wanted to specify the layout strategy and width, but only for this instance, we could do something like:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope.builtin&#39;).find_files({layout_strategy=&#39;vertical&#39;,layout_config={width=0.5}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If we wanted to change the width for every time we use the &lt;code&gt;vertical&lt;/code&gt; layout strategy, we could add the following to our &lt;code&gt;setup()&lt;/code&gt; call:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup({
  defaults = {
    layout_config = {
      vertical = { width = 0.5 }
      -- other layout configuration here
    },
    -- other defaults configuration here
  },
  -- other configuration values here
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Themes&lt;/h2&gt; 
&lt;p&gt;Common groups of settings can be set up to allow for themes. We have some built in themes but are looking for more cool options.&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://i.imgur.com/SorAcXv.png&quot; alt=&quot;dropdown&quot; /&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Themes&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_dropdown&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;A list like centered list. &lt;a href=&quot;https://i.imgur.com/SorAcXv.png&quot;&gt;dropdown&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_cursor&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/pull/878&quot;&gt;A cursor relative list.&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;themes.get_ivy&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Bottom panel overlay. &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/pull/771&quot;&gt;Ivy #771&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;To use a theme, simply append it to a builtin function:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;nnoremap &amp;lt;Leader&amp;gt;f :lua require&#39;telescope.builtin&#39;.find_files(require(&#39;telescope.themes&#39;).get_dropdown({}))&amp;lt;cr&amp;gt;
&quot; Change an option
nnoremap &amp;lt;Leader&amp;gt;f :lua require&#39;telescope.builtin&#39;.find_files(require(&#39;telescope.themes&#39;).get_dropdown({ winblend = 10 }))&amp;lt;cr&amp;gt;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or use with a command:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Telescope find_files theme=dropdown
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or you can configure it in the pickers table in &lt;code&gt;telescope.setup&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;telescope&#39;).setup{
  defaults = {
    -- ...
  },
  pickers = {
    find_files = {
      theme = &quot;dropdown&quot;,
    }
  },
  extensions = {
    -- ...
  }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Themes should work with every &lt;code&gt;telescope.builtin&lt;/code&gt; function. If you wish to make a theme, check out &lt;code&gt;lua/telescope/themes.lua&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Vim Commands&lt;/h2&gt; 
&lt;p&gt;All &lt;code&gt;telescope.nvim&lt;/code&gt; functions are wrapped in &lt;code&gt;vim&lt;/code&gt; commands for easy access, tab completions and setting options.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; Show all builtin pickers
:Telescope

&quot; Tab completion
:Telescope |&amp;lt;tab&amp;gt;
:Telescope find_files

&quot; Setting options
:Telescope find_files prompt_prefix=🔍

&quot; If the option accepts a Lua table as its value, you can use, to connect each
&quot; command string, e.g.: find_command, vimgrep_arguments are both options that
&quot; accept a Lua table as a value. So, you can configure them on the command line
&quot;like so:
:Telescope find_files find_command=rg,--ignore,--hidden,--files prompt_prefix=🔍
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;for more information and how to realize more complex commands please read &lt;code&gt;:help telescope.command&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Autocmds&lt;/h2&gt; 
&lt;p&gt;Telescope user autocmds:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Event&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopeFindPre&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it before Telescope creates all the floating windows&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopePreviewerLoaded&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it after Telescope previewer window is created&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;User TelescopeResumePost&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Do it after Telescope resume action is fully completed&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Extensions&lt;/h2&gt; 
&lt;p&gt;Telescope provides the capabilities to create &amp;amp; register extensions, which improves telescope in a variety of ways.&lt;/p&gt; 
&lt;p&gt;Some extensions provide integration with external tools, outside of the scope of &lt;code&gt;builtins&lt;/code&gt;. Others provide performance enhancements by using compiled C and interfacing directly with Lua over LuaJIT&#39;s FFI library.&lt;/p&gt; 
&lt;p&gt;A list of community extensions can be found in the &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim/wiki/Extensions&quot;&gt;Extensions&lt;/a&gt; wiki. Always read the README of the extension you want to install, but here is a general overview of how most extensions work.&lt;/p&gt; 
&lt;h3&gt;Loading extensions&lt;/h3&gt; 
&lt;p&gt;To load an extension, use the &lt;code&gt;load_extension&lt;/code&gt; function as shown in the example below:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- This will load fzy_native and have it override the default file sorter
require(&#39;telescope&#39;).load_extension(&#39;fzy_native&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You may skip explicitly loading extensions (they will then be lazy-loaded), but tab completions will not be available right away.&lt;/p&gt; 
&lt;h3&gt;Accessing pickers from extensions&lt;/h3&gt; 
&lt;p&gt;Pickers from extensions are added to the &lt;code&gt;:Telescope&lt;/code&gt; command under their respective name. For example:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; Run the `configurations` picker from nvim-dap
Telescope dap configurations
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;They can also be called directly from Lua:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Run the `configurations` picker from nvim-dap
require(&#39;telescope&#39;).extensions.dap.configurations()
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;API&lt;/h2&gt; 
&lt;p&gt;For writing your own picker and for information about the API please read the &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/developers.md&quot;&gt;Developers Documentation&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Media&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.twitch.tv/teej_dv/clip/RichDistinctPlumberPastaThat&quot;&gt;What is Telescope? (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.twitch.tv/videos/756229115&quot;&gt;More advanced configuration (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=3WEAjCXFiiM&quot;&gt;telescope.nvim 0.1 reflection (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=8SqFt5h2Lsg&quot;&gt;Why Telescope? (Video)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=guxLXcG1kzQ&quot;&gt;Telescope and Nvim 0.5 Intro (Video)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;All contributions are welcome! Just open a pull request. Please read &lt;a href=&quot;https://raw.githubusercontent.com/nvim-telescope/telescope.nvim/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Related Projects&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/picker.md&quot;&gt;snacks.picker&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-mini/mini.pick&quot;&gt;mini.pick&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ibhagwan/fzf-lua&quot;&gt;fzf-lua&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/fzf.vim&quot;&gt;fzf.vim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Shougo/denite.nvim&quot;&gt;denite.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/liuchengxu/vim-clap&quot;&gt;vim-clap&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/286efd08fa7a9250d033204ca85b51d514c513c64b63dee258d6a3f247179231/nvim-telescope/telescope.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>stevearc/conform.nvim</title>
      <link>https://github.com/stevearc/conform.nvim</link>
      <description>&lt;p&gt;Lightweight yet powerful formatter plugin for Neovim&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;conform.nvim&lt;/h1&gt; 
&lt;p&gt;Lightweight yet powerful formatter plugin for Neovim&lt;/p&gt; 
&lt;!-- TOC --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#requirements&quot;&gt;Requirements&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#setup&quot;&gt;Setup&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#formatters&quot;&gt;Formatters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#customizing-formatters&quot;&gt;Customizing formatters&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#magic-strings&quot;&gt;Magic strings&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#recipes&quot;&gt;Recipes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#debugging&quot;&gt;Debugging&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#advanced-topics&quot;&gt;Advanced topics&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#options&quot;&gt;Options&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#formatter-options&quot;&gt;Formatter options&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#api&quot;&gt;API&lt;/a&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#setupopts&quot;&gt;setup(opts)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#formatopts-callback&quot;&gt;format(opts, callback)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#list_formattersbufnr&quot;&gt;list_formatters(bufnr)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#list_formatters_to_runbufnr&quot;&gt;list_formatters_to_run(bufnr)&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#list_all_formatters&quot;&gt;list_all_formatters()&lt;/a&gt;&lt;/li&gt; 
   &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#get_formatter_infoformatter-bufnr&quot;&gt;get_formatter_info(formatter, bufnr)&lt;/a&gt;&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#faq&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /TOC --&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim 0.10+ (for older versions, use a &lt;a href=&quot;https://github.com/stevearc/conform.nvim/branches&quot;&gt;nvim-0.x branch&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Preserves extmarks and folds&lt;/strong&gt; - Most formatters replace the entire buffer, which clobbers extmarks and folds, and can cause the viewport and cursor to jump unexpectedly. Conform calculates minimal diffs and applies them using the built-in LSP format utilities.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Fixes bad-behaving LSP formatters&lt;/strong&gt; - Some LSP servers are lazy and simply replace the entire buffer, leading to the problems mentioned above. Conform hooks into the LSP handler and turns these responses into proper piecewise changes.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Enables range formatting for all formatters&lt;/strong&gt; - Since conform calculates minimal diffs, it can perform range formatting &lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#range-formatting&quot;&gt;even if the underlying formatter doesn&#39;t support it.&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Simple API&lt;/strong&gt; - Conform exposes a simple, imperative API modeled after &lt;code&gt;vim.lsp.buf.format()&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Formats embedded code blocks&lt;/strong&gt; - Can format code blocks inside markdown files or similar (see &lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#injected-language-formatting-code-blocks&quot;&gt;injected language formatting&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;conform.nvim supports all the usual plugin managers&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;lazy.nvim&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &#39;stevearc/conform.nvim&#39;,
  opts = {},
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;For a more thorough configuration involving lazy-loading, see &lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#lazy-loading-with-lazynvim&quot;&gt;Lazy loading with lazy.nvim&lt;/a&gt;.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Packer&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;packer&quot;).startup(function()
  use({
    &quot;stevearc/conform.nvim&quot;,
    config = function()
      require(&quot;conform&quot;).setup()
    end,
  })
end)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Paq&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;paq&quot;)({
  { &quot;stevearc/conform.nvim&quot; },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;vim-plug&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;Plug &#39;stevearc/conform.nvim&#39;
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;dein&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;call dein#add(&#39;stevearc/conform.nvim&#39;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Pathogen&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --depth=1 https://github.com/stevearc/conform.nvim.git ~/.vim/bundle/
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Neovim native package&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;git clone --depth=1 https://github.com/stevearc/conform.nvim.git \
  &quot;${XDG_DATA_HOME:-$HOME/.local/share}&quot;/nvim/site/pack/conform/start/conform.nvim
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Setup&lt;/h2&gt; 
&lt;p&gt;At a minimum, you will need to set up some formatters by filetype&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).setup({
  formatters_by_ft = {
    lua = { &quot;stylua&quot; },
    -- Conform will run multiple formatters sequentially
    python = { &quot;isort&quot;, &quot;black&quot; },
    -- You can customize some of the format options for the filetype (:help conform.format)
    rust = { &quot;rustfmt&quot;, lsp_format = &quot;fallback&quot; },
    -- Conform will run the first available formatter
    javascript = { &quot;prettierd&quot;, &quot;prettier&quot;, stop_after_first = true },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Then you can use &lt;code&gt;conform.format()&lt;/code&gt; just like you would &lt;code&gt;vim.lsp.buf.format()&lt;/code&gt;. For example, to format on save:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.api.nvim_create_autocmd(&quot;BufWritePre&quot;, {
  pattern = &quot;*&quot;,
  callback = function(args)
    require(&quot;conform&quot;).format({ bufnr = args.buf })
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;As a shortcut, conform will optionally set up this format-on-save autocmd for you&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).setup({
  format_on_save = {
    -- These options will be passed to conform.format()
    timeout_ms = 500,
    lsp_format = &quot;fallback&quot;,
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/#formatopts-callback&quot;&gt;conform.format()&lt;/a&gt; for more details about the parameters.&lt;/p&gt; 
&lt;p&gt;Conform also provides a formatexpr, same as the LSP client:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.o.formatexpr = &quot;v:lua.require&#39;conform&#39;.formatexpr()&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To view configured and available formatters, as well as to see the log file, run &lt;code&gt;:ConformInfo&lt;/code&gt;&lt;/p&gt; 
&lt;h2&gt;Formatters&lt;/h2&gt; 
&lt;p&gt;You can view this list in vim with &lt;code&gt;:help conform-formatters&lt;/code&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Expand to see all formatters&lt;/summary&gt; 
 &lt;!-- FORMATTERS --&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/posit-dev/air&quot;&gt;air&lt;/a&gt; - R formatter and language server.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://kamadorueda.com/alejandra/&quot;&gt;alejandra&lt;/a&gt; - The Uncompromising Nix Code Formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ansible/ansible-lint&quot;&gt;ansible-lint&lt;/a&gt; - ansible-lint with --fix.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/klauspost/asmfmt&quot;&gt;asmfmt&lt;/a&gt; - Go Assembler Formatter&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://ast-grep.github.io/&quot;&gt;ast-grep&lt;/a&gt; - A CLI tool for code structural search, lint and rewriting. Written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://astyle.sourceforge.net/astyle.html&quot;&gt;astyle&lt;/a&gt; - A Free, Fast, and Small Automatic Formatter for C, C++, C++/CLI, Objective-C, C#, and Java Source Code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://auto-optional.daanluttik.nl/&quot;&gt;auto_optional&lt;/a&gt; - Adds the Optional type-hint to arguments where the default value is None.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/huacnlee/autocorrect&quot;&gt;autocorrect&lt;/a&gt; - A linter and formatter to help you to improve copywriting, correct spaces, words, and punctuations between CJK.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/PyCQA/autoflake&quot;&gt;autoflake&lt;/a&gt; - Removes unused imports and unused variables as reported by pyflakes.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hhatto/autopep8&quot;&gt;autopep8&lt;/a&gt; - A tool that automatically formats Python code to conform to the PEP 8 style guide.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/EbodShojaei/bake&quot;&gt;bake&lt;/a&gt; - A Makefile formatter and linter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://beancount.github.io/docs/running_beancount_and_generating_reports.html#bean-format&quot;&gt;bean-format&lt;/a&gt; - Reformat Beancount files to right-align all the numbers at the same, minimal column.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/lovesegfault/beautysh&quot;&gt;beautysh&lt;/a&gt; - A Bash beautifier for the masses.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/FlamingTempura/bibtex-tidy&quot;&gt;bibtex-tidy&lt;/a&gt; - Cleaner and Formatter for BibTeX files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Azure/bicep&quot;&gt;bicep&lt;/a&gt; - Bicep is a Domain Specific Language (DSL) for deploying Azure resources declaratively.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://biomejs.dev/reference/cli/#biome-format&quot;&gt;biome&lt;/a&gt; - A toolchain for web projects, aimed to provide functionalities to maintain them. This config runs formatting &lt;em&gt;only&lt;/em&gt;. See &lt;code&gt;biome-check&lt;/code&gt; or &lt;code&gt;biome-organize-imports&lt;/code&gt; for other options.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://biomejs.dev/reference/cli/#biome-check&quot;&gt;biome-check&lt;/a&gt; - A toolchain for web projects, aimed to provide functionalities to maintain them. This config runs formatting, linting and import sorting. See &lt;code&gt;biome&lt;/code&gt; or &lt;code&gt;biome-organize-imports&lt;/code&gt; for other options.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/biomejs/biome&quot;&gt;biome-organize-imports&lt;/a&gt; - A toolchain for web projects, aimed to provide functionalities to maintain them. This config runs import sorting &lt;em&gt;only&lt;/em&gt;. See &lt;code&gt;biome&lt;/code&gt; or &lt;code&gt;biome-check&lt;/code&gt; for other options.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/psf/black&quot;&gt;black&lt;/a&gt; - The uncompromising Python code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/shufo/blade-formatter&quot;&gt;blade-formatter&lt;/a&gt; - An opinionated blade template formatter for Laravel that respects readability.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/grantjenks/blue&quot;&gt;blue&lt;/a&gt; - The slightly less uncompromising Python code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://source.android.com/docs/setup/reference/androidbp&quot;&gt;bpfmt&lt;/a&gt; - Android Blueprint file formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/rokucommunity/brighterscript-formatter&quot;&gt;bsfmt&lt;/a&gt; - A code formatter for BrighterScript (and BrightScript).&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://buf.build/docs/reference/cli/buf/format&quot;&gt;buf&lt;/a&gt; - A new way of working with Protocol Buffers.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/bazelbuild/buildtools/tree/master/buildifier&quot;&gt;buildifier&lt;/a&gt; - buildifier is a tool for formatting bazel BUILD and .bzl files with a standard convention.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hackage.haskell.org/package/cabal-fmt&quot;&gt;cabal_fmt&lt;/a&gt; - Format cabal files with cabal-fmt.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://caramel.run/manual/reference/cli/fmt.html&quot;&gt;caramel_fmt&lt;/a&gt; - Format Caramel code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/lukas-reineke/cbfmt&quot;&gt;cbfmt&lt;/a&gt; - A tool to format codeblocks inside markdown and org documents.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/cedar-policy/cedar&quot;&gt;cedar&lt;/a&gt; - Formats cedar policies.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://clang.llvm.org/docs/ClangFormat.html&quot;&gt;clang-format&lt;/a&gt; - Tool to format C/C++/… code according to a set of rules and heuristics.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/weavejester/cljfmt&quot;&gt;cljfmt&lt;/a&gt; - cljfmt is a tool for detecting and fixing formatting errors in Clojure code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/greglook/cljstyle&quot;&gt;cljstyle&lt;/a&gt; - Formatter for Clojure code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/cheshirekow/cmake_format&quot;&gt;cmake_format&lt;/a&gt; - Parse cmake listfiles and format them nicely.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/code-security/codeql-cli/codeql-cli-manual/query-format&quot;&gt;codeql&lt;/a&gt; - Format queries and libraries with CodeQL.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/codespell-project/codespell&quot;&gt;codespell&lt;/a&gt; - Check code for common misspellings.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://gitlab.com/mkjeldsen/commitmsgfmt&quot;&gt;commitmsgfmt&lt;/a&gt; - Formats commit messages better than fmt(1) and Vim.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/cockroachdb/crlfmt&quot;&gt;crlfmt&lt;/a&gt; - Formatter for CockroachDB&#39;s additions to the Go style guide.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://crystal-lang.org/&quot;&gt;crystal&lt;/a&gt; - Format Crystal code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/belav/csharpier&quot;&gt;csharpier&lt;/a&gt; - The opinionated C# code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/beautifier/js-beautify&quot;&gt;css_beautify&lt;/a&gt; - Beautifier for css.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://cuelang.org&quot;&gt;cue_fmt&lt;/a&gt; - Format CUE files using &lt;code&gt;cue fmt&lt;/code&gt; command.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/terrastruct/d2&quot;&gt;d2&lt;/a&gt; - D2 is a modern diagram scripting language that turns text to diagrams.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/akaihola/darker&quot;&gt;darker&lt;/a&gt; - Run black only on changed lines.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://dart.dev/tools/dart-format&quot;&gt;dart_format&lt;/a&gt; - Replace the whitespace in your program with formatting that follows Dart guidelines.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://dcm.dev/docs/cli/formatting/fix/&quot;&gt;dcm_fix&lt;/a&gt; - Fixes issues produced by dcm analyze, dcm check-unused-code or dcm check-dependencies commands.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://dcm.dev/docs/cli/formatting/format/&quot;&gt;dcm_format&lt;/a&gt; - Formats .dart files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://deno.land/manual/tools/formatter&quot;&gt;deno_fmt&lt;/a&gt; - Use &lt;a href=&quot;https://deno.land/&quot;&gt;Deno&lt;/a&gt; to format TypeScript, JavaScript/JSON and markdown.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dlang-community/dfmt&quot;&gt;dfmt&lt;/a&gt; - Formatter for D source code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dioxuslabs/dioxus&quot;&gt;dioxus&lt;/a&gt; - Format &lt;code&gt;rsx!&lt;/code&gt; snippets in Rust files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Riverside-Healthcare/djLint&quot;&gt;djlint&lt;/a&gt; - ✨ HTML Template Linter and Formatter. Django - Jinja - Nunjucks - Handlebars - GoLang.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://pypi.org/project/docformatter/&quot;&gt;docformatter&lt;/a&gt; - docformatter automatically formats docstrings to follow a subset of the PEP 257 conventions.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/reteps/dockerfmt&quot;&gt;dockerfmt&lt;/a&gt; - Dockerfile formatter. a modern dockfmt.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/LilSpazJoekp/docstrfmt&quot;&gt;docstrfmt&lt;/a&gt; - reStructuredText formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/thlorenz/doctoc&quot;&gt;doctoc&lt;/a&gt; - Generates table of contents for markdown files inside local git repository.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dprint/dprint&quot;&gt;dprint&lt;/a&gt; - Pluggable and configurable code formatting platform written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/easy-coding-standard/easy-coding-standard&quot;&gt;easy-coding-standard&lt;/a&gt; - ecs - Use Coding Standard with 0-knowledge of PHP-CS-Fixer and PHP_CodeSniffer.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sile/efmt&quot;&gt;efmt&lt;/a&gt; - Erlang code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/avh4/elm-format&quot;&gt;elm_format&lt;/a&gt; - elm-format formats Elm source code according to a standard set of rules based on the official &lt;a href=&quot;https://elm-lang.org/docs/style-guide&quot;&gt;Elm Style Guide&lt;/a&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nebulab/erb-formatter&quot;&gt;erb_format&lt;/a&gt; - Format ERB files with speed and precision.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/WhatsApp/erlfmt&quot;&gt;erlfmt&lt;/a&gt; - An automated code formatter for Erlang.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mantoni/eslint_d.js/&quot;&gt;eslint_d&lt;/a&gt; - Like ESLint, but faster.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/fsprojects/fantomas&quot;&gt;fantomas&lt;/a&gt; - F# source code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/wvermin/findent&quot;&gt;findent&lt;/a&gt; - Indent, relabel and convert Fortran sources.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://fishshell.com/docs/current/cmds/fish_indent.html&quot;&gt;fish_indent&lt;/a&gt; - Indent or otherwise prettify a piece of fish code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/rhysd/fixjson&quot;&gt;fixjson&lt;/a&gt; - JSON Fixer for Humans using (relaxed) JSON5.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://git.sr.ht/~technomancy/fnlfmt&quot;&gt;fnlfmt&lt;/a&gt; - A formatter for Fennel code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/foundry-rs/foundry&quot;&gt;forge_fmt&lt;/a&gt; - Forge is a command-line tool that ships with Foundry. Forge tests, builds, and deploys your smart contracts.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ocaml/dune&quot;&gt;format-dune-file&lt;/a&gt; - Auto-formatter for Dune files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hackage.haskell.org/package/fourmolu&quot;&gt;fourmolu&lt;/a&gt; - A fork of ormolu that uses four space indentation and allows arbitrary configuration.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/fortran-lang/fprettify&quot;&gt;fprettify&lt;/a&gt; - Auto-formatter for modern fortran source code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/gawk/manual/gawk.html&quot;&gt;gawk&lt;/a&gt; - Format awk programs with gawk.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/daixiang0/gci&quot;&gt;gci&lt;/a&gt; - GCI, a tool that controls Go package import order and makes it always deterministic.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Scony/godot-gdscript-toolkit&quot;&gt;gdformat&lt;/a&gt; - A formatter for Godot&#39;s gdscript.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/GDQuest/GDScript-formatter&quot;&gt;gdscript-formatter&lt;/a&gt; - A faster code formatter for GDScript and Godot 4.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/BlankSpruce/gersemi&quot;&gt;gersemi&lt;/a&gt; - A formatter to make your CMake code the real treasure.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://ghdl.github.io/ghdl/&quot;&gt;ghdl&lt;/a&gt; - Open-source analyzer, compiler, simulator and synthesizer for VHDL.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/antham/ghokin&quot;&gt;ghokin&lt;/a&gt; - Parallelized formatter with no external dependencies for gherkin.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/gleam-lang/gleam&quot;&gt;gleam&lt;/a&gt; - ⭐️ A friendly language for building type-safe, scalable systems!&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/gluon-lang/gluon&quot;&gt;gluon_fmt&lt;/a&gt; - Code formatting for the gluon programming language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://gn.googlesource.com/gn/&quot;&gt;gn&lt;/a&gt; - gn build system.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://pkg.go.dev/cmd/gofmt&quot;&gt;gofmt&lt;/a&gt; - Formats go programs.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mvdan/gofumpt&quot;&gt;gofumpt&lt;/a&gt; - Enforce a stricter format than gofmt, while being backwards compatible. That is, gofumpt is happy with a subset of the formats that gofmt is happy with.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://pkg.go.dev/golang.org/x/tools/cmd/goimports&quot;&gt;goimports&lt;/a&gt; - Updates your Go import lines, adding missing ones and removing unreferenced ones.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/incu6us/goimports-reviser&quot;&gt;goimports-reviser&lt;/a&gt; - Right imports sorting &amp;amp; code formatting tool (goimports alternative).&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/itchyny/gojq&quot;&gt;gojq&lt;/a&gt; - Pure Go implementation of jq.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://golangci-lint.run/usage/configuration/#fmt&quot;&gt;golangci-lint&lt;/a&gt; - Fast linters runner for Go (with formatter).&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/segmentio/golines&quot;&gt;golines&lt;/a&gt; - A golang formatter that fixes long lines.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/google-java-format&quot;&gt;google-java-format&lt;/a&gt; - Reformats Java source code according to Google Java Style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://grain-lang.org/docs/tooling/grain_cli#grain-format&quot;&gt;grain_format&lt;/a&gt; - Code formatter for the grain programming language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hashicorp/hcl&quot;&gt;hcl&lt;/a&gt; - A formatter for HCL files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mihaimaruseac/hindent&quot;&gt;hindent&lt;/a&gt; - Haskell pretty printer.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mondeja/hledger-fmt&quot;&gt;hledger-fmt&lt;/a&gt; - An opinionated hledger&#39;s journal files formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/beautifier/js-beautify&quot;&gt;html_beautify&lt;/a&gt; - Beautifier for html.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/threedaymonk/htmlbeautifier&quot;&gt;htmlbeautifier&lt;/a&gt; - A normaliser/beautifier for HTML that also understands embedded Ruby. Ideal for tidying up Rails templates.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hurl.dev/&quot;&gt;hurlfmt&lt;/a&gt; - Formats hurl files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://imba.io/&quot;&gt;imba_fmt&lt;/a&gt; - Code formatter for the Imba programming language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/indent/&quot;&gt;indent&lt;/a&gt; - GNU Indent.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#injected-language-formatting-code-blocks&quot;&gt;injected&lt;/a&gt; - Format treesitter injected languages.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://inko-lang.org/&quot;&gt;inko&lt;/a&gt; - A language for building concurrent software with confidence&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/PyCQA/isort&quot;&gt;isort&lt;/a&gt; - Python utility / library to sort imports alphabetically and automatically separate them into sections and by type.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/janet-lang/spork&quot;&gt;janet-format&lt;/a&gt; - A formatter for Janet code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/candid82/joker&quot;&gt;joker&lt;/a&gt; - Small Clojure interpreter, linter and formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/stedolan/jq&quot;&gt;jq&lt;/a&gt; - Command-line JSON processor.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/beautifier/js-beautify&quot;&gt;js_beautify&lt;/a&gt; - Beautifier for javascript.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mangiucugna/json_repair&quot;&gt;json_repair&lt;/a&gt; - A python module to repair invalid JSON from LLMs.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/go-jsonnet/tree/master/cmd/jsonnetfmt&quot;&gt;jsonnetfmt&lt;/a&gt; - jsonnetfmt is a command line tool to format jsonnet files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/casey/just&quot;&gt;just&lt;/a&gt; - Format Justfile.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.kcl-lang.io/docs/tools/cli/kcl/fmt&quot;&gt;kcl&lt;/a&gt; - The KCL Format tool modifies the files according to the KCL code style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hougesen/kdlfmt&quot;&gt;kdlfmt&lt;/a&gt; - A formatter for kdl documents.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/keep-sorted&quot;&gt;keep-sorted&lt;/a&gt; - keep-sorted is a language-agnostic formatter that sorts lines between two markers in a larger file.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/ktfmt&quot;&gt;ktfmt&lt;/a&gt; - Reformats Kotlin source code to comply with the common community standard conventions.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://ktlint.github.io/&quot;&gt;ktlint&lt;/a&gt; - An anti-bikeshedding Kotlin linter with built-in formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mistweaverco/kulala-fmt&quot;&gt;kulala-fmt&lt;/a&gt; - An opinionated .http and .rest files linter and formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/cmhughes/latexindent.pl&quot;&gt;latexindent&lt;/a&gt; - A perl script for formatting LaTeX files that is generally included in major TeX distributions.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/bram209/leptosfmt&quot;&gt;leptosfmt&lt;/a&gt; - A formatter for the Leptos view! macro.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/savonet/liquidsoap-prettier&quot;&gt;liquidsoap-prettier&lt;/a&gt; - A binary to format Liquidsoap scripts&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://repo.or.cz/llf.git&quot;&gt;llf&lt;/a&gt; - A LaTeX reformatter / beautifier.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Koihik/LuaFormatter&quot;&gt;lua-format&lt;/a&gt; - Code formatter for Lua.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/carthage-software/mago&quot;&gt;mago_format&lt;/a&gt; - Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/carthage-software/mago&quot;&gt;mago_lint&lt;/a&gt; - Mago is a toolchain for PHP that aims to provide a set of tools to help developers write better code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jonschlinkert/markdown-toc&quot;&gt;markdown-toc&lt;/a&gt; - API and CLI for generating a markdown TOC (table of contents) for a README or any markdown files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/shurcooL/markdownfmt&quot;&gt;markdownfmt&lt;/a&gt; - Like gofmt, but for Markdown.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/DavidAnson/markdownlint&quot;&gt;markdownlint&lt;/a&gt; - A Node.js style checker and lint tool for Markdown/CommonMark files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/DavidAnson/markdownlint-cli2&quot;&gt;markdownlint-cli2&lt;/a&gt; - A fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the markdownlint library.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/executablebooks/mdformat&quot;&gt;mdformat&lt;/a&gt; - An opinionated Markdown formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hougesen/mdsf&quot;&gt;mdsf&lt;/a&gt; - Format markdown code blocks using your favorite code formatters.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/razziel89/mdslw&quot;&gt;mdslw&lt;/a&gt; - Prepare your markdown for easy diff&#39;ing by adding line breaks after every sentence.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mesonbuild/meson&quot;&gt;meson&lt;/a&gt; - Format meson source files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/florianschanda/miss_hit&quot;&gt;mh_style&lt;/a&gt; - A simple coding style checker and code formatter for MATLAB or Octave code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hexdocs.pm/mix/main/Mix.Tasks.Format.html&quot;&gt;mix&lt;/a&gt; - Format Elixir files using the mix format command.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.modular.com/mojo/cli/format&quot;&gt;mojo_format&lt;/a&gt; - Official Formatter for The Mojo Programming Language&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/slomkowski/nginx-config-formatter&quot;&gt;nginxfmt&lt;/a&gt; - nginx config file formatter/beautifier written in Python with no additional dependencies.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://nickel-lang.org/&quot;&gt;nickel&lt;/a&gt; - Code formatter for the Nickel programming language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nim-lang/nim&quot;&gt;nimpretty&lt;/a&gt; - nimpretty is a Nim source code beautifier that follows the official style guide.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/NixOS/nixfmt&quot;&gt;nixfmt&lt;/a&gt; - The official formatter for Nix code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nix-community/nixpkgs-fmt&quot;&gt;nixpkgs_fmt&lt;/a&gt; - nixpkgs-fmt is a Nix code formatter for nixpkgs.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://developer.hashicorp.com/nomad/docs/commands/fmt&quot;&gt;nomad_fmt&lt;/a&gt; - The fmt commands check the syntax and rewrites Nomad configuration and jobspec files to canonical format.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/arnetheduck/nph&quot;&gt;nph&lt;/a&gt; - An opinionated code formatter for Nim.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvuillam/npm-groovy-lint&quot;&gt;npm-groovy-lint&lt;/a&gt; - Lint, format and auto-fix your Groovy / Jenkinsfile / Gradle files using command line.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nushell/nufmt&quot;&gt;nufmt&lt;/a&gt; - The nushell formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ocaml-ppx/ocamlformat&quot;&gt;ocamlformat&lt;/a&gt; - Auto-formatter for OCaml code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/OCamlPro/ocp-indent&quot;&gt;ocp-indent&lt;/a&gt; - Automatic indentation of OCaml source files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/DanielGavin/ols&quot;&gt;odinfmt&lt;/a&gt; - Auto-formatter for the Odin programming language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.openpolicyagent.org/docs/latest/cli/#opa-fmt&quot;&gt;opa_fmt&lt;/a&gt; - Format Rego files using &lt;code&gt;opa fmt&lt;/code&gt; command.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/thim81/openapi-format&quot;&gt;openapi-format&lt;/a&gt; - Format an OpenAPI document by ordering, formatting and filtering fields.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://hackage.haskell.org/package/ormolu&quot;&gt;ormolu&lt;/a&gt; - A formatter for Haskell source code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/oxc-project/oxc&quot;&gt;oxfmt&lt;/a&gt; - A Prettier-compatible code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/oxc-project/oxc&quot;&gt;oxlint&lt;/a&gt; - An oxidized replacement for ESLint that fixes lint errors.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://developer.hashicorp.com/packer/docs/commands/fmt&quot;&gt;packer_fmt&lt;/a&gt; - The packer fmt Packer command is used to format HCL2 configuration files to a canonical format and style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/palantir/palantir-java-format&quot;&gt;palantir-java-format&lt;/a&gt; - A modern, lambda-friendly, 120 character Java formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jolars/panache&quot;&gt;panache&lt;/a&gt; - A formatter, linter, and language server for Markdown, Quarto, and R Markdown.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jolars/panache&quot;&gt;panache-fix&lt;/a&gt; - Linter for Markdown, Quarto, and R Markdown. Applies auto-fixable rule violations.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/vinta/pangu.py&quot;&gt;pangu&lt;/a&gt; - Insert whitespace between CJK and half-width characters.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/integrated-application-development/pasfmt&quot;&gt;pasfmt&lt;/a&gt; - Delphi code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/perl-ide/App-perlimports&quot;&gt;perlimports&lt;/a&gt; - Make implicit Perl imports explicit.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/perltidy/perltidy&quot;&gt;perltidy&lt;/a&gt; - Perl::Tidy, a source code formatter for Perl.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/darold/pgFormatter&quot;&gt;pg_format&lt;/a&gt; - PostgreSQL SQL syntax beautifier.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/PHP-CS-Fixer/PHP-CS-Fixer&quot;&gt;php_cs_fixer&lt;/a&gt; - The PHP Coding Standards Fixer.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://phpqa.io/projects/phpcbf.html&quot;&gt;phpcbf&lt;/a&gt; - PHP Code Beautifier and Fixer fixes violations of a defined coding standard.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nunomaduro/phpinsights&quot;&gt;phpinsights&lt;/a&gt; - The perfect starting point to analyze the code quality of your PHP projects.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/laravel/pint&quot;&gt;pint&lt;/a&gt; - Laravel Pint is an opinionated PHP code style fixer for minimalists.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/apple/pkl&quot;&gt;pkl&lt;/a&gt; - Official canonical formatter for Pkl.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/prettier/prettier&quot;&gt;prettier&lt;/a&gt; - Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/fsouza/prettierd&quot;&gt;prettierd&lt;/a&gt; - prettier, as a daemon, for ludicrous formatting speed.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/lkrms/pretty-php&quot;&gt;pretty-php&lt;/a&gt; - The opinionated PHP code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/antonWetzel/prettypst&quot;&gt;prettypst&lt;/a&gt; - Formatter for Typst.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jamesnvc/lsp_server&quot;&gt;prolog&lt;/a&gt; - Language Server Protocol server and formatter for SWI-Prolog.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/pruner-formatter/pruner&quot;&gt;pruner&lt;/a&gt; - A language-agnostic, treesitter powered formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/puppetlabs/puppet-lint&quot;&gt;puppet-lint&lt;/a&gt; - Check that your Puppet manifests conform to the style guide.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/natefaubion/purescript-tidy&quot;&gt;purs-tidy&lt;/a&gt; - A syntax tidy-upper for PureScript.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hadialqattan/pycln&quot;&gt;pycln&lt;/a&gt; - A Python formatter for finding and removing unused import statements.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/pyink&quot;&gt;pyink&lt;/a&gt; - A Python formatter, forked from Black with a few different formatting behaviors.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jackdewinter/pymarkdown&quot;&gt;pymarkdownlnt&lt;/a&gt; - A markdown linter and formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/tox-dev/toml-fmt/tree/main/pyproject-fmt&quot;&gt;pyproject-fmt&lt;/a&gt; - Apply a consistent format to your pyproject.toml file with comment support.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/frescobaldi/python-ly&quot;&gt;python-ly&lt;/a&gt; - A Python package and commandline tool to manipulate LilyPond files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/asottile/pyupgrade&quot;&gt;pyupgrade&lt;/a&gt; - A tool to automatically upgrade syntax for newer versions of Python.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://doc.qt.io/qt-6//qtqml-tooling-qmlformat.html&quot;&gt;qmlformat&lt;/a&gt; - A tool that automatically formats QML files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.racket-lang.org/fmt&quot;&gt;racketfmt&lt;/a&gt; - Racket language formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ducminh-phan/reformat-gherkin&quot;&gt;reformat-gherkin&lt;/a&gt; - Formatter for Gherkin language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/asottile/reorder-python-imports&quot;&gt;reorder-python-imports&lt;/a&gt; - Rewrites source to reorder python imports&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://rescript-lang.org/&quot;&gt;rescript-format&lt;/a&gt; - The built-in ReScript formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/roc-lang/roc&quot;&gt;roc&lt;/a&gt; - A fast, friendly, functional language.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dzhu/rstfmt&quot;&gt;rstfmt&lt;/a&gt; - A formatter for reStructuredText.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/rubocop/rubocop&quot;&gt;rubocop&lt;/a&gt; - Ruby static code analyzer and formatter, based on the community Ruby style guide.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/fables-tales/rubyfmt&quot;&gt;rubyfmt&lt;/a&gt; - Ruby Autoformatter! (Written in Rust)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.astral.sh/ruff/&quot;&gt;ruff_fix&lt;/a&gt; - An extremely fast Python linter, written in Rust. Fix lint errors.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.astral.sh/ruff/&quot;&gt;ruff_format&lt;/a&gt; - An extremely fast Python linter, written in Rust. Formatter subcommand.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.astral.sh/ruff/&quot;&gt;ruff_organize_imports&lt;/a&gt; - An extremely fast Python linter, written in Rust. Organize imports.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ruby-formatter/rufo&quot;&gt;rufo&lt;/a&gt; - Rufo is an opinionated ruby formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/rvben/rumdl&quot;&gt;rumdl&lt;/a&gt; - Markdown Linter and Formatter written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/fredrikekre/Runic.jl&quot;&gt;runic&lt;/a&gt; - Julia code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt&quot;&gt;rustfmt&lt;/a&gt; - A tool for formatting rust code according to style guidelines.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/avencera/rustywind&quot;&gt;rustywind&lt;/a&gt; - A tool for formatting Tailwind CSS classes.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/scalameta/scalafmt&quot;&gt;scalafmt&lt;/a&gt; - Code formatter for Scala.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/koalaman/shellcheck&quot;&gt;shellcheck&lt;/a&gt; - A static analysis tool for shell scripts.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/anordal/shellharden&quot;&gt;shellharden&lt;/a&gt; - The corrective bash syntax highlighter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mvdan/sh&quot;&gt;shfmt&lt;/a&gt; - A shell parser, formatter, and interpreter with &lt;code&gt;bash&lt;/code&gt; support.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nrempel/sleek&quot;&gt;sleek&lt;/a&gt; - Sleek is a CLI tool for formatting SQL.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/shwestrick/smlfmt&quot;&gt;smlfmt&lt;/a&gt; - A custom parser and code formatter for Standard ML.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/snakemake/snakefmt&quot;&gt;snakefmt&lt;/a&gt; - a formatting tool for Snakemake files following the design of Black.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/diffplug/spotless&quot;&gt;spotless_gradle&lt;/a&gt; - Spotless plugin for Gradle.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/diffplug/spotless&quot;&gt;spotless_maven&lt;/a&gt; - Spotless plugin for Maven.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sql-formatter-org/sql-formatter&quot;&gt;sql_formatter&lt;/a&gt; - A whitespace formatter for different query languages.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sqlfluff/sqlfluff&quot;&gt;sqlfluff&lt;/a&gt; - A modular SQL linter and auto-formatter with support for multiple dialects and templated code.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.sqlfmt.com&quot;&gt;sqlfmt&lt;/a&gt; - sqlfmt formats your dbt SQL files so you don&#39;t have to. It is similar in nature to Black, gofmt, and rustfmt (but for SQL)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/quarylabs/sqruff&quot;&gt;sqruff&lt;/a&gt; - sqruff is a SQL linter and formatter written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/coreutils/manual/html_node/cat-invocation.html#cat-invocation&quot;&gt;squeeze_blanks&lt;/a&gt; - Squeeze repeated blank lines into a single blank line via &lt;code&gt;cat -s&lt;/code&gt;.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/oakmac/standard-clojure-style-js&quot;&gt;standard-clj&lt;/a&gt; - A JavaScript library to format Clojure code according to Standard Clojure Style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://standardjs.com&quot;&gt;standardjs&lt;/a&gt; - JavaScript Standard style guide, linter, and formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/standardrb/standard&quot;&gt;standardrb&lt;/a&gt; - Ruby&#39;s bikeshed-proof linter and formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/stylelint/stylelint&quot;&gt;stylelint&lt;/a&gt; - A mighty CSS linter that helps you avoid errors and enforce conventions.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/devOpifex/r.nvim&quot;&gt;styler&lt;/a&gt; - R formatter and linter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/haskell/stylish-haskell&quot;&gt;stylish-haskell&lt;/a&gt; - Haskell code prettifier.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/JohnnyMorganz/StyLua&quot;&gt;stylua&lt;/a&gt; - An opinionated code formatter for Lua.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/kristoff-it/superhtml&quot;&gt;superhtml&lt;/a&gt; - HTML Language Server and Templating Language Library.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/swiftlang/swift-format&quot;&gt;swift&lt;/a&gt; - Official Swift formatter. Requires Swift 6.0 or later.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/swiftlang/swift-format&quot;&gt;swift_format&lt;/a&gt; - Official Swift formatter. For Swift 6.0 or later prefer setting the &lt;code&gt;swift&lt;/code&gt; formatter instead.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nicklockwood/SwiftFormat&quot;&gt;swiftformat&lt;/a&gt; - SwiftFormat is a code library and command-line tool for reformatting &lt;code&gt;swift&lt;/code&gt; code on macOS or Linux.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/realm/SwiftLint&quot;&gt;swiftlint&lt;/a&gt; - A tool to enforce Swift style and conventions.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ruby-syntax-tree/syntax_tree&quot;&gt;syntax_tree&lt;/a&gt; - Syntax Tree is a suite of tools built on top of the internal CRuby parser.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/tamasfe/taplo&quot;&gt;taplo&lt;/a&gt; - A TOML toolkit written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nmoroze/tclint&quot;&gt;tclfmt&lt;/a&gt; - A formatter for Tcl scripts, part of the tclint project.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://templ.guide/developer-tools/cli/#formatting-templ-files&quot;&gt;templ&lt;/a&gt; - Formats templ template files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://www.terraform.io/docs/cli/commands/fmt.html&quot;&gt;terraform_fmt&lt;/a&gt; - The terraform-fmt command rewrites &lt;code&gt;terraform&lt;/code&gt; configuration files to a canonical format and style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://terragrunt.gruntwork.io/docs/reference/cli-options/#hclfmt&quot;&gt;terragrunt_hclfmt&lt;/a&gt; - Format hcl files into a canonical format.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/WGUNDERWOOD/tex-fmt&quot;&gt;tex-fmt&lt;/a&gt; - An extremely fast LaTeX formatter written in Rust.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/tighten/tlint&quot;&gt;tlint&lt;/a&gt; - Tighten linter for Laravel conventions with support for auto-formatting.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://opentofu.org/docs/cli/commands/fmt/&quot;&gt;tofu_fmt&lt;/a&gt; - The tofu-fmt command rewrites OpenTofu configuration files to a canonical format and style.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/tombi-toml/tombi&quot;&gt;tombi&lt;/a&gt; - TOML Formatter / Linter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/numtide/treefmt&quot;&gt;treefmt&lt;/a&gt; - one CLI to format your repo.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/stevearc/conform.nvim/raw/master/lua/conform/formatters/trim_newlines.lua&quot;&gt;trim_newlines&lt;/a&gt; - Trim empty lines at the end of the file.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/stevearc/conform.nvim/raw/master/lua/conform/formatters/trim_whitespace.lua&quot;&gt;trim_whitespace&lt;/a&gt; - Trim trailing whitespace.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://docs.trunk.io/code-quality/overview/getting-started/commands-reference/code-quality#trunk-check-run-format&quot;&gt;trunk&lt;/a&gt; - Trunk universal formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/VincentLanglet/Twig-CS-Fixer&quot;&gt;twig-cs-fixer&lt;/a&gt; - Automatically fix Twig Coding Standards issues&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/protocolbuffers/txtpbfmt&quot;&gt;txtpbfmt&lt;/a&gt; - txtpbfmt parses, edits and formats text proto files in a way that preserves comments.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/microsoft/typespec&quot;&gt;typespec&lt;/a&gt; - TypeSpec compiler and CLI.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/crate-ci/typos&quot;&gt;typos&lt;/a&gt; - Source code spell checker&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/Enter-tainer/typstyle&quot;&gt;typstyle&lt;/a&gt; - Beautiful and reliable typst code formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/omnilib/ufmt&quot;&gt;ufmt&lt;/a&gt; - Safe, atomic formatting with black and µsort.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/uncrustify/uncrustify&quot;&gt;uncrustify&lt;/a&gt; - A source code beautifier for C, C++, C#, ObjectiveC, D, Java, Pawn and Vala.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/facebook/usort&quot;&gt;usort&lt;/a&gt; - Safe, minimal import sorting for Python projects.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://vlang.io&quot;&gt;v&lt;/a&gt; - V language formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/chipsalliance/verible/raw/master/verilog/tools/formatter/README.md&quot;&gt;verible&lt;/a&gt; - The SystemVerilog formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jeremiah-c-leary/vhdl-style-guide&quot;&gt;vsg&lt;/a&gt; - Style guide enforcement for VHDL.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/pamoller/xmlformatter&quot;&gt;xmlformatter&lt;/a&gt; - xmlformatter is an Open Source Python package, which provides formatting of XML documents.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;http://xmlsoft.org/xmllint.html&quot;&gt;xmllint&lt;/a&gt; - Despite the name, xmllint can be used to format XML files as well as lint them.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;http://xmlstar.sourceforge.net/&quot;&gt;xmlstarlet&lt;/a&gt; - XMLStarlet is a command-line XML toolkit that can be used to format XML files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/lyz-code/yamlfix&quot;&gt;yamlfix&lt;/a&gt; - A configurable YAML formatter that keeps comments.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/yamlfmt&quot;&gt;yamlfmt&lt;/a&gt; - yamlfmt is an extensible command line tool or library to format yaml files.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/google/yapf&quot;&gt;yapf&lt;/a&gt; - Yet Another Python Formatter.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/schvv31n/yew-fmt&quot;&gt;yew-fmt&lt;/a&gt; - Code formatter for the Yew framework.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mikefarah/yq&quot;&gt;yq&lt;/a&gt; - YAML/JSON processor&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/ziglang/zig&quot;&gt;zigfmt&lt;/a&gt; - Reformat Zig source into canonical form.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/kristoff-it/ziggy&quot;&gt;ziggy&lt;/a&gt; - A data serialization language for expressing clear API messages, config files, etc.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/kristoff-it/ziggy&quot;&gt;ziggy_schema&lt;/a&gt; - A data serialization language for expressing clear API messages, config files, etc.&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/kkinnear/zprint&quot;&gt;zprint&lt;/a&gt; - Formatter for Clojure and EDN.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;!-- /FORMATTERS --&gt; 
&lt;/details&gt; 
&lt;h2&gt;Customizing formatters&lt;/h2&gt; 
&lt;p&gt;You can override/add to the default values of formatters&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).setup({
  formatters = {
    yamlfix = {
      -- Change where to find the command
      command = &quot;local/path/yamlfix&quot;,
      -- Adds environment args to the yamlfix formatter
      env = {
        YAMLFIX_SEQUENCE_STYLE = &quot;block_style&quot;,
      },
    },
  },
})

-- These can also be set directly
require(&quot;conform&quot;).formatters.yamlfix = {
  env = {
    YAMLFIX_SEQUENCE_STYLE = &quot;block_style&quot;,
  },
}

-- This can also be a function that returns the config,
-- which can be useful if you&#39;re doing lazy loading
require(&quot;conform&quot;).formatters.yamlfix = function(bufnr)
  return {
    command = require(&quot;conform.util&quot;).find_executable({
      &quot;local/path/yamlfix&quot;,
    }, &quot;yamlfix&quot;),
  }
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;In addition to being able to override any of the original properties on the formatter, there is another property for easily adding additional arguments to the format command&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).formatters.shfmt = {
  append_args = { &quot;-i&quot;, &quot;2&quot; },
  -- The base args are { &quot;-filename&quot;, &quot;$FILENAME&quot; } so the final args will be
  -- { &quot;-filename&quot;, &quot;$FILENAME&quot;, &quot;-i&quot;, &quot;2&quot; }
}
-- append_args can be a function, just like args
require(&quot;conform&quot;).formatters.shfmt = {
  append_args = function(self, ctx)
    return { &quot;-i&quot;, &quot;2&quot; }
  end,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you want to overwrite the entire formatter definition and &lt;em&gt;not&lt;/em&gt; merge with the default values, pass &lt;code&gt;inherit = false&lt;/code&gt;. This is also the default behavior if there is no built-in formatter with the given name, which can be used to add your own custom formatters.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).formatters.shfmt = {
  inherit = false,
  command = &quot;shfmt&quot;,
  args = { &quot;-filename&quot;, &quot;$FILENAME&quot;, &quot;-i&quot;, &quot;2&quot; },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also specify which formatter to inherit from. This can be useful if you want to define multiple variants of a single formatter with slightly different options.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).formatters.deno_fmt_markdown = {
  inherit = &quot;deno_fmt&quot;,
  append_args = { &quot;--indent-width&quot;, &quot;4&quot; },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Magic strings&lt;/h3&gt; 
&lt;p&gt;The following magic strings are available in &lt;code&gt;args&lt;/code&gt; and &lt;code&gt;range_args&lt;/code&gt;. They will be dynamically replaced at runtime with the relevant value.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;$FILENAME&lt;/code&gt; - absolute path to the file&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$DIRNAME&lt;/code&gt; - absolute path to the directory that contains the file&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$RELATIVE_FILEPATH&lt;/code&gt; - relative path to the file&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;$EXTENSION&lt;/code&gt; - the file extension, e.g. &lt;code&gt;.py&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Recipes&lt;/h2&gt; 
&lt;!-- RECIPES --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#format-command&quot;&gt;Format command&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#autoformat-with-extra-features&quot;&gt;Autoformat with extra features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#command-to-toggle-format-on-save&quot;&gt;Command to toggle format-on-save&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#run-lsp-commands-before-formatting&quot;&gt;Run LSP Commands Before Formatting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#lazy-loading-with-lazynvim&quot;&gt;Lazy loading with lazy.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#leave-visual-mode-after-range-format&quot;&gt;Leave visual mode after range format&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#run-the-first-available-formatter-followed-by-more-formatters&quot;&gt;Run the first available formatter followed by more formatters&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/recipes.md#create-a-separate-command-to-do-special-formatting-you-dont-want-to-happen-on-save&quot;&gt;Create a separate command to do special formatting you don&#39;t want to happen on save&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /RECIPES --&gt; 
&lt;h2&gt;Debugging&lt;/h2&gt; 
&lt;!-- DEBUGGING --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/debugging.md#background&quot;&gt;Background&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/debugging.md#tools&quot;&gt;Tools&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/debugging.md#testing-the-formatter&quot;&gt;Testing the formatter&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/debugging.md#testing-vimsystem&quot;&gt;Testing vim.system&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /DEBUGGING --&gt; 
&lt;h2&gt;Advanced topics&lt;/h2&gt; 
&lt;!-- ADVANCED --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#minimal-format-diffs&quot;&gt;Minimal format diffs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#range-formatting&quot;&gt;Range formatting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/advanced_topics.md#injected-language-formatting-code-blocks&quot;&gt;Injected language formatting (code blocks)&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /ADVANCED --&gt; 
&lt;h2&gt;Options&lt;/h2&gt; 
&lt;p&gt;A complete list of all configuration options&lt;/p&gt; 
&lt;!-- OPTIONS --&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;conform&quot;).setup({
  -- Map of filetype to formatters
  formatters_by_ft = {
    lua = { &quot;stylua&quot; },
    -- Conform will run multiple formatters sequentially
    go = { &quot;goimports&quot;, &quot;gofmt&quot; },
    -- You can also customize some of the format options for the filetype
    rust = { &quot;rustfmt&quot;, lsp_format = &quot;fallback&quot; },
    -- You can use a function here to determine the formatters dynamically
    python = function(bufnr)
      if require(&quot;conform&quot;).get_formatter_info(&quot;ruff_format&quot;, bufnr).available then
        return { &quot;ruff_format&quot; }
      else
        return { &quot;isort&quot;, &quot;black&quot; }
      end
    end,
    -- Use the &quot;*&quot; filetype to run formatters on all filetypes.
    [&quot;*&quot;] = { &quot;codespell&quot; },
    -- Use the &quot;_&quot; filetype to run formatters on filetypes that don&#39;t
    -- have other formatters configured.
    [&quot;_&quot;] = { &quot;trim_whitespace&quot; },
  },
  -- Set this to change the default values when calling conform.format()
  -- This will also affect the default values for format_on_save/format_after_save
  default_format_opts = {
    lsp_format = &quot;fallback&quot;,
  },
  -- If this is set, Conform will run the formatter on save.
  -- It will pass the table to conform.format().
  -- This can also be a function that returns the table.
  format_on_save = {
    -- I recommend these options. See :help conform.format for details.
    lsp_format = &quot;fallback&quot;,
    timeout_ms = 500,
  },
  -- If this is set, Conform will run the formatter asynchronously after save.
  -- It will pass the table to conform.format().
  -- This can also be a function that returns the table.
  format_after_save = {
    lsp_format = &quot;fallback&quot;,
  },
  -- Set the log level. Use `:ConformInfo` to see the location of the log file.
  log_level = vim.log.levels.ERROR,
  -- Conform will notify you when a formatter errors
  notify_on_error = true,
  -- Conform will notify you when no formatters are available for the buffer
  notify_no_formatters = true,
  -- Custom formatters and overrides for built-in formatters
  formatters = {
    my_formatter = {
      -- This can be a string or a function that returns a string.
      -- When defining a new formatter, this is the only field that is required
      command = &quot;my_cmd&quot;,
      -- A list of strings, or a function that returns a list of strings
      -- Return a single string instead of a list to run the command in a shell
      args = { &quot;--stdin-from-filename&quot;, &quot;$FILENAME&quot; },
      -- If the formatter supports range formatting, create the range arguments here
      range_args = function(self, ctx)
        return { &quot;--line-start&quot;, ctx.range.start[1], &quot;--line-end&quot;, ctx.range[&quot;end&quot;][1] }
      end,
      -- Send file contents to stdin, read new contents from stdout (default true)
      -- When false, will create a temp file (will appear in &quot;$FILENAME&quot; args). The temp
      -- file is assumed to be modified in-place by the format command.
      stdin = true,
      -- A function that calculates the directory to run the command in
      cwd = require(&quot;conform.util&quot;).root_file({ &quot;.editorconfig&quot;, &quot;package.json&quot; }),
      -- When cwd is not found, don&#39;t run the formatter (default false)
      require_cwd = true,
      -- When stdin=false, use this template to generate the temporary file that gets formatted
      tmpfile_format = &quot;.conform.$RANDOM.$FILENAME&quot;,
      -- When returns false, the formatter will not be used
      condition = function(self, ctx)
        return vim.fs.basename(ctx.filename) ~= &quot;README.md&quot;
      end,
      -- Exit codes that indicate success (default { 0 })
      exit_codes = { 0, 1 },
      -- Environment variables. This can also be a function that returns a table.
      env = {
        VAR = &quot;value&quot;,
      },
      -- Set to false to disable merging the config with the base definition.
      -- Can also be set to the name of the formatter to merge with (e.g. inherit = &quot;black&quot;)
      inherit = true,
      -- When inherit = true, add these additional arguments to the beginning of the command.
      -- This can also be a function, like args
      prepend_args = { &quot;--use-tabs&quot; },
      -- When inherit = true, add these additional arguments to the end of the command.
      -- This can also be a function, like args
      append_args = { &quot;--trailing-comma&quot; },
    },
    -- These can also be a function that returns the formatter
    other_formatter = function(bufnr)
      return {
        command = &quot;my_cmd&quot;,
      }
    end,
  },
})

-- You can set formatters_by_ft and formatters directly
require(&quot;conform&quot;).formatters_by_ft.lua = { &quot;stylua&quot; }
require(&quot;conform&quot;).formatters.my_formatter = {
  command = &quot;my_cmd&quot;,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;!-- /OPTIONS --&gt; 
&lt;h2&gt;Formatter options&lt;/h2&gt; 
&lt;!-- FORMATTER_OPTIONS --&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/formatter_options.md#injected&quot;&gt;injected&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/formatter_options.md#prettier&quot;&gt;prettier&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/formatter_options.md#rustfmt&quot;&gt;rustfmt&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/stevearc/conform.nvim/master/doc/formatter_options.md#yew-fmt&quot;&gt;yew-fmt&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- /FORMATTER_OPTIONS --&gt; 
&lt;h2&gt;API&lt;/h2&gt; 
&lt;!-- API --&gt; 
&lt;h3&gt;setup(opts)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;setup(opts)&lt;/code&gt;&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Param&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;opts&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.setupOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;formatters_by_ft&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|table&amp;lt;string, conform.FiletypeFormatter&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Map of filetype to formatters&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;format_on_save&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;If this is set, Conform will run the formatter on save. It will pass the table to conform.format(). This can also be a function that returns the table.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;default_format_opts&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.DefaultFormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;The default options to use when calling conform.format()&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;timeout_ms&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Time in milliseconds to block for formatting. Defaults to 1000. No effect if async = true.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;lsp_format&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.LspFormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Configure if and when LSP should be used for formatting. Defaults to &quot;never&quot;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;never&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;never use the LSP for formatting (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;fallback&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP formatting is used when no other formatters are available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;prefer&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;use only LSP formatting when available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;first&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP formatting is used when available and then other formatters&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;last&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;other formatters are used then LSP formatting when available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;quiet&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Don&#39;t show any notifications for warnings or failures. Defaults to false.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;stop_after_first&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Only run the first available formatter in the list. Defaults to false.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;format_after_save&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.FormatOpts|fun(bufnr: integer): nil|conform.FormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;, nil&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;log_level&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Set the log level (e.g. &lt;code&gt;vim.log.levels.DEBUG&lt;/code&gt;). Use &lt;code&gt;:ConformInfo&lt;/code&gt; to see the location of the log file.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;notify_on_error&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Conform will notify you when a formatter errors (default true).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;notify_no_formatters&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Conform will notify you when no formatters are available for the buffer (default true).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;formatters&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|table&amp;lt;string, conform.FormatterConfigOverride|fun(bufnr: integer): nil|conform.FormatterConfigOverride&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Custom formatters and overrides for built-in formatters.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;format(opts, callback)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;format(opts, callback): boolean&lt;/code&gt; &lt;br /&gt; Format a buffer&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Param&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;opts&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.FormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;timeout_ms&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Time in milliseconds to block for formatting. Defaults to 1000. No effect if async = true.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;bufnr&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Format this buffer (default 0)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;async&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;If true the method won&#39;t block. Defaults to false. If the buffer is modified before the formatter completes, the formatting will be discarded.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;dry_run&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;If true don&#39;t apply formatting changes to the buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;undojoin&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Use undojoin to merge formatting changes with previous edit (default false)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;formatters&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|string[]&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;List of formatters to run. Defaults to all formatters for the buffer filetype.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;lsp_format&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.LspFormatOpts&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Configure if and when LSP should be used for formatting. Defaults to &quot;never&quot;.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;never&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;never use the LSP for formatting (default)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;fallback&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP formatting is used when no other formatters are available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;prefer&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;use only LSP formatting when available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;first&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP formatting is used when available and then other formatters&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&quot;last&quot;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;other formatters are used then LSP formatting when available&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;stop_after_first&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Only run the first available formatter in the list. Defaults to false.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;quiet&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Don&#39;t show any notifications for warnings or failures. Defaults to false.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;range&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|conform.Range&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Range to format. Table must contain &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt; keys with {row, col} tuples using (1,0) indexing. Defaults to current selection in visual mode&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;start&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;integer[]&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;&amp;gt;end&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;integer[]&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;id&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Passed to vim.lsp.buf.format when using LSP formatting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;name&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|string&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Passed to vim.lsp.buf.format when using LSP formatting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;filter&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|fun(client: table): boolean&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Passed to vim.lsp.buf.format when using LSP formatting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&amp;gt;formatting_options&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|table&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Passed to vim.lsp.buf.format when using LSP formatting&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;callback&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|fun(err: nil|string, did_edit: nil|boolean)&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Called once formatting has completed&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Returns:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;boolean&lt;/td&gt; 
   &lt;td&gt;True if any formatters were attempted&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Synchronously format the current buffer
conform.format({ lsp_format = &quot;fallback&quot; })
-- Asynchronously format the current buffer; will not block the UI
conform.format({ async = true }, function(err, did_edit)
  -- called after formatting
end)
-- Format the current buffer with a specific formatter
conform.format({ formatters = { &quot;ruff_fix&quot; } })
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;list_formatters(bufnr)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;list_formatters(bufnr): conform.FormatterInfo[]&lt;/code&gt; &lt;br /&gt; Retrieve the available formatters for a buffer&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Param&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;bufnr&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;list_formatters_to_run(bufnr)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;list_formatters_to_run(bufnr): conform.FormatterInfo[], boolean&lt;/code&gt; &lt;br /&gt; Get the exact formatters that will be run for a buffer.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Param&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;bufnr&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Returns:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;conform.FormatterInfo[]&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;boolean&lt;/td&gt; 
   &lt;td&gt;lsp Will use LSP formatter&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;/p&gt; 
&lt;pre&gt;
This accounts for stop_after_first, lsp fallback logic, etc.
&lt;/pre&gt; 
&lt;h3&gt;list_all_formatters()&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;list_all_formatters(): conform.FormatterInfo[]&lt;/code&gt; &lt;br /&gt; List information about all filetype-configured formatters&lt;/p&gt; 
&lt;h3&gt;get_formatter_info(formatter, bufnr)&lt;/h3&gt; 
&lt;p&gt;&lt;code&gt;get_formatter_info(formatter, bufnr): conform.FormatterInfo&lt;/code&gt; &lt;br /&gt; Get information about a formatter (including availability)&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Param&lt;/th&gt; 
   &lt;th&gt;Type&lt;/th&gt; 
   &lt;th&gt;Desc&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;formatter&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;The name of the formatter&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;bufnr&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;nil|integer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- /API --&gt; 
&lt;h2&gt;FAQ&lt;/h2&gt; 
&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Instead of passing &lt;code&gt;lsp_format = &quot;...&quot;&lt;/code&gt;, could you just define a &lt;code&gt;lsp&lt;/code&gt; formatter? &lt;br /&gt; &lt;strong&gt;A:&lt;/strong&gt; No. &lt;a href=&quot;https://github.com/stevearc/conform.nvim/issues/61&quot;&gt;#61&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is it possible to define a custom formatter that runs a lua function? &lt;br /&gt; &lt;strong&gt;A:&lt;/strong&gt; Yes, but with some very strict constraints. &lt;a href=&quot;https://github.com/stevearc/conform.nvim/issues/653&quot;&gt;#653&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Can I run a command like &lt;code&gt;:EslintFixAll&lt;/code&gt; or a LSP code action as a formatter? &lt;br /&gt; &lt;strong&gt;A:&lt;/strong&gt; No. &lt;a href=&quot;https://github.com/stevearc/conform.nvim/issues/502&quot;&gt;#502&lt;/a&gt;, &lt;a href=&quot;https://github.com/stevearc/conform.nvim/issues/466&quot;&gt;#466&lt;/a&gt;, &lt;a href=&quot;https://github.com/stevearc/conform.nvim/issues/222&quot;&gt;#222&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;p&gt;Thanks to&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/mfussenegger/nvim-lint&quot;&gt;nvim-lint&lt;/a&gt; for providing inspiration for the config and API. It&#39;s an excellent plugin that balances power and simplicity.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/jose-elias-alvarez/null-ls.nvim&quot;&gt;null-ls&lt;/a&gt; for formatter configurations and being my formatter/linter of choice for a long time.&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/b81d80e277c3a2e2ce3dd54b44ba9f5c4fbe2cb391b2e36cf03b4e6d9a98a442/stevearc/conform.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>coder/claudecode.nvim</title>
      <link>https://github.com/coder/claudecode.nvim</link>
      <description>&lt;p&gt;🧩 Claude Code Neovim IDE Extension&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;claudecode.nvim&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/coder/claudecode.nvim/actions/workflows/test.yml&quot;&gt;&lt;img src=&quot;https://github.com/coder/claudecode.nvim/actions/workflows/test.yml/badge.svg?sanitize=true&quot; alt=&quot;Tests&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/badge/Neovim-0.8%2B-green&quot; alt=&quot;Neovim version&quot; /&gt; &lt;img src=&quot;https://img.shields.io/badge/Status-beta-blue&quot; alt=&quot;Status&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;The first Neovim IDE integration for Claude Code&lt;/strong&gt; — bringing Anthropic&#39;s AI coding assistant to your favorite editor with a pure Lua implementation.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;🎯 &lt;strong&gt;TL;DR:&lt;/strong&gt; When Anthropic released Claude Code with VS Code and JetBrains support, I reverse-engineered their extension and built this Neovim plugin. This plugin implements the same WebSocket-based MCP protocol, giving Neovim users the same AI-powered coding experience.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/9c310fb5-5a23-482b-bedc-e21ae457a82d&quot;&gt;https://github.com/user-attachments/assets/9c310fb5-5a23-482b-bedc-e21ae457a82d&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;What Makes This Special&lt;/h2&gt; 
&lt;p&gt;When Anthropic released Claude Code, they only supported VS Code and JetBrains. As a Neovim user, I wanted the same experience — so I reverse-engineered their extension and built this.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;🚀 &lt;strong&gt;Pure Lua, Zero Dependencies&lt;/strong&gt; — Built entirely with &lt;code&gt;vim.loop&lt;/code&gt; and Neovim built-ins&lt;/li&gt; 
 &lt;li&gt;🔌 &lt;strong&gt;100% Protocol Compatible&lt;/strong&gt; — Same WebSocket MCP implementation as official extensions&lt;/li&gt; 
 &lt;li&gt;🎓 &lt;strong&gt;Fully Documented Protocol&lt;/strong&gt; — Learn how to build your own integrations (&lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/PROTOCOL.md&quot;&gt;see PROTOCOL.md&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;⚡ &lt;strong&gt;First to Market&lt;/strong&gt; — Beat Anthropic to releasing Neovim support&lt;/li&gt; 
 &lt;li&gt;🛠️ &lt;strong&gt;Built with AI&lt;/strong&gt; — Used Claude to reverse-engineer Claude&#39;s own protocol&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  dependencies = { &quot;folke/snacks.nvim&quot; },
  config = true,
  keys = {
    { &quot;&amp;lt;leader&amp;gt;a&quot;, nil, desc = &quot;AI/Claude Code&quot; },
    { &quot;&amp;lt;leader&amp;gt;ac&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCode&amp;lt;cr&amp;gt;&quot;, desc = &quot;Toggle Claude&quot; },
    { &quot;&amp;lt;leader&amp;gt;af&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Focus Claude&quot; },
    { &quot;&amp;lt;leader&amp;gt;ar&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCode --resume&amp;lt;cr&amp;gt;&quot;, desc = &quot;Resume Claude&quot; },
    { &quot;&amp;lt;leader&amp;gt;aC&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCode --continue&amp;lt;cr&amp;gt;&quot;, desc = &quot;Continue Claude&quot; },
    { &quot;&amp;lt;leader&amp;gt;am&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeSelectModel&amp;lt;cr&amp;gt;&quot;, desc = &quot;Select Claude model&quot; },
    { &quot;&amp;lt;leader&amp;gt;ab&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeAdd %&amp;lt;cr&amp;gt;&quot;, desc = &quot;Add current buffer&quot; },
    { &quot;&amp;lt;leader&amp;gt;as&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeSend&amp;lt;cr&amp;gt;&quot;, mode = &quot;v&quot;, desc = &quot;Send to Claude&quot; },
    {
      &quot;&amp;lt;leader&amp;gt;as&quot;,
      &quot;&amp;lt;cmd&amp;gt;ClaudeCodeTreeAdd&amp;lt;cr&amp;gt;&quot;,
      desc = &quot;Add file&quot;,
      ft = { &quot;NvimTree&quot;, &quot;neo-tree&quot;, &quot;oil&quot;, &quot;minifiles&quot;, &quot;netrw&quot; },
    },
    -- Diff management
    { &quot;&amp;lt;leader&amp;gt;aa&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeDiffAccept&amp;lt;cr&amp;gt;&quot;, desc = &quot;Accept diff&quot; },
    { &quot;&amp;lt;leader&amp;gt;ad&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeDiffDeny&amp;lt;cr&amp;gt;&quot;, desc = &quot;Deny diff&quot; },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;That&#39;s it! The plugin will auto-configure everything else.&lt;/p&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &amp;gt;= 0.8.0&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;Claude Code CLI&lt;/a&gt; installed&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim&quot;&gt;folke/snacks.nvim&lt;/a&gt; for enhanced terminal support&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Local Installation Configuration&lt;/h2&gt; 
&lt;p&gt;If you&#39;ve used Claude Code&#39;s &lt;code&gt;migrate-installer&lt;/code&gt; command to move to a local installation, you&#39;ll need to configure the plugin to use the local path.&lt;/p&gt; 
&lt;h3&gt;What is a Local Installation?&lt;/h3&gt; 
&lt;p&gt;Claude Code offers a &lt;code&gt;claude migrate-installer&lt;/code&gt; command that:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Moves Claude Code from a global npm installation to &lt;code&gt;~/.claude/local/&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Avoids permission issues with system directories&lt;/li&gt; 
 &lt;li&gt;Creates shell aliases but these may not be available to Neovim&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Detecting Your Installation Type&lt;/h3&gt; 
&lt;p&gt;Check your installation type:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Check where claude command points
which claude

# Global installation shows: /usr/local/bin/claude (or similar)
# Local installation shows: alias to ~/.claude/local/claude

# Verify installation health
claude doctor
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Configuring for Local Installation&lt;/h3&gt; 
&lt;p&gt;If you have a local installation, configure the plugin with the direct path:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  dependencies = { &quot;folke/snacks.nvim&quot; },
  opts = {
    terminal_cmd = &quot;~/.claude/local/claude&quot;, -- Point to local installation
  },
  config = true,
  keys = {
    -- Your keymaps here
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;Native Binary Installation (Alpha)&lt;/summary&gt; 
 &lt;p&gt;Claude Code also offers an experimental native binary installation method currently in alpha testing. This provides a single executable with no Node.js dependencies.&lt;/p&gt; 
 &lt;h4&gt;Installation Methods&lt;/h4&gt; 
 &lt;p&gt;Install the native binary using one of these methods:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Fresh install (recommended)
curl -fsSL claude.ai/install.sh | bash

# From existing Claude Code installation
claude install
&lt;/code&gt;&lt;/pre&gt; 
 &lt;h4&gt;Platform Support&lt;/h4&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;macOS&lt;/strong&gt;: Full support for Intel and Apple Silicon&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Linux&lt;/strong&gt;: x64 and arm64 architectures&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Windows&lt;/strong&gt;: Via WSL (Windows Subsystem for Linux)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h4&gt;Benefits&lt;/h4&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Zero Dependencies&lt;/strong&gt;: Single executable file with no external requirements&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Cross-Platform&lt;/strong&gt;: Consistent experience across operating systems&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Secure Installation&lt;/strong&gt;: Includes checksum verification and automatic cleanup&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h4&gt;Configuring for Native Binary&lt;/h4&gt; 
 &lt;p&gt;The exact binary path depends on your shell integration. To find your installation:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# Check where claude command points
which claude

# Verify installation type and health
claude doctor
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Configure the plugin with the detected path:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  dependencies = { &quot;folke/snacks.nvim&quot; },
  opts = {
    terminal_cmd = &quot;/path/to/your/claude&quot;, -- Use output from &#39;which claude&#39;
  },
  config = true,
  keys = {
    -- Your keymaps here
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If Claude Code was installed globally via npm, you can use the default configuration without specifying &lt;code&gt;terminal_cmd&lt;/code&gt;.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Quick Demo&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; Launch Claude Code in a split
:ClaudeCode

&quot; Claude now sees your current file and selections in real-time!

&quot; Send visual selection as context
:&#39;&amp;lt;,&#39;&amp;gt;ClaudeCodeSend

&quot; Claude can open files, show diffs, and more
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;&lt;strong&gt;Launch Claude&lt;/strong&gt;: Run &lt;code&gt;:ClaudeCode&lt;/code&gt; to open Claude in a split terminal&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Send context&lt;/strong&gt;: 
  &lt;ul&gt; 
   &lt;li&gt;Select text in visual mode and use &lt;code&gt;&amp;lt;leader&amp;gt;as&lt;/code&gt; to send it to Claude&lt;/li&gt; 
   &lt;li&gt;In &lt;code&gt;nvim-tree&lt;/code&gt;/&lt;code&gt;neo-tree&lt;/code&gt;/&lt;code&gt;oil.nvim&lt;/code&gt;/&lt;code&gt;mini.nvim&lt;/code&gt;, press &lt;code&gt;&amp;lt;leader&amp;gt;as&lt;/code&gt; on a file to add it to Claude&#39;s context&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Let Claude work&lt;/strong&gt;: Claude can now: 
  &lt;ul&gt; 
   &lt;li&gt;See your current file and selections in real-time&lt;/li&gt; 
   &lt;li&gt;Open files in your editor&lt;/li&gt; 
   &lt;li&gt;Show diffs with proposed changes&lt;/li&gt; 
   &lt;li&gt;Access diagnostics and workspace info&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;Key Commands&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCode&lt;/code&gt; - Toggle the Claude Code terminal window&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeFocus&lt;/code&gt; - Smart focus/toggle Claude terminal&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeSelectModel&lt;/code&gt; - Select Claude model and open terminal with optional arguments&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeSend&lt;/code&gt; - Send current visual selection to Claude&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeAdd &amp;lt;file-path&amp;gt; [start-line] [end-line]&lt;/code&gt; - Add specific file to Claude context with optional line range&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeDiffAccept&lt;/code&gt; - Accept diff changes&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;:ClaudeCodeDiffDeny&lt;/code&gt; - Reject diff changes&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Working with Diffs&lt;/h2&gt; 
&lt;p&gt;When Claude proposes changes, the plugin opens a native Neovim diff view:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Accept&lt;/strong&gt;: &lt;code&gt;:w&lt;/code&gt; (save) or &lt;code&gt;&amp;lt;leader&amp;gt;aa&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reject&lt;/strong&gt;: &lt;code&gt;:q&lt;/code&gt; or &lt;code&gt;&amp;lt;leader&amp;gt;ad&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can edit Claude&#39;s suggestions before accepting them.&lt;/p&gt; 
&lt;h2&gt;How It Works&lt;/h2&gt; 
&lt;p&gt;This plugin creates a WebSocket server that Claude Code CLI connects to, implementing the same protocol as the official VS Code extension. When you launch Claude, it automatically detects Neovim and gains full access to your editor.&lt;/p&gt; 
&lt;p&gt;The protocol uses a WebSocket-based variant of MCP (Model Context Protocol) that:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;Creates a WebSocket server on a random port&lt;/li&gt; 
 &lt;li&gt;Writes a lock file to &lt;code&gt;~/.claude/ide/[port].lock&lt;/code&gt; (or &lt;code&gt;$CLAUDE_CONFIG_DIR/ide/[port].lock&lt;/code&gt; if &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; is set) with connection info&lt;/li&gt; 
 &lt;li&gt;Sets environment variables that tell Claude where to connect&lt;/li&gt; 
 &lt;li&gt;Implements MCP tools that Claude can call&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;📖 &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/STORY.md&quot;&gt;Read the full reverse-engineering story →&lt;/a&gt;&lt;/strong&gt; 🔧 &lt;strong&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/PROTOCOL.md&quot;&gt;Complete protocol documentation →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;h2&gt;Architecture&lt;/h2&gt; 
&lt;p&gt;Built with pure Lua and zero external dependencies:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;WebSocket Server&lt;/strong&gt; - RFC 6455 compliant implementation using &lt;code&gt;vim.loop&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;MCP Protocol&lt;/strong&gt; - Full JSON-RPC 2.0 message handling&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Lock File System&lt;/strong&gt; - Enables Claude CLI discovery&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Selection Tracking&lt;/strong&gt; - Real-time context updates&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Native Diff Support&lt;/strong&gt; - Seamless file comparison&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;For deep technical details, see &lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/ARCHITECTURE.md&quot;&gt;ARCHITECTURE.md&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Advanced Configuration&lt;/h2&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  dependencies = { &quot;folke/snacks.nvim&quot; },
  opts = {
    -- Server Configuration
    port_range = { min = 10000, max = 65535 },
    auto_start = true,
    log_level = &quot;info&quot;, -- &quot;trace&quot;, &quot;debug&quot;, &quot;info&quot;, &quot;warn&quot;, &quot;error&quot;
    terminal_cmd = nil, -- Custom terminal command (default: &quot;claude&quot;)
                        -- For local installations: &quot;~/.claude/local/claude&quot;
                        -- For native binary: use output from &#39;which claude&#39;

    -- Send/Focus Behavior
    -- When true, successful sends will focus the Claude terminal if already connected
    focus_after_send = false,

    -- Selection Tracking
    track_selection = true,
    visual_demotion_delay_ms = 50,

    -- Terminal Configuration
    terminal = {
      split_side = &quot;right&quot;, -- &quot;left&quot; or &quot;right&quot;
      split_width_percentage = 0.30,
      provider = &quot;auto&quot;, -- &quot;auto&quot;, &quot;snacks&quot;, &quot;native&quot;, &quot;external&quot;, &quot;none&quot;, or custom provider table
      auto_close = true,
      snacks_win_opts = {}, -- Opts to pass to `Snacks.terminal.open()` - see Floating Window section below

      -- Provider-specific options
      provider_opts = {
        -- Command for external terminal provider. Can be:
        -- 1. String with %s placeholder: &quot;alacritty -e %s&quot; (backward compatible)
        -- 2. String with two %s placeholders: &quot;alacritty --working-directory %s -e %s&quot; (cwd, command)
        -- 3. Function returning command: function(cmd, env) return &quot;alacritty -e &quot; .. cmd end
        external_terminal_cmd = nil,
      },
    },

    -- Diff Integration
    diff_opts = {
      layout = &quot;vertical&quot;, -- &quot;vertical&quot; or &quot;horizontal&quot;
      open_in_new_tab = false,
      keep_terminal_focus = false, -- If true, moves focus back to terminal after diff opens
      hide_terminal_in_new_tab = false,
      -- on_new_file_reject = &quot;keep_empty&quot;, -- &quot;keep_empty&quot; or &quot;close_window&quot;

      -- Legacy aliases (still supported):
      -- vertical_split = true,
      -- open_in_current_tab = true,
    },
  },
  keys = {
    -- Your keymaps here
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Working Directory Control&lt;/h3&gt; 
&lt;p&gt;You can fix the Claude terminal&#39;s working directory regardless of &lt;code&gt;autochdir&lt;/code&gt; and buffer-local cwd changes. Options (precedence order):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;cwd_provider(ctx)&lt;/code&gt;: function that returns a directory string. Receives &lt;code&gt;{ file, file_dir, cwd }&lt;/code&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cwd&lt;/code&gt;: static path to use as working directory.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;git_repo_cwd = true&lt;/code&gt;: resolves git root from the current file directory (or cwd if no file).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Examples:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;claudecode&quot;).setup({
  -- Top-level aliases are supported and forwarded to terminal config
  git_repo_cwd = true,
})

require(&quot;claudecode&quot;).setup({
  terminal = {
    cwd = vim.fn.expand(&quot;~/projects/my-app&quot;),
  },
})

require(&quot;claudecode&quot;).setup({
  terminal = {
    cwd_provider = function(ctx)
      -- Prefer repo root; fallback to file&#39;s directory
      local cwd = require(&quot;claudecode.cwd&quot;).git_root(ctx.file_dir or ctx.cwd) or ctx.file_dir or ctx.cwd
      return cwd
    end,
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Floating Window Configuration&lt;/h2&gt; 
&lt;p&gt;The &lt;code&gt;snacks_win_opts&lt;/code&gt; configuration allows you to create floating Claude Code terminals with custom positioning, sizing, and key bindings. Here are several practical examples:&lt;/p&gt; 
&lt;h3&gt;Basic Floating Window with Ctrl+, Toggle&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local toggle_key = &quot;&amp;lt;C-,&amp;gt;&quot;
return {
  {
    &quot;coder/claudecode.nvim&quot;,
    dependencies = { &quot;folke/snacks.nvim&quot; },
    keys = {
      { toggle_key, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Claude Code&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
    },
    opts = {
      terminal = {
        ---@module &quot;snacks&quot;
        ---@type snacks.win.Config|{}
        snacks_win_opts = {
          position = &quot;float&quot;,
          width = 0.9,
          height = 0.9,
          keys = {
            claude_hide = {
              toggle_key,
              function(self)
                self:hide()
              end,
              mode = &quot;t&quot;,
              desc = &quot;Hide&quot;,
            },
          },
        },
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;Alternative with Meta+, (Alt+,) Toggle&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local toggle_key = &quot;&amp;lt;M-,&amp;gt;&quot;  -- Alt/Meta + comma
return {
  {
    &quot;coder/claudecode.nvim&quot;,
    dependencies = { &quot;folke/snacks.nvim&quot; },
    keys = {
      { toggle_key, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Claude Code&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
    },
    opts = {
      terminal = {
        snacks_win_opts = {
          position = &quot;float&quot;,
          width = 0.8,
          height = 0.8,
          border = &quot;rounded&quot;,
          keys = {
            claude_hide = { toggle_key, function(self) self:hide() end, mode = &quot;t&quot;, desc = &quot;Hide&quot; },
          },
        },
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Centered Floating Window with Custom Styling&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;claudecode&quot;).setup({
  terminal = {
    snacks_win_opts = {
      position = &quot;float&quot;,
      width = 0.6,
      height = 0.6,
      border = &quot;double&quot;,
      backdrop = 80,
      keys = {
        claude_hide = { &quot;&amp;lt;Esc&amp;gt;&quot;, function(self) self:hide() end, mode = &quot;t&quot;, desc = &quot;Hide&quot; },
        claude_close = { &quot;q&quot;, &quot;close&quot;, mode = &quot;n&quot;, desc = &quot;Close&quot; },
      },
    },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Multiple Key Binding Options&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  dependencies = { &quot;folke/snacks.nvim&quot; },
  keys = {
    { &quot;&amp;lt;C-,&amp;gt;&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Claude Code (Ctrl+,)&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
    { &quot;&amp;lt;M-,&amp;gt;&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Claude Code (Alt+,)&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
    { &quot;&amp;lt;leader&amp;gt;tc&quot;, &quot;&amp;lt;cmd&amp;gt;ClaudeCodeFocus&amp;lt;cr&amp;gt;&quot;, desc = &quot;Toggle Claude&quot;, mode = { &quot;n&quot;, &quot;x&quot; } },
  },
  opts = {
    terminal = {
      snacks_win_opts = {
        position = &quot;float&quot;,
        width = 0.85,
        height = 0.85,
        border = &quot;rounded&quot;,
        keys = {
          -- Multiple ways to hide from terminal mode
          claude_hide_ctrl = { &quot;&amp;lt;C-,&amp;gt;&quot;, function(self) self:hide() end, mode = &quot;t&quot;, desc = &quot;Hide (Ctrl+,)&quot; },
          claude_hide_alt = { &quot;&amp;lt;M-,&amp;gt;&quot;, function(self) self:hide() end, mode = &quot;t&quot;, desc = &quot;Hide (Alt+,)&quot; },
          claude_hide_esc = { &quot;&amp;lt;C-\\&amp;gt;&amp;lt;C-n&amp;gt;&quot;, function(self) self:hide() end, mode = &quot;t&quot;, desc = &quot;Hide (Ctrl+\\)&quot; },
        },
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Window Position Variations&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Bottom floating (like a drawer)
snacks_win_opts = {
  position = &quot;bottom&quot;,
  height = 0.4,
  width = 1.0,
  border = &quot;single&quot;,
}

-- Side floating panel
snacks_win_opts = {
  position = &quot;right&quot;,
  width = 0.4,
  height = 1.0,
  border = &quot;rounded&quot;,
}

-- Small centered popup
snacks_win_opts = {
  position = &quot;float&quot;,
  width = 120,  -- Fixed width in columns
  height = 30,  -- Fixed height in rows
  border = &quot;double&quot;,
  backdrop = 90,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;For complete configuration options, see:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/terminal.md&quot;&gt;Snacks.nvim Terminal Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/win.md&quot;&gt;Snacks.nvim Window Documentation&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Terminal Providers&lt;/h2&gt; 
&lt;h3&gt;None (No-Op) Provider&lt;/h3&gt; 
&lt;p&gt;Run Claude Code without any terminal management inside Neovim. This is useful for advanced setups where you manage the CLI externally (tmux, kitty, separate terminal windows) while still using the WebSocket server and tools.&lt;/p&gt; 
&lt;p&gt;You have to take care of launching CC and connecting it to the IDE yourself. (e.g. &lt;code&gt;claude --ide&lt;/code&gt; or launching claude and then selecting the IDE using the &lt;code&gt;/ide&lt;/code&gt; command)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;coder/claudecode.nvim&quot;,
  opts = {
    terminal = {
      provider = &quot;none&quot;, -- no UI actions; server + tools remain available
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Notes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;No windows/buffers are created. &lt;code&gt;:ClaudeCode&lt;/code&gt; and related commands will not open anything.&lt;/li&gt; 
 &lt;li&gt;The WebSocket server still starts and broadcasts work as usual. Launch the Claude CLI externally when desired.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;External Terminal Provider&lt;/h3&gt; 
&lt;p&gt;Run Claude Code in a separate terminal application outside of Neovim:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Using a string template (simple)
{
  &quot;coder/claudecode.nvim&quot;,
  opts = {
    terminal = {
      provider = &quot;external&quot;,
      provider_opts = {
        external_terminal_cmd = &quot;alacritty -e %s&quot;, -- %s is replaced with claude command
        -- Or with working directory: &quot;alacritty --working-directory %s -e %s&quot; (first %s = cwd, second %s = command)
      },
    },
  },
}

-- Using a function for dynamic command generation (advanced)
{
  &quot;coder/claudecode.nvim&quot;,
  opts = {
    terminal = {
      provider = &quot;external&quot;,
      provider_opts = {
        external_terminal_cmd = function(cmd, env)
          -- You can build complex commands based on environment or conditions
          if vim.fn.has(&quot;mac&quot;) == 1 then
            return { &quot;osascript&quot;, &quot;-e&quot;, string.format(&#39;tell app &quot;Terminal&quot; to do script &quot;%s&quot;&#39;, cmd) }
          else
            return &quot;alacritty -e &quot; .. cmd
          end
        end,
      },
    },
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Custom Terminal Providers&lt;/h3&gt; 
&lt;p&gt;You can create custom terminal providers by passing a table with the required functions instead of a string provider name:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;claudecode&quot;).setup({
  terminal = {
    provider = {
      -- Required functions
      setup = function(config)
        -- Initialize your terminal provider
      end,

      open = function(cmd_string, env_table, effective_config, focus)
        -- Open terminal with command and environment
        -- focus parameter controls whether to focus terminal (defaults to true)
      end,

      close = function()
        -- Close the terminal
      end,

      simple_toggle = function(cmd_string, env_table, effective_config)
        -- Simple show/hide toggle
      end,

      focus_toggle = function(cmd_string, env_table, effective_config)
        -- Smart toggle: focus terminal if not focused, hide if focused
      end,

      get_active_bufnr = function()
        -- Return terminal buffer number or nil
        return 123 -- example
      end,

      is_available = function()
        -- Return true if provider can be used
        return true
      end,

      -- Optional functions (auto-generated if not provided)
      toggle = function(cmd_string, env_table, effective_config)
        -- Defaults to calling simple_toggle for backward compatibility
      end,

      _get_terminal_for_test = function()
        -- For testing only, defaults to return nil
        return nil
      end,
    },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Custom Provider Example&lt;/h3&gt; 
&lt;p&gt;Here&#39;s a complete example using a hypothetical &lt;code&gt;my_terminal&lt;/code&gt; plugin:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local my_terminal_provider = {
  setup = function(config)
    -- Store config for later use
    self.config = config
  end,

  open = function(cmd_string, env_table, effective_config, focus)
    if focus == nil then focus = true end

    local my_terminal = require(&quot;my_terminal&quot;)
    my_terminal.open({
      cmd = cmd_string,
      env = env_table,
      width = effective_config.split_width_percentage,
      side = effective_config.split_side,
      focus = focus,
    })
  end,

  close = function()
    require(&quot;my_terminal&quot;).close()
  end,

  simple_toggle = function(cmd_string, env_table, effective_config)
    require(&quot;my_terminal&quot;).toggle()
  end,

  focus_toggle = function(cmd_string, env_table, effective_config)
    local my_terminal = require(&quot;my_terminal&quot;)
    if my_terminal.is_focused() then
      my_terminal.hide()
    else
      my_terminal.focus()
    end
  end,

  get_active_bufnr = function()
    return require(&quot;my_terminal&quot;).get_bufnr()
  end,

  is_available = function()
    local ok, _ = pcall(require, &quot;my_terminal&quot;)
    return ok
  end,
}

require(&quot;claudecode&quot;).setup({
  terminal = {
    provider = my_terminal_provider,
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The custom provider will automatically fall back to the native provider if validation fails or &lt;code&gt;is_available()&lt;/code&gt; returns false.&lt;/p&gt; 
&lt;p&gt;Note: If your command or working directory may contain spaces or special characters, prefer returning a table of args from a function (e.g., &lt;code&gt;{ &quot;alacritty&quot;, &quot;--working-directory&quot;, cwd, &quot;-e&quot;, &quot;claude&quot;, &quot;--help&quot; }&lt;/code&gt;) to avoid shell-quoting issues.&lt;/p&gt; 
&lt;h2&gt;Community Extensions&lt;/h2&gt; 
&lt;p&gt;The following are third-party community extensions that complement claudecode.nvim. &lt;strong&gt;These extensions are not affiliated with Coder and are maintained independently by community members.&lt;/strong&gt; We do not ensure that these extensions work correctly or provide support for them.&lt;/p&gt; 
&lt;h3&gt;🔍 &lt;a href=&quot;https://github.com/pittcat/claude-fzf.nvim&quot;&gt;claude-fzf.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Integrates fzf-lua&#39;s file selection with claudecode.nvim&#39;s context management:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Batch file selection with fzf-lua multi-select&lt;/li&gt; 
 &lt;li&gt;Smart search integration with grep → Claude&lt;/li&gt; 
 &lt;li&gt;Tree-sitter based context extraction&lt;/li&gt; 
 &lt;li&gt;Support for files, buffers, git files&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;📚 &lt;a href=&quot;https://github.com/pittcat/claude-fzf-history.nvim&quot;&gt;claude-fzf-history.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Provides convenient Claude interaction history management and access for enhanced workflow continuity.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: These community extensions are developed and maintained by independent contributors. The authors and their extensions are not affiliated with Coder. Use at your own discretion and refer to their respective repositories for installation instructions, documentation, and support.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h2&gt;Auto-Save Plugin Issues&lt;/h2&gt; 
&lt;p&gt;Using auto-save plugins can cause diff windows opened by Claude to immediately accept without waiting for input. You can avoid this using a custom condition:&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Pocco81/auto-save.nvim&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;opts = {
  -- ... other options
  condition = function(buf)
    local fn = vim.fn
    local utils = require(&quot;auto-save.utils.data&quot;)

    -- First check the default conditions
    if not (fn.getbufvar(buf, &quot;&amp;amp;modifiable&quot;) == 1 and utils.not_in(fn.getbufvar(buf, &quot;&amp;amp;filetype&quot;), {})) then
      return false
    end

    -- Exclude claudecode diff buffers by buffer name patterns
    local bufname = vim.api.nvim_buf_get_name(buf)
    if bufname:match(&quot;%(proposed%)&quot;) or
       bufname:match(&quot;%(NEW FILE %- proposed%)&quot;) or
       bufname:match(&quot;%(New%)&quot;) then
      return false
    end

    -- Exclude by buffer variables (claudecode sets these)
    if vim.b[buf].claudecode_diff_tab_name or
       vim.b[buf].claudecode_diff_new_win or
       vim.b[buf].claudecode_diff_target_win then
      return false
    end

    -- Exclude by buffer type (claudecode diff buffers use &quot;acwrite&quot;)
    local buftype = fn.getbufvar(buf, &quot;&amp;amp;buftype&quot;)
    if buftype == &quot;acwrite&quot; then
      return false
    end

    return true -- Safe to auto-save
  end,
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;okuuva/auto-save.nvim&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;opts = {
  -- ... other options
  condition = function(buf)
    -- Exclude claudecode diff buffers by buffer name patterns
    local bufname = vim.api.nvim_buf_get_name(buf)
    if bufname:match(&#39;%(proposed%)&#39;) or bufname:match(&#39;%(NEW FILE %- proposed%)&#39;) or bufname:match(&#39;%(New%)&#39;) then
      return false
    end

    -- Exclude by buffer variables (claudecode sets these)
    if
      vim.b[buf].claudecode_diff_tab_name
      or vim.b[buf].claudecode_diff_new_win
      or vim.b[buf].claudecode_diff_target_win
    then
      return false
    end

    -- Exclude by buffer type (claudecode diff buffers use &quot;acwrite&quot;)
    local buftype = vim.fn.getbufvar(buf, &#39;&amp;amp;buftype&#39;)
    if buftype == &#39;acwrite&#39; then
      return false
    end

    return true -- Safe to auto-save
  end,
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Troubleshooting&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Claude not connecting?&lt;/strong&gt; Check &lt;code&gt;:ClaudeCodeStatus&lt;/code&gt; and verify lock file exists in &lt;code&gt;~/.claude/ide/&lt;/code&gt; (or &lt;code&gt;$CLAUDE_CONFIG_DIR/ide/&lt;/code&gt; if &lt;code&gt;CLAUDE_CONFIG_DIR&lt;/code&gt; is set)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Need debug logs?&lt;/strong&gt; Set &lt;code&gt;log_level = &quot;debug&quot;&lt;/code&gt; in opts&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Terminal issues?&lt;/strong&gt; Try &lt;code&gt;provider = &quot;native&quot;&lt;/code&gt; if using snacks.nvim&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Local installation not working?&lt;/strong&gt; If you used &lt;code&gt;claude migrate-installer&lt;/code&gt;, set &lt;code&gt;terminal_cmd = &quot;~/.claude/local/claude&quot;&lt;/code&gt; in your config. Check &lt;code&gt;which claude&lt;/code&gt; vs &lt;code&gt;ls ~/.claude/local/claude&lt;/code&gt; to verify your installation type.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Native binary installation not working?&lt;/strong&gt; If you used the alpha native binary installer, run &lt;code&gt;claude doctor&lt;/code&gt; to verify installation health and use &lt;code&gt;which claude&lt;/code&gt; to find the binary path. Set &lt;code&gt;terminal_cmd = &quot;/path/to/claude&quot;&lt;/code&gt; with the detected path in your config.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;See &lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/DEVELOPMENT.md&quot;&gt;DEVELOPMENT.md&lt;/a&gt; for build instructions and development guidelines. Tests can be run with &lt;code&gt;make test&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/coder/claudecode.nvim/main/LICENSE&quot;&gt;MIT&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code&quot;&gt;Claude Code CLI&lt;/a&gt; by Anthropic&lt;/li&gt; 
 &lt;li&gt;Inspired by analyzing the official VS Code extension&lt;/li&gt; 
 &lt;li&gt;Built with assistance from AI (how meta!)&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/0875ba0d7dd7128b0877d7fc91b6539f1e4d93f9dc91388bd21157cd56ddb43b/coder/claudecode.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>ibhagwan/fzf-lua</title>
      <link>https://github.com/ibhagwan/fzf-lua</link>
      <description>&lt;p&gt;Improved fzf.vim written in lua&lt;/p&gt;&lt;hr&gt;&lt;div align=&quot;center&quot;&gt; 
 &lt;h1&gt;fzf ❤️ lua&lt;/h1&gt; 
 &lt;p&gt;&lt;img src=&quot;https://img.shields.io/badge/Neovim-0.9-57A143?style=flat-square&amp;amp;logo=neovim&quot; alt=&quot;Neovim version&quot; /&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#quickstart&quot;&gt;Quickstart&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#installation&quot;&gt;Installation&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#usage&quot;&gt;Usage&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#commands&quot;&gt;Commands&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#customization&quot;&gt;Customization&lt;/a&gt; • &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/wiki&quot;&gt;Wiki&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/wiki/ibhagwan/fzf-lua/demo.gif&quot; alt=&quot;Demo&quot; /&gt;&lt;/p&gt; 
 &lt;p&gt;“because you can and you love fzf” - &lt;a href=&quot;https://github.com/junegunn&quot;&gt;@junegunn&lt;/a&gt;&lt;/p&gt; 
 &lt;p&gt;&quot;fzf changed my command life, it can change yours too, if you allow it&quot; - &lt;a href=&quot;https://github.com/ibhagwan&quot;&gt;@ibhagwan&lt;/a&gt;&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Quickstart&lt;/h2&gt; 
&lt;p&gt;To quickly test this plugin without changing your configuration run (will run in its own sandbox with the default keybinds below):&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;it&#39;s good practice to first &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/scripts/mini.sh&quot;&gt;read the script&lt;/a&gt; before running &lt;code&gt;sh -c&lt;/code&gt; directly from the web&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;sh -c &quot;$(curl -s https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/scripts/mini.sh)&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Key&lt;/th&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Key&lt;/th&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-\&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;buffers&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-p&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-g&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;grep&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-l&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;live_grep&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;C-k&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;builtin commands&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;&amp;lt;F1&amp;gt;&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;neovim help&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://luarocks.org/modules/ibhagwan/fzf-lua&quot;&gt;&lt;img src=&quot;https://img.shields.io/luarocks/v/ibhagwan/fzf-lua?logo=lua&amp;amp;color=purple&quot; alt=&quot;LuaRocks&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Using &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;ibhagwan/fzf-lua&quot;,
  -- optional for icon support
  dependencies = { &quot;nvim-tree/nvim-web-devicons&quot; },
  -- or if using mini.icons/mini.nvim
  -- dependencies = { &quot;nvim-mini/mini.icons&quot; },
  ---@module &quot;fzf-lua&quot;
  ---@type fzf-lua.Config|{}
  ---@diagnostic disable: missing-fields
  opts = {}
  ---@diagnostic enable: missing-fields
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;Show dependencies&lt;/summary&gt; 
 &lt;h3&gt;Dependencies&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/neovim/neovim/releases&quot;&gt;&lt;code&gt;neovim&lt;/code&gt;&lt;/a&gt; version &amp;gt;= &lt;code&gt;0.9&lt;/code&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/a&gt; version &amp;gt; &lt;code&gt;0.36&lt;/code&gt; or &lt;a href=&quot;https://github.com/skim-rs/skim&quot;&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/a&gt; binary installed&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-tree/nvim-web-devicons&quot;&gt;nvim-web-devicons&lt;/a&gt; or &lt;a href=&quot;https://github.com/nvim-mini/mini.icons&quot;&gt;mini.icons&lt;/a&gt; (optional)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h3&gt;Optional dependencies&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/fd&quot;&gt;fd&lt;/a&gt; - better &lt;code&gt;find&lt;/code&gt; utility&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;rg&lt;/a&gt; - better &lt;code&gt;grep&lt;/code&gt; utility&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/sharkdp/bat&quot;&gt;bat&lt;/a&gt; - syntax highlighted previews when using fzf&#39;s native previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/dandavison/delta&quot;&gt;delta&lt;/a&gt; - syntax highlighted git pager for git status previews&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jj-vcs/jj&quot;&gt;jj&lt;/a&gt; - for Jujutsu commands (&lt;code&gt;jj_files&lt;/code&gt;, &lt;code&gt;vcs_files&lt;/code&gt;)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/mfussenegger/nvim-dap&quot;&gt;nvim-dap&lt;/a&gt; - for Debug Adapter Protocol (DAP) support&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/nvim-treesitter/nvim-treesitter-context&quot;&gt;nvim-treesitter-context&lt;/a&gt; - for viewing treesitter context within the previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/MeanderingProgrammer/render-markdown.nvim&quot;&gt;render-markdown.nvim&lt;/a&gt; or &lt;a href=&quot;https://github.com/OXY2DEV/markview.nvim&quot;&gt;markview.nvim&lt;/a&gt; - for rendering markdown files in the previewer&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Below are a few optional dependencies for viewing media files (which you need to configure in &lt;code&gt;previewer.builtin.extensions&lt;/code&gt;):&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/hpjansson/chafa&quot;&gt;chafa&lt;/a&gt; - terminal image previewer (recommended, supports most file formats)&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/atanunq/viu&quot;&gt;viu&lt;/a&gt; - terminal image previewer&lt;/li&gt; 
  &lt;li&gt;&lt;a href=&quot;https://github.com/jstkdng/ueberzugpp&quot;&gt;ueberzugpp&lt;/a&gt; - terminal image previewer using X11/Wayland child windows, sixels, kitty and iterm2&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Tip&lt;/p&gt;
  &lt;p&gt;If your terminal supports the kitty graphics protocol (e.g. kitty, ghostty, etc) install @folke&#39;s &lt;a href=&quot;https://github.com/folke/snacks.nvim&quot;&gt;snacks.nvim&lt;/a&gt; to render images using the &lt;code&gt;snacks.image&lt;/code&gt; module, it will be auto-detected by fzf-lua and requires no configuration.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;h3&gt;Windows Notes&lt;/h3&gt; 
 &lt;ul&gt; 
  &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://github.com/BurntSushi/ripgrep&quot;&gt;rg&lt;/a&gt; is required for &lt;code&gt;grep&lt;/code&gt; and &lt;code&gt;tags&lt;/code&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;&lt;a href=&quot;https://git-scm.com/download/win&quot;&gt;git&lt;/a&gt; for Windows is required for &lt;code&gt;git&lt;/code&gt; (though installing &lt;code&gt;git-bash&lt;/code&gt;|&lt;code&gt;sh&lt;/code&gt; &lt;strong&gt;is not required&lt;/strong&gt;).&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Installation of dependencies (fzf, rg, fd, etc) is possible via &lt;a href=&quot;https://github.com/ScoopInstaller/Install&quot;&gt;scoop&lt;/a&gt;, &lt;a href=&quot;https://chocolatey.org/install&quot;&gt;chocolatey&lt;/a&gt; or &lt;a href=&quot;https://github.com/microsoft/winget-cli&quot;&gt;winget-cli&lt;/a&gt;&lt;/p&gt; &lt;/li&gt; 
  &lt;li&gt; &lt;p&gt;Although almost everything works on Windows exactly as the *NIX/OSX check out the &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/README-Win.md&quot;&gt;Windows README&lt;/a&gt; for known issues and limitations.&lt;/p&gt; &lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;Fzf-lua aims to be as plug and play as possible with sane defaults, you can run any fzf-lua command like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require(&quot;fzf-lua&quot;).files()
-- once loaded we can use the global object
:lua FzfLua.files()
-- or the vim command:
:FzfLua files
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or with arguments:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ cwd = &#39;~/.config&#39; })
-- or using the `FzfLua` vim command:
:FzfLua files cwd=~/.config
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Resume&lt;/h3&gt; 
&lt;p&gt;Resuming work from where you left off is as easy as:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.resume()
-- or
:FzfLua resume
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, resuming work on a specific picker:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ resume = true })
-- or
:FzfLua files resume=true
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Combining Pickers&lt;/h3&gt; 
&lt;p&gt;Fzf-Lua can combine any of the available pickers into a single display using the &lt;code&gt;combine&lt;/code&gt; method, for example file history (oldfiles) and git-files:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.combine({ pickers = &quot;oldfiles;git_files&quot; })
-- or using the `FzfLua` vim command:
:FzfLua combine pickers=oldfiles;git_files
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;The first picker options determine the options used by the combined picker, that includes formatters, previewer, path_shorten, etc. To avoid errors combine only pickers of the same entry types (i.e files)&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Global Picker&lt;/h3&gt; 
&lt;p&gt;Fzf-Lua conveniently comes with a VS-Code like picker by default (customizable) combining files, buffers and LSP symbols:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Prefix&lt;/th&gt; 
   &lt;th&gt;Behavior&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;no prefix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Files&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;$&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP Symbols (current buffer)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;#&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;LSP Symbols (workspace/project)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.global()
-- or using the `FzfLua` vim command:
:FzfLua global
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;LIST OF AVAILABLE COMMANDS BELOW&lt;/strong&gt; 👇&lt;/p&gt; 
&lt;h2&gt;Commands&lt;/h2&gt; 
&lt;details&gt; 
 &lt;summary&gt;Buffers and Files&lt;/summary&gt; 
 &lt;h3&gt;Buffers and Files&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;buffers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open buffers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;find&lt;/code&gt; or &lt;code&gt;fd&lt;/code&gt; on a path&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;oldfiles&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;opened files history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;opened buffers/files history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;quickfix_stack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;quickfix stack&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;loclist_stack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;location stack&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lines&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open buffers lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;blines&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;current buffer lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;treesitter&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;current buffer treesitter symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tabs&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;open tabs&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;args&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;argument list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;vcs_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;jj&lt;/code&gt;/&lt;code&gt;git&lt;/code&gt; files or &lt;code&gt;find&lt;/code&gt;/&lt;code&gt;fd&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Search&lt;/summary&gt; 
 &lt;h3&gt;Search&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search for a pattern with &lt;code&gt;grep&lt;/code&gt; or &lt;code&gt;rg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_last&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;run search again with the last pattern&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_cword&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search word under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_cWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search WORD under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_visual&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search visual selection&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_project&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search all project lines (fzf.vim&#39;s &lt;code&gt;:Rg&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_curbuf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search current buffer lines&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search the quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;grep_loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search the location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_curbuf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep current buffer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_quickfix&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep the quickfix list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lgrep_loclist&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep the location list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep current project&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_resume&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep continue last search&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_glob&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live_grep with &lt;code&gt;rg --glob&lt;/code&gt; support&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;live_grep_native&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;performant version of &lt;code&gt;live_grep&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Tags&lt;/summary&gt; 
 &lt;h3&gt;Tags&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search project tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;btags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search buffer tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;grep project tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_cword&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; word under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_cWORD&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; WORD under cursor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep_visual&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;tags_grep&lt;/code&gt; visual selection&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tags_live_grep&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;live grep project tags&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Git&lt;/summary&gt; 
 &lt;h3&gt;Git&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git ls-files&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_status&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git status&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_diff&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git diff {ref}&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_hunks&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git hunks {ref}&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_reflog&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;git reflog&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_commits&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git commit log (project)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_bcommits&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git commit log (buffer)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_blame&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git blame (buffer)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_branches&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git branches&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_worktrees&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git worktrees&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_tags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;git_stash&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;git stash&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Jujutsu&lt;/summary&gt; 
 &lt;h3&gt;Jujutsu&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;jj_files&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;jj file list&lt;/code&gt; tracked files&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;LSP / Diagnostics&lt;/summary&gt; 
 &lt;h3&gt;LSP/Diagnostics&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_references&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;References&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_definitions&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Definitions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_declarations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Declarations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_typedefs&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Type Definitions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_implementations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Implementations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_document_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Document Symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_live_workspace_symbols&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Symbols (live query)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_incoming_calls&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Incoming Calls&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_outgoing_calls&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Outgoing Calls&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_type_sub&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Sub Types&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_type_super&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Super Types&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_code_actions&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Code Actions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_finder&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;All LSP locations, combined view&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;diagnostics_document&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Document Diagnostics&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;diagnostics_workspace&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Workspace Diagnostics&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_document_diagnostics&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;alias to &lt;code&gt;diagnostics_document&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;lsp_workspace_diagnostics&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;alias to &lt;code&gt;diagnostics_workspace&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Misc&lt;/summary&gt; 
 &lt;h3&gt;Misc&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;resume&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;resume last command/query&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;builtin&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua builtin commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;combine&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;combine different fzf-lua pickers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;global&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;global picker for files,buffers and symbols&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;profiles&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua configuration profiles&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;helptags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;help tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;manpages&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;man pages&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;colorschemes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;color schemes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;awesome_colorschemes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Awesome Neovim color schemes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;highlights&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;highlight groups&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;neovim commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;command_history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;command history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;search_history&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;search history&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;marks&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:marks&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;jumps&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:jumps&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;changes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:changes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;registers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:registers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tagstack&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:tags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;autocmds&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:autocmd&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;nvim_options&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;neovim options&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;keymaps&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;key mappings&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;filetypes&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;filetypes&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;menus&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;menus&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;spellcheck&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;misspelled words in buffer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;spell_suggest&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;spelling suggestions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;packadd&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;:packadd 
     &lt;package&gt;&lt;/package&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;undotree&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;history undo tree&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Neovim API&lt;/summary&gt; 
 &lt;h3&gt;Neovim API&lt;/h3&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;code&gt;:help vim.ui.select&lt;/code&gt; for more info&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;register_ui_select&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;register fzf-lua as the UI interface for &lt;code&gt;vim.ui.select&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;deregister_ui_select&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;de-register fzf-lua with &lt;code&gt;vim.ui.select&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;nvim-dap&lt;/summary&gt; 
 &lt;h3&gt;nvim-dap&lt;/h3&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;Requires &lt;a href=&quot;https://github.com/mfussenegger/nvim-dap&quot;&gt;&lt;code&gt;nvim-dap&lt;/code&gt;&lt;/a&gt;&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_commands&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,run &lt;code&gt;nvim-dap&lt;/code&gt; builtin commands&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_configurations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,run debug configurations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_breakpoints&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list,delete breakpoints&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_variables&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;active session variables&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dap_frames&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;active session jump to frame&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Tmux&lt;/summary&gt; 
 &lt;h3&gt;tmux&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tmux_buffers&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list tmux paste buffers&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Zoxide&lt;/summary&gt; 
 &lt;h3&gt;zoxide&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;zoxide&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;list recent directories&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;Completion Functions&lt;/summary&gt; 
 &lt;h3&gt;Completion Functions&lt;/h3&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Command&lt;/th&gt; 
    &lt;th&gt;List&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_path&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete path under cursor (incl dirs)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_file&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete file under cursor (excl dirs)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_line&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete line (all open buffers)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;complete_bline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;complete line (current buffer only)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Refer to &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/OPTIONS.md&quot;&gt;OPTIONS&lt;/a&gt; to see detailed usage notes and a comprehensive list of yet more(!) available options.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup {
  -- MISC GLOBAL SETUP OPTIONS, SEE BELOW
  -- fzf_bin = ...,
  -- each of these options can also be passed as function that return options table
  -- e.g. winopts = function() return { ... } end
  winopts = { ...  },     -- UI Options
  keymap = { ...  },      -- Neovim keymaps / fzf binds
  actions = { ...  },     -- Fzf &quot;accept&quot; binds
  fzf_opts = { ...  },    -- Fzf CLI flags
  fzf_colors = { ...  },  -- Fzf `--color` specification
  hls = { ...  },         -- Highlights
  previewers = { ...  },  -- Previewers options
  -- SPECIFIC COMMAND/PICKER OPTIONS, SEE BELOW
  -- files = { ... },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;DEFAULT OPTIONS OF THE DIFFERENT CONFIG SECTIONS BELOW&lt;/strong&gt; 👇&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;globals&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- Use skim (or a speccific fzf binary/version) instead of fzf?
  -- fzf_bin = &#39;sk&#39;,
  -- Padding can help kitty term users with double-width icon rendering
  file_icon_padding = &#39;&#39;,
  -- Uncomment if your terminal/font does not support unicode character
  -- &#39;EN SPACE&#39; (U+2002), the below sets it to &#39;NBSP&#39; (U+00A0) instead
  -- nbsp = &#39;\xc2\xa0&#39;,
  -- Function override for opening the help window (default bound to `&amp;lt;F1&amp;gt;`)
  -- Override this function if you want to customize window config of the
  -- help window (location, width, border, etc.)
  help_open_win = vim.api.nvim_open_win,
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;winopts&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;winopts = {
    -- split = &quot;belowright new&quot;,-- open in a split instead?
            -- &quot;belowright new&quot;  : split below
            -- &quot;aboveleft new&quot;   : split above
            -- &quot;belowright vnew&quot; : split right
            -- &quot;aboveleft vnew   : split left
    -- Only valid when using a float window
    -- (i.e. when &#39;split&#39; is not defined, default)
    height           = 0.85,            -- window height
    width            = 0.80,            -- window width
    row              = 0.35,            -- window row position (0=top, 1=bottom)
    col              = 0.50,            -- window col position (0=left, 1=right)
    -- border argument passthrough to nvim_open_win()
    border           = &quot;rounded&quot;,
    -- Backdrop opacity, 0 is fully opaque, 100 is fully transparent (i.e. disabled)
    backdrop         = 60,
    -- title         = &quot;Title&quot;,
    -- title_pos     = &quot;center&quot;,        -- &#39;left&#39;, &#39;center&#39; or &#39;right&#39;
    -- title_flags   = false,           -- uncomment to disable title flags
    fullscreen       = false,           -- start fullscreen?
    -- enable treesitter highlighting for the main fzf window will only have
    -- effect where grep like results are present, i.e. &quot;file:line:col:text&quot;
    -- due to highlight color collisions will also override `fzf_colors`
    -- set `fzf_colors=false` or `fzf_colors.hl=...` to override
    treesitter       = {
      enabled    = true,
      fzf_colors = { [&quot;hl&quot;] = &quot;-1:reverse&quot;, [&quot;hl+&quot;] = &quot;-1:reverse&quot; }
    },
    preview = {
      -- default     = &#39;bat&#39;,           -- override the default previewer?
                                        -- default uses the &#39;builtin&#39; previewer
      border         = &quot;rounded&quot;,       -- preview border: accepts both `nvim_open_win`
                                        -- and fzf values (e.g. &quot;border-top&quot;, &quot;none&quot;)
                                        -- native fzf previewers (bat/cat/git/etc)
                                        -- can also be set to `fun(winopts, metadata)`
      wrap           = false,           -- preview line wrap (fzf&#39;s &#39;wrap|nowrap&#39;)
      hidden         = false,           -- start preview hidden
      vertical       = &quot;down:45%&quot;,      -- up|down:size
      horizontal     = &quot;right:60%&quot;,     -- right|left:size
      layout         = &quot;flex&quot;,          -- horizontal|vertical|flex
      flip_columns   = 100,             -- #cols to switch to horizontal on flex
      -- Only used with the builtin previewer:
      title          = true,            -- preview border title (file/buf)?
      title_pos      = &quot;center&quot;,        -- left|center|right, title alignment
      scrollbar      = &quot;float&quot;,         -- `false` or string:&#39;float|border&#39;
                                        -- float:  in-window floating border
                                        -- border: in-border &quot;block&quot; marker
      scrolloff      = -1,              -- float scrollbar offset from right
                                        -- applies only when scrollbar = &#39;float&#39;
      delay          = 20,              -- delay(ms) displaying the preview
                                        -- prevents lag on fast scrolling
      winopts = {                       -- builtin previewer window options
        number            = true,
        relativenumber    = false,
        cursorline        = true,
        cursorlineopt     = &quot;both&quot;,
        cursorcolumn      = false,
        signcolumn        = &quot;no&quot;,
        list              = false,
        foldenable        = false,
        foldmethod        = &quot;manual&quot;,
      },
    },
    on_create = function()
      -- called once upon creation of the fzf main window
      -- can be used to add custom fzf-lua mappings, e.g:
      --   vim.keymap.set(&quot;t&quot;, &quot;&amp;lt;C-j&amp;gt;&quot;, &quot;&amp;lt;Down&amp;gt;&quot;, { silent = true, buffer = true })
    end,
    -- called once _after_ the fzf interface is closed
    -- on_close = function() ... end
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;keymap&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;keymap = {
    -- Below are the default binds, setting any value in these tables will override
    -- the defaults, to inherit from the defaults change [1] from `false` to `true`
    builtin = {
      -- neovim `:tmap` mappings for the fzf win
      -- true,        -- uncomment to inherit all the below in your custom config
      [&quot;&amp;lt;M-Esc&amp;gt;&quot;]     = &quot;hide&quot;,     -- hide fzf-lua, `:FzfLua resume` to continue
      [&quot;&amp;lt;F1&amp;gt;&quot;]        = &quot;toggle-help&quot;,
      [&quot;&amp;lt;F2&amp;gt;&quot;]        = &quot;toggle-fullscreen&quot;,
      -- Only valid with the &#39;builtin&#39; previewer
      [&quot;&amp;lt;F3&amp;gt;&quot;]        = &quot;toggle-preview-wrap&quot;,
      [&quot;&amp;lt;F4&amp;gt;&quot;]        = &quot;toggle-preview&quot;,
      -- Rotate preview clockwise/counter-clockwise
      [&quot;&amp;lt;F5&amp;gt;&quot;]        = &quot;toggle-preview-cw&quot;,
      -- Preview toggle behavior default/extend
      [&quot;&amp;lt;F6&amp;gt;&quot;]        = &quot;toggle-preview-behavior&quot;,
      -- `ts-ctx` binds require `nvim-treesitter-context`
      [&quot;&amp;lt;F7&amp;gt;&quot;]        = &quot;toggle-preview-ts-ctx&quot;,
      [&quot;&amp;lt;F8&amp;gt;&quot;]        = &quot;preview-ts-ctx-dec&quot;,
      [&quot;&amp;lt;F9&amp;gt;&quot;]        = &quot;preview-ts-ctx-inc&quot;,
      [&quot;&amp;lt;S-Left&amp;gt;&quot;]    = &quot;preview-reset&quot;,
      [&quot;&amp;lt;S-down&amp;gt;&quot;]    = &quot;preview-page-down&quot;,
      [&quot;&amp;lt;S-up&amp;gt;&quot;]      = &quot;preview-page-up&quot;,
      [&quot;&amp;lt;M-S-down&amp;gt;&quot;]  = &quot;preview-down&quot;,
      [&quot;&amp;lt;M-S-up&amp;gt;&quot;]    = &quot;preview-up&quot;,
    },
    fzf = {
      -- fzf &#39;--bind=&#39; options
      -- true,        -- uncomment to inherit all the below in your custom config
      [&quot;ctrl-z&quot;]      = &quot;abort&quot;,
      [&quot;ctrl-u&quot;]      = &quot;unix-line-discard&quot;,
      [&quot;ctrl-f&quot;]      = &quot;half-page-down&quot;,
      [&quot;ctrl-b&quot;]      = &quot;half-page-up&quot;,
      [&quot;ctrl-a&quot;]      = &quot;beginning-of-line&quot;,
      [&quot;ctrl-e&quot;]      = &quot;end-of-line&quot;,
      [&quot;alt-a&quot;]       = &quot;toggle-all&quot;,
      [&quot;alt-g&quot;]       = &quot;first&quot;,
      [&quot;alt-G&quot;]       = &quot;last&quot;,
      -- Only valid with fzf previewers (bat/cat/git/etc)
      [&quot;f3&quot;]          = &quot;toggle-preview-wrap&quot;,
      [&quot;f4&quot;]          = &quot;toggle-preview&quot;,
      [&quot;shift-down&quot;]  = &quot;preview-page-down&quot;,
      [&quot;shift-up&quot;]    = &quot;preview-page-up&quot;,
    },
},
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;actions&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;actions = {
    -- Below are the default actions, setting any value in these tables will override
    -- the defaults, to inherit from the defaults change [1] from `false` to `true`
    files = {
      -- true,        -- uncomment to inherit all the below in your custom config
      -- Pickers inheriting these actions:
      --   files, git_files, git_status, grep, lsp, oldfiles, quickfix, loclist,
      --   tags, btags, args, buffers, tabs, lines, blines
      -- `file_edit_or_qf` opens a single selection or sends multiple selection to quickfix
      -- replace `enter` with `file_edit` to open all files/bufs whether single or multiple
      -- replace `enter` with `file_switch_or_edit` to attempt a switch in current tab first
      [&quot;enter&quot;]       = FzfLua.actions.file_edit_or_qf,
      [&quot;ctrl-s&quot;]      = FzfLua.actions.file_split,
      [&quot;ctrl-v&quot;]      = FzfLua.actions.file_vsplit,
      [&quot;ctrl-t&quot;]      = FzfLua.actions.file_tabedit,
      [&quot;alt-q&quot;]       = FzfLua.actions.file_sel_to_qf,
      [&quot;alt-Q&quot;]       = FzfLua.actions.file_sel_to_ll,
      [&quot;alt-i&quot;]       = FzfLua.actions.toggle_ignore,
      [&quot;alt-h&quot;]       = FzfLua.actions.toggle_hidden,
      [&quot;alt-f&quot;]       = FzfLua.actions.toggle_follow,
    },
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;fzf_opts&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;fzf_opts = {
    -- options are sent as `&amp;lt;left&amp;gt;=&amp;lt;right&amp;gt;`
    -- set to `false` to remove a flag
    -- set to `true` for a no-value flag
    -- for raw args use `fzf_args` instead
    [&quot;--ansi&quot;]           = true,
    [&quot;--info&quot;]           = &quot;inline-right&quot;, -- fzf &amp;lt; v0.42 = &quot;inline&quot;
    [&quot;--height&quot;]         = &quot;100%&quot;,
    [&quot;--layout&quot;]         = &quot;reverse&quot;,
    [&quot;--border&quot;]         = &quot;none&quot;,
    [&quot;--highlight-line&quot;] = true,           -- fzf &amp;gt;= v0.53
  }

-- Only used when fzf_bin = &quot;fzf-tmux&quot;, by default opens as a
-- popup 80% width, 80% height (note `-p` requires tmux &amp;gt; 3.2)
-- and removes the sides margin added by `fzf-tmux` (fzf#3162)
-- for more options run `fzf-tmux --help`
-- NOTE: since fzf v0.53 / sk v0.15 it is recommended to use
-- native tmux integration by adding the below to `fzf_opts`
-- fzf_opts = { [&quot;--tmux&quot;] = &quot;center,80%,60%&quot; }
fzf_tmux_opts = { [&quot;-p&quot;] = &quot;80%,80%&quot;, [&quot;--margin&quot;] = &quot;0,0&quot; },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;fzf_colors&lt;/summary&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Note&lt;/p&gt;
  &lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#fzf-colors&quot;&gt;Fzf Colors&lt;/a&gt; section for more info.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- 
  -- Set fzf&#39;s terminal colorscheme (optional)
  --
  -- Set to `true` to automatically generate an fzf&#39;s colorscheme from
  -- Neovim&#39;s current colorscheme:
  -- fzf_colors       = true,
  -- 
  -- Building a custom colorscheme, has the below specifications:
  -- If rhs is of type &quot;string&quot; rhs will be passed raw, e.g.:
  --   `[&quot;fg&quot;] = &quot;underline&quot;` will be translated to `--color fg:underline`
  -- If rhs is of type &quot;table&quot;, the following convention is used:
  --   [1] &quot;what&quot; field to extract from the hlgroup, i.e &quot;fg&quot;, &quot;bg&quot;, etc.
  --   [2] Neovim highlight group(s), can be either &quot;string&quot; or &quot;table&quot;
  --       when type is &quot;table&quot; the first existing highlight group is used
  --   [3+] any additional fields are passed raw to fzf&#39;s command line args
  -- Example of a &quot;fully loaded&quot; color option:
  --   `[&quot;fg&quot;] = { &quot;fg&quot;, { &quot;NonExistentHl&quot;, &quot;Comment&quot; }, &quot;underline&quot;, &quot;bold&quot; }`
  -- Assuming `Comment.fg=#010101` the resulting fzf command line will be:
  --   `--color fg:#010101:underline:bold`
  -- NOTE: to pass raw arguments `fzf_opts[&quot;--color&quot;]` or `fzf_args`
  -- NOTE: below is an example, not the defaults:
  fzf_colors = {
      true,   -- inherit fzf colors that aren&#39;t specified below from
              -- the auto-generated theme similar to `fzf_colors=true`
      [&quot;fg&quot;]          = { &quot;fg&quot;, &quot;CursorLine&quot; },
      [&quot;bg&quot;]          = { &quot;bg&quot;, &quot;Normal&quot; },
      [&quot;hl&quot;]          = { &quot;fg&quot;, &quot;Comment&quot; },
      [&quot;fg+&quot;]         = { &quot;fg&quot;, &quot;Normal&quot;, &quot;underline&quot; },
      [&quot;bg+&quot;]         = { &quot;bg&quot;, { &quot;CursorLine&quot;, &quot;Normal&quot; } },
      [&quot;hl+&quot;]         = { &quot;fg&quot;, &quot;Statement&quot; },
      [&quot;info&quot;]        = { &quot;fg&quot;, &quot;PreProc&quot; },
      [&quot;prompt&quot;]      = { &quot;fg&quot;, &quot;Conditional&quot; },
      [&quot;pointer&quot;]     = { &quot;fg&quot;, &quot;Exception&quot; },
      [&quot;marker&quot;]      = { &quot;fg&quot;, &quot;Keyword&quot; },
      [&quot;spinner&quot;]     = { &quot;fg&quot;, &quot;Label&quot; },
      [&quot;header&quot;]      = { &quot;fg&quot;, &quot;Comment&quot; },
      [&quot;gutter&quot;]      = &quot;-1&quot;,
  },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;hls&lt;/summary&gt; 
 &lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
  &lt;p class=&quot;markdown-alert-title&quot;&gt;
   &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
    &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
   &lt;/svg&gt;Note&lt;/p&gt;
  &lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/ibhagwan/fzf-lua/main/#highlights&quot;&gt;highlights&lt;/a&gt; section below for all available highlight groups.&lt;/p&gt; 
 &lt;/div&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;hls = {
    normal = &quot;Normal&quot;          -- highlight group for normal fg/bg
    preview_normal = &quot;Normal&quot;  -- highlight group for preview fg/bg
    ...
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;previewers&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;previewers = {
    cat = {
      cmd             = &quot;cat&quot;,
      args            = &quot;-n&quot;,
    },
    bat = {
      cmd             = &quot;bat&quot;,
      args            = &quot;--color=always --style=numbers,changes&quot;,
    },
    head = {
      cmd             = &quot;head&quot;,
      args            = nil,
    },
    git_diff = {
      -- if required, use `{file}` for argument positioning
      -- e.g. `cmd_modified = &quot;git diff --color HEAD {file} | cut -c -30&quot;`
      cmd_deleted     = &quot;git diff --color HEAD --&quot;,
      cmd_modified    = &quot;git diff --color HEAD&quot;,
      cmd_untracked   = &quot;git diff --color --no-index /dev/null&quot;,
      -- git-delta is automatically detected as pager, set `pager=false`
      -- to disable, can also be set under &#39;git.status.preview_pager&#39;
    },
    man = {
      -- NOTE: remove the `-c` flag when using man-db
      -- replace with `man -P cat %s | col -bx` on OSX
      cmd             = &quot;man -c %s | col -bx&quot;,
    },
    builtin = {
      syntax          = true,         -- preview syntax highlight?
      syntax_limit_l  = 0,            -- syntax limit (lines), 0=nolimit
      syntax_limit_b  = 1024*1024,    -- syntax limit (bytes), 0=nolimit
      limit_b         = 1024*1024*10, -- preview limit (bytes), 0=nolimit
      -- previewer treesitter options:
      -- enable specific filetypes with: `{ enabled = { &quot;lua&quot; } }
      -- exclude specific filetypes with: `{ disabled = { &quot;lua&quot; } }
      -- disable `nvim-treesitter-context` with `context = false`
      -- disable fully with: `treesitter = false` or `{ enabled = false }`
      treesitter      = {
        enabled = true,
        disabled = {},
        -- nvim-treesitter-context config options
        context = { max_lines = 1, trim_scope = &quot;inner&quot; }
      },
      -- By default, the main window dimensions are calculated as if the
      -- preview is visible, when hidden the main window will extend to
      -- full size. Set the below to &quot;extend&quot; to prevent the main window
      -- from being modified when toggling the preview.
      toggle_behavior = &quot;default&quot;,
      -- Title transform function, by default only displays the tail
      -- title_fnamemodify = function(s) return vim.fn.fnamemodify(s, &quot;:t&quot;) end,
      -- preview extensions using a custom shell command:
      -- for example, use `viu` for image previews
      -- will do nothing if `viu` isn&#39;t executable
      extensions      = {
        -- neovim terminal only supports `viu` block output
        [&quot;png&quot;]       = { &quot;viu&quot;, &quot;-b&quot; },
        -- by default the filename is added as last argument
        -- if required, use `{file}` for argument positioning
        [&quot;svg&quot;]       = { &quot;chafa&quot;, &quot;{file}&quot; },
        [&quot;jpg&quot;]       = { &quot;ueberzug&quot; },
      },
      -- if using `ueberzug` in the above extensions map
      -- set the default image scaler, possible scalers:
      --   false (none), &quot;crop&quot;, &quot;distort&quot;, &quot;fit_contain&quot;,
      --   &quot;contain&quot;, &quot;forced_cover&quot;, &quot;cover&quot;
      -- https://github.com/seebye/ueberzug
      ueberzug_scaler = &quot;cover&quot;,
      -- render_markdown.nvim integration, enabled by default for markdown
      render_markdown = { enabled = true, filetypes = { [&quot;markdown&quot;] = true } },
      -- snacks.images integration, enabled by default
      snacks_image = { enabled = true, render_inline = true },
    },
    -- Code Action previewers, default is &quot;codeaction&quot; (set via `lsp.code_actions.previewer`)
    -- &quot;codeaction_native&quot; uses fzf&#39;s native previewer, recommended when combined with git-delta
    codeaction = {
      -- options for vim.diff(): https://neovim.io/doc/user/lua.html#vim.diff()
      diff_opts = { ctxlen = 3 },
    },
    codeaction_native = {
      diff_opts = { ctxlen = 3 },
      -- git-delta is automatically detected as pager, set `pager=false`
      -- to disable, can also be set under &#39;lsp.code_actions.preview_pager&#39;
      -- recommended styling for delta
      --pager = [[delta --width=$COLUMNS --hunk-header-style=&quot;omit&quot; --file-style=&quot;omit&quot;]],
    },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;picker options&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  -- use `defaults` (table or function) if you wish to set &quot;global-picker&quot; defaults
  -- for example, using &quot;mini.icons&quot; globally and open the quickfix list at the top
  --   defaults = {
  --     file_icons   = &quot;mini&quot;,
  --     copen        = &quot;topleft copen&quot;,
  --   },
  files = {
    -- previewer      = &quot;bat&quot;,          -- uncomment to override previewer
                                        -- (name from &#39;previewers&#39; table)
                                        -- set to &#39;false&#39; to disable
    prompt            = &#39;Files❯ &#39;,
    multiprocess      = true,           -- run command in a separate process
    git_icons         = false,          -- show git icons?
    file_icons        = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,           -- colorize file|git icons
    -- path_shorten   = 1,              -- &#39;true&#39; or number, shorten path?
    -- Uncomment for custom vscode-like formatter where the filename is first:
    -- e.g. &quot;fzf-lua/previewer/fzf.lua&quot; =&amp;gt; &quot;fzf.lua previewer/fzf-lua&quot;
    -- formatter      = &quot;path.filename_first&quot;,
    -- executed command priority is &#39;cmd&#39; (if exists)
    -- otherwise auto-detect prioritizes `fd`:`rg`:`find`
    -- default options are controlled by &#39;fd|rg|find|_opts&#39;
    -- cmd            = &quot;rg --files&quot;,
    find_opts         = [[-type f \! -path &#39;*/.git/*&#39; \! -path &#39;*/.jj/*&#39;]],
    rg_opts           = [[--color=never --files -g &quot;!.git&quot; -g &quot;!.jj&quot;]],
    fd_opts           = [[--color=never --type f --type l --exclude .git --exclude .jj]],
    dir_opts          = [[/s/b/a:-d]],
    -- by default, cwd appears in the header only if {opts} contain a cwd
    -- parameter to a different folder than the current working directory
    -- uncomment if you wish to force display of the cwd as part of the
    -- query prompt string (fzf.vim style), header line or both
    -- cwd_header = true,
    cwd_prompt             = true,
    cwd_prompt_shorten_len = 32,        -- shorten prompt beyond this length
    cwd_prompt_shorten_val = 1,         -- shortened path parts length
    toggle_ignore_flag = &quot;--no-ignore&quot;, -- flag toggled in `actions.toggle_ignore`
    toggle_hidden_flag = &quot;--hidden&quot;,    -- flag toggled in `actions.toggle_hidden`
    toggle_follow_flag = &quot;-L&quot;,          -- flag toggled in `actions.toggle_follow`
    hidden             = true,          -- enable hidden files by default
    follow             = false,         -- do not follow symlinks by default
    no_ignore          = false,         -- respect &quot;.gitignore&quot;  by default
    absolute_path      = false,         -- display absolute paths
    actions = {
      -- inherits from &#39;actions.files&#39;, here we can override
      -- or set bind to &#39;false&#39; to disable a default action
      -- uncomment to override `actions.file_edit_or_qf`
      --   [&quot;enter&quot;]     = actions.file_edit,
      -- custom actions are available too
      --   [&quot;ctrl-y&quot;]    = function(selected) print(selected[1]) end,
    }
  },
  git = {
    files = {
      prompt        = &#39;GitFiles❯ &#39;,
      cmd           = &#39;git ls-files --exclude-standard&#39;,
      multiprocess  = true,           -- run command in a separate process
      git_icons     = true,           -- show git icons?
      file_icons    = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
      color_icons   = true,           -- colorize file|git icons
      -- force display the cwd header line regardless of your current working
      -- directory can also be used to hide the header when not wanted
      -- cwd_header = true
    },
    status = {
      prompt        = &#39;GitStatus❯ &#39;,
      cmd           = &quot;git -c color.status=false --no-optional-locks status --porcelain=v1 -u&quot;,
      multiprocess  = true,           -- run command in a separate process
      file_icons    = true,
      color_icons   = true,
      previewer     = &quot;git_diff&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        -- actions inherit from &#39;actions.files&#39; and merge
        [&quot;right&quot;]  = { fn = actions.git_unstage, reload = true },
        [&quot;left&quot;]   = { fn = actions.git_stage, reload = true },
        [&quot;ctrl-x&quot;] = { fn = actions.git_reset, reload = true },
      },
      -- If you wish to use a single stage|unstage toggle instead
      -- using &#39;ctrl-s&#39; modify the &#39;actions&#39; table as shown below
      -- actions = {
      --   [&quot;right&quot;]   = false,
      --   [&quot;left&quot;]    = false,
      --   [&quot;ctrl-x&quot;]  = { fn = actions.git_reset, reload = true },
      --   [&quot;ctrl-s&quot;]  = { fn = actions.git_stage_unstage, reload = true },
      -- },
    },
    diff = {
      cmd               = &quot;git --no-pager diff --name-only {ref}&quot;,
      ref               = &quot;HEAD&quot;,
      preview           = &quot;git diff {ref} {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      file_icons        = true,
      color_icons       = true,
      fzf_opts          = { [&quot;--multi&quot;] = true },
    },
    hunks = {
      cmd               = &quot;git --no-pager diff --color=always {ref}&quot;,
      ref               = &quot;HEAD&quot;,
      file_icons        = true,
      color_icons       = true,
      fzf_opts          = {
      [&quot;--multi&quot;] = true,
      [&quot;--delimiter&quot;] = &quot;:&quot;,
      [&quot;--nth&quot;] = &quot;3..&quot;,
      },
    },
    commits = {
      prompt        = &#39;Commits❯ &#39;,
      cmd           = [[git log --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot;]],
      preview       = &quot;git show --color {1}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]   = actions.git_checkout,
        -- remove `exec_silent` or set to `false` to exit after yank
        [&quot;ctrl-y&quot;]  = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    bcommits = {
      prompt        = &#39;BCommits❯ &#39;,
      -- default preview shows a git diff vs the previous commit
      -- if you prefer to see the entire commit you can use:
      --   git show --color {1} --rotate-to={file}
      --   {1}    : commit SHA (fzf field index expression)
      --   {file} : filepath placement within the commands
      cmd           = [[git log --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot; {file}]],
      preview       = &quot;git show --color {1} -- {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]   = actions.git_buf_edit,
        [&quot;ctrl-s&quot;]  = actions.git_buf_split,
        [&quot;ctrl-v&quot;]  = actions.git_buf_vsplit,
        [&quot;ctrl-t&quot;]  = actions.git_buf_tabedit,
        [&quot;ctrl-y&quot;]  = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    blame = {
      prompt        = &quot;Blame&amp;gt; &quot;,
      cmd           = [[git blame --color-lines {file}]],
      preview       = &quot;git show --color {1} -- {file}&quot;,
      -- git-delta is automatically detected as pager, uncomment to disable
      -- preview_pager = false,
      actions = {
        [&quot;enter&quot;]  = actions.git_goto_line,
        [&quot;ctrl-s&quot;] = actions.git_buf_split,
        [&quot;ctrl-v&quot;] = actions.git_buf_vsplit,
        [&quot;ctrl-t&quot;] = actions.git_buf_tabedit,
        [&quot;ctrl-y&quot;] = { fn = actions.git_yank_commit, exec_silent = true },
      },
    },
    branches = {
      prompt   = &#39;Branches❯ &#39;,
      cmd      = &quot;git branch --all --color&quot;,
      preview  = &quot;git log --graph --pretty=oneline --abbrev-commit --color {1}&quot;,
      remotes  = &quot;local&quot;, -- &quot;detach|local&quot;, switch behavior for remotes
      actions  = {
        [&quot;enter&quot;]   = actions.git_switch,
        [&quot;ctrl-x&quot;]  = { fn = actions.git_branch_del, reload = true },
        [&quot;ctrl-a&quot;]  = { fn = actions.git_branch_add, field_index = &quot;{q}&quot;, reload = true },
      },
      -- If you wish to add branch and switch immediately
      -- cmd_add  = { &quot;git&quot;, &quot;checkout&quot;, &quot;-b&quot; },
      cmd_add  = { &quot;git&quot;, &quot;branch&quot; },
      -- If you wish to delete unmerged branches add &quot;--force&quot;
      -- cmd_del  = { &quot;git&quot;, &quot;branch&quot;, &quot;--delete&quot;, &quot;--force&quot; },
      cmd_del  = { &quot;git&quot;, &quot;branch&quot;, &quot;--delete&quot; },
    },
    tags = {
      prompt   = &quot;Tags&amp;gt; &quot;,
      cmd      = [[git for-each-ref --color --sort=&quot;-taggerdate&quot; --format ]]
          .. [[&quot;%(color:yellow)%(refname:short)%(color:reset) ]]
          .. [[%(color:green)(%(taggerdate:relative))%(color:reset)]]
          .. [[ %(subject) %(color:blue)%(taggername)%(color:reset)&quot; refs/tags]],
      preview  = [[git log --graph --color --pretty=format:&quot;%C(yellow)%h%Creset ]]
          .. [[%Cgreen(%&amp;gt;&amp;lt;(12)%cr%&amp;gt;&amp;lt;|(12))%Creset %s %C(blue)&amp;lt;%an&amp;gt;%Creset&quot; {1}]],
      actions  = { [&quot;enter&quot;] = actions.git_checkout },
    },
    stash = {
      prompt          = &#39;Stash&amp;gt; &#39;,
      cmd             = &quot;git --no-pager stash list&quot;,
      preview         = &quot;git --no-pager stash show --patch --color {1}&quot;,
      actions = {
        [&quot;enter&quot;]     = actions.git_stash_apply,
        [&quot;ctrl-x&quot;]    = { fn = actions.git_stash_drop, reload = true },
      },
    },
    icons = {
      [&quot;M&quot;]           = { icon = &quot;M&quot;, color = &quot;yellow&quot; },
      [&quot;D&quot;]           = { icon = &quot;D&quot;, color = &quot;red&quot; },
      [&quot;A&quot;]           = { icon = &quot;A&quot;, color = &quot;green&quot; },
      [&quot;R&quot;]           = { icon = &quot;R&quot;, color = &quot;yellow&quot; },
      [&quot;C&quot;]           = { icon = &quot;C&quot;, color = &quot;yellow&quot; },
      [&quot;T&quot;]           = { icon = &quot;T&quot;, color = &quot;magenta&quot; },
      [&quot;?&quot;]           = { icon = &quot;?&quot;, color = &quot;magenta&quot; },
      -- override git icons?
      -- [&quot;M&quot;]        = { icon = &quot;★&quot;, color = &quot;red&quot; },
      -- [&quot;D&quot;]        = { icon = &quot;✗&quot;, color = &quot;red&quot; },
      -- [&quot;A&quot;]        = { icon = &quot;+&quot;, color = &quot;green&quot; },
    },
  },
  grep = {
    prompt            = &#39;Rg❯ &#39;,
    input_prompt      = &#39;Grep For❯ &#39;,
    multiprocess      = true,           -- run command in a separate process
    git_icons         = false,          -- show git icons?
    file_icons        = true,           -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,           -- colorize file|git icons
    -- executed command priority is &#39;cmd&#39; (if exists)
    -- otherwise auto-detect prioritizes `rg` over `grep`
    -- default options are controlled by &#39;rg|grep_opts&#39;
    -- cmd            = &quot;rg --vimgrep&quot;,
    grep_opts         = &quot;--binary-files=without-match --line-number --recursive --color=auto --perl-regexp -e&quot;,
    rg_opts           = &quot;--column --line-number --no-heading --color=always --smart-case --max-columns=4096 -e&quot;,
    hidden             = false,       -- disable hidden files by default
    follow             = false,       -- do not follow symlinks by default
    no_ignore          = false,       -- respect &quot;.gitignore&quot;  by default
    -- Uncomment to use the rg config file `$RIPGREP_CONFIG_PATH`
    -- RIPGREP_CONFIG_PATH = vim.env.RIPGREP_CONFIG_PATH
    --
    -- Set to &#39;true&#39; to always parse globs in both &#39;grep&#39; and &#39;live_grep&#39;
    -- search strings will be split using the &#39;glob_separator&#39; and translated
    -- to &#39;--iglob=&#39; arguments, requires &#39;rg&#39;
    -- can still be used when &#39;false&#39; by calling &#39;live_grep_glob&#39; directly
    rg_glob           = true,         -- default to glob parsing with `rg`
    glob_flag         = &quot;--iglob&quot;,    -- for case sensitive globs use &#39;--glob&#39;
    glob_separator    = &quot;%s%-%-&quot;,     -- query separator pattern (lua): &#39; --&#39;
    -- advanced usage: for custom argument parsing define
    -- &#39;rg_glob_fn&#39; to return a pair:
    --   first returned argument is the new search query
    --   second returned argument are additional rg flags
    -- rg_glob_fn = function(query, opts)
    --   ...
    --   return new_query, flags
    -- end,
    --
    -- Enable with narrow term width, split results to multiple lines
    -- NOTE: multiline requires fzf &amp;gt;= v0.53 and is ignored otherwise
    -- multiline      = 1,      -- Display as: PATH:LINE:COL\nTEXT
    -- multiline      = 2,      -- Display as: PATH:LINE:COL\nTEXT\n
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- this action toggles between &#39;grep&#39; and &#39;live_grep&#39;
      [&quot;ctrl-g&quot;]      = { actions.grep_lgrep }
      -- uncomment to enable &#39;.gitignore&#39; toggle for grep
      -- [&quot;ctrl-r&quot;]   = { actions.toggle_ignore }
    },
  },
  args = {
    prompt            = &#39;Args❯ &#39;,
    files_only        = true,
    -- actions inherit from &#39;actions.files&#39; and merge
    actions           = { [&quot;ctrl-x&quot;] = { fn = actions.arg_del, reload = true } },
  },
  oldfiles = {
    prompt            = &#39;History❯ &#39;,
    cwd_only          = false,
    stat_file         = true,         -- verify files exist on disk
    -- can also be a lua function, for example:
    -- stat_file = FzfLua.utils.file_is_readable,
    -- stat_file = function() return true end,
    include_current_session = false,  -- include bufs from current session
    ignore_current_buffer   = true,   -- exclude current buf from session
  },
  buffers = {
    prompt            = &#39;Buffers❯ &#39;,
    file_icons        = true,         -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,         -- colorize file|git icons
    sort_lastused     = true,         -- sort buffers() by last used
    show_unloaded     = true,         -- show unloaded buffers
    cwd_only          = false,        -- buffers for the cwd only
    cwd               = nil,          -- buffers list for a given dir
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- by supplying a table of functions we&#39;re telling
      -- fzf-lua to not close the fzf window, this way we
      -- can resume the buffers picker on the same window
      -- eliminating an otherwise unaesthetic win &quot;flash&quot;
      [&quot;ctrl-x&quot;]      = { fn = actions.buf_del, reload = true },
    }
  },
  tabs = {
    prompt            = &#39;Tabs❯ &#39;,
    tab_title         = &quot;Tab&quot;,
    tab_marker        = &quot;&amp;lt;&amp;lt;&quot;,
    locate            = true,         -- position cursor at current window
    file_icons        = true,         -- show file icons (true|&quot;devicons&quot;|&quot;mini&quot;)?
    color_icons       = true,         -- colorize file|git icons
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      [&quot;enter&quot;]       = actions.buf_switch,
      [&quot;ctrl-x&quot;]      = { fn = actions.buf_del, reload = true },
    },
    fzf_opts = {
      -- hide tabnr
      [&quot;--delimiter&quot;] = &quot;[\\):]&quot;,
      [&quot;--with-nth&quot;]  = &#39;2..&#39;,
    },
  },
  -- `blines` has the same defaults as `lines` aside from prompt and `show_bufname`
  lines = {
    prompt            = &#39;Lines❯ &#39;,
    file_icons        = true,
    show_bufname      = true,         -- display buffer name
    show_unloaded     = true,         -- show unloaded buffers
    show_unlisted     = false,        -- exclude &#39;help&#39; buffers
    no_term_buffers   = true,         -- exclude &#39;term&#39; buffers
    sort_lastused     = true,         -- sort by most recent
    winopts  = { treesitter = true }, -- enable TS highlights
    fzf_opts = {
      -- do not include bufnr in fuzzy matching
      -- tiebreak by line no.
      [&quot;--multi&quot;]     = true,
      [&quot;--delimiter&quot;] = &quot;[\t]&quot;,
      [&quot;--tabstop&quot;]   = &quot;1&quot;,
      [&quot;--tiebreak&quot;]  = &quot;index&quot;,
      [&quot;--with-nth&quot;]  = &quot;2..&quot;,
      [&quot;--nth&quot;]       = &quot;4..&quot;,
    },
  },
  tags = {
    prompt                = &#39;Tags❯ &#39;,
    ctags_file            = nil,      -- auto-detect from tags-option
    multiprocess          = true,
    file_icons            = true,
    color_icons           = true,
    -- &#39;tags_live_grep&#39; options, `rg` prioritizes over `grep`
    rg_opts               = &quot;--no-heading --color=always --smart-case&quot;,
    grep_opts             = &quot;--color=auto --perl-regexp&quot;,
    fzf_opts              = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    actions = {
      -- actions inherit from &#39;actions.files&#39; and merge
      -- this action toggles between &#39;grep&#39; and &#39;live_grep&#39;
      [&quot;ctrl-g&quot;]          = { actions.grep_lgrep }
    },
  },
  btags = {
    prompt                = &#39;BTags❯ &#39;,
    ctags_file            = nil,      -- auto-detect from tags-option
    ctags_autogen         = true,     -- dynamically generate ctags each call
    multiprocess          = true,
    file_icons            = false,
    rg_opts               = &quot;--color=never --no-heading&quot;,
    grep_opts             = &quot;--color=never --perl-regexp&quot;,
    fzf_opts              = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    -- actions inherit from &#39;actions.files&#39;
  },
  colorschemes = {
    prompt            = &#39;Colorschemes❯ &#39;,
    live_preview      = true,       -- apply the colorscheme on preview?
    actions           = { [&quot;enter&quot;] = actions.colorscheme },
    winopts           = { height = 0.55, width = 0.30, },
    -- uncomment to ignore colorschemes names (lua patterns)
    -- ignore_patterns   = { &quot;^delek$&quot;, &quot;^blue$&quot; },
  },
  awesome_colorschemes = {
    prompt            = &#39;Colorschemes❯ &#39;,
    live_preview      = true,       -- apply the colorscheme on preview?
    max_threads       = 5,          -- max download/update threads
    winopts           = { row = 0, col = 0.99, width = 0.50 },
    fzf_opts          = {
      [&quot;--multi&quot;]     = true,
      [&quot;--delimiter&quot;] = &quot;[:]&quot;,
      [&quot;--with-nth&quot;]  = &quot;3..&quot;,
      [&quot;--tiebreak&quot;]  = &quot;index&quot;,
    },
    actions           = {
      [&quot;enter&quot;]   = actions.colorscheme,
      [&quot;ctrl-g&quot;]  = { fn = actions.toggle_bg, exec_silent = true },
      [&quot;ctrl-r&quot;]  = { fn = actions.cs_update, reload = true },
      [&quot;ctrl-x&quot;]  = { fn = actions.cs_delete, reload = true },
    },
  },
  keymaps = {
    prompt            = &quot;Keymaps&amp;gt; &quot;,
    winopts           = { preview = { layout = &quot;vertical&quot; } },
    fzf_opts          = { [&quot;--tiebreak&quot;] = &quot;index&quot;, },
    -- by default, we ignore &amp;lt;Plug&amp;gt; and &amp;lt;SNR&amp;gt; mappings
    -- set `ignore_patterns = false` to disable filtering
    ignore_patterns   = { &quot;^&amp;lt;SNR&amp;gt;&quot;, &quot;^&amp;lt;Plug&amp;gt;&quot; },
    show_desc         = true,
    show_details      = true,
    actions           = {
      [&quot;enter&quot;]       = actions.keymap_apply,
      [&quot;ctrl-s&quot;]      = actions.keymap_split,
      [&quot;ctrl-v&quot;]      = actions.keymap_vsplit,
      [&quot;ctrl-t&quot;]      = actions.keymap_tabedit,
    },
  },
  nvim_options = {
    prompt            = &quot;Nvim Options&amp;gt; &quot;,
    separator         = &quot;│&quot;,  -- separator between option name and value
    color_values      = true, -- colorize boolean values
    actions           = {
      [&quot;enter&quot;]     = { fn = actions.nvim_opt_edit_local, reload = true },
      [&quot;alt-enter&quot;] = { fn = actions.nvim_opt_edit_global, reload = true },
    },
  },
  quickfix = {
    file_icons        = true,
    valid_only        = false, -- select among only the valid quickfix entries
  },
  quickfix_stack = {
    prompt = &quot;Quickfix Stack&amp;gt; &quot;,
    marker = &quot;&amp;gt;&quot;,                   -- current list marker
  },
  lsp = {
    prompt_postfix    = &#39;❯ &#39;,       -- will be appended to the LSP label
                                    -- to override use &#39;prompt&#39; instead
    cwd_only          = false,      -- LSP/diagnostics for cwd only?
    async_or_timeout  = 5000,       -- timeout(ms) or &#39;true&#39; for async calls
    file_icons        = true,
    git_icons         = false,
    jump1             = true,       -- skip the UI when result is a single entry
    jump1_action      = FzfLua.actions.file_edit
    -- The equivalent of using `includeDeclaration` in lsp buf calls, e.g:
    -- :lua vim.lsp.buf.references({includeDeclaration = false})
    includeDeclaration = true,      -- include current declaration in LSP context
    -- settings for &#39;lsp_{document|workspace|lsp_live_workspace}_symbols&#39;
    symbols = {
        -- lsp_query      = &quot;foo&quot;       -- query passed to the LSP directly
        -- query          = &quot;bar&quot;       -- query passed to fzf prompt for fuzzy matching
        locate            = false,      -- attempt to position cursor at current symbol
        async_or_timeout  = true,       -- symbols are async by default
        symbol_style      = 1,          -- style for document/workspace symbols
                                        -- false: disable,    1: icon+kind
                                        --     2: icon only,  3: kind only
                                        -- NOTE: icons are extracted from
                                        -- vim.lsp.protocol.CompletionItemKind
        -- icons for symbol kind
        -- see https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#symbolKind
        -- see https://github.com/neovim/neovim/blob/829d92eca3d72a701adc6e6aa17ccd9fe2082479/runtime/lua/vim/lsp/protocol.lua#L117
        symbol_icons     = {
          File          = &quot;󰈙&quot;,
          Module        = &quot;&quot;,
          Namespace     = &quot;󰦮&quot;,
          Package       = &quot;&quot;,
          Class         = &quot;󰆧&quot;,
          Method        = &quot;󰊕&quot;,
          Property      = &quot;&quot;,
          Field         = &quot;&quot;,
          Constructor   = &quot;&quot;,
          Enum          = &quot;&quot;,
          Interface     = &quot;&quot;,
          Function      = &quot;󰊕&quot;,
          Variable      = &quot;󰀫&quot;,
          Constant      = &quot;󰏿&quot;,
          String        = &quot;&quot;,
          Number        = &quot;󰎠&quot;,
          Boolean       = &quot;󰨙&quot;,
          Array         = &quot;󱡠&quot;,
          Object        = &quot;&quot;,
          Key           = &quot;󰌋&quot;,
          Null          = &quot;󰟢&quot;,
          EnumMember    = &quot;&quot;,
          Struct        = &quot;󰆼&quot;,
          Event         = &quot;&quot;,
          Operator      = &quot;󰆕&quot;,
          TypeParameter = &quot;󰗴&quot;,
        },
        -- colorize using Treesitter &#39;@&#39; highlight groups (&quot;@function&quot;, etc).
        -- or &#39;false&#39; to disable highlighting
        symbol_hl         = function(s) return &quot;@&quot; .. s:lower() end,
        -- additional symbol formatting, works with or without style
        symbol_fmt        = function(s, opts) return &quot;[&quot; .. s .. &quot;]&quot; end,
        -- prefix child symbols. set to any string or `false` to disable
        child_prefix      = true,
        -- prepend parent to symbol, set to any string or `false` to disable
        -- parent_postfix    = &quot;.&quot;,
        fzf_opts          = { [&quot;--tiebreak&quot;] = &quot;begin&quot; },
    },
    code_actions = {
        prompt            = &#39;Code Actions&amp;gt; &#39;,
        async_or_timeout  = 5000,
        -- when git-delta is installed use &quot;codeaction_native&quot; for beautiful diffs
        -- try it out with `:FzfLua lsp_code_actions previewer=codeaction_native`
        -- scroll up to `previewers.codeaction{_native}` for more previewer options
        previewer        = &quot;codeaction&quot;,
    },
    finder = {
        prompt      = &quot;LSP Finder&amp;gt; &quot;,
        file_icons  = true,
        color_icons = true,
        async       = true,         -- async by default
        silent      = true,         -- suppress &quot;not found&quot;
        separator   = &quot;| &quot;,         -- separator after provider prefix, `false` to disable
        includeDeclaration = true,  -- include current declaration in LSP context
        -- by default display all LSP locations
        -- to customize, duplicate table and delete unwanted providers
        providers   = {
            { &quot;references&quot;,      prefix = FzfLua.utils.ansi_codes.blue(&quot;ref &quot;) },
            { &quot;definitions&quot;,     prefix = FzfLua.utils.ansi_codes.green(&quot;def &quot;) },
            { &quot;declarations&quot;,    prefix = FzfLua.utils.ansi_codes.magenta(&quot;decl&quot;) },
            { &quot;typedefs&quot;,        prefix = FzfLua.utils.ansi_codes.red(&quot;tdef&quot;) },
            { &quot;implementations&quot;, prefix = FzfLua.utils.ansi_codes.green(&quot;impl&quot;) },
            { &quot;incoming_calls&quot;,  prefix = FzfLua.utils.ansi_codes.cyan(&quot;in  &quot;) },
            { &quot;outgoing_calls&quot;,  prefix = FzfLua.utils.ansi_codes.yellow(&quot;out &quot;) },
            { &quot;type_sub&quot;,        prefix = FzfLua.utils.utils.ansi_codes.cyan(&quot;sub &quot;) },
            { &quot;type_super&quot;,      prefix = FzfLua.utils.utils.ansi_codes.yellow(&quot;supr&quot;) },
        },
    }
  },
  diagnostics ={
    prompt            = &#39;Diagnostics❯ &#39;,
    cwd_only          = false,
    file_icons        = false,
    git_icons         = false,
    color_headings    = true,   -- use diag highlights to color source &amp;amp; filepath
    diag_icons        = true,   -- display icons from diag sign definitions
    diag_source       = true,   -- display diag source (e.g. [pycodestyle])
    diag_code         = true,   -- display diag code (e.g. [undefined])
    icon_padding      = &#39;&#39;,     -- add padding for wide diagnostics signs
    multiline         = 2,      -- split heading and diag to separate lines
    -- severity_only:   keep any matching exact severity
    -- severity_limit:  keep any equal or more severe (lower)
    -- severity_bound:  keep any equal or less severe (higher)
  },
  marks = {
    marks = &quot;&quot;, -- filter vim marks with a lua pattern
    -- for example if you want to only show user defined marks
    -- you would set this option as %a this would match characters from [A-Za-z]
    -- or if you want to show only numbers you would set the pattern to %d (0-9).
  },
  complete_path = {
    cmd          = nil, -- default: auto detect fd|rg|find
    complete     = { [&quot;enter&quot;] = actions.complete },
    word_pattern = nil, -- default: &quot;[^%s\&quot;&#39;]*&quot;
  },
  complete_file = {
    cmd          = nil, -- default: auto detect rg|fd|find
    file_icons   = true,
    color_icons  = true,
    word_pattern = nil,
    -- actions inherit from &#39;actions.files&#39; and merge
    actions      = { [&quot;enter&quot;] = actions.complete },
    -- previewer hidden by default
    winopts      = { preview = { hidden = true } },
  },
  zoxide = {
    cmd          = &quot;zoxide query --list --score&quot;,
    scope        = &quot;global&quot;, -- cd action scope &quot;local|win|tab&quot;
    git_root     = false,    -- auto-detect git root
    formatter    = &quot;path.dirname_first&quot;,
    fzf_opts     = {
      [&quot;--no-multi&quot;]  = true,
      [&quot;--delimiter&quot;] = &quot;[\t]&quot;,
      [&quot;--tabstop&quot;]   = &quot;4&quot;,
      [&quot;--tiebreak&quot;]  = &quot;end,index&quot;, -- prefer dirs ending with search term
      [&quot;--nth&quot;]       = &quot;2..&quot;,       -- exclude score from fuzzy matching
    },
    actions      = { enter = actions.cd }
  },
  -- uncomment to use fzf native previewers
  -- (instead of using a neovim floating window)
  -- manpages = { previewer = &quot;man_native&quot; },
  -- helptags = { previewer = &quot;help_native&quot; },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;To experiment with different options without modifying the global config, options can be sent as inline parameters to the function calls. Expand below to see examples of inline customization and Refer to &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/raw/main/OPTIONS.md&quot;&gt;OPTIONS&lt;/a&gt; for yet more examples.&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR EXAMPLES OF INLINE CUSTOMIZATION&lt;/summary&gt; 
 &lt;h4&gt;Inline Customization&lt;/h4&gt; 
 &lt;p&gt;Different &lt;code&gt;fzf&lt;/code&gt; layout:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ fzf_opts = {[&#39;--layout&#39;] = &#39;reverse-list&#39;} })
-- Or via the vimL command
:FzfLua files fzf_opts.--layout=reverse-list
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Using &lt;code&gt;files&lt;/code&gt; with a different command and working directory:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ prompt=&quot;LS&amp;gt; &quot;, cmd = &quot;ls&quot;, cwd=&quot;~/.config&quot; })
-- Or via the vimL command
:FzfLua files prompt=&quot;LS&amp;gt;\ &quot; cmd=ls cwd=~/.config
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Using &lt;code&gt;live_grep&lt;/code&gt; with &lt;code&gt;git grep&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.live_grep({ cmd = &quot;git grep --line-number --column --color=always&quot; })
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;&lt;code&gt;spell_suggest&lt;/code&gt; with non-default window size relative to cursor:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.spell_suggest({ winopts = { height=0.33, width=0.33, relative=&quot;cursor&quot; } })
-- Or via the vimL command
:FzfLua spell_suggest winopts={height=0.33,width=0.33,relative=cursor}
:FzfLua spell_suggest winopts={height=0.33,width=0.33} winopts.relative=cursor
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Profiles&lt;/h3&gt; 
&lt;p&gt;Conveniently, fzf-lua comes with a set of preconfigured profiles if you do not want to tinker with customization.&lt;/p&gt; 
&lt;p&gt;Use &lt;code&gt;:FzfLua profiles&lt;/code&gt; to experiment with the different profiles, once you&#39;ve found what you like and wish to make the profile persist, send a &lt;code&gt;string&lt;/code&gt; argument at the first index of the table sent to the &lt;code&gt;setup&lt;/code&gt; function:&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;&lt;code&gt;setup&lt;/code&gt; can be called multiple times for profile &quot;live&quot; switching, see &lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/tree/main/lua/fzf-lua/profiles&quot;&gt;profiles&lt;/a&gt; page for more info.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup({&#39;fzf-native&#39;})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also start with a profile as &quot;baseline&quot; and customize it, for example, telescope defaults with &lt;code&gt;bat&lt;/code&gt; previewer:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require&quot;fzf-lua&quot;.setup({&quot;telescope&quot;,winopts={preview={default=&quot;bat&quot;}}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Combining of profiles is also available by sending table instead of string as the first argument:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua require&quot;fzf-lua&quot;.setup({{&quot;telescope&quot;,&quot;fzf-native&quot;},winopts={fullscreen=true}})
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;The default profile is a combination of border-fused+hide profiles, without the &quot;hide&quot; profile pressing esc terminates the fzf process which makes for an imperfect resume limited to resuming only the picker/query (without cursor position, selection, etc), to restore the default esc behavior combine any existing profile with &quot;hide&quot; by using a table in &lt;code&gt;opts[1]&lt;/code&gt;:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup({
  { &quot;fzf-native&quot;, &quot;hide&quot; },
  -- your other settings here
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;h4&gt;Coming from fzf.vim?&lt;/h4&gt; 
&lt;p&gt;Easy! just use the &lt;code&gt;fzf-vim&lt;/code&gt; profile:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup({&#39;fzf-vim&#39;})
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;Using the &lt;code&gt;fzf-vim&lt;/code&gt; profile will automatically create &lt;code&gt;fzf.vim&lt;/code&gt;&#39;s user commands (i.e. &lt;code&gt;:Files&lt;/code&gt;, &lt;code&gt;:Rg&lt;/code&gt;), if you wish to use a different profile you can create the same user commands by running &lt;code&gt;:FzfLua setup_fzfvim_cmds&lt;/code&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK TO SEE THE AVAILABLE PROFILES&lt;/summary&gt; 
 &lt;h4&gt;Available Profiles&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Profile&lt;/th&gt; 
    &lt;th&gt;Details&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, uses neovim &quot;builtin&quot; buffer previewer and devicons (if available)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default-title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, using title for picker info (default on neovim &amp;gt;= 0.9)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;default-prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf-lua defaults, using prompt for picker info (default on neovim &amp;lt; 0.9)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-native&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;utilizes fzf&#39;s native previewing ability in the terminal where possible using &lt;code&gt;bat&lt;/code&gt; for previews&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-tmux&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;similar to &lt;code&gt;fzf-native&lt;/code&gt; and opens in a tmux popup (requires tmux &amp;gt; 3.2)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;fzf-vim&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;closest to &lt;code&gt;fzf.vim&lt;/code&gt;&#39;s defaults (+icons), also sets up user commands (&lt;code&gt;:Files&lt;/code&gt;, &lt;code&gt;:Rg&lt;/code&gt;, etc)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;max-perf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;similar to &lt;code&gt;fzf-native&lt;/code&gt; and disables icons globally for max performance&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;telescope&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;closest match to telescope defaults in look and feel and keybinds&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;uses &lt;a href=&quot;https://github.com/skim-rs/skim&quot;&gt;&lt;code&gt;skim&lt;/code&gt;&lt;/a&gt; as an fzf alternative, (requires the &lt;code&gt;sk&lt;/code&gt; binary)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;borderless&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;borderless and minimalistic seamless look &amp;amp; feel&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;borderless-full&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;borderless with description in window title (instead of prompt)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;border-fused&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;single border around both fzf and the previewer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;ivy&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;UI at bottom, similar to telescope&#39;s ivy layout&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hide&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;send fzf process to background instead of termination&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h3&gt;Extensibility&lt;/h3&gt; 
&lt;p&gt;Fzf-lua can be easily extended and customised for your own needs: have a look at a full list of examples and plugins browsing the 💡&lt;a href=&quot;https://github.com/ibhagwan/fzf-lua/wiki/Advanced&quot;&gt;Wiki&lt;/a&gt; 💡&lt;/p&gt; 
&lt;p&gt;Have ideas for new pickers, plugins or extensions? Add it to the wiki, it&#39;s open edit!&lt;/p&gt; 
&lt;h3&gt;Insert-mode completion&lt;/h3&gt; 
&lt;p&gt;Fzf-lua comes with a set of completion functions for paths/files and lines from open buffers as well as custom completion, for example, set path/completion using &lt;code&gt;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set({ &quot;n&quot;, &quot;v&quot;, &quot;i&quot; }, &quot;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&quot;,
  function() FzfLua.complete_path() end,
  { silent = true, desc = &quot;Fuzzy complete path&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Or with a custom command and preview:&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;only &lt;code&gt;complete_file&lt;/code&gt; supports a previewer as &lt;code&gt;complete_path&lt;/code&gt; mixes both files and directories.&lt;/p&gt; 
&lt;/div&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.keymap.set({ &quot;i&quot; }, &quot;&amp;lt;C-x&amp;gt;&amp;lt;C-f&amp;gt;&quot;,
  function()
    FzfLua.complete_file({
      cmd = &quot;rg --files&quot;,
      winopts = { preview = { hidden = true } }
    })
  end, { silent = true, desc = &quot;Fuzzy complete file&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR CUSTOM COMPLETION DETAILS&lt;/summary&gt; 
 &lt;h4&gt;Custom Completion&lt;/h4&gt; 
 &lt;p&gt;Every fzf-lua function can be easily converted to a completion function by sending &lt;code&gt;complete = true&lt;/code&gt; in the options:&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;By default fzf-lua will insert the entry at the cursor location as if you used &lt;code&gt;p&lt;/code&gt; to paste the selected entry.&lt;/p&gt; 
 &lt;/blockquote&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;FzfLua.fzf_exec({&quot;foo&quot;, &quot;bar&quot;}, {complete = true})
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Custom completion is possible using a custom completion callback, the example below will replace the text from the current cursor column with the selected entry:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;FzfLua.fzf_exec({&quot;foo&quot;, &quot;bar&quot;}, {
  -- @param selected: the selected entry or entries
  -- @param opts: fzf-lua caller/provider options
  -- @param line: originating buffer completed line
  -- @param col: originating cursor column location
  -- @return newline: will replace the current buffer line
  -- @return newcol?: optional, sets the new cursor column
  complete = function(selected, opts, line, col)
    local newline = line:sub(1, col) .. selected[1]
    -- set cursor to EOL, since `nvim_win_set_cursor`
    -- is 0-based we have to lower the col value by 1
    return newline, #newline - 1
  end
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Highlights&lt;/h3&gt; 
&lt;p&gt;Highlight groups can be easily customized either via the lua API:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua vim.api.nvim_set_hl(0, &quot;FzfLuaBorder&quot;, { link = &quot;FloatBorder&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or via &lt;code&gt;setup&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup {
  hls = { border = &quot;FloatBorder&quot; }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;or temporarily in the call:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua FzfLua.files({ hls={preview_title=&quot;IncSearch&quot;} })
-- vimL equivalent
:FzfLua files hls.preview_title=IncSearch
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK TO SEE AVAILABLE HIGHLIGHT GROUPS&lt;/summary&gt; 
 &lt;h4&gt;Highlight groups&lt;/h4&gt; 
 &lt;p&gt;FzfLua conveniently creates the below highlights, each hlgroup can be temporarily overridden by its corresponding &lt;code&gt;winopts&lt;/code&gt; option:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Highlight Group&lt;/th&gt; 
    &lt;th&gt;Default&lt;/th&gt; 
    &lt;th&gt;Override Via&lt;/th&gt; 
    &lt;th&gt;Notes&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;Normal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;Normal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win title&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTitleFlags&lt;/td&gt; 
    &lt;td&gt;CursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.title_flags&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Main win title flags&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBackdrop&lt;/td&gt; 
    &lt;td&gt;*bg=Black&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.backdrop&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Backdrop color&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPreviewTitle&lt;/td&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.preview_title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview title&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursor&lt;/td&gt; 
    &lt;td&gt;Cursor&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursor&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;Cursor&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursorLine&lt;/td&gt; 
    &lt;td&gt;CursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursorline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;Cursorline&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCursorLineNr&lt;/td&gt; 
    &lt;td&gt;CursorLineNr&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cursorlinenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;CursorLineNr&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaSearch&lt;/td&gt; 
    &lt;td&gt;IncSearch&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.search&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview search matches&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollBorderEmpty&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollborder_e&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;border&lt;/code&gt; scroll empty&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollBorderFull&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollborder_f&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;border&lt;/code&gt; scroll full&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollFloatEmpty&lt;/td&gt; 
    &lt;td&gt;PmenuSbar&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollfloat_e&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;float&lt;/code&gt; scroll empty&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaScrollFloatFull&lt;/td&gt; 
    &lt;td&gt;PmenuThumb&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.scrollfloat_f&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Builtin preview &lt;code&gt;float&lt;/code&gt; scroll full&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHelpNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.help_normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Help win &lt;code&gt;fg/bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHelpBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.help_border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Help win border&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHeaderBind&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.header_bind&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Header keybind&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaHeaderText&lt;/td&gt; 
    &lt;td&gt;*Brown1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.header_text&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Header text&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPathColNr&lt;/td&gt; 
    &lt;td&gt;*CadetBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.path_colnr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path col nr (&lt;code&gt;qf,lsp,diag&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaPathLineNr&lt;/td&gt; 
    &lt;td&gt;*LightGreen&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.path_linenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path line nr (&lt;code&gt;qf,lsp,diag&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufName&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_name&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer name (&lt;code&gt;lines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufId&lt;/td&gt; 
    &lt;td&gt;TabLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_id&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer ID (&lt;code&gt;lines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufNr&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_nr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer number (&lt;code&gt;buffers,tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufLineNr&lt;/td&gt; 
    &lt;td&gt;LineNr&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_linenr&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line nr (&lt;code&gt;lines,blines&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufFlagCur&lt;/td&gt; 
    &lt;td&gt;*Brown1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_flag_cur&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line (&lt;code&gt;buffers&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaBufFlagAlt&lt;/td&gt; 
    &lt;td&gt;*CadetBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.buf_flag_alt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer line (&lt;code&gt;buffers&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTabTitle&lt;/td&gt; 
    &lt;td&gt;*LightSkyBlue1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.tab_title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Tab title (&lt;code&gt;tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaTabMarker&lt;/td&gt; 
    &lt;td&gt;*BlanchedAlmond&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.tab_marker&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Tab marker (&lt;code&gt;tabs&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaDirIcon&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.dir_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Paths directory icon&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaDirPart&lt;/td&gt; 
    &lt;td&gt;Comment&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.dir_part&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path formatters directory hl group&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFilePart&lt;/td&gt; 
    &lt;td&gt;@none&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.file_part&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Path formatters file hl group&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaLivePrompt&lt;/td&gt; 
    &lt;td&gt;*PaleVioletRed1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.live_prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&quot;live&quot; queries prompt text&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaLiveSym&lt;/td&gt; 
    &lt;td&gt;*PaleVioletRed1&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.live_sym&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;LSP live symbols query match&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdEx&lt;/td&gt; 
    &lt;td&gt;Statement&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_ex&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Ex commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdBuf&lt;/td&gt; 
    &lt;td&gt;Added&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_buf&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Buffer commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaCmdGlobal&lt;/td&gt; 
    &lt;td&gt;Directory&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;hls.cmd_global&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Global commands in &lt;code&gt;commands&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfNormal&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.normal&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;fg|bg&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfCursorLine&lt;/td&gt; 
    &lt;td&gt;FzfLuaCursorLine&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.cursorline&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;fg+|bg+&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfMatch&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.match&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;hl+&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;FzfLuaBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.border&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;border&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfScrollbar&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.scrollbar&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;scrollbar&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfSeparator&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfBorder&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.separator&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;separator&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfGutter&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.gutter&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;gutter&lt;/code&gt; (hl &lt;code&gt;bg&lt;/code&gt; is used)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfHeader&lt;/td&gt; 
    &lt;td&gt;FzfLuaTitle&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.header&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;header&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfInfo&lt;/td&gt; 
    &lt;td&gt;NonText&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.info&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;info&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.pointer&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;pointer&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfMarker&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.marker&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;marker&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfSpinner&lt;/td&gt; 
    &lt;td&gt;FzfLuaFzfPointer&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.spinner&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;spinner&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfPrompt&lt;/td&gt; 
    &lt;td&gt;Special&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.prompt&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;prompt&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;FzfLuaFzfQuery&lt;/td&gt; 
    &lt;td&gt;FzfLuaNormal&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;fzf.query&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;fzf&#39;s &lt;code&gt;header&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;&lt;sup&gt;&lt;sub&gt;*Not a highlight group, RGB color from &lt;code&gt;nvim_get_color_map&lt;/code&gt;&lt;/sub&gt;&lt;/sup&gt;&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;CLICK FOR FZF COLORS DETAILS&lt;/summary&gt; 
 &lt;h4&gt;Fzf Colors&lt;/h4&gt; 
 &lt;p&gt;Fzf&#39;s terminal colors are controlled by fzf&#39;s &lt;code&gt;--color&lt;/code&gt; flag which can be configured during setup via &lt;code&gt;fzf_colors&lt;/code&gt;.&lt;/p&gt; 
 &lt;p&gt;Set to &lt;code&gt;true&lt;/code&gt; to have fzf-lua automatically generate an fzf colorscheme from your current Neovim colorscheme:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;fzf-lua&quot;).setup({ fzf_colors = true })
-- Or in the direct call options
:lua FzfLua.files({ fzf_colors = true })
:FzfLua files fzf_colors=true
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Customizing the fzf colorscheme (see &lt;code&gt;man fzf&lt;/code&gt; for all color options):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;fzf-lua&#39;).setup {
  fzf_colors = {
    -- First existing highlight group will be used
    -- values in 3rd+ index will be passed raw
    -- i.e:  `--color fg+:#010101:bold:underline`
    [&quot;fg+&quot;] = { &quot;fg&quot; , { &quot;Comment&quot;, &quot;Normal&quot; }, &quot;bold&quot;, &quot;underline&quot; },
    -- It is also possible to pass raw values directly
    [&quot;gutter&quot;] = &quot;-1&quot;
  }
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Conveniently, fzf-lua can also be configured using fzf.vim&#39;s &lt;code&gt;g:fzf_colors&lt;/code&gt;, i.e:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Similarly, first existing highlight group will be used
:lua vim.g.fzf_colors = { [&quot;gutter&quot;] = { &quot;bg&quot;, &quot;DoesNotExist&quot;, &quot;IncSearch&quot; } }
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;However, the above doesn&#39;t allow combining both neovim highlights and raw args, if you&#39;re only using fzf-lua we can hijack &lt;code&gt;g:fzf_colors&lt;/code&gt; to accept fzf-lua style values (i.e. table at 2nd index and 3rd+ raw args):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;:lua vim.g.fzf_colors = { [&quot;fg+&quot;] = { &quot;fg&quot;, { &quot;ErrorMsg&quot; }, &quot;bold&quot;, &quot;underline&quot; } }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;Big thank you to all those I borrowed code/ideas from, I read so many configs and plugin codes that I probably forgot where I found some samples from so if I missed your name feel free to contact me and I&#39;ll add it below:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/junegunn/&quot;&gt;@junegunn&lt;/a&gt; for creating the magical &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; and &lt;a href=&quot;https://github.com/junegunn/fzf.vim&quot;&gt;fzf.vim&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/vijaymarupudi/&quot;&gt;@vijaymarupudi&lt;/a&gt; for the wonderful &lt;a href=&quot;https://github.com/vijaymarupudi/nvim-fzf&quot;&gt;nvim-fzf&lt;/a&gt; plugin which started this endeavour&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/tjdevries/&quot;&gt;@tjdevries&lt;/a&gt; for too many great things to list here and borrowing code from &lt;a href=&quot;https://github.com/nvim-telescope/telescope.nvim&quot;&gt;nvim-telescope&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lukas-reineke&quot;&gt;@lukas-reineke&lt;/a&gt; for inspiration after browsing &lt;a href=&quot;https://github.com/lukas-reineke/dotfiles&quot;&gt;dotfiles&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/sindrets&quot;&gt;@sindrets&lt;/a&gt; for borrowing utilities from &lt;a href=&quot;https://github.com/sindrets/diffview.nvim&quot;&gt;diffview.nvim&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/kevinhwang91&quot;&gt;@kevinhwang91&lt;/a&gt; for inspiring the builtin previewer code while using &lt;a href=&quot;https://github.com/kevinhwang91/nvim-bqf&quot;&gt;nvim-bqf&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/904c80c40fccc934e0b9c3093abd1f3fa406566bfa22684606bfde436455e31d/ibhagwan/fzf-lua" medium="image" />
      
    </item>
    
    <item>
      <title>rebelot/kanagawa.nvim</title>
      <link>https://github.com/rebelot/kanagawa.nvim</link>
      <description>&lt;p&gt;NeoVim dark colorscheme inspired by the colors of the famous painting by Katsushika Hokusai.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;/p&gt;
&lt;h2 align=&quot;center&quot;&gt;🌊 KANAGAWA.nvim 🌊&lt;/h2&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/kanagawa@2x.png&quot; width=&quot;500&quot; /&gt; &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt;NeoVim dark colorscheme inspired by the colors of the famous painting by Katsushika Hokusai.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;/p&gt;
&lt;h2 align=&quot;center&quot;&gt;&lt;img alt=&quot;Preview&quot; src=&quot;https://user-images.githubusercontent.com/36300441/222913073-22b95f11-8c08-4b2b-867c-19072c921de1.png&quot; width=&quot;1000&quot; /&gt;&lt;/h2&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.w3.org/TR/WCAG21/#contrast-minimum&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/WCAG_2.1_%7C_AA-756891?logo=w3c&amp;amp;logoColor=fff&amp;amp;style=for-the-badge&quot; alt=&quot;W3C&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Extensive support for &lt;code&gt;TreeSitter&lt;/code&gt; syntax highlighting, and &lt;em&gt;many&lt;/em&gt; popular plugins&lt;/li&gt; 
 &lt;li&gt;Compilation to lua byte code for super fast startup times&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Download with your favorite package manager.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;use &quot;rebelot/kanagawa.nvim&quot;
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Requirements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;neovim latest&lt;/li&gt; 
 &lt;li&gt;truecolor terminal support&lt;/li&gt; 
 &lt;li&gt;undercurl terminal support (optional)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Usage&lt;/h2&gt; 
&lt;p&gt;As simple as writing (pasting)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;colorscheme kanagawa
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.cmd(&quot;colorscheme kanagawa&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Configuration&lt;/h2&gt; 
&lt;p&gt;There is no need to call setup if you are ok with the defaults.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Default options:
require(&#39;kanagawa&#39;).setup({
    compile = false,             -- enable compiling the colorscheme
    undercurl = true,            -- enable undercurls
    commentStyle = { italic = true },
    functionStyle = {},
    keywordStyle = { italic = true},
    statementStyle = { bold = true },
    typeStyle = {},
    transparent = false,         -- do not set background color
    dimInactive = false,         -- dim inactive window `:h hl-NormalNC`
    terminalColors = true,       -- define vim.g.terminal_color_{0,17}
    colors = {                   -- add/modify theme and palette colors
        palette = {},
        theme = { wave = {}, lotus = {}, dragon = {}, all = {} },
    },
    overrides = function(colors) -- add/modify highlights
        return {}
    end,
    theme = &quot;wave&quot;,              -- Load &quot;wave&quot; theme
    background = {               -- map the value of &#39;background&#39; option to a theme
        dark = &quot;wave&quot;,           -- try &quot;dragon&quot; !
        light = &quot;lotus&quot;
    },
})

-- setup must be called before loading
vim.cmd(&quot;colorscheme kanagawa&quot;)
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE 1:&lt;/em&gt;&lt;/strong&gt; If you enable compilation, make sure to run &lt;code&gt;:KanagawaCompile&lt;/code&gt; command every time you make changes to your config.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;&quot; 1. Modify your config
&quot; 2. Restart nvim
&quot; 3. Run this command:
:KanagawaCompile
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;&lt;strong&gt;&lt;em&gt;NOTE 2:&lt;/em&gt;&lt;/strong&gt; Kanagawa adjusts to the value of some options. Make sure that the options &lt;code&gt;&#39;laststatus&#39;&lt;/code&gt; and &lt;code&gt;&#39;cmdheight&#39;&lt;/code&gt; are set &lt;strong&gt;&lt;em&gt;before&lt;/em&gt;&lt;/strong&gt; calling &lt;code&gt;setup&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;Themes&lt;/h2&gt; 
&lt;p&gt;Kanagawa comes in three variants:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;wave&lt;/code&gt; the default heart-warming theme,&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;dragon&lt;/code&gt; for those late-night sessions&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;lotus&lt;/code&gt; for when you&#39;re out in the open.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Themes can be changed in three ways:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;Setting &lt;code&gt;config.theme&lt;/code&gt; to the desired theme.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Using the &lt;code&gt;background&lt;/code&gt; option: Any change to the value of &lt;code&gt;vim.o.background&lt;/code&gt; will select the theme mapped by &lt;code&gt;config.background&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Loading the colorscheme directly with:&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.cmd(&quot;colorscheme kanagawa-wave&quot;)
vim.cmd(&quot;colorscheme kanagawa-dragon&quot;)
vim.cmd(&quot;colorscheme kanagawa-lotus&quot;)
&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;or&lt;/p&gt; &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;kanagawa&quot;).load(&quot;wave&quot;)
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;In kanagawa, there are &lt;em&gt;two&lt;/em&gt; kinds of colors: &lt;code&gt;PaletteColors&lt;/code&gt; and &lt;code&gt;ThemeColors&lt;/code&gt;; &lt;code&gt;PaletteColors&lt;/code&gt; are defined directly as RGB Hex strings, and have arbitrary names that recall their actual color. Conversely, &lt;code&gt;ThemeColors&lt;/code&gt; are named and grouped &lt;em&gt;semantically&lt;/em&gt; on the basis of their actual function.&lt;/p&gt; 
&lt;p&gt;In short, a &lt;code&gt;palette&lt;/code&gt; defines all the available colors, while a &lt;code&gt;theme&lt;/code&gt; maps the &lt;code&gt;PaletteColors&lt;/code&gt; to specific &lt;code&gt;ThemeColors&lt;/code&gt; and the same palette color may be assigned to multiple theme colors.&lt;/p&gt; 
&lt;p&gt;You can change &lt;em&gt;both&lt;/em&gt; theme or palette colors using &lt;code&gt;config.colors&lt;/code&gt;. All the palette color names can be found &lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/lua/kanagawa/colors.lua&quot;&gt;here&lt;/a&gt;, while their usage by each theme can be found &lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/lua/kanagawa/themes.lua&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;kanagawa&#39;).setup({
    ...,
    colors = {
        palette = {
            -- change all usages of these colors
            sumiInk0 = &quot;#000000&quot;,
            fujiWhite = &quot;#FFFFFF&quot;,
        },
        theme = {
            -- change specific usages for a certain theme, or for all of them
            wave = {
                ui = {
                    float = {
                        bg = &quot;none&quot;,
                    },
                },
            },
            dragon = {
                syn = {
                    parameter = &quot;yellow&quot;,
                },
            },
            all = {
                ui = {
                    bg_gutter = &quot;none&quot;
                }
            }
        }
    },
    ...
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;You can also conveniently add/modify any &lt;code&gt;hlgroups&lt;/code&gt; using the &lt;code&gt;config.overrides&lt;/code&gt; option, allowing you to customize the looks of specific built-in elements, or any other external plugins that provides &lt;code&gt;hlgroups&lt;/code&gt;. (See &lt;code&gt;:help highlight&lt;/code&gt; for more information on &lt;code&gt;hlgroups&lt;/code&gt;.) Supported keywords are the same for &lt;code&gt;:h nvim_set_hl&lt;/code&gt; &lt;code&gt;{val}&lt;/code&gt; parameter.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&#39;kanagawa&#39;).setup({
    ...,
    overrides = function(colors)
        return {
            -- Assign a static color to strings
            String = { fg = colors.palette.carpYellow, italic = true },
            -- theme colors will update dynamically when you change theme!
            SomePluginHl = { fg = colors.theme.syn.type, bold = true },
        }
    end,
    ...
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Common customizations&lt;/h3&gt; 
&lt;h4&gt;Remove &lt;em&gt;gutter&lt;/em&gt; background&lt;/h4&gt; 
&lt;p&gt;Remove the background of &lt;code&gt;LineNr&lt;/code&gt;, &lt;code&gt;{Sign,Fold}Column&lt;/code&gt; and friends&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;colors = {
    theme = {
        all = {
            ui = {
                bg_gutter = &quot;none&quot;
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Transparent Floating Windows&lt;/h4&gt; 
&lt;p&gt;This will make floating windows look nicer with default borders.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;overrides = function(colors)
    local theme = colors.theme
    return {
        NormalFloat = { bg = &quot;none&quot; },
        FloatBorder = { bg = &quot;none&quot; },
        FloatTitle = { bg = &quot;none&quot; },

        -- Save an hlgroup with dark background and dimmed foreground
        -- so that you can use it where your still want darker windows.
        -- E.g.: autocmd TermOpen * setlocal winhighlight=Normal:NormalDark
        NormalDark = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m3 },

        -- Popular plugins that open floats will link to NormalFloat by default;
        -- set their background accordingly if you wish to keep them dark and borderless
        LazyNormal = { bg = theme.ui.bg_m3, fg = theme.ui.fg_dim },
        MasonNormal = { bg = theme.ui.bg_m3, fg = theme.ui.fg_dim },
    }
end,
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;If you&#39;d like to keep the floating windows darker, but you&#39;re unhappy with how borders are rendered, consider using characters that are drawn at the edges of the box:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{ &quot;🭽&quot;, &quot;▔&quot;, &quot;🭾&quot;, &quot;▕&quot;, &quot;🭿&quot;, &quot;▁&quot;, &quot;🭼&quot;, &quot;▏&quot; }
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Borderless Telescope&lt;/h4&gt; 
&lt;p&gt;Block-like &lt;em&gt;modern&lt;/em&gt; Telescope UI&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;overrides = function(colors)
    local theme = colors.theme
    return {
        TelescopeTitle = { fg = theme.ui.special, bold = true },
        TelescopePromptNormal = { bg = theme.ui.bg_p1 },
        TelescopePromptBorder = { fg = theme.ui.bg_p1, bg = theme.ui.bg_p1 },
        TelescopeResultsNormal = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m1 },
        TelescopeResultsBorder = { fg = theme.ui.bg_m1, bg = theme.ui.bg_m1 },
        TelescopePreviewNormal = { bg = theme.ui.bg_dim },
        TelescopePreviewBorder = { bg = theme.ui.bg_dim, fg = theme.ui.bg_dim },
    }
end,
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Dark completion (popup) menu&lt;/h4&gt; 
&lt;p&gt;More uniform colors for the popup menu.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;overrides = function(colors)
    local theme = colors.theme
    return {
        Pmenu = { fg = theme.ui.shade0, bg = theme.ui.bg_p1 },  -- add `blend = vim.o.pumblend` to enable transparency
        PmenuSel = { fg = &quot;NONE&quot;, bg = theme.ui.bg_p2 },
        PmenuSbar = { bg = theme.ui.bg_m1 },
        PmenuThumb = { bg = theme.ui.bg_p2 },
    }
end,
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Tint background of diagnostic messages with their foreground color&lt;/h4&gt; 
&lt;p&gt;This immitates a style of diagnostic messages seen, for example, in &lt;a href=&quot;https://github.com/folke/tokyonight.nvim&quot;&gt;tokyonight.nvim&lt;/a&gt;.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;overrides = function(colors)
  local theme = colors.theme
  local makeDiagnosticColor = function(color)
    local c = require(&quot;kanagawa.lib.color&quot;)
    return { fg = color, bg = c(color):blend(theme.ui.bg, 0.95):to_hex() }
  end

  return {
    DiagnosticVirtualTextHint  = makeDiagnosticColor(theme.diag.hint),
    DiagnosticVirtualTextInfo  = makeDiagnosticColor(theme.diag.info),
    DiagnosticVirtualTextWarn  = makeDiagnosticColor(theme.diag.warning),
    DiagnosticVirtualTextError = makeDiagnosticColor(theme.diag.error),
  }
end
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Integration&lt;/h2&gt; 
&lt;h3&gt;Get palette and theme colors&lt;/h3&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Get the colors for the current theme
local colors = require(&quot;kanagawa.colors&quot;).setup()
local palette_colors = colors.palette
local theme_colors = colors.theme

-- Get the colors for a specific theme
local wave_colors = require(&quot;kanagawa.colors&quot;).setup({ theme = &#39;wave&#39; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Terminal integration&lt;/h3&gt; 
&lt;p&gt;The following example provides a snippet to automatically change the theme for the Kitty terminal emulator.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.api.nvim_create_autocmd(&quot;ColorScheme&quot;, {
    pattern = &quot;kanagawa&quot;,
    callback = function()
        if vim.o.background == &quot;light&quot; then
            vim.fn.system(&quot;kitty +kitten themes Kanagawa_light&quot;)
        elseif vim.o.background == &quot;dark&quot; then
            vim.fn.system(&quot;kitty +kitten themes Kanagawa_dragon&quot;)
        else
            vim.fn.system(&quot;kitty +kitten themes Kanagawa&quot;)
        end
    end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;h2&gt;Color palette&lt;/h2&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;&lt;/th&gt; 
    &lt;th style=&quot;text-align:left&quot;&gt;Name&lt;/th&gt; 
    &lt;th style=&quot;text-align:center&quot;&gt;Hex&lt;/th&gt; 
    &lt;th style=&quot;text-align:left&quot;&gt;Usage&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/fujiWhite.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;fujiWhite&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#DCD7BA&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Default foreground&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/oldWhite.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;oldWhite&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#C8C093&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Dark foreground (statuslines)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sumiInk0.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sumiInk0&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#16161D&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Dark background (statuslines and floating windows)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sumiInk1.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sumiInk1&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#1F1F28&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Default background&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sumiInk2.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sumiInk2&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#2A2A37&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Lighter background (colorcolumn, folds)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sumiInk3.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sumiInk3&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#363646&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Lighter background (cursorline)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sumiInk4.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sumiInk4&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#54546D&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Darker foreground (line numbers, fold column, non-text characters), float borders&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/waveBlue1.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;waveBlue1&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#223249&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Popup background, visual selection background&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/waveBlue2.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;waveBlue2&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#2D4F67&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Popup selection background, search background&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/winterGreen.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;winterGreen&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#2B3328&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diff Add (background)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/winterYellow.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;winterYellow&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#49443C&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diff Change (background)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/winterRed.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;winterRed&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#43242B&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diff Deleted (background)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/winterBlue.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;winterBlue&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#252535&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diff Line (background)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/autumnGreen.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;autumnGreen&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#76946A&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Git Add&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/autumnRed.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;autumnRed&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#C34043&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Git Delete&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/autumnYellow.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;autumnYellow&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#DCA561&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Git Change&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/samuraiRed.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;samuraiRed&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#E82424&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diagnostic Error&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/roninYellow.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;roninYellow&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#FF9E3B&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diagnostic Warning&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/waveAqua1.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;waveAqua1&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#6A9589&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diagnostic Info&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/dragonBlue.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;dragonBlue&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#658594&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Diagnostic Hint&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/fujiGray.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;fujiGray&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#727169&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Comments&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/springViolet1.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;springViolet1&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#938AA9&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Light foreground&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/oniViolet.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;oniViolet&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#957FB8&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Statements and Keywords&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/crystalBlue.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;crystalBlue&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#7E9CD8&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Functions and Titles&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/springViolet2.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;springViolet2&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#9CABCA&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Brackets and punctuation&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/springBlue.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;springBlue&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#7FB4CA&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Specials and builtin functions&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/lightBlue.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;lightBlue&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#A3D4D5&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Not used&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/waveAqua2.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;waveAqua2&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#7AA89F&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Types&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/springGreen.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;springGreen&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#98BB6C&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Strings&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/boatYellow1.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;boatYellow1&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#938056&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Not used&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/boatYellow2.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;boatYellow2&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#C0A36E&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Operators, RegEx&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/carpYellow.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;carpYellow&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#E6C384&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Identifiers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/sakuraPink.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;sakuraPink&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#D27E99&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Numbers&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/waveRed.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;waveRed&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#E46876&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Standout specials 1 (builtin variables)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/peachRed.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;peachRed&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#FF5D62&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Standout specials 2 (exception handling, return)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/surimiOrange.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;surimiOrange&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#FFA066&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Constants, imports, booleans&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/assets/circles/katanaGray.svg?sanitize=true&quot; width=&quot;40&quot; /&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;katanaGray&lt;/td&gt; 
    &lt;td style=&quot;text-align:center&quot;&gt;&lt;code&gt;#717C7C&lt;/code&gt;&lt;/td&gt; 
    &lt;td style=&quot;text-align:left&quot;&gt;Deprecated&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;h2&gt;Accessibility&lt;/h2&gt; 
&lt;p&gt;The colors maintain a &lt;code&gt;4.5:1&lt;/code&gt; contrast ratio, complying with &lt;a href=&quot;https://www.w3.org/TR/WCAG21/#contrast-minimum&quot;&gt;WCAG 2.1 | Level AA&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Extras&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/alacritty/&quot;&gt;Alacritty&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/alfred.md&quot;&gt;Alfred&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/base16/&quot;&gt;Base16&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/broot/&quot;&gt;Broot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/emacs/&quot;&gt;Emacs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/fish/&quot;&gt;Fish&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/foot/&quot;&gt;Foot&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/iterm/&quot;&gt;iTerm&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/kitty/&quot;&gt;Kitty&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/mintty/&quot;&gt;Mintty&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/pywal/&quot;&gt;Pywal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/sway/&quot;&gt;Sway&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/wezterm/&quot;&gt;Wezterm&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/windows-terminal/&quot;&gt;Windows Terminal&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/ghostty&quot;&gt;Ghostty&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/xresources/&quot;&gt;Xresources&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/textmate/&quot;&gt;tmTheme (Sublime Text, bat and delta)&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/extras/gogh/&quot;&gt;JSON compatible with many terminals&lt;/a&gt; Check &lt;a href=&quot;https://github.com/Gogh-Co/Gogh#-terminals&quot;&gt;Gogh&lt;/a&gt; for the list of supported terminals.&lt;/li&gt; 
 &lt;li&gt;🎉 Bonus! You win a tiny &lt;a href=&quot;https://raw.githubusercontent.com/rebelot/kanagawa.nvim/master/palette.py&quot;&gt;python script&lt;/a&gt;🐍 to extract color palettes 🎨 from any image! 🥳&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/folke/tokyonight.nvim&quot;&gt;Tokyonight&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/morhetz/gruvbox&quot;&gt;Gruvbox&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/catppuccin/nvim&quot;&gt;Catppuccin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://affinity.serif.com/designer/&quot;&gt;Affinity Designer&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Donate&lt;/h3&gt; 
&lt;p&gt;Buy me coffee and support my work 😉&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.paypal.com/donate/?business=VNQPHGW4JEM3S&amp;amp;no_recurring=0&amp;amp;item_name=Buy+me+coffee+and+support+my+work+%3B%29&amp;amp;currency_code=EUR&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Donate-PayPal-green.svg?sanitize=true&quot; alt=&quot;Donate&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/440275140/cff34871-c515-460e-92f0-6e72cefb484b" medium="image" />
      
    </item>
    
    <item>
      <title>sphamba/smear-cursor.nvim</title>
      <link>https://github.com/sphamba/smear-cursor.nvim</link>
      <description>&lt;p&gt;🌠 Neovim plugin to animate the cursor with a smear effect in all terminals&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Smear cursor for Neovim&lt;/h1&gt; 
&lt;p&gt;&lt;em&gt;Neovim plugin to animate the cursor with a smear effect in all terminals. Inspired by &lt;a href=&quot;https://neovide.dev/features.html#animated-cursor&quot;&gt;Neovide&#39;s animated cursor&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;This plugin is intended for terminals/GUIs that can only display text and do not have graphical capabilities (unlike &lt;a href=&quot;https://neovide.dev/&quot;&gt;Neovide&lt;/a&gt;, or the &lt;a href=&quot;https://sw.kovidgoyal.net/kitty/&quot;&gt;Kitty&lt;/a&gt; terminal). Also, check out the &lt;a href=&quot;https://github.com/karb94/neoscroll.nvim&quot;&gt;karb94/neoscroll.nvim&lt;/a&gt; plugin for smooth scrolling!&lt;/p&gt; 
&lt;h2&gt;🚀 Demo&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://private-user-images.githubusercontent.com/17217484/389300116-fc95b4df-d791-4c53-9141-4f870eb03ab2.mp4?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MzI0NzY0NDAsIm5iZiI6MTczMjQ3NjE0MCwicGF0aCI6Ii8xNzIxNzQ4NC8zODkzMDAxMTYtZmM5NWI0ZGYtZDc5MS00YzUzLTkxNDEtNGY4NzBlYjAzYWIyLm1wND9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDExMjQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMTI0VDE5MjIyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTg1NjFhZjJlODQ4YmU2NjAzY2EzY2I3NWMzMzI5MWQ1Njk2MTExYmEwYmExNTMwMThmYTJjYjE2ZjIyOThjNjMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.Skw2VVyVWVkMe4ht6mvl_AZ_6QasJm8O6qsIZmcQ2XE&quot;&gt;Demo&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Some configuration examples:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Default&lt;/th&gt; 
   &lt;th&gt;Faster&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8d4ea0e6-6764-48ce-a182-7f1a63ffd762&quot; alt=&quot;Image&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6c2ae042-55df-48a3-8e18-57517dc06633&quot; alt=&quot;Image&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Smooth cursor without smear&lt;/th&gt; 
   &lt;th&gt;Smooth caret&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/47950a0c-2bbe-4148-b633-fea6d5e1f985&quot; alt=&quot;Image&quot; /&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4ce13647-62fa-4f11-9d05-83c5b1ab4c7c&quot; alt=&quot;Image&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Fire hazard&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ebb37a37-04dd-4400-b22c-d7be86a8b939&quot; alt=&quot;Image&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;!-- panvimdoc-ignore-end --&gt; 
&lt;h2&gt;📦 Installation&lt;/h2&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;After enabling the plugin in your configuration, you can toggle the smear cursor on and off with the &lt;code&gt;:SmearCursorToggle&lt;/code&gt; command or with &lt;code&gt;:lua require(&quot;smear_cursor&quot;).toggle()&lt;/code&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Minimum requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim 0.10.2&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://neovim.io/doc/user/pack/&quot;&gt;vim.pack&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;In your &lt;code&gt;~/.config/nvim/init.lua&lt;/code&gt;, add:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add({
  &quot;https://github.com/sphamba/smear-cursor.nvim&quot;,
})

require(&#39;smear_cursor&#39;).setup({
  -- Your options
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://lazy.folke.io/&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;In &lt;code&gt;~/.config/nvim/lua/plugins/smear_cursor.lua&lt;/code&gt;, add:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;return {
  &quot;sphamba/smear-cursor.nvim&quot;,
  opts = {},
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://github.com/junegunn/vim-plug&quot;&gt;vim-plug&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;In your &lt;code&gt;init.vim&lt;/code&gt;, add:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;call plug#begin()
Plug &#39;sphamba/smear-cursor.nvim&#39;
call plug#end()

lua require(&#39;smear_cursor&#39;).enabled = true
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;⚙ Configuration&lt;/h2&gt; 
&lt;h3&gt;Using &lt;a href=&quot;https://lazy.folke.io/&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/h3&gt; 
&lt;p&gt;Here are the default configuration options:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;return {
  &quot;sphamba/smear-cursor.nvim&quot;,

  opts = {
    -- Smear cursor when switching buffers or windows.
    smear_between_buffers = true,

    -- Smear cursor when moving within line or to neighbor lines.
    -- Use `min_horizontal_distance_smear` and `min_vertical_distance_smear` for finer control
    smear_between_neighbor_lines = true,

    -- Draw the smear in buffer space instead of screen space when scrolling
    scroll_buffer_space = true,

    -- Set to `true` if your font supports legacy computing symbols (block unicode symbols).
    -- Smears and particles will look a lot less blocky.
    legacy_computing_symbols_support = false,

    -- Smear cursor in insert mode.
    -- See also `vertical_bar_cursor_insert_mode` and `distance_stop_animating_vertical_bar`.
    smear_insert_mode = true,
  },
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Refer to &lt;a href=&quot;https://github.com/sphamba/smear-cursor.nvim/raw/main/lua/smear_cursor/config.lua&quot;&gt;&lt;code&gt;lua/smear_cursor/config.lua&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/sphamba/smear-cursor.nvim/raw/main/lua/smear_cursor/color.lua&quot;&gt;&lt;code&gt;lua/smear_cursor/color.lua&lt;/code&gt;&lt;/a&gt; for the full list of configuration options that can be set with &lt;code&gt;opts&lt;/code&gt;.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;Some terminals override the cursor color set by Neovim. If that is the case, manually put the actual cursor color in your config to get a matching smear color:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    -- Smear cursor color. Defaults to Cursor GUI color if not set.
    -- Set to &quot;none&quot; to match the text color at the target cursor position.
    -- Can be a hex color code, or a highlight group name.
    cursor_color = &quot;#d3cdc3&quot;,
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Fonts with legacy computing symbols support seems to be rare. One notable example is &lt;a href=&quot;https://github.com/microsoft/cascadia-code/releases&quot;&gt;Cascadia Code&lt;/a&gt;. You can still use smear-cursor.nvim without such a font.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Examples&lt;/h3&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;See videos at the top for visual examples.&lt;/p&gt; 
&lt;/div&gt; 
&lt;details&gt; 
 &lt;summary&gt;🔥 Faster smear&lt;/summary&gt; 
 &lt;p&gt;As an example of further configuration, you can tune the smear dynamics to be snappier:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {                                -- Default  Range
    stiffness = 0.8,                      -- 0.6      [0, 1]
    trailing_stiffness = 0.6,             -- 0.45     [0, 1]
    stiffness_insert_mode = 0.7,          -- 0.5      [0, 1]
    trailing_stiffness_insert_mode = 0.7, -- 0.5      [0, 1]
    damping = 0.95,                       -- 0.85     [0, 1]
    damping_insert_mode = 0.95,           -- 0.9      [0, 1]
    distance_stop_animating = 0.5,        -- 0.1      &amp;gt; 0
  },
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you notice a low framerate, you can try lowering the time interval between draws (default is 17ms):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    time_interval = 7, -- milliseconds
  },
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;You can also change the &quot;bounciness&quot; of the smear by adjusting the &lt;code&gt;damping&lt;/code&gt; and &lt;code&gt;damping_insert_mode&lt;/code&gt; parameters (default to &lt;code&gt;0.85&lt;/code&gt; and &lt;code&gt;0.9&lt;/code&gt; respectively). Decreasing them (&lt;em&gt;e.g.&lt;/em&gt; to &lt;code&gt;0.65&lt;/code&gt;) will make the smear appear more elastic (overshooting target position).&lt;/p&gt; 
 &lt;blockquote&gt; 
  &lt;p&gt;&lt;strong&gt;🔥 FIRE HAZARD 🔥&lt;/strong&gt;&lt;/p&gt; 
  &lt;p&gt;Feel free to experiment with all the configuration options, but be aware that some combinations may cause your cursor to flicker or even &lt;strong&gt;catch fire&lt;/strong&gt;. That can happen with the following settings:&lt;/p&gt; 
  &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt; opts = {
   cursor_color = &quot;#ff4000&quot;,
   particles_enabled = true,
   stiffness = 0.5,
   trailing_stiffness = 0.2,
   trailing_exponent = 5,
   damping = 0.6,
   gradient_exponent = 0,
   gamma = 1,
   never_draw_over_target = true, -- if you want to actually see under the cursor
   hide_target_hack = true,       -- same
   particle_spread = 1,
   particles_per_second = 500,
   particles_per_length = 50,
   particle_max_lifetime = 800,
   particle_max_initial_velocity = 20,
   particle_velocity_from_cursor = 0.5,
   particle_damping = 0.15,
   particle_gravity = -50,
   min_distance_emit_particles = 0,
}
&lt;/code&gt;&lt;/pre&gt; 
 &lt;/blockquote&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;█ Smooth cursor without smear&lt;/summary&gt; 
 &lt;p&gt;If you wish to only have a smoother cursor that keeps its rectangular shape (without the trail), you can set the following options:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    stiffness = 0.5,
    trailing_stiffness = 0.5,
    matrix_pixel_threshold = 0.5,
  },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🌌 Transparent background&lt;/summary&gt; 
 &lt;p&gt;Drawing the smear over a transparent background works better when using a font that supports legacy computing symbols, therefore setting the following option:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    legacy_computing_symbols_support = true,
  },
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If your font does not support legacy computing symbols, there will be a shadow under the smear. You may set a color for this shadow to be less noticeable:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    transparent_bg_fallback_color = &quot;#303030&quot;,
  },
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;🔲 No GUI colors&lt;/summary&gt; 
 &lt;p&gt;If you are not using &lt;code&gt;termguicolors&lt;/code&gt;, you need to manually set a color gradient for the smear (it can be a single color):&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    cterm_cursor_colors = { 240, 245, 250, 255 },
    cterm_bg = 235,
  }
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;If you are not using &lt;code&gt;guicursor&lt;/code&gt;, and you notice the cursor getting duplicated (smear visible at the same time as the &lt;em&gt;real&lt;/em&gt; cursor), try setting&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;  opts = {
    hide_target_hack = true,
    never_draw_over_target = true,
  }
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Using &lt;code&gt;init.vim&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;You can set the configuration variables in your &lt;code&gt;init.vim&lt;/code&gt; file like this:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-vim&quot;&gt;lua require(&#39;smear_cursor&#39;).setup({
    \cursor_color = &#39;#d3cdc3&#39;,
\})
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;🤕 Known issues&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;There is a shadow around the smear (text become invisible). This is inherent to the way the smear is rendered, as Neovim is not able to render superimposed characters. The shadow is less noticeable when the smear is moving faster (see configuration options).&lt;/li&gt; 
 &lt;li&gt;Likely not compatible with other plugins that modify the cursor.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;!-- panvimdoc-ignore-start --&gt; 
&lt;h2&gt;👨‍💻 Contributing&lt;/h2&gt; 
&lt;p&gt;Please feel free to open an issue or a pull request if you have any suggestions or improvements! This project uses &lt;a href=&quot;https://pre-commit.com/&quot;&gt;pre-commit&lt;/a&gt; hooks to ensure code quality (with &lt;a href=&quot;https://github.com/JohnnyMorganz/StyLua&quot;&gt;StyLua&lt;/a&gt;) and meaningful commit messages (following &lt;a href=&quot;https://www.conventionalcommits.org/&quot;&gt;Conventional Commits&lt;/a&gt;)&lt;/p&gt; 
&lt;h3&gt;Requirements&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Neovim &amp;gt;= 0.10.2&lt;/li&gt; 
 &lt;li&gt;Make&lt;/li&gt; 
 &lt;li&gt;pre-commit (&lt;code&gt;pip install pre-commit&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Setup&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;Clone the repository&lt;/li&gt; 
 &lt;li&gt;Run &lt;code&gt;make install&lt;/code&gt; to install the pre-commit hooks&lt;/li&gt; 
&lt;/ol&gt; 
&lt;!-- panvimdoc-ignore-end --&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/8c28cf6c3935c41fc4bcdf488e6d7a482ec472ef44a35f377b5959d5a367f7ed/sphamba/smear-cursor.nvim" medium="image" />
      
    </item>
    
  </channel>
</rss>
