{"id":28504111,"url":"https://github.com/aileot/nvim-thyme","last_synced_at":"2025-07-09T10:39:27.246Z","repository":{"id":295183779,"uuid":"989399467","full_name":"aileot/nvim-thyme","owner":"aileot","description":"🕛 ZERO-overhead Fennel JIT compiler for nvim config","archived":false,"fork":false,"pushed_at":"2025-06-15T21:57:13.000Z","size":1351,"stargazers_count":14,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-15T23:18:45.942Z","etag":null,"topics":["fennel","neovim","nvim","nvim-plugin"],"latest_commit_sha":null,"homepage":"","language":"Fennel","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aileot.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-24T02:54:13.000Z","updated_at":"2025-06-15T21:46:44.000Z","dependencies_parsed_at":"2025-06-15T23:11:32.029Z","dependency_job_id":"144f5cf4-cdb9-4370-9e1e-ccca3a30bf20","html_url":"https://github.com/aileot/nvim-thyme","commit_stats":null,"previous_names":["aileot/nvim-thyme"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/aileot/nvim-thyme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aileot%2Fnvim-thyme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aileot%2Fnvim-thyme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aileot%2Fnvim-thyme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aileot%2Fnvim-thyme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aileot","download_url":"https://codeload.github.com/aileot/nvim-thyme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aileot%2Fnvim-thyme/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264441552,"owners_count":23608907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fennel","neovim","nvim","nvim-plugin"],"created_at":"2025-06-08T17:38:10.397Z","updated_at":"2025-07-09T10:39:27.228Z","avatar_url":"https://github.com/aileot.png","language":"Fennel","readme":"\u003cdiv align=\"center\"\u003e\n\n# 🕛 nvim-thyme\n\n**Zero-overhead Fennel JIT compiler for Neovim**\n\n_Also welcome, **non-lispers**_\\\nHow about trying **`:Fnl (vim.tbl_extend :force {:foo :bar} {:foo :qux`**\n(_uh…, typos?_ ¯\\\\\\_(ツ)\\_/¯),\\\nor `:=vim.tbl_extend(\"force\", {foo = \"bar\"}, {foo = \"baz\"})`?\n\n[![badge/test][]][url/to/workflow/test] [![badge/semver][]][url/to/semver]\n[![badge/license][]][url/to/license]\\\n[![badge/fennel][]][url/to/fennel]\n\n\u003c!--\nNOTE: The colors come from the palette of catppuccin-mocha:\nhttps://github.com/catppuccin/catppuccin/tree/v0.2.0?tab=readme-ov-file#-palettes\n--\u003e\n\n[badge/test]: https://img.shields.io/github/actions/workflow/status/aileot/nvim-thyme/test.yml?branch=main\u0026label=Test\u0026logo=github\u0026style=for-the-badge\u0026logo=neovim\u0026logoColor=CDD6F4\u0026labelColor=1E1E2E\u0026color=a6e3a1\n[badge/semver]: https://img.shields.io/github/v/release/aileot/nvim-thyme?style=for-the-badge\u0026logo=starship\u0026logoColor=CDD6F4\u0026labelColor=1E1E2E\u0026\u0026color=cdd6f4\u0026include_prerelease\u0026sort=semver\n[badge/license]: https://img.shields.io/github/license/aileot/nvim-thyme?style=for-the-badge\u0026logoColor=D9E0EE\u0026labelColor=302D41\u0026color=99d6ff\n[badge/fennel]: https://img.shields.io/badge/Powered_by_Fennel-030281?\u0026style=for-the-badge\u0026logo=lua\u0026logoColor=cdd6f4\u0026label=Lua\u0026labelColor=1E1E2E\u0026color=cba6f7\n[url/to/workflow/test]: https://github.com/aileot/nvim-thyme/actions/workflows/test.yml\n[url/to/license]: ./LICENSE\n[url/to/semver]: https://github.com/aileot/nvim-thyme/releases/latest\n[url/to/fennel]: https://fennel-lang.org/\n\n[**Welcome Aboard**](#-welcome-aboard)\n•\n[**Installation**](#-installation)\n•\n[**Usage**](#-usage)\n•\n[**Reference**](./docs/reference.md)\n•\n[**FAQ**](#-faq)\n\n\u003c/div\u003e\n\n## ✨ Features\n\n- **JIT Compiler**:\n  Compile fennel source **_at nvim runtime_**.\n- **Rollbacks**:\n  Safely roll back to the last successfully compiled backups if compilation\n  fails.\n- **Integrations**:\n  Evaluate fennel code in `cmdline` and `keymap` with the following features:\n  - Colorful output on [the builtin **treesitter**][builtin treesitter].\n  - Implicit paren-completions on **[parinfer][parinfer]**: _Evaluate `(+ 1 2`\n    as if `(+ 1 2)`!_\n\n\u003e [!CAUTION]\n\u003e Please note that undocumented features are subject to change without notice,\n\u003e regardless of [semantic versioning][].\n\n## 🔥 Motivations\n\n- To cut down startuptime, checking Fennel should be skipped at startup if\n  possible.\n- I don't like to mess up `lua/` as I still write Lua when it seems to be more\n  comfortable than Fennel. (Type annotation helps us very much.)\n\n\u003e [!TIP]\n\u003e Optionally, you can manage your Fennel files under `lua/` instead of `fnl/`\n\u003e directory. The relevant options are [fnl-dir][] and [macro-path][].\n\n…and more features! So, this project started from scratch.\n\n## ✔️ Requirements\n\n- Neovim v0.11.1+\n- [Fennel][Fennel] on your `\u0026runtimepath`, in short, `\u0026rtp`. (_not embedded_\n  unlike [the alternative plugins][alternatives])\n- `make` (or please locate a compiled `fennel.lua` in a `lua/` directory on\n  `\u0026rtp` by yourself)\n\n### Optional Dependencies\n\n- `luajit` or `lua5.1` (to compile `fennel` on `\u0026rtp` on `make`)\\\n  If none of them is available, `nvim --clean --headless -l` will be used as a\n  `lua` fallback.\n- A tree-sitter parser for fennel like [tree-sitter-fennel], or via\n  [nvim-treesitter][nvim-treesitter] on `\u0026rtp`.\n- The [parinfer-rust][parinfer-rust] on `\u0026rtp` (to improve UX on the commands\n  and keymaps)\n\n## 🎉 Welcome Aboard\n\n1. Install `nvim-thyme` with [lazy.nvim][].\n\n(If you've decided to go along with Fennel, please skip to the [Installation][] section below.)\n\n```lua\nrequire(\"lazy\").setup({\n  ---@type LazySpec\n  {\n    \"aileot/nvim-thyme\",\n    version = \"^v1.4.0\",\n    dependencies = {\n      { \"https://git.sr.ht/~technomancy/fennel\" },\n    },\n    lazy = false,\n    priority = 1000,\n    build = \":lua require('thyme').setup(); vim.cmd('ThymeCacheClear')\",\n    init = function()\n      -- Make your Fennel modules loadable.\n      table.insert(package.loaders, function(...)\n        return require(\"thyme\").loader(...)\n      end)\n      local thyme_cache_prefix = vim.fn.stdpath(\"cache\") .. \"/thyme/compiled\"\n      vim.opt.rtp:prepend(thyme_cache_prefix)\n    end,\n    config = function()\n      -- Create the helper interfaces.\n      require(\"thyme\").setup()\n    end,\n  },\n  -- Optional\n  {\n    \"aileot/nvim-laurel\",\n    build = \":lua require('thyme').setup(); vim.cmd('ThymeCacheClear')\",\n  },\n  {\n    \"eraserhd/parinfer-rust\",\n    build = \"cargo build --release\",\n  },\n  -- and other plugin specs...\n})\n```\n\n\u003e [!WARNING]\n\u003e With the config above,\n\u003e you cannot load Fennel modules _before_ the setup of `lazy.nvim`,\n\u003e but only load Fennel modules _after_ the `init` setup is done.\n\u003e Please follow the [Installation][] section below if you'd like to write\n\u003e Fennel more!\n\n### 2. Test Interactive Features in Cmdline\n\n```vim\n:Fnl (+ 1 2 3) \" Evaluate Fennel expression\n:Fnl (vim.notify \"Hello, Fennel!\") \" Call nvim APIs\n:FnlBuf % \" Evaluate Fennel expression in the current buffer\n```\n\n## 📦 Installation\n\n### 1. Ensure to Install Plugins (3 steps)\n\n#### 1. Make sure to download, and add the path to `\u0026runtimepath`\n\n\u003cdetails\u003e\n\u003csummary\u003e\nIt's recommended to define a \u003ccode\u003ebootstrap\u003c/code\u003e function for simplicity…\n\n(The collapse shows a snippet for\n\u003ca href=\"https://github.com/folke/lazy.nvim\"\u003efolke/lazy.nvim\u003c/a\u003e.)\n\n\u003c/summary\u003e\n\n```lua\nlocal function bootstrap(url)\n  -- To manage the version of repo, the path should be where your plugin manager will download it.\n  local name = url:gsub(\"^.*/\", \"\")\n  local path = vim.fn.stdpath(\"data\") .. \"/lazy/\" .. name\n  if not vim.loop.fs_stat(path) then\n    vim.fn.system({\n      \"git\",\n      \"clone\",\n      \"--filter=blob:none\",\n      url,\n      path,\n    })\n  end\n  vim.opt.runtimepath:prepend(path)\nend\n```\n\n\u003c/details\u003e\n\n```lua\n-- Given the `bootstrap` function defined above,\nbootstrap(\"https://git.sr.ht/~technomancy/fennel\")\nbootstrap(\"https://github.com/aileot/nvim-thyme\")\n-- (Optional) Install your favorite plugin manager.\nbootstrap(\"https://github.com/folke/lazy.nvim\")\n-- (Optional) Install some Fennel macro plugins before the setup of the plugin manager...\nbootstrap(\"https://github.com/aileot/nvim-laurel\")\n```\n\n#### 2. Add `require(\"thyme\").loader` to `package.loaders`\n\n```lua\n-- Wrapping the `require` in `function-end` is important for lazy-load.\ntable.insert(package.loaders, function(...)\n  return require(\"thyme\").loader(...) -- Make sure to `return` the result!\nend)\n```\n\n#### 3. Add a cache path for lua cache to `\u0026runtimepath`\n\n```lua\n-- Note: Add a cache path to \u0026rtp. The path MUST include the literal substring \"/thyme/compile\".\nlocal thyme_cache_prefix = vim.fn.stdpath(\"cache\") .. \"/thyme/compiled\"\nvim.opt.rtp:prepend(thyme_cache_prefix)\n-- Note: `vim.loader` internally cache \u0026rtp, and recache it if modified.\n-- Please test the best place to `vim.loader.enable()` by yourself.\nvim.loader.enable() -- (optional) before the `bootstrap`s above, it could increase startuptime.\n```\n\n### 2. (Optional) Manage `nvim-thyme` with Plugin Manager\n\n\u003c!--\nNOTE: GFM callouts are invalid in \u003cdetails\u003e.\n--\u003e\n\n\u003e [!CAUTION]\n\u003e Please make sure to disable the `lazy.nvim`'s `performance.rtp.reset`\n\u003e option. (The option is enabled by default.)\n\u003e Otherwise, you would get into \"loop or previous error,\" or would be\n\u003e complained that the literal substring `\"/thyme/compile\"` is missing in\n\u003e `\u0026runtimepath`.\n\n\u003cdetails open\u003e\n\u003csummary\u003e\nWith \u003ca href=\"https://github.com/folke/lazy.nvim\"\u003efolke/lazy.nvim\u003c/a\u003e,\n\u003c/summary\u003e\n\n```lua\nrequire(\"lazy\").setup({\n  spec = {\n    {\n      \"aileot/nvim-thyme\",\n      version = \"^v1.4.0\",\n      build = \":lua require('thyme').setup(); vim.cmd('ThymeCacheClear')\",\n      -- For config, see the \"Setup Optional Interfaces\" section\n      -- and \"Options in .nvim-thyme.fnl\" below!\n      -- config = function()\n      -- end,\n    },\n    -- If you also manage macro plugin versions, please clear the Lua cache on the updates!\n    {\n      \"aileot/nvim-laurel\",\n      build = \":lua require('thyme').setup(); vim.cmd('ThymeCacheClear')\",\n      -- and other settings\n    },\n    -- Optional dependency plugin.\n    {\n      \"eraserhd/parinfer-rust\",\n      build = \"cargo build --release\",\n    },\n    -- and other plugin specs...\n  },\n  performance = {\n    rtp = {\n      reset = false, -- Important! It's unfortunately incompatible with nvim-thyme.\n    },\n  },\n})\n```\n\n(If you also manage macro plugin versions, _please clear the Lua cache_ on the\nupdates! You can automate it either on spec hook like above, on user event hook\nlike below; otherwise, please run `:ThymeCacheClear` manually.)\n\n```lua\n-- If you also manage other Fennel macro plugin versions, please clear the Lua cache on the updates!\nvim.api.nvim_create_autocmd(\"User\", {\n  pattern = \"LazyUpdate\", -- for lazy.nvim\n  callback = function()\n    require(\"thyme\").setup()\n    vim.cmd(\"ThymeCacheClear\")\n  end,\n})\n```\n\n\u003c/details\u003e\n\n### 3. Setup Optional Interfaces\n\nTo optimize the nvim startuptime, `nvim-thyme` suggests you to define the Ex command\ninterfaces and its fnl file state checker some time after `VimEnter`. For example,\n\n```lua\n-- In init.lua,\nvim.api.nvim_create_autocmd(\"VimEnter\", {\n  once = true,\n  callback = function() -- You can substitute vim.schedule_wrap if you don't mind its tiny overhead.\n    vim.schedule(function()\n      require(\"thyme\").setup()\n    end)\n  end,\n})\n```\n\n### 4. Start `nvim`\n\nIf you don't have `.nvim-thyme.fnl` at `vim.fn.stdpath('config')`, generally\n`$XDG_CONFIG_HOME/nvim`, you will be asked to generate `.nvim-thyme.fnl` there\nwith recommended config. See the [Configuration][configuration] section below.\n\n### 5. checkhealth\n\nEnsure the setup by `:checkhealth thyme`.\n\n## 🚀 Usage\n\nPlease read the [reference][reference] for the details and additional features.\n\n## ⚙️ Configuration\n\n### Options in `.nvim-thyme.fnl`\n\n`nvim-thyme` manages all the configurations in a separate config file `.nvim-thyme.fnl`\ninstead of `thyme.setup`.\n\n\u003e [!NOTE]\n\u003e This is a point to optimize the nvim startuptime with the JIT compiler. Apart\n\u003e from `thyme.setup` but with `.nvim-thyme.fnl`, the configurations can be\n\u003e _lazily evaluated_ only by need.\n\nHere is a sample config:\n\n```fennel\n{:max-rollback 5\n :compiler-options {:correlate true\n                    ;; :compilerEnv _G\n                    :error-pinpoint [\"|\u003e\u003e\" \"\u003c\u003c|\"]}\n :fnl-dir \"fnl\"\n :macro-path \"./fnl/?.fnlm;./fnl/?/init-macros.fnlm;./fnl/?.fnl;./fnl/?/init-macros.fnl;./fnl/?/init.fnl\"}\n```\n\nHowever, _you don't have to prepare it by yourself!_\n\nIf `.nvim-thyme.fnl` is missing at `vim.fn.stdpath('config')` on nvim startup,\nyou will be asked for confirmation. Once you agree, a new `.nvim-thyme.fnl` will\nbe generated to `vim.fn.stdpath('config')` with recommended settings there. The\ngenerated file is a copy of [.nvim-thyme.fnl.example][.nvim-thyme.fnl.example].\n\nFor all the available options, see the\n[section](./docs/reference.md#options-in-nvim-thymefnl) in the reference.\n\n\u003c!--\n\nNOTE: The tricks are incompatible with language servers like fennel-ls.\n\nFor performance, you can `bootstrap` _macro_ plugins inside `.nvim-thyme.fnl`\nsince, on missing a module written in Fennel, `.nvim-thyme.fnl` is always\nloaded once a session of nvim. For example,\n\n```fennel\n(local root :/your/dir-path/to/install/plugins\n(fn bootstrap! [url]\n  ;; Note: How to extract name from url depends on what plugin manager you use.\n  (let [name (url:gsub \"^.*/\" \"\")\n        path (.. root \"/\" name)]\n    (when (not (vim.uv.fs_stat path))\n      (vim.notify (: \"Install missing %s from %s...\" :format name url)\n                  vim.log.levels.WARN)\n      (vim.fn.system [:git :clone \"--filter=blob:none\" url path])\n      (vim.notify (: \"%s is installed under %s.\" :format url path)))\n    (vim.opt.rtp:prepend path)))\n\n(bootstrap! \"https://github.com/aileot/nvim-laurel\")\n{:rollback true\n :compiler-options {:correlate true\n                    ;; :compilerEnv _G\n                    :error-pinpoint [\"|\u003e\u003e\" \"\u003c\u003c|\"]}\n :macro-path \"./fnl/?.fnl;./fnl/?/init-macros.fnl;./fnl/?/init.fnl\"}\n```\n\n--\u003e\n\n## 💥 Comparisons\n\n| feature                        | nvim-thyme    | hotpot.nvim             | tangerine.nvim | nfnl |\n| :----------------------------- | ------------- | ----------------------- | -------------- | ---- |\n| **Runtime Compiler**           | ✅            | ✅                      | ✅             | ❌   |\n| _(Compile in lua/ at runtime)_ | ✅ (optional) | ✅ (but with `:source`) | ❌             | ❌   |\n| **Zero Startup Overhead**      | ✅            | ❌                      | ❌             | ✅   |\n| **Safety Rollbacks**           | ✅            | ❌                      | ❌             | ❌   |\n| **Parinfer Integration**       | ✅            | ❌                      | ❌             | ❌   |\n\n### 🚚 Migration Guide\n\n### From hotpot.nvim\n\n```lua\nrequire(\"hotpot\").setup({\n  compiler = {\n    macros = {\n      env = \"_COMPILER\",\n      correlate = true,\n    },\n    modules = {\n      correlate = true,\n    },\n  },\n})\n```\n\n```fennel\n;; in .nvim-thyme.fnl at stdpath('config')\n;; The thyme's searchers always set \"_COMPILER\" at \"env\" in evaluating macro modules.\n{:compiler-options {:correlate true}\n```\n\n### From tangerine.nvim\n\n```lua\nrequire([[tangerine]]).setup({})\n```\n\n```fennel\n;; in .nvim-thyme.fnl at stdpath('config')\n{:compiler-options {:compilerEnv _G\n                    :useBitLib true}\n```\n\n### From nfnl.nvim\n\n1. (_important_) Rename `lua/` at `vim.fn.stdpath('config')`,\n   like`mv lua/ lua.bk/`.\\\n   Otherwise, there's some chances that nvim would unquestionably load lua files\n   under the `lua/` directory apart from `nvim-thyme`.\n2. Add codes to enable thyme's auto-compile system. See the\n   [Installation][installation] section above.\n3. Start `nvim`. You will be asked to generate `.nvim-thyme.fnl` at the\n   directory `vim.fn.stdpath('config')`.\n\n### 🍿 Ex Command Comparisons\n\nNote: `nvim-thyme` only provides user commands after you call\n[`thyme.setup`](./docs/reference.md#thyme-setup--or--thyme-setup`) for\nperformance.\n\n### Evaluate expression and print the result\n\nWith [parinfer-rust][parinfer-rust],\n\n```vim\n\" nvim-thyme\n:Fnl (+ 1 1\n\" hotpot.nvim\n:Fnl= (+ 1 1)\n\" tangerine.nvim\n:Fnl (print (+ 1 1))\n```\n\n### Evaluate expression without printing the result\n\n```vim\n\" nvim-thyme\n:silent Fnl (+ 1 1\n\" hotpot.nvim\n:Fnl (+ 1 1)\n\" tangerine.nvim\n:Fnl (+ 1 1)\n```\n\n### Evaluate current file\n\n```vim\n\" nvim-thyme\n:FnlFile %\n\" hotpot.nvim\n:Fnlfile %\n\" tangerine.nvim\n:FnlFile %:p\n\" nfnl.nvim\n:NfnlFile (vim.fn.expand \"%:p\")\n```\n\n### Not in Plan\n\n- Unlike [tangerine.nvim][tangerine.nvim], `nvim-thyme` does _**not** compile\n  `$XDG_CONFIG_HOME/nvim/init.fnl`._\n- Unlike [hotpot.nvim][hotpot.nvim], `nvim-thyme` does _**not** load_\n  `plugin/*.fnl`, `ftplugin/*.fnl`, `lsp/*.fnl` and so on; `nvim-thyme` does\n  _**not** support_ Vim commands (e.g., `:source` and `:runtime`) to load your\n  Fennel files. `nvim-thyme` _**only** supports_ Lua/Fennel loader like\n  `require`.\n- Unlike [nfnl][nfnl], `nvim-thyme` does _**not** compile_ Fennel files which is\n  not loaded in nvim runtime by default. If you still need to compile Fennel\n  files in a project apart from nvim runtime, you have several options:\n  - Define some `autocmd`s in your config or in .nvim.lua.\n  - Use another compiler plugin _together_ like [nfnl][nfnl].\n  - Use a task runner like [overseer.nvim][overseer.nvim].\n  - Use git hooks. (See the [.githooks](./.githooks) in this project as a WIP\n    example. Help wanted.)\n\n## 🕶️ Disclosure\n\n\u003c!--\nTODO: Comment out once recompile strategy work on BufWritePost at macro files.\n### Macro Dependency Tracking\n\n- The _macro dependency tracker_ is based on the nature that\n  the [call stack][] of a module represents the dependencies of the module as is.\n  No `fennel.plugins` dependency!\n\n[call stack]: https://en.wikipedia.org/wiki/Call_stack\n--\u003e\n\n### Misleading…?\n\n- As you may have noticed, the term of _Zero overhead_ only means it does not\n  affect startup time once compiled at an nvim runtime.\n- As you may have noticed, the term of _JIT (Just-in-time)_ might be a bit\n  misleading due to the convention.\\\n  The _JIT_ in this project is more like JIT in\n  [JIT Manufacturing](https://en.wikipedia.org/w/index.php?title=Just-in-time_manufacturing)\n  than in\n  [JIT Compilation](https://en.wikipedia.org/wiki/Just-in-time_compilation): it\n  compiles missing modules, and optionally recompiles them on `BufWritePost` and\n  `FileChangedShellPost`.\n\n## ❓ FAQ\n\n### Q. Is it compatible with `vim.loader`?\n\nA. Yes, it is. `vim.loader.enable()` optimizes the `nvim-thyme` loader.\n\n### Q: \"loop or previous error\"?\n\nA. `nvim-thyme` is incompatible the option `performance.rtp.reset` of [lazy.nvim][].\n\nMake sure you've disabled the lazy.nvim's `performance.rtp.reset` option.\n(The option is enabled by default.)\n\n### Q. Can I disable parinfer for editing buffers, keeping it enabled in the Cmdline integration?\n\nA. Yes, you can. Just set the variable `vim.g.parinfer_enabled` to `false`.\n\n### Q. Does the rollback system help me avoid starting in nearly mother-naked nvim due to some misconfigurations?\n\nA. Yes, but only for the modules written in Fennel.\n\nRollbacks are automatically applied when errors are detected at _compile_ time.\nIn addition to that, with the combinations of [:ThymeRollbackSwitch][] and [:ThymeRollbackMount][],\nyou can also roll back for _runtime_ errors in compiled Lua.\n\nHowever, it is recommended to put your configuration files under git management first\nin case `nvim` even fail to reach the lines that defines the rollback helper commands.\n\n### Q. How can I mix Fennel config with Lua config in a directory?\n\nA. By default, or with the [recommended config][.nvim-thyme.fnl.example],\n`nvim-thyme` will make `nvim` load Fennel modules in `lua/` directory\nas the default `nvim` loads the other Lua modules\nunless `fnl/` exists at the directory that `stdpath(\"config\")` returns (usually `~/.config/nvim`).\n\nNote that, if both `foo.lua` and `foo.fnl` exist at the `lua/` directory, `foo.lua` is always loaded.\n\nThe relevant options are only [fnl-dir][] and [macro-path][].\n\n\u003cdetails\u003e\n\u003csummary\u003e\nThe collapse illustrate how to merge `fnl/` into the `lua/` directory as safely as possible.\n\u003c/summary\u003e\n\n(Assume your `nvim` config files are managed by `git`, at `~/.config/nvim`.)\n\n```sh\n# Commit current status\ngit add -A\ngit commit -m 'save states before merging fnl/ into lua/'\n# Note the current branch name (main or master, maybe)\ngit branch --show-current\n# Create and switch a new branch. (The branch name is an example.)\ngit switch -c merge-fnl-into-lua\ncd ~/.config/nvim\n# Check the results with `--dry-run`.\ngit mv --dry-run fnl lua\ngit mv --verbose fnl lua\n# Make sure your nvim can start without issues.\nnvim\n```\n\nIf you have any issues,\nreset to the previous states where `fnl/` and `lua/` have co-existed\nby the following command.\n\n```sh\n# Assume your default branch is `main`.\ngit reset --hard main\ngit switch main\n# Put aside the previous cache directory.\nmv ~/.cache/nvim/thyme{,.bk}\n```\n\n\u003c/details\u003e\n\n## 📚 Acknowledgement\n\nThanks to [Shougo](https://github.com/Shougo) for\n[dein.vim](https://github.com/Shougo/dein.vim) the legendary. The design heavily\ninspires `nvim-thyme`.\n\nThanks to [harrygallagher4](https://github.com/harrygallagher4) for\n[nvim-parinfer-rust][nvim-parinfer-rust]. The integration of `nvim-thyme` with\n[parinfer][parinfer] is based in part on copy extracted from the project, so the\n[file](./fnl/thyme/wrapper/parinfer.fnl) on `parinfer` is also on the license\n[CC0-1.0](https://github.com/harrygallagher4/nvim-parinfer-rust/blob/34e2e5902399e4f1e75f4d83575caddb8154af26/LICENSE).\n\n[.nvim-thyme.fnl.example]: ./.nvim-thyme.fnl.example\n[:ThymeRollbackMount]: ./docs/reference.md#thymerollbackmount-target\n[:ThymeRollbackSwitch]: ./docs/reference.md#thymerollbackswitch-target\n[Fennel]: https://git.sr.ht/~technomancy/fennel\n[alternatives]: #-alternatives\n[aniseed]: https://github.com/Olical/aniseed\n[builtin treesitter]: https://neovim.io/doc/user/treesitter.html\n[configuration]: #%EF%B8%8F-configuration\n[fnl-dir]: ./docs/reference.md#fnl-dir\n[hotpot.nvim]: https://github.com/rktjmp/hotpot.nvim\n[installation]: #-installation\n[lazy.nvim]: https://github.com/folke/lazy.nvim\n[macro-path]: ./docs/reference.md#macro-path\n[nfnl]: https://github.com/Olical/nfnl\n[nvim-parinfer-rust]: https://github.com/harrygallagher4/nvim-parinfer-rust\n[nvim-treesitter]: https://github.com/nvim-treesitter/nvim-treesitter\n[overseer.nvim]: https://github.com/stevearc/overseer.nvim\n[parinfer-rust]: https://github.com/eraserhd/parinfer-rust\n[parinfer]: https://shaunlebron.github.io/parinfer/\n[reference]: ./docs/reference.md\n[semantic versioning]: https://semver.org/\n[tangerine.nvim]: https://github.com/udayvir-singh/tangerine.nvim\n[tree-sitter-fennel]: https://github.com/alexmozaidze/tree-sitter-fennel\n[watch.strategy]: ./docs/reference.md#watchstrategy\n","funding_links":[],"categories":["Fennel"],"sub_categories":["Quickfix"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faileot%2Fnvim-thyme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faileot%2Fnvim-thyme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faileot%2Fnvim-thyme/lists"}