1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# lazy-like-loader.nvim
Lazy-like-loader is a plugin-loading plugin utilizing the builtin `vim.pack`
package manager, but incorporating a module-per-plugin loading paradigm like
[lazy.nvim](https://lazy.folke.io/) (see the way lazy does it
[here](https://lazy.folke.io/usage/structuring)).
Lazy-like-loader uses similar (not identical) idiomatic "plugin spec"
conventions to [lazy's plugin spec](https://lazy.folke.io/spec), making it
convenient for those moving from lazy to `vim.pack` or other plugin management
solutions (e.g. adding plugins via a separate package manager like Nix).
The loader can also be used to hierarchical loading via the `dependents` and
`dependencies` options in the plugin spec, and arbitrary functions can be setup
to run after loading via `loadFn`.
The entire loader is hyper-minimal at only ~70 lines of lua.
## Usage
Install the plugin using `vim.pack` (or another package manager if you'd like),
then initialize it like so:
```lua
require("lazy-like-loader").setup {
package = "tjk.plugins",
}
```
The `package` option is required. It will point to the package containing all
your plugin modules. In this case: `~/.config/nvim/lua/tjk/plugins` (or
wherever your nvim home is).
Plugin modules can then be defined using the `plugin spec`, for example:
```lua
-- autoclose.lua
return {
"autoclose",
"https://github.com/m4xshen/autoclose.nvim",
setup = {
options = { pair_spaces = true },
},
}
```
If the plugin cannot be loaded, then `source` will be passed to `vim.pack.add`
by default which will prompt the user to optionally install the plugin.
This behavior can be disabled by setting `packAddMissing = false` in `setup`.
More examples can be found as part of my [neovim config here](https://git.tjkeller.xyz/nvim/tree/lua/tjk/plugins)
## Plugin spec
| Property | Type | Description |
|-------------------|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [1] or moduleName | `string` | plugin name loaded via `require(moduleName)` |
| [2] or source | `string?` | plugin source, added via `vim.pack.add { source }` |
| dependencies | `plugin[]?` | table of plugins loaded before the initial plugin. same spec is used recursively |
| dependents | `plugin[]?` | table of plugins loaded after the initial plugin. same spec is used recursively |
| enabled | `boolean?` | whether to attempt to initialize the plugin the loader |
| loadFn | `fun()?` | runs after plugin and dependencies are successfully loaded, but before dependents |
| setup | `table` or `boolean?` | table passed to setup function. if unset or `false` then setup will not be ran. if `true` then opts is set to `{}`. otherwise opts is set to the value of `setup` |
|