Dotfiles/vim/theme/cyberqueer.nvim/lua/cyberdream/theme.lua

108 lines
2.7 KiB
Lua

local colors = require("cyberdream.colors")
local util = require("cyberdream.util")
local M = {}
---@param variant? string
function M.setup(variant)
local config = require("cyberdream.config")
local opts = config.options
if variant then
opts.variant = variant
end
local theme = {}
---@type CyberdreamPalette
local t = colors.default
if opts.variant == "light" then
---@type CyberdreamPalette
t = colors.light
end
if opts.variant == "auto" then
if vim.o.background == "light" then
---@type CyberdreamPalette
t = colors.light
end
end
-- Apply user defined saturation
t = util.apply_saturation(t, opts.saturation)
-- Override colors with user defined colors
---@type CyberdreamPalette
t = vim.tbl_deep_extend("force", t, opts.colors)
t.bg_solid = t.bg ~= "NONE" and t.bg or t.bg_alt
if opts.transparent then
t.bg = "NONE"
end
if opts.hide_fillchars then
vim.opt.fillchars:append({
horiz = " ",
horizup = " ",
horizdown = " ",
vert = " ",
vertleft = " ",
vertright = " ",
verthoriz = " ",
eob = " ",
})
else
vim.opt.fillchars:append({
eob = " ",
})
end
if opts.terminal_colors then
vim.g.terminal_color_0 = t.bg
vim.g.terminal_color_8 = t.bg_alt
vim.g.terminal_color_7 = t.fg
vim.g.terminal_color_15 = t.grey
vim.g.terminal_color_1 = t.red
vim.g.terminal_color_9 = t.red
vim.g.terminal_color_2 = t.green
vim.g.terminal_color_10 = t.green
vim.g.terminal_color_3 = t.yellow
vim.g.terminal_color_11 = t.yellow
vim.g.terminal_color_4 = t.blue
vim.g.terminal_color_12 = t.blue
vim.g.terminal_color_5 = t.purple
vim.g.terminal_color_13 = t.purple
vim.g.terminal_color_6 = t.cyan
vim.g.terminal_color_14 = t.cyan
end
-- Load base theme
theme.highlights = require("cyberdream.extensions.base").get(opts, t)
-- Load enabled extensions
local extensions = opts.extensions or {}
for extension, enabled in pairs(extensions) do
if enabled then
local ext = require("cyberdream.extensions." .. extension)
theme.highlights = vim.tbl_deep_extend("force", theme.highlights, ext.get(opts, t))
end
end
-- Parse user defined overrides and apply them
local overrides = opts.overrides or opts.highlights
if type(overrides) == "function" then
overrides = overrides(t)
end
theme.highlights = vim.tbl_extend("force", theme.highlights, overrides or {})
return theme
end
return M