This repository has been archived on 2024-03-28. You can view files and clone it, but cannot push or open issues or pull requests.
dotfiles/common/wezterm/catpuccin.lua
2023-05-09 13:35:49 -05:00

291 lines
6.2 KiB
Lua

local wezterm = require("wezterm")
local M = {}
local colors = {
latte = {
rosewater = "#dc8a78",
flamingo = "#dd7878",
pink = "#ea76cb",
mauve = "#8839ef",
red = "#d20f39",
maroon = "#e64553",
peach = "#fe640b",
yellow = "#df8e1d",
green = "#40a02b",
teal = "#179299",
sky = "#04a5e5",
sapphire = "#209fb5",
blue = "#1e66f5",
lavender = "#7287fd",
text = "#4c4f69",
subtext1 = "#5c5f77",
subtext0 = "#6c6f85",
overlay2 = "#7c7f93",
overlay1 = "#8c8fa1",
overlay0 = "#9ca0b0",
surface2 = "#acb0be",
surface1 = "#bcc0cc",
surface0 = "#ccd0da",
crust = "#dce0e8",
mantle = "#e6e9ef",
base = "#eff1f5",
},
frappe = {
rosewater = "#f2d5cf",
flamingo = "#eebebe",
pink = "#f4b8e4",
mauve = "#ca9ee6",
red = "#e78284",
maroon = "#ea999c",
peach = "#ef9f76",
yellow = "#e5c890",
green = "#a6d189",
teal = "#81c8be",
sky = "#99d1db",
sapphire = "#85c1dc",
blue = "#8caaee",
lavender = "#babbf1",
text = "#c6d0f5",
subtext1 = "#b5bfe2",
subtext0 = "#a5adce",
overlay2 = "#949cbb",
overlay1 = "#838ba7",
overlay0 = "#737994",
surface2 = "#626880",
surface1 = "#51576d",
surface0 = "#414559",
base = "#303446",
mantle = "#292c3c",
crust = "#232634",
},
macchiato = {
rosewater = "#f4dbd6",
flamingo = "#f0c6c6",
pink = "#f5bde6",
mauve = "#c6a0f6",
red = "#ed8796",
maroon = "#ee99a0",
peach = "#f5a97f",
yellow = "#eed49f",
green = "#a6da95",
teal = "#8bd5ca",
sky = "#91d7e3",
sapphire = "#7dc4e4",
blue = "#8aadf4",
lavender = "#b7bdf8",
text = "#cad3f5",
subtext1 = "#b8c0e0",
subtext0 = "#a5adcb",
overlay2 = "#939ab7",
overlay1 = "#8087a2",
overlay0 = "#6e738d",
surface2 = "#5b6078",
surface1 = "#494d64",
surface0 = "#363a4f",
base = "#24273a",
mantle = "#1e2030",
crust = "#181926",
},
mocha = {
rosewater = "#f5e0dc",
flamingo = "#f2cdcd",
pink = "#f5c2e7",
mauve = "#cba6f7",
red = "#f38ba8",
maroon = "#eba0ac",
peach = "#fab387",
yellow = "#f9e2af",
green = "#a6e3a1",
teal = "#94e2d5",
sky = "#89dceb",
sapphire = "#74c7ec",
blue = "#89b4fa",
lavender = "#b4befe",
text = "#cdd6f4",
subtext1 = "#bac2de",
subtext0 = "#a6adc8",
overlay2 = "#9399b2",
overlay1 = "#7f849c",
overlay0 = "#6c7086",
surface2 = "#585b70",
surface1 = "#45475a",
surface0 = "#313244",
base = "#1e1e2e",
mantle = "#181825",
crust = "#11111b",
},
}
local mappings = {
mocha = "Catppuccin Mocha",
macchiato = "Catppuccin Macchiato",
frappe = "Catppuccin Frappe",
latte = "Catppuccin Latte",
}
function M.select(palette, flavor, accent)
local c = palette[flavor]
-- shorthand to check for the Latte flavor
local isLatte = palette == "latte"
return {
foreground = c.text,
background = c.base,
cursor_fg = isLatte and c.base or c.crust,
cursor_bg = c.rosewater,
cursor_border = c.rosewater,
selection_fg = c.text,
selection_bg = c.surface2,
scrollbar_thumb = c.surface2,
split = c.overlay0,
ansi = {
isLatte and c.subtext1 or c.surface1,
c.red,
c.green,
c.yellow,
c.blue,
c.pink,
c.teal,
isLatte and c.surface2 or c.subtext1,
},
brights = {
isLatte and c.subtext0 or c.surface2,
c.red,
c.green,
c.yellow,
c.blue,
c.pink,
c.teal,
isLatte and c.surface1 or c.subtext0,
},
indexed = { [16] = c.peach, [17] = c.rosewater },
-- nightbuild only
compose_cursor = c.flamingo,
tab_bar = {
background = c.crust,
active_tab = {
bg_color = c.crust,
fg_color = c[accent],
},
inactive_tab = {
bg_color = c.mantle,
fg_color = c.text,
},
inactive_tab_hover = {
bg_color = c.base,
fg_color = c.text,
},
new_tab = {
bg_color = c.surface0,
fg_color = c.text,
},
new_tab_hover = {
bg_color = c.surface1,
fg_color = c.text,
},
-- fancy tab bar
inactive_tab_edge = c.surface0,
},
visual_bell = c.surface0,
}
end
local function select_for_appearance(appearance, options)
if appearance:find("Dark") then
return options.dark
else
return options.light
end
end
local function tableMerge(t1, t2)
for k, v in pairs(t2) do
if type(v) == "table" then
if type(t1[k] or false) == "table" then
tableMerge(t1[k] or {}, t2[k] or {})
else
t1[k] = v
end
else
t1[k] = v
end
end
return t1
end
function M.apply_to_config(c, opts)
if not opts then
opts = {}
end
-- default options
local defaults = {
flavor = "mocha",
accent = "mauve",
sync = false,
sync_flavors = { light = "latte", dark = "mocha" },
color_overrides = { mocha = {}, macchiato = {}, frappe = {}, latte = {} },
token_overrides = { mocha = {}, macchiato = {}, frappe = {}, latte = {} },
}
local o = tableMerge(defaults, opts)
-- insert all flavors
local color_schemes = {}
local palette = tableMerge(colors, o.color_overrides)
for flavor, name in pairs(mappings) do
local spec = M.select(palette, flavor, o.accent)
local overrides = o.token_overrides[flavor]
color_schemes[name] = tableMerge(spec, overrides)
end
if c.color_schemes == nil then
c.color_schemes = {}
end
c.color_schemes = tableMerge(c.color_schemes, color_schemes)
if opts.sync then
c.color_scheme = select_for_appearance(wezterm.gui.get_appearance(), {
dark = mappings[o.sync_flavors.dark],
light = mappings[o.sync_flavors.light],
})
c.command_palette_bg_color = select_for_appearance(wezterm.gui.get_appearance(), {
dark = colors[o.sync_flavors.dark].crust,
light = colors[o.sync_flavors.light].crust,
})
c.command_palette_fg_color = select_for_appearance(wezterm.gui.get_appearance(), {
dark = colors[o.sync_flavors.dark].text,
light = colors[o.sync_flavors.light].text,
})
else
c.color_scheme = mappings[o.flavor]
c.command_palette_bg_color = colors[o.flavor].crust
c.command_palette_fg_color = colors[o.flavor].text
end
local window_frame = {
active_titlebar_bg = colors[o.flavor].crust,
active_titlebar_fg = colors[o.flavor].text,
inactive_titlebar_bg = colors[o.flavor].crust,
inactive_titlebar_fg = colors[o.flavor].text,
button_fg = colors[o.flavor].base,
button_bg = colors[o.flavor].base,
}
if c.window_frame == nil then
c.window_frame = {}
end
c.window_frame = tableMerge(c.window_frame, window_frame)
end
return M