feat: config & setup

This commit is contained in:
Folke Lemaitre 2024-11-03 12:56:00 +01:00
parent fc929e878a
commit c98c4c0307
No known key found for this signature in database
GPG key ID: 41F8B1FBACAE2040
2 changed files with 79 additions and 0 deletions

75
lua/snacks/init.lua Normal file
View file

@ -0,0 +1,75 @@
---@class Snacks
---@field bigfile snacks.bigfile
---@field bufdelete snacks.bufdelete
---@field quickfile snacks.quickfile
---@field statuscolumn snacks.statuscolumn
local M = {}
setmetatable(M, {
__index = function(t, k)
---@diagnostic disable-next-line: no-unknown
t[k] = require("snacks." .. k)
return t[k]
end,
})
_G.Snacks = M
---@class snacks.Opts
---@field bigfile snacks.bigfile.Config | { enabled: boolean }
---@field quickfile { enabled: boolean }
---@field statuscolumn snacks.statuscolumn.Config | { enabled: boolean }
local config = {
bigfile = { enabled = true },
quickfile = { enabled = true },
statuscolumn = { enabled = true },
}
---@class snacks.Config: snacks.Opts
M.config = setmetatable({}, {
__index = function(_, k)
return config[k]
end,
})
---@generic T: table
---@param snack string
---@param defaults T
---@return T
function M.config.get(snack, defaults)
config[snack] = vim.tbl_deep_extend("force", defaults, config[snack] or {})
return config[snack]
end
---@param opts snacks.Opts?
function M.setup(opts)
config = vim.tbl_deep_extend("force", config, opts or {})
local group = vim.api.nvim_create_augroup("snacks", { clear = true })
if M.config.bigfile.enabled then
vim.api.nvim_create_autocmd("BufReadPre", {
group = group,
once = true,
callback = function()
Snacks.bigfile.setup()
end,
})
end
if M.config.quickfile.enabled then
vim.api.nvim_create_autocmd("BufReadPost", {
group = group,
once = true,
callback = function()
Snacks.quickfile.setup()
end,
})
end
if M.config.statuscolumn.enabled then
vim.o.statuscolumn = [[%!v:lua.require'snacks.statuscolumn'.get()]]
end
end
return M