From e8e396558b52be4319d93b995da91b16fd9793b7 Mon Sep 17 00:00:00 2001 From: Austin Horstman Date: Tue, 10 Dec 2024 10:36:31 -0600 Subject: [PATCH] docs/user-guide: add lazy-loading.md --- docs/mdbook/SUMMARY.md | 1 + docs/user-guide/lazy-loading.md | 93 +++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 docs/user-guide/lazy-loading.md diff --git a/docs/mdbook/SUMMARY.md b/docs/mdbook/SUMMARY.md index cf281108b8..d08c19fd7d 100644 --- a/docs/mdbook/SUMMARY.md +++ b/docs/mdbook/SUMMARY.md @@ -8,6 +8,7 @@ - [Helpers](./user-guide/helpers.md) - [FAQ](./user-guide/faq.md) - [Configuration examples](./user-guide/config-examples.md) +- [Lazy Loading](./user-guide/lazy-loading.md) # Platforms diff --git a/docs/user-guide/lazy-loading.md b/docs/user-guide/lazy-loading.md new file mode 100644 index 0000000000..5280dcc103 --- /dev/null +++ b/docs/user-guide/lazy-loading.md @@ -0,0 +1,93 @@ +# Lazy Loading + +> [!WARNING] +> This is an experimental option and may not work as expected with all plugins. +> The API may change without notice. +> +> Please report any issues you encounter. + +> [!NOTE] +> When the lazy loading functionality is enabled, the plugin's configuration is +> routed to the enabled lazy provider. Options mentioned will be in relation to +> the `${namespace}.${name}.lazyLoad` context. + +## Supported Lazy Loading Providers + +It is recommended to become familiar with lazy loading strategies supported by +your provider in their upstream documentation and the corresponding plugin's +support. + +Currently we only support **one** lazy loader: + +- lz.n: [`plugins.lz-n`](../plugins/lz-n/index.md) - + [upstream docs](https://github.com/nvim-neorocks/lz.n?tab=readme-ov-file#plugin-spec) + +## Enabling Lazy Loading Per Plugin + +You can enable lazy loading for a plugin by passing a configuration to +`lazyLoad.settings`. This configuration is passed through to the lazy loading +provider's loading mechanism. + +If you are just wanting to store potential configuration without enabling it, +you can explicitly disable it setting `lazyLoad.enable = false`. + +By default, we route the generated setup code to your lazy loading provider, but +it can be overridden by using the `lazyLoad.settings` option. + +For `Lz.n`, the `lazyLoad.settings.after` option contains what it will call when +a trigger condition is met. + +## Configuring Triggers + +You need to define the trigger conditions in which a plugin will be loaded. This +is done through the `lazyLoad.settings` option. + +```nix +plugins = { + grug-far = { + enable = true; + lazyLoad = { + settings = { + cmd = "GrugFar"; + }; + }; + }; +}; +``` + +```nix +plugins = { + glow = { + enable = true; + lazyLoad.settings.ft = "markdown"; + }; +``` + +```nix +plugins.toggleterm = { + enable = true; + lazyLoad = { + settings = { + cmd = "ToggleTerm"; + keys = [ + "tg" + "gg" + ]; + }; + }; +}; +``` + +### Colorschemes + +Colorschemes do not require explicit settings configuration. In `lz-n`, we will +set up the `colorscheme` trigger to the name of the `colorscheme` so that it is +lazy loaded when the `colorscheme` is requested. + +```nix +colorscheme = "catppuccin"; +colorschemes.catppuccin = { + enable = true; + lazyLoad.enable = true; +}; +```