90 lines
2.2 KiB
Lua
90 lines
2.2 KiB
Lua
local colors = require("cyberdream.colors")
|
|
local util = require("cyberdream.util")
|
|
|
|
local M = {}
|
|
|
|
--- Generate cyberdream theme for https://github.com/lsd-rs/lsd
|
|
--- @param variant string: Variation of the colorscheme to use.
|
|
function M.generate(variant)
|
|
function CreateDimColor(hex)
|
|
return util.blend(hex, variant == "default" and colors[variant].bg or colors[variant].fg, 0.8)
|
|
end
|
|
|
|
function HexToAnsi(hex)
|
|
-- Remove the leading "#" if present
|
|
hex = hex:gsub("#", "")
|
|
|
|
-- Extract the red, green, and blue components
|
|
local r = tonumber(string.sub(hex, 1, 2), 16)
|
|
local g = tonumber(string.sub(hex, 3, 4), 16)
|
|
local b = tonumber(string.sub(hex, 5, 6), 16)
|
|
|
|
-- Normalize the RGB values to a range of 0-5
|
|
local ansi_r = math.floor(r / 51)
|
|
local ansi_g = math.floor(g / 51)
|
|
local ansi_b = math.floor(b / 51)
|
|
|
|
-- Calculate the ANSI color code
|
|
local ansi_code = 16 + (ansi_r * 36) + (ansi_g * 6) + ansi_b
|
|
|
|
return ansi_code
|
|
end
|
|
|
|
-- Extend default hex colors with dimmed colors
|
|
local extended_hex_colors = vim.fn.copy(colors[variant])
|
|
for key, value in pairs(colors[variant]) do
|
|
extended_hex_colors[key .. "Dim"] = CreateDimColor(value)
|
|
end
|
|
|
|
-- Create Ansi colors from extended hex colors
|
|
local ansi_colors = {}
|
|
for key, value in pairs(extended_hex_colors) do
|
|
ansi_colors[key] = HexToAnsi(value)
|
|
end
|
|
|
|
local template = [==[
|
|
user: ${cyan}
|
|
group: ${blue}
|
|
permission:
|
|
read: ${green}
|
|
write: ${yellow}
|
|
exec: ${red}
|
|
exec-sticky: ${purple}
|
|
no-access: ${grey}
|
|
octal: ${cyanDim}
|
|
acl: ${cyanDim}
|
|
context: ${cyan}
|
|
date:
|
|
hour-old: ${fgDim}
|
|
day-old: ${grey}
|
|
older: ${bg_highlight}
|
|
size:
|
|
none: ${grey}
|
|
small: ${green}
|
|
medium: ${yellow}
|
|
large: ${orange}
|
|
inode:
|
|
valid: ${magenta}
|
|
invalid: ${grey}
|
|
links:
|
|
valid: ${magenta}
|
|
invalid: ${grey}
|
|
tree-edge: ${grey}
|
|
git-status:
|
|
default: ${grey}
|
|
unmodified: ${grey}
|
|
ignored: ${grey}
|
|
new-in-index: ${greenDim}
|
|
new-in-workdir: ${greenDim}
|
|
typechange: ${yellowDim}
|
|
deleted: ${redDim}
|
|
renamed: ${greenDim}
|
|
modified: ${yellowDim}
|
|
conflicted: ${redDim}
|
|
]==]
|
|
|
|
return util.parse_extra_template(template, ansi_colors)
|
|
end
|
|
|
|
return M
|