marleyvim/lua/nixCatsUtils/lazyCat.lua
2025-03-01 11:45:33 -08:00

119 lines
3.5 KiB
Lua

--[[
This directory is the luaUtils template.
You can choose what things from it that you would like to use.
And then delete the rest.
Everything in this directory is optional.
--]]
local M = {}
-- NOTE: If you don't use lazy.nvim, you don't need this file.
---lazy.nvim wrapper
---@overload fun(nixLazyPath: string|nil, lazySpec: any, opts: table)
---@overload fun(nixLazyPath: string|nil, opts: table)
function M.setup(nixLazyPath, lazySpec, opts)
local lazySpecs = nil
local lazyCFG = nil
if opts == nil and type(lazySpec) == "table" and lazySpec.spec then
lazyCFG = lazySpec
else
lazySpecs = lazySpec
lazyCFG = opts
end
local function regularLazyDownload()
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
vim.fn.system {
'git',
'clone',
'--filter=blob:none',
'https://github.com/folke/lazy.nvim.git',
'--branch=stable', -- latest stable release
lazypath,
}
end
return lazypath
end
local isNixCats = vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil
local lazypath
if not isNixCats then
-- No nixCats? Not nix. Do it normally
lazypath = regularLazyDownload()
vim.opt.rtp:prepend(lazypath)
else
local nixCats = require('nixCats')
-- Else, its nix, so we wrap lazy with a few extra config options
lazypath = nixLazyPath
-- and also we probably dont have to download lazy either
if lazypath == nil then
lazypath = regularLazyDownload()
end
local oldPath
local lazypatterns
local fallback
if type(lazyCFG) == "table" and type(lazyCFG.dev) == "table" then
lazypatterns = lazyCFG.dev.patterns
fallback = lazyCFG.dev.fallback
oldPath = lazyCFG.dev.path
end
local myNeovimPackages = nixCats.vimPackDir .. "/pack/myNeovimPackages"
local newLazyOpts = {
performance = {
rtp = {
reset = false,
},
},
dev = {
path = function(plugin)
local path = nil
if type(oldPath) == "string" and vim.fn.isdirectory(oldPath .. "/" .. plugin.name) == 1 then
path = oldPath .. "/" .. plugin.name
elseif type(oldPath) == "function" then
path = oldPath(plugin)
if type(path) ~= "string" then
path = nil
end
end
if path == nil then
if vim.fn.isdirectory(myNeovimPackages .. "/start/" .. plugin.name) == 1 then
path = myNeovimPackages .. "/start/" .. plugin.name
elseif vim.fn.isdirectory(myNeovimPackages .. "/opt/" .. plugin.name) == 1 then
path = myNeovimPackages .. "/opt/" .. plugin.name
else
path = "~/projects/" .. plugin.name
end
end
return path
end,
patterns = lazypatterns or { "" },
fallback = fallback == nil and true or fallback,
}
}
lazyCFG = vim.tbl_deep_extend("force", lazyCFG or {}, newLazyOpts)
-- do the reset we disabled without removing important stuff
local cfgdir = nixCats.configDir
vim.opt.rtp = {
cfgdir,
nixCats.nixCatsPath,
nixCats.pawsible.allPlugins.ts_grammar_path,
vim.fn.stdpath("data") .. "/site",
lazypath,
vim.env.VIMRUNTIME,
vim.fn.fnamemodify(vim.v.progpath, ":p:h:h") .. "/lib/nvim",
cfgdir .. "/after",
}
end
if lazySpecs then
require('lazy').setup(lazySpecs, lazyCFG)
else
require('lazy').setup(lazyCFG)
end
end
return M