mirror of
https://codeberg.org/pnx/skift.nvim.git
synced 2026-06-16 04:24:57 +02:00
138 lines
4.3 KiB
Lua
138 lines
4.3 KiB
Lua
local config = require('skift.config')
|
|
local cache = require("skift.utils.cache")
|
|
|
|
local M = {}
|
|
|
|
local function apply_highlights(highlights)
|
|
for name, val in pairs(highlights) do
|
|
if type(val) == 'string' then
|
|
val = { link = val }
|
|
end
|
|
vim.api.nvim_set_hl(0, name, val)
|
|
end
|
|
end
|
|
|
|
local function apply_terminal_colors(c)
|
|
vim.g.terminal_color_0 = c.terminal_black
|
|
vim.g.terminal_color_1 = c.terminal_red
|
|
vim.g.terminal_color_2 = c.terminal_green
|
|
vim.g.terminal_color_3 = c.terminal_yellow
|
|
vim.g.terminal_color_4 = c.terminal_blue
|
|
vim.g.terminal_color_5 = c.terminal_magenta
|
|
vim.g.terminal_color_6 = c.terminal_cyan
|
|
vim.g.terminal_color_7 = c.terminal_white
|
|
vim.g.terminal_color_8 = c.terminal_bright_black
|
|
vim.g.terminal_color_9 = c.terminal_bright_red
|
|
vim.g.terminal_color_10 = c.terminal_bright_green
|
|
vim.g.terminal_color_11 = c.terminal_bright_yellow
|
|
vim.g.terminal_color_12 = c.terminal_bright_blue
|
|
vim.g.terminal_color_13 = c.terminal_bright_magenta
|
|
vim.g.terminal_color_14 = c.terminal_bright_cyan
|
|
vim.g.terminal_color_15 = c.terminal_bright_white
|
|
end
|
|
|
|
function M.setup(opts)
|
|
config:merge(opts)
|
|
end
|
|
|
|
function M.load()
|
|
if vim.g.colors_name then
|
|
vim.cmd("hi clear")
|
|
end
|
|
vim.g.colors_name = "skift"
|
|
vim.o.termguicolors = true
|
|
vim.o.background = "dark"
|
|
|
|
local cache_key = cache.key(config)
|
|
local cached = cache.read(cache_key)
|
|
if cached and cached.highlights and cached.colors then
|
|
apply_highlights(cached.highlights)
|
|
apply_terminal_colors(cached.colors)
|
|
return
|
|
end
|
|
|
|
local c = vim.deepcopy(require("skift.colors"))
|
|
|
|
config.on_colors(c)
|
|
|
|
local highlights = {}
|
|
local groups = {
|
|
require("skift.groups.editor").get(c),
|
|
require("skift.groups.syntax").get(c),
|
|
require("skift.groups.treesitter").get(c),
|
|
require("skift.groups.lsp").get(c),
|
|
require("skift.groups.integrations").get(c),
|
|
}
|
|
|
|
for _, group in ipairs(groups) do
|
|
highlights = vim.tbl_extend("force", highlights, group)
|
|
end
|
|
|
|
if config.transparent then
|
|
local transparent_groups = {
|
|
"Normal", "NormalNC", "NormalFloat", "SignColumn",
|
|
"FoldColumn", "TabLineFill", "StatusLine", "StatusLineNC",
|
|
"NvimTreeNormal", "NeoTreeNormal", "NeoTreeNormalNC",
|
|
"TreesitterContext",
|
|
}
|
|
for _, name in ipairs(transparent_groups) do
|
|
if highlights[name] then
|
|
highlights[name].bg = "NONE"
|
|
end
|
|
end
|
|
highlights.WinSeparator = { fg = "NONE" }
|
|
highlights.VertSplit = { fg = "NONE" }
|
|
highlights.FloatBorder = { fg = "NONE", bg = "NONE" }
|
|
end
|
|
|
|
if not config.bold then
|
|
for _, hl in pairs(highlights) do
|
|
hl.bold = false
|
|
end
|
|
end
|
|
|
|
if not config.italic then
|
|
for _, hl in pairs(highlights) do
|
|
hl.italic = false
|
|
end
|
|
elseif not config.italic_comments then
|
|
for _, name in ipairs({ "Comment", "@comment", "@comment.documentation" }) do
|
|
if highlights[name] then
|
|
highlights[name].italic = false
|
|
end
|
|
end
|
|
end
|
|
|
|
config.on_highlights(highlights, c)
|
|
|
|
apply_highlights(highlights)
|
|
apply_terminal_colors(c)
|
|
|
|
cache.write(cache_key, {
|
|
highlights = highlights,
|
|
colors = {
|
|
terminal_black = c.terminal_black,
|
|
terminal_red = c.terminal_red,
|
|
terminal_green = c.terminal_green,
|
|
terminal_yellow = c.terminal_yellow,
|
|
terminal_blue = c.terminal_blue,
|
|
terminal_magenta = c.terminal_magenta,
|
|
terminal_cyan = c.terminal_cyan,
|
|
terminal_white = c.terminal_white,
|
|
terminal_bright_black = c.terminal_bright_black,
|
|
terminal_bright_red = c.terminal_bright_red,
|
|
terminal_bright_green = c.terminal_bright_green,
|
|
terminal_bright_yellow = c.terminal_bright_yellow,
|
|
terminal_bright_blue = c.terminal_bright_blue,
|
|
terminal_bright_magenta = c.terminal_bright_magenta,
|
|
terminal_bright_cyan = c.terminal_bright_cyan,
|
|
terminal_bright_white = c.terminal_bright_white,
|
|
},
|
|
})
|
|
end
|
|
|
|
function M.clear_cache()
|
|
cache.clear()
|
|
end
|
|
|
|
return M
|