local M = {} --- Sets a highlight group --- @param name string --- @param val? table --- @param opts? table The opts object.. --- - opts.transparent: (boolean) Specifies whether transparency is enabled. --- - opts.styles: (table) A table of custom styles for various elements. ---@return nil function M.set_hl(name, val, opts) local default_val = { fg = 'NONE', bg = 'NONE' } val = val or {} if not val.link then val = vim.tbl_extend('force', default_val, val) end if opts then if opts.styles then val = vim.tbl_extend('force', val, opts.styles) end if opts.transparent then val.bg = 'NONE' end end vim.api.nvim_set_hl(0, name, val) end --- get highlight group --- @param highlight_name string --- @return table highlight function M.get_hl(highlight_name) local highlight = vim.api.nvim_get_hl(0, { name = highlight_name, link = true }) if highlight.link then return M.get_hl(highlight.link) end return highlight end --- @param opts table The user-specified custom configuration --- - fnc (function): callback type configuration --- - tbl (function): table type configuration --- @param config (table|function): config to be used function M.on_config(opts, config) if type(config) == 'table' and not vim.tbl_isempty(config) then opts.tbl() elseif type(config) == 'function' then opts.fnc() end end return M