feat: Add custom scripts and hook based setup

This commit introduces a hook system that allows the user to add custom
modules which can use these hooks to invoke function af specific NvChad
events to allow for extending og functionality
navigator
Morten Olsen 3 years ago committed by siduck76
parent ca1ad15ad2
commit bfc10e6034

@ -0,0 +1,22 @@
local function isModuleAvailable(name)
if package.loaded[name] then
return true
else
for _, searcher in ipairs(package.searchers or package.loaders) do
local loader = searcher(name)
if type(loader) == 'function' then
package.preload[name] = loader
return true
end
end
return false
end
end
local loadIfExists = function (module)
if isModuleAvailable(module) then
require(module)
end
end
loadIfExists('custom')

@ -0,0 +1,38 @@
local hooks, M = {}, {};
local allowed_hooks = {
"install_plugins",
"setup_mappings",
"ready",
}
local function has_value (tab, val)
for _, value in ipairs(tab) do
if value == val then
return true
end
end
return false
end
M.add = function(name, fn)
if not(has_value(allowed_hooks, name)) then
error("Custom lua uses unallowed hook " .. name)
end
if hooks[name] == nil then
hooks[name] = {}
end
table.insert(hooks[name], fn);
end
M.run = function(name, args)
if hooks[name] == nil then
return;
end
for _, hook in pairs(hooks[name]) do
hook(args)
end
end
return M;

@ -1,9 +1,12 @@
local core_modules = {
"core.custom",
"core.options",
"core.autocmds",
"core.mappings",
}
local hooks = require('core.hooks');
for _, module in ipairs(core_modules) do
local ok, err = pcall(require, module)
if not ok then
@ -13,3 +16,5 @@ end
-- set all the non plugin mappings
require("core.mappings").misc()
hooks.run("ready")

@ -1,8 +1,8 @@
local utils = require "core.utils"
local hooks = require "core.hooks"
local config = utils.load_config()
local map = utils.map
local maps = config.mappings
local plugin_maps = maps.plugin
@ -116,6 +116,7 @@ M.misc = function()
optional_mappings()
required_mappings()
user_config_mappings()
hooks.run("setup_mappings", map)
end
-- below are all plugin related mappings

@ -0,0 +1,2 @@
-- This is where you custom modules and plugins goes.
-- See the wiki for a guide on how to extend NvChad

@ -337,4 +337,6 @@ return packer.startup(function()
require("core.mappings").vim_fugitive()
end,
}
require("core.hooks").run("install_plugins", use)
end)

Loading…
Cancel
Save