Add 'nixCatsUtils' from 'nixCats'
							parent
							
								
									139089fc9d
								
							
						
					
					
						commit
						b6d3015559
					
				| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
-- Source: https://github.com/BirdeeHub/nixCats-nvim/blob/main/templates/example/lua/nixCatsUtils/catPacker.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: This function is for defining a paq.nvim fallback method of downloading plugins
 | 
			
		||||
-- when nixCats was not used to install your config.
 | 
			
		||||
-- If you only ever load your config using nixCats, you don't need this file.
 | 
			
		||||
 | 
			
		||||
-- it literally just only runs it when not on nixCats
 | 
			
		||||
-- all neovim package managers that use the regular plugin loading scheme
 | 
			
		||||
-- can be used this way, just do whatever the plugin manager needs to put it in the
 | 
			
		||||
-- opt directory for lazy loading, and add the build steps so that when theres no nix the steps are ran
 | 
			
		||||
function M.setup(v)
 | 
			
		||||
  if not vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] then
 | 
			
		||||
    local function clone_paq()
 | 
			
		||||
      local path = vim.fn.stdpath("data") .. "/site/pack/paqs/start/paq-nvim"
 | 
			
		||||
      local is_installed = vim.fn.empty(vim.fn.glob(path)) == 0
 | 
			
		||||
      if not is_installed then
 | 
			
		||||
        vim.fn.system({ "git", "clone", "--depth=1", "https://github.com/savq/paq-nvim.git", path })
 | 
			
		||||
        return true
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    local function bootstrap_paq(packages)
 | 
			
		||||
      local first_install = clone_paq()
 | 
			
		||||
      vim.cmd.packadd("paq-nvim")
 | 
			
		||||
      local paq = require("paq")
 | 
			
		||||
      if first_install then
 | 
			
		||||
        vim.notify("Installing plugins... If prompted, hit Enter to continue.")
 | 
			
		||||
      end
 | 
			
		||||
      paq(packages)
 | 
			
		||||
      paq.install()
 | 
			
		||||
    end
 | 
			
		||||
    bootstrap_paq(vim.list_extend({ "savq/paq-nvim" }, v))
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
return M
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,136 @@
 | 
			
		|||
-- Source: https://github.com/BirdeeHub/nixCats-nvim/blob/main/templates/example/lua/nixCatsUtils/init.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 = {}
 | 
			
		||||
 | 
			
		||||
--[[
 | 
			
		||||
  This file is for making your config still work WITHOUT nixCats.
 | 
			
		||||
  When you don't use nixCats to load your config,
 | 
			
		||||
  you wont have the nixCats plugin.
 | 
			
		||||
 | 
			
		||||
  The setup function defined here defines a mock nixCats plugin when nixCats wasnt used to load the config.
 | 
			
		||||
  This will help avoid indexing errors when the nixCats plugin doesnt exist.
 | 
			
		||||
 | 
			
		||||
  NOTE: If you only ever use nixCats to load your config, you don't need this file.
 | 
			
		||||
--]]
 | 
			
		||||
 | 
			
		||||
---@type boolean
 | 
			
		||||
M.isNixCats = vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil
 | 
			
		||||
 | 
			
		||||
---@class nixCatsSetupOpts
 | 
			
		||||
---@field non_nix_value boolean|nil
 | 
			
		||||
 | 
			
		||||
---This function will setup a mock nixCats plugin when not using nix
 | 
			
		||||
---It will help prevent you from running into indexing errors without a nixCats plugin from nix.
 | 
			
		||||
---If you loaded the config via nix, it does nothing
 | 
			
		||||
---non_nix_value defaults to true if not provided or is not a boolean.
 | 
			
		||||
---@param v nixCatsSetupOpts
 | 
			
		||||
function M.setup(v)
 | 
			
		||||
  if not M.isNixCats then
 | 
			
		||||
    local nixCats_default_value
 | 
			
		||||
    if type(v) == "table" and type(v.non_nix_value) == "boolean" then
 | 
			
		||||
      nixCats_default_value = v.non_nix_value
 | 
			
		||||
    else
 | 
			
		||||
      nixCats_default_value = true
 | 
			
		||||
    end
 | 
			
		||||
    local mk_with_meta = function(tbl)
 | 
			
		||||
      return setmetatable(tbl, {
 | 
			
		||||
        __call = function(_, attrpath)
 | 
			
		||||
          local strtable = {}
 | 
			
		||||
          if type(attrpath) == "table" then
 | 
			
		||||
            strtable = attrpath
 | 
			
		||||
          elseif type(attrpath) == "string" then
 | 
			
		||||
            for key in attrpath:gmatch("([^%.]+)") do
 | 
			
		||||
              table.insert(strtable, key)
 | 
			
		||||
            end
 | 
			
		||||
          else
 | 
			
		||||
            print("function requires a table of strings or a dot separated string")
 | 
			
		||||
            return
 | 
			
		||||
          end
 | 
			
		||||
          return vim.tbl_get(tbl, unpack(strtable))
 | 
			
		||||
        end,
 | 
			
		||||
      })
 | 
			
		||||
    end
 | 
			
		||||
    package.preload["nixCats"] = function()
 | 
			
		||||
      local ncsub = {
 | 
			
		||||
        get = function(_)
 | 
			
		||||
          return nixCats_default_value
 | 
			
		||||
        end,
 | 
			
		||||
        cats = mk_with_meta({
 | 
			
		||||
          nixCats_config_location = vim.fn.stdpath("config"),
 | 
			
		||||
          wrapRc = false,
 | 
			
		||||
        }),
 | 
			
		||||
        settings = mk_with_meta({
 | 
			
		||||
          nixCats_config_location = vim.fn.stdpath("config"),
 | 
			
		||||
          configDirName = os.getenv("NVIM_APPNAME") or "nvim",
 | 
			
		||||
          wrapRc = false,
 | 
			
		||||
        }),
 | 
			
		||||
        petShop = mk_with_meta({}),
 | 
			
		||||
        extra = mk_with_meta({}),
 | 
			
		||||
        pawsible = mk_with_meta({
 | 
			
		||||
          allPlugins = {
 | 
			
		||||
            start = {},
 | 
			
		||||
            opt = {},
 | 
			
		||||
          },
 | 
			
		||||
        }),
 | 
			
		||||
        configDir = vim.fn.stdpath("config"),
 | 
			
		||||
        packageBinPath = os.getenv("NVIM_WRAPPER_PATH_NIX") or vim.v.progpath,
 | 
			
		||||
      }
 | 
			
		||||
      return setmetatable(ncsub, {
 | 
			
		||||
        __call = function(_, cat)
 | 
			
		||||
          return ncsub.get(cat)
 | 
			
		||||
        end,
 | 
			
		||||
      })
 | 
			
		||||
    end
 | 
			
		||||
    _G.nixCats = require("nixCats")
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
---allows you to guarantee a boolean is returned, and also declare a different
 | 
			
		||||
---default value than specified in setup when not using nix to load the config
 | 
			
		||||
---@overload fun(v: string|string[]): boolean
 | 
			
		||||
---@overload fun(v: string|string[], default: boolean): boolean
 | 
			
		||||
function M.enableForCategory(v, default)
 | 
			
		||||
  if M.isNixCats or default == nil then
 | 
			
		||||
    if nixCats(v) then
 | 
			
		||||
      return true
 | 
			
		||||
    else
 | 
			
		||||
      return false
 | 
			
		||||
    end
 | 
			
		||||
  else
 | 
			
		||||
    return default
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
---if nix, return value of nixCats(v) else return default
 | 
			
		||||
---Exists to specify a different non_nix_value than the one in setup()
 | 
			
		||||
---@param v string|string[]
 | 
			
		||||
---@param default any
 | 
			
		||||
---@return any
 | 
			
		||||
function M.getCatOrDefault(v, default)
 | 
			
		||||
  if M.isNixCats then
 | 
			
		||||
    return nixCats(v)
 | 
			
		||||
  else
 | 
			
		||||
    return default
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
---for conditionally disabling build steps on nix, as they are done via nix
 | 
			
		||||
---I should probably have named it dontAddIfCats or something.
 | 
			
		||||
---@overload fun(v: any): any|nil
 | 
			
		||||
---Will return the second value if nix, otherwise the first
 | 
			
		||||
---@overload fun(v: any, o: any): any
 | 
			
		||||
function M.lazyAdd(v, o)
 | 
			
		||||
  if M.isNixCats then
 | 
			
		||||
    return o
 | 
			
		||||
  else
 | 
			
		||||
    return v
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return M
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,37 @@
 | 
			
		|||
-- Source: https://github.com/BirdeeHub/nixCats-nvim/blob/main/templates/example/lua/nixCatsUtils/lzUtils.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 = {}
 | 
			
		||||
-- A nixCats specific lze handler that you can use to conditionally enable by category easier.
 | 
			
		||||
-- at the start of your config, register with
 | 
			
		||||
-- require('lze').register_handlers(require('nixCatsUtils.lzUtils').for_cat)
 | 
			
		||||
-- before any calls to require('lze').load using the handler have been made.
 | 
			
		||||
-- accepts:
 | 
			
		||||
-- for_cat = { "your" "cat" };
 | 
			
		||||
-- for_cat = { cat = { "your" "cat" }, default = bool }
 | 
			
		||||
-- for_cat = "your.cat";
 | 
			
		||||
-- for_cat = { cat = "your.cat", default = bool }
 | 
			
		||||
-- where default is an alternate value for when nixCats was NOT used to install the config
 | 
			
		||||
M.for_cat = {
 | 
			
		||||
  spec_field = "for_cat",
 | 
			
		||||
  set_lazy = false,
 | 
			
		||||
  modify = function(plugin)
 | 
			
		||||
    if type(plugin.for_cat) == "table" and plugin.for_cat.cat ~= nil then
 | 
			
		||||
      if vim.g[ [[nixCats-special-rtp-entry-nixCats]] ] ~= nil then
 | 
			
		||||
        plugin.enabled = nixCats(plugin.for_cat.cat) or false
 | 
			
		||||
      else
 | 
			
		||||
        plugin.enabled = plugin.for_cat.default
 | 
			
		||||
      end
 | 
			
		||||
    else
 | 
			
		||||
      plugin.enabled = nixCats(plugin.for_cat) or false
 | 
			
		||||
    end
 | 
			
		||||
    return plugin
 | 
			
		||||
  end,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
return M
 | 
			
		||||
		Loading…
	
		Reference in New Issue