feat(extras): big rework of default extras

This commit is contained in:
Folke Lemaitre 2025-02-08 15:04:46 +01:00
parent 0416376733
commit 525377dee9
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
13 changed files with 222 additions and 200 deletions

View file

@ -144,8 +144,10 @@ M.json = {
extras = {}, ---@type string[]
},
}
M.json_loaded = false
function M.json.load()
M.json_loaded = true
local f = io.open(M.json.path, "r")
if f then
local data = f:read("*a")
@ -322,6 +324,62 @@ function M.init()
M.json.load()
end
---@alias LazyVimDefault {name: string, extra: string, enabled?: boolean, origin?: "global" | "default" | "extra" }
local default_extras ---@type table<string, LazyVimDefault>
function M.get_defaults()
if default_extras then
return default_extras
end
---@type table<string, LazyVimDefault[]>
local checks = {
picker = {
{ name = "fzf", extra = "editor.fzf" },
{ name = "snacks", extra = "editor.snacks_picker" },
{ name = "telescope", extra = "editor.telescope" },
},
cmp = {
{ name = "blink.cmp", extra = "coding.blink", enabled = vim.fn.has("nvim-0.10") == 1 },
{ name = "nvim-cmp", extra = "coding.nvim-cmp" },
},
explorer = {
{ name = "neo-tree", extra = "editor.neo-tree" },
{ name = "snacks", extra = "editor.snacks_explorer" },
},
}
default_extras = {}
for name, check in pairs(checks) do
local valid = {} ---@type string[]
for _, extra in ipairs(check) do
if extra.enabled ~= false then
valid[#valid + 1] = extra.name
end
end
local origin = "default"
local use = vim.g["lazyvim_" .. name]
use = vim.tbl_contains(valid, use or "auto") and use or nil
origin = use and "global" or origin
for _, extra in ipairs(use and {} or check) do
if extra.enabled ~= false and LazyVim.has_extra(extra.extra) then
use = extra.name
break
end
end
origin = use and "extra" or origin
use = use or valid[1]
for _, extra in ipairs(check) do
local import = "lazyvim.plugins.extras." .. extra.extra
extra = vim.deepcopy(extra)
extra.enabled = extra.name == use
if extra.enabled then
extra.origin = origin
end
default_extras[import] = extra
end
end
return default_extras
end
setmetatable(M, {
__index = function(_, key)
if options == nil then