diff --git a/lua/lazyvim/config/init.lua b/lua/lazyvim/config/init.lua index 9fef3778..19544ea1 100644 --- a/lua/lazyvim/config/init.lua +++ b/lua/lazyvim/config/init.lua @@ -128,6 +128,20 @@ function M.load(name) end end +M.did_init = false +function M.init() + if not M.did_init then + M.did_init = true + -- delay notifications till vim.notify was replaced or after 500ms + require("lazyvim.util").lazy_notify() + + -- load options here, before lazy init while sourcing plugin modules + -- this is needed to make sure options will be correctly applied + -- after installing missing plugins + require("lazyvim.config").load("options") + end +end + setmetatable(M, { __index = function(_, key) if options == nil then diff --git a/lua/lazyvim/plugins/init.lua b/lua/lazyvim/plugins/init.lua index 06e88368..9d004d60 100644 --- a/lua/lazyvim/plugins/init.lua +++ b/lua/lazyvim/plugins/init.lua @@ -1,6 +1,3 @@ --- load options here, before lazy init while sourcing plugin modules --- this is needed to make sure options will be correctly applied --- after installing missing plugins -require("lazyvim.config").load("options") +require("lazyvim.config").init() return {} diff --git a/lua/lazyvim/plugins/ui.lua b/lua/lazyvim/plugins/ui.lua index bacf4d77..feb6d6fc 100644 --- a/lua/lazyvim/plugins/ui.lua +++ b/lua/lazyvim/plugins/ui.lua @@ -20,12 +20,6 @@ return { return math.floor(vim.o.columns * 0.75) end, }, - init = function() - -- lazy-load notify here. Will be overriden by Noice when it loads - vim.notify = function(...) - return require("notify").notify(...) - end - end, }, -- better vim.ui diff --git a/lua/lazyvim/util/init.lua b/lua/lazyvim/util/init.lua index b198e7b4..ea9ffdee 100644 --- a/lua/lazyvim/util/init.lua +++ b/lua/lazyvim/util/init.lua @@ -125,4 +125,41 @@ function M.deprecate(old, new) Util.warn(("`%s` is deprecated. Please use `%s` instead"):format(old, new), { title = "LazyVim" }) end +-- delay notifications till vim.notify was replaced or after 500ms +function M.lazy_notify() + local notifs = {} + local function temp(...) + table.insert(notifs, vim.F.pack_len(...)) + end + + vim.notify = temp + local orig = vim.notify + + local timer = vim.loop.new_timer() + local check = vim.loop.new_check() + + local replay = function() + timer:stop() + check:stop() + if vim.notify == temp then + vim.notify = orig -- put back the original notify if needed + end + vim.schedule(function() + ---@diagnostic disable-next-line: no-unknown + for _, notif in ipairs(notifs) do + vim.notify(vim.F.unpack_len(notif)) + end + end) + end + + -- wait till vim.notify has been replaced + check:start(function() + if vim.notify ~= temp then + replay() + end + end) + -- or if it took more than 500ms, then something went wrong + timer:start(500, 0, replay) +end + return M