feat: make ConfigMgr
into a singleton
This commit is contained in:
parent
605c230d8a
commit
8e828749cd
@ -48,9 +48,9 @@ end
|
|||||||
function M.colorscheme() end
|
function M.colorscheme() end
|
||||||
|
|
||||||
---GruberDarker configuration bootstrapper
|
---GruberDarker configuration bootstrapper
|
||||||
---@param opts Options
|
---@param opts? GruberDarkerOpts
|
||||||
function M.setup(opts)
|
function M.setup(opts)
|
||||||
config.set(opts or {})
|
config.setup(opts)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
@ -1,33 +1,46 @@
|
|||||||
---@class ConfigMgr
|
---@class GruberDarkerOpts
|
||||||
---@field private resolved_opts Options
|
|
||||||
|
|
||||||
---@class Options
|
|
||||||
---@field bold boolean
|
---@field bold boolean
|
||||||
---@field italic boolean
|
---@field italic boolean
|
||||||
---@field underline boolean
|
---@field underline boolean
|
||||||
---@field comment_italics boolean
|
---@field comment_italics boolean
|
||||||
|
|
||||||
---@type ConfigMgr
|
---@type GruberDarkerOpts
|
||||||
local M = {
|
local DEFAULTS = {
|
||||||
resolved_opts = {
|
bold = true,
|
||||||
bold = true,
|
italic = true,
|
||||||
italic = true,
|
underline = true,
|
||||||
underline = true,
|
comment_italics = true,
|
||||||
comment_italics = true,
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
---@class ConfigMgr
|
||||||
|
---@field private resolved_opts GruberDarkerOpts
|
||||||
|
local ConfigMgr = {}
|
||||||
|
ConfigMgr.__index = ConfigMgr
|
||||||
|
|
||||||
|
---@type ConfigMgr|nil
|
||||||
|
local instance = nil
|
||||||
|
|
||||||
---Get GruberDarker user preferences
|
---Get GruberDarker user preferences
|
||||||
---@return Options
|
---@return GruberDarkerOpts
|
||||||
---@nodiscard
|
---@nodiscard
|
||||||
function M.get_resolved_opts()
|
function ConfigMgr.get_opts()
|
||||||
return M.resolved_opts
|
if instance ~= nil then
|
||||||
|
return instance.resolved_opts
|
||||||
|
end
|
||||||
|
|
||||||
|
return DEFAULTS
|
||||||
end
|
end
|
||||||
|
|
||||||
---Set GruberDarker colorscheme options
|
---Set GruberDarker colorscheme options
|
||||||
---@param opts Options
|
---@param opts? GruberDarkerOpts
|
||||||
function M.set(opts)
|
function ConfigMgr.setup(opts)
|
||||||
M.resolved_opts = vim.tbl_deep_extend("force", M.resolved_opts, opts)
|
if instance ~= nil then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
instance = setmetatable({
|
||||||
|
resolved_opts = vim.tbl_deep_extend("force", DEFAULTS, opts or {}),
|
||||||
|
}, ConfigMgr)
|
||||||
end
|
end
|
||||||
|
|
||||||
return M
|
return ConfigMgr
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
local c = require("gruber-darker.palette")
|
local c = require("gruber-darker.palette")
|
||||||
local config = require("gruber-darker.config").get_resolved_opts()
|
local opts = require("gruber-darker.config").get_opts()
|
||||||
local vim_hl = require("gruber-darker.highlights.vim")
|
local vim_hl = require("gruber-darker.highlights.vim")
|
||||||
local Highlight = require("gruber-darker.highlight")
|
local Highlight = require("gruber-darker.highlight")
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ M.highlights.type = Highlight.new("TSType", { fg = c.default.quartz })
|
|||||||
-- TSLiteral = Highlight.new("", { }) -- Literal text.
|
-- TSLiteral = Highlight.new("", { }) -- Literal text.
|
||||||
|
|
||||||
---Any URI like a link or email.
|
---Any URI like a link or email.
|
||||||
M.highlights.uri = Highlight.new("TSURI", { fg = c.default.niagara, underline = config.underline })
|
M.highlights.uri = Highlight.new("TSURI", { fg = c.default.niagara, underline = opts.underline })
|
||||||
|
|
||||||
M.highlights.text_diff_add = Highlight.new("@text.diff.add", { link = vim_hl.highlights.diff_add })
|
M.highlights.text_diff_add = Highlight.new("@text.diff.add", { link = vim_hl.highlights.diff_add })
|
||||||
M.highlights.text_diff_delete = Highlight.new("@text.diff.delete", { link = vim_hl.highlights.diff_delete })
|
M.highlights.text_diff_delete = Highlight.new("@text.diff.delete", { link = vim_hl.highlights.diff_delete })
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
local c = require("gruber-darker.palette")
|
local c = require("gruber-darker.palette")
|
||||||
local config = require("gruber-darker.config").get_resolved_opts()
|
local opts = require("gruber-darker.config").get_opts()
|
||||||
local Highlight = require("gruber-darker.highlight")
|
local Highlight = require("gruber-darker.highlight")
|
||||||
|
|
||||||
local M = {
|
local M = {
|
||||||
@ -16,7 +16,7 @@ end
|
|||||||
|
|
||||||
---any comment
|
---any comment
|
||||||
M.highlights.comment =
|
M.highlights.comment =
|
||||||
Highlight.new("Comment", { fg = c.default.brown, italic = config.comment_italics and config.italic })
|
Highlight.new("Comment", { fg = c.default.brown, italic = opts.comment_italics and opts.italic })
|
||||||
---used for the columns set with 'colorcolumn'
|
---used for the columns set with 'colorcolumn'
|
||||||
M.highlights.color_column = Highlight.new("ColorColumn", { bg = c.default["bg+2"] })
|
M.highlights.color_column = Highlight.new("ColorColumn", { bg = c.default["bg+2"] })
|
||||||
---placeholder characters substituted for concealed text (see 'conceallevel')
|
---placeholder characters substituted for concealed text (see 'conceallevel')
|
||||||
@ -52,7 +52,7 @@ M.highlights.error_msg = Highlight.new("ErrorMsg", { fg = c.default.white, bg =
|
|||||||
---the column separating vertically split windows
|
---the column separating vertically split windows
|
||||||
M.highlights.vert_split = Highlight.new("VertSplit", { fg = c.default["fg+2"], bg = c.default["bg+1"] })
|
M.highlights.vert_split = Highlight.new("VertSplit", { fg = c.default["fg+2"], bg = c.default["bg+1"] })
|
||||||
---the column separating vertically split windows
|
---the column separating vertically split windows
|
||||||
M.highlights.win_separator = Highlight.new("WinSeparator", { fg = c.default["bg+2"], bold = config.bold })
|
M.highlights.win_separator = Highlight.new("WinSeparator", { fg = c.default["bg+2"], bold = opts.bold })
|
||||||
---line used for closed folds
|
---line used for closed folds
|
||||||
M.highlights.folded = Highlight.new("Folded", { fg = c.default.brown, bg = c.default["fg+2"], italic = true })
|
M.highlights.folded = Highlight.new("Folded", { fg = c.default.brown, bg = c.default["fg+2"], italic = true })
|
||||||
---'foldcolumn'
|
---'foldcolumn'
|
||||||
@ -95,7 +95,7 @@ M.highlights.popup_menu_thumb = Highlight.new("PmenuThumb", { bg = c.default.bg
|
|||||||
---|hit-enter| prompt and yes/no questions
|
---|hit-enter| prompt and yes/no questions
|
||||||
M.highlights.question = Highlight.new("Question", { fg = c.default.niagara })
|
M.highlights.question = Highlight.new("Question", { fg = c.default.niagara })
|
||||||
---Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there.
|
---Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there.
|
||||||
M.highlights.quick_fix_line = Highlight.new("QuickFixLine", { bg = c.default["bg+2"], bold = config.bold })
|
M.highlights.quick_fix_line = Highlight.new("QuickFixLine", { bg = c.default["bg+2"], bold = opts.bold })
|
||||||
---Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out.
|
---Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out.
|
||||||
M.highlights.search = Highlight.new("Search", { fg = c.default.black, bg = c.default.yellow })
|
M.highlights.search = Highlight.new("Search", { fg = c.default.black, bg = c.default.yellow })
|
||||||
---'incsearch' highlighting; also used for the text replaced with ":s///c"
|
---'incsearch' highlighting; also used for the text replaced with ":s///c"
|
||||||
@ -121,7 +121,7 @@ M.highlights.tab_line = Highlight.new("TabLine", { bg = c.default.none })
|
|||||||
M.highlights.tab_line_fill = Highlight.new("TabLineFill", { fg = c.default["bg+4"], bg = c.default["bg+1"] })
|
M.highlights.tab_line_fill = Highlight.new("TabLineFill", { fg = c.default["bg+4"], bg = c.default["bg+1"] })
|
||||||
---tab pages line, active tab page label
|
---tab pages line, active tab page label
|
||||||
M.highlights.tab_line_sel =
|
M.highlights.tab_line_sel =
|
||||||
Highlight.new("TabLineSel", { fg = c.default.yellow, bg = c.default.none, bold = config.bold })
|
Highlight.new("TabLineSel", { fg = c.default.yellow, bg = c.default.none, bold = opts.bold })
|
||||||
---titles for output from ":set all", ":autocmd" etc.
|
---titles for output from ":set all", ":autocmd" etc.
|
||||||
M.highlights.title = Highlight.new("Title", { fg = c.default.quartz })
|
M.highlights.title = Highlight.new("Title", { fg = c.default.quartz })
|
||||||
---Visual mode selection
|
---Visual mode selection
|
||||||
@ -149,9 +149,9 @@ M.highlights.character = Highlight.new("Character", { fg = c.default.green })
|
|||||||
--- a number constant: 234, 0xff
|
--- a number constant: 234, 0xff
|
||||||
M.highlights.number = Highlight.new("Number", { fg = c.default.fg })
|
M.highlights.number = Highlight.new("Number", { fg = c.default.fg })
|
||||||
--- a boolean constant: TRUE, false
|
--- a boolean constant: TRUE, false
|
||||||
M.highlights.boolean = Highlight.new("Boolean", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.boolean = Highlight.new("Boolean", { fg = c.default.yellow, bold = opts.bold })
|
||||||
--- a floating point constant: 2.3e10
|
--- a floating point constant: 2.3e10
|
||||||
M.highlights.float = Highlight.new("Float", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.float = Highlight.new("Float", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---(preferred) any variable name
|
---(preferred) any variable name
|
||||||
M.highlights.identifier = Highlight.new("Identifier", { fg = c.default["fg+1"] })
|
M.highlights.identifier = Highlight.new("Identifier", { fg = c.default["fg+1"] })
|
||||||
---function name (also: methods for classes)
|
---function name (also: methods for classes)
|
||||||
@ -159,17 +159,17 @@ M.highlights.func = Highlight.new("Function", { fg = c.default.niagara })
|
|||||||
---(preferred) any statement
|
---(preferred) any statement
|
||||||
M.highlights.statement = Highlight.new("Statement", { fg = c.default.yellow })
|
M.highlights.statement = Highlight.new("Statement", { fg = c.default.yellow })
|
||||||
---if, then, else, endif, switch, etc.
|
---if, then, else, endif, switch, etc.
|
||||||
M.highlights.conditional = Highlight.new("Conditional", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.conditional = Highlight.new("Conditional", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---for, do, while, etc.
|
---for, do, while, etc.
|
||||||
M.highlights.repeats = Highlight.new("Repeat", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.repeats = Highlight.new("Repeat", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---case, default, etc.
|
---case, default, etc.
|
||||||
M.highlights.label = Highlight.new("Label", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.label = Highlight.new("Label", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---"sizeof", "+", "*", etc.
|
---"sizeof", "+", "*", etc.
|
||||||
M.highlights.operator = Highlight.new("Operator", { fg = c.default.yellow })
|
M.highlights.operator = Highlight.new("Operator", { fg = c.default.yellow })
|
||||||
---any other keyword
|
---any other keyword
|
||||||
M.highlights.keyword = Highlight.new("Keyword", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.keyword = Highlight.new("Keyword", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---try, catch, throw
|
---try, catch, throw
|
||||||
M.highlights.exception = Highlight.new("Exception", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.exception = Highlight.new("Exception", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---(preferred) generic Preprocessor
|
---(preferred) generic Preprocessor
|
||||||
M.highlights.pre_proc = Highlight.new("PreProc", { fg = c.default.quartz })
|
M.highlights.pre_proc = Highlight.new("PreProc", { fg = c.default.quartz })
|
||||||
---preprocessor #include
|
---preprocessor #include
|
||||||
@ -183,11 +183,11 @@ M.highlights.pre_condit = Highlight.new("PreCondit", { fg = c.default.quartz })
|
|||||||
---(preferred) int, long, char, etc.
|
---(preferred) int, long, char, etc.
|
||||||
M.highlights.type = Highlight.new("Type", { fg = c.default.quartz })
|
M.highlights.type = Highlight.new("Type", { fg = c.default.quartz })
|
||||||
---static, register, volatile, etc.
|
---static, register, volatile, etc.
|
||||||
M.highlights.storage_class = Highlight.new("StorageClass", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.storage_class = Highlight.new("StorageClass", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---struct, union, enum, etc.
|
---struct, union, enum, etc.
|
||||||
M.highlights.structure = Highlight.new("Structure", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.structure = Highlight.new("Structure", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---A typedef
|
---A typedef
|
||||||
M.highlights.typedef = Highlight.new("Typedef", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.typedef = Highlight.new("Typedef", { fg = c.default.yellow, bold = opts.bold })
|
||||||
---(preferred) any special symbol
|
---(preferred) any special symbol
|
||||||
M.highlights.special = Highlight.new("Special", { fg = c.default.yellow })
|
M.highlights.special = Highlight.new("Special", { fg = c.default.yellow })
|
||||||
---SpecialChar = Highlight.new("", { }) --- special character in a constant
|
---SpecialChar = Highlight.new("", { }) --- special character in a constant
|
||||||
@ -197,9 +197,9 @@ M.highlights.special = Highlight.new("Special", { fg = c.default.yellow })
|
|||||||
---Debug = Highlight.new("Debug", { fg = c.default["fg+2"] }) --- debugging statements
|
---Debug = Highlight.new("Debug", { fg = c.default["fg+2"] }) --- debugging statements
|
||||||
|
|
||||||
---(preferred) text that stands out, HTML links
|
---(preferred) text that stands out, HTML links
|
||||||
M.highlights.underlined = Highlight.new("Underlined", { underline = config.underline })
|
M.highlights.underlined = Highlight.new("Underlined", { underline = opts.underline })
|
||||||
M.highlights.bold = Highlight.new("Bold", { bold = config.bold })
|
M.highlights.bold = Highlight.new("Bold", { bold = opts.bold })
|
||||||
M.highlights.italic = Highlight.new("Italic", { italic = config.italic })
|
M.highlights.italic = Highlight.new("Italic", { italic = opts.italic })
|
||||||
---("Ignore", below, may be invisible...)
|
---("Ignore", below, may be invisible...)
|
||||||
---Ignore = Highlight.new("Ignore", { }) ---(preferred) left blank, hidden |hl-Ignore|
|
---Ignore = Highlight.new("Ignore", { }) ---(preferred) left blank, hidden |hl-Ignore|
|
||||||
|
|
||||||
@ -208,16 +208,16 @@ M.highlights.italic = Highlight.new("Italic", { italic = config.italic })
|
|||||||
---(preferred) anything that needs extra attention; mostly the keywords TODO FIXME and XXX
|
---(preferred) anything that needs extra attention; mostly the keywords TODO FIXME and XXX
|
||||||
M.highlights.todo = Highlight.new("Todo", { fg = c.default.bg, bg = c.default.yellow })
|
M.highlights.todo = Highlight.new("Todo", { fg = c.default.bg, bg = c.default.yellow })
|
||||||
M.highlights.md_heading_delim =
|
M.highlights.md_heading_delim =
|
||||||
Highlight.new("markdownHeadingDelimiter", { fg = c.default.niagara, bold = config.bold })
|
Highlight.new("markdownHeadingDelimiter", { fg = c.default.niagara, bold = opts.bold })
|
||||||
M.highlights.md_code = Highlight.new("markdownCode", { fg = c.default.green })
|
M.highlights.md_code = Highlight.new("markdownCode", { fg = c.default.green })
|
||||||
M.highlights.md_code_block = Highlight.new("markdownCodeBlock", { fg = c.default.green })
|
M.highlights.md_code_block = Highlight.new("markdownCodeBlock", { fg = c.default.green })
|
||||||
---markdownH1 = Highlight.new("markdownH1", { fg = c.magenta, bold = true })
|
---markdownH1 = Highlight.new("markdownH1", { fg = c.magenta, bold = true })
|
||||||
---markdownH2 = Highlight.new("markdownH2", { fg = c.blue, bold = true })
|
---markdownH2 = Highlight.new("markdownH2", { fg = c.blue, bold = true })
|
||||||
---markdownLinkText = Highlight.new("markdownLinkText", { fg = c.blue, underline = true })
|
---markdownLinkText = Highlight.new("markdownLinkText", { fg = c.blue, underline = true })
|
||||||
M.highlights.md_italic = Highlight.new("markdownItalic", { fg = c.default.wisteria, italic = config.italic })
|
M.highlights.md_italic = Highlight.new("markdownItalic", { fg = c.default.wisteria, italic = opts.italic })
|
||||||
M.highlights.md_bold = Highlight.new("markdownBold", { fg = c.default.yellow, bold = config.bold })
|
M.highlights.md_bold = Highlight.new("markdownBold", { fg = c.default.yellow, bold = opts.bold })
|
||||||
M.highlights.md_code_delim =
|
M.highlights.md_code_delim =
|
||||||
Highlight.new("markdownCodeDelimiter", { fg = c.default.brown, italic = config.italic })
|
Highlight.new("markdownCodeDelimiter", { fg = c.default.brown, italic = opts.italic })
|
||||||
M.highlights.md_error = Highlight.new("markdownError", { fg = c.default.fg, bg = c.default["bg+1"] })
|
M.highlights.md_error = Highlight.new("markdownError", { fg = c.default.fg, bg = c.default["bg+1"] })
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
Loading…
Reference in New Issue
Block a user