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
pull/493/head
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