Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I6a6a6964f2e65a11acab2a2f7413a5f94bff3815
2.4 KiB
Using the Module Interface
Before describing the module interface, it is worth nothing that NVF is a hybrid wrapper. It does not lock you into one of Lua or Nix, and both languages are considered first-class citizens for configuring your editor. However, Nix is the primarily supported language for NVF. While DAGs allow for the surgical insertion of Lua code into your configuration, in most cases you will be more interested in using or extending the Nix-based module system.
Up until v0.6, most modules exposed all supported plugin options as individual
module options. With the release of v0.6, almost every module has been converted
to a new setupOpts
format that provides complete user freedom over a plugin's
setup({})
function.
The anatomy of a typical plugin module consists of two primary options:
vim.<category>.<plugin>.enable
and vim.<category>.<plugin>.setupOpts
. The
first option is disabled by default, and dictates whether the plugin is enabled.
If set to true
, the plugin will be enabled and added to your Neovim's runtime
path. The second is an attribute set ({}
) that will be converted to the
plugin's setup table. From Lua-based setups you may be used to something like
this:
require("nvim-autopairs").setup({
check_ts = true,
disable_filetype = { "TelescopePrompt", "vim" }
})
This is the typical setup table. It is sometimes expressed slightly differently
(e.g., the table might be stored as a variable) but the gist is that you pass a
table to the setup()
function. The principle of setupOpts
is the same. It
converts a Nix attribute set to a Lua table using the toLuaObject
function
located in nvf's extended library. The same configuration would be expressed in
Nix as follows:
{
setupOpts = {
check_ts = true; # boolean
disable_filetype = ["TelescopePrompt" "vim"]; # Lua table
};
}
The setupOpts
option is freeform, so anything you put in it will be converted
to its Lua equivalent and will appear in your built init.lua
. You can find
details about toLuaObject
here. The top-level
DAG entries in nvf are documented in the DAG entries
section. You can read more about DAGs in the using DAGs
section.