Initial Commit

This commit is contained in:
Henrik Hautakoski 2026-05-17 16:26:31 +02:00
commit 694515c168
16 changed files with 1325 additions and 0 deletions

138
lua/skift/init.lua Normal file
View file

@ -0,0 +1,138 @@
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