local Module = {} function Module:new(obj) obj = obj or {} setmetatable(obj, self) self.__index = self return obj end function Module:configure(config) self.config = config or {} end -- Called first to give the module a change to initialize class vars, etc -- If any configuration is present, configure() will have been called before -- initialize function Module:initialize() end -- Give the moduel a chance to register dependencies/etc (e.g., add plugins) function Module:register() end -- After all modules have had a chance to register dependencies/etc with -- each other, commit gives all plugins a chance to take action on those. function Module:commit() end -- Do any further module startup required function Module:boot() end -- Do core module things, this is _always called function Module:run() end -- This is _only_ called if we think we're running in a ui (e.g., neovim-qt) function Module:gui() end -- For doing first-time setup/install -- This could be called multiple times and should not lose data -- (E.g., plug#install) function Module:install() end return Module