Skip to content

Commit 5cb3eea

Browse files
authored
feat: support nixvim plugins load metrics (#532)
Signed-off-by: aaccardo <hackardo@gmail.com>
1 parent 62a10d9 commit 5cb3eea

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

lua/dashboard/utils.lua

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,50 @@ function utils.get_mru_list()
117117
return mru
118118
end
119119

120+
local function get_nixvim_full_stats()
121+
local nix_pack_dir = nil
122+
for path in vim.o.packpath:gmatch('[^,]+') do
123+
if path:find('-vim-pack-dir', 1, true) then
124+
nix_pack_dir = path .. '/pack/myNeovimPackages'
125+
break
126+
end
127+
end
128+
129+
if not nix_pack_dir then
130+
return { count = 0, loaded = 0 }
131+
end
132+
133+
local function scan_dir(type)
134+
local count, loaded = 0, 0
135+
local handle = uv.fs_scandir(nix_pack_dir .. '/' .. type)
136+
if not handle then
137+
return count, loaded
138+
end
139+
while true do
140+
local name = uv.fs_scandir_next(handle)
141+
if not name then
142+
break
143+
end
144+
count = count + 1
145+
for _, rtp_path in ipairs(vim.api.nvim_list_runtime_paths()) do
146+
if rtp_path:find(name, 1, true) and not rtp_path:match('/after$') then
147+
loaded = loaded + 1
148+
break
149+
end
150+
end
151+
end
152+
return count, loaded
153+
end
154+
155+
local start_total, start_loaded = scan_dir('start')
156+
local opt_total, opt_loaded = scan_dir('opt')
157+
158+
return {
159+
count = start_total + opt_total,
160+
loaded = start_loaded + opt_loaded,
161+
}
162+
end
163+
120164
function utils.get_package_manager_stats()
121165
local package_manager_stats = { name = '', count = 0, loaded = 0, time = 0 }
122166
---@diagnostic disable-next-line: undefined-global
@@ -154,6 +198,16 @@ function utils.get_package_manager_stats()
154198
package_manager_stats.loaded = loaded
155199
end
156200
end
201+
if
202+
package_manager_stats.name == ''
203+
and not utils.is_win
204+
and vim.o.packpath:match('/nix/store/.*%-vim%-pack%-dir') ~= nil
205+
then
206+
local nixvim_stats = get_nixvim_full_stats()
207+
package_manager_stats.name = 'nixvim'
208+
package_manager_stats.count = nixvim_stats.count
209+
package_manager_stats.loaded = nixvim_stats.loaded
210+
end
157211
return package_manager_stats
158212
end
159213

0 commit comments

Comments
 (0)