diff options
| author | Tim Keller <tjk@tjkeller.xyz> | 2026-05-22 17:06:16 -0500 |
|---|---|---|
| committer | Tim Keller <tjk@tjkeller.xyz> | 2026-05-22 17:06:16 -0500 |
| commit | e3f222487a57b2f3f995628630cd9ae65c3a210b (patch) | |
| tree | f1a3c8582ae71d859b2dd6e7c3a55b2f2a30d3f8 /lua/tjk/pluginloader.lua | |
| parent | f83593f430118f0499454f88cbe028c822e760a3 (diff) | |
| download | nvim-master.tar.xz nvim-master.zip | |
Diffstat (limited to 'lua/tjk/pluginloader.lua')
| -rw-r--r-- | lua/tjk/pluginloader.lua | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lua/tjk/pluginloader.lua b/lua/tjk/pluginloader.lua new file mode 100644 index 0000000..92ed0af --- /dev/null +++ b/lua/tjk/pluginloader.lua @@ -0,0 +1,47 @@ +local pluginsMod = "tjk.plugins" -- module containing plugin modules + +-- fancy plugin loader +function require_plugin(moduleName, source, setup, loadFn) + local ok, mod = pcall(require, moduleName) + if not ok then + if not source then + vim.notify("Failed to load plugin module without source " .. moduleName, vim.log.levels.ERROR) + return + end + vim.pack.add { source } + ok, mod = pcall(require, moduleName) + if not ok then + vim.notify(mod, vim.log.levels.ERROR) + return + end + end + if setup and mod.setup then + mod.setup(setup == true and {} or setup) + end + if loadFn then + loadFn() + end +end + +-- helper for handling dependencies and parsing module +function require_plugin_from_module(mod) + -- mod == true means it returned nothing + if mod == true or mod.enabled == false then + return + end + for _, dMod in ipairs(mod.dependencies or {}) do + require_plugin_from_module(dMod) + end + require_plugin(mod.moduleName or mod[1], mod.source or mod[2], mod.setup, mod.loadFn) + for _, dMod in ipairs(mod.dependents or {}) do + require_plugin_from_module(dMod) + end +end + +-- loop over plugins +local pluginsPath = vim.fn.stdpath("config") .. "/lua/" .. pluginsMod:gsub("%.", "/") +for _, f in ipairs(vim.fn.glob(pluginsPath .. "/*.lua", false, true)) do + local name = vim.fn.fnamemodify(f, ":t:r") + local modName = pluginsMod .. "." .. name + require_plugin_from_module(require(modName)) +end |
