diff --git a/wezterm/.config/wezterm/theme/bearded-arc-light.lua b/wezterm/.config/wezterm/theme/bearded-arc-light.lua new file mode 100644 index 0000000..c222cc4 --- /dev/null +++ b/wezterm/.config/wezterm/theme/bearded-arc-light.lua @@ -0,0 +1,81 @@ +-- Bearded Arc (Light) +-- Hand-tuned light variant with warm off-white bg and saturated accents + +local M = {} + +M.palette = { + base = '#faf4ed', + overlay = '#f0e8df', + muted = '#7a8598', + text = '#2a2a2a', + red = '#d1344f', + yellow = '#b8890f', + orange = '#c45a1c', + green = '#1e9b52', + cyan = '#1a7db5', + purple = '#7b4fc4', + highlight = '#5a6a7a', +} + +local active_tab = { + bg_color = M.palette.overlay, + fg_color = M.palette.text, +} + +local inactive_tab = { + bg_color = M.palette.base, + fg_color = M.palette.muted, +} + +function M.colors() + return { + foreground = M.palette.text, + background = M.palette.base, + cursor_bg = M.palette.yellow, + cursor_border = M.palette.yellow, + cursor_fg = M.palette.base, + selection_bg = '#d8d0c6', + selection_fg = M.palette.text, + + ansi = { + M.palette.overlay, + M.palette.red, + M.palette.green, + M.palette.yellow, + M.palette.cyan, + M.palette.purple, + M.palette.orange, + M.palette.text, + }, + + brights = { + M.palette.muted, + M.palette.red, + M.palette.green, + M.palette.yellow, + M.palette.cyan, + M.palette.purple, + M.palette.orange, + M.palette.text, + }, + + tab_bar = { + background = M.palette.base, + active_tab = active_tab, + inactive_tab = inactive_tab, + inactive_tab_hover = active_tab, + new_tab = inactive_tab, + new_tab_hover = active_tab, + inactive_tab_edge = M.palette.muted, + }, + } +end + +function M.window_frame() + return { + active_titlebar_bg = M.palette.base, + inactive_titlebar_bg = M.palette.base, + } +end + +return M diff --git a/wezterm/.config/wezterm/theme/bearded-arc.lua b/wezterm/.config/wezterm/theme/bearded-arc.lua new file mode 100644 index 0000000..495b11d --- /dev/null +++ b/wezterm/.config/wezterm/theme/bearded-arc.lua @@ -0,0 +1,81 @@ +-- Bearded Arc (Dark) +-- Based on: https://github.com/BeardedBear/bearded-theme + +local M = {} + +M.palette = { + base = '#1c2433', + overlay = '#212a3b', + muted = '#4a5e84', + text = '#afbbd2', + red = '#FF738A', + yellow = '#EACD61', + orange = '#FF955C', + green = '#3CEC85', + cyan = '#69C3FF', + purple = '#B78AFF', + highlight = '#8196b5', +} + +local active_tab = { + bg_color = M.palette.overlay, + fg_color = M.palette.text, +} + +local inactive_tab = { + bg_color = M.palette.base, + fg_color = M.palette.muted, +} + +function M.colors() + return { + foreground = M.palette.text, + background = M.palette.base, + cursor_bg = M.palette.yellow, + cursor_border = M.palette.yellow, + cursor_fg = M.palette.text, + selection_bg = '#405275', + selection_fg = M.palette.text, + + ansi = { + M.palette.overlay, + M.palette.red, + M.palette.green, + M.palette.yellow, + M.palette.cyan, + M.palette.purple, + M.palette.orange, + M.palette.text, + }, + + brights = { + M.palette.muted, + M.palette.red, + M.palette.green, + M.palette.yellow, + M.palette.cyan, + M.palette.purple, + M.palette.orange, + M.palette.text, + }, + + tab_bar = { + background = M.palette.base, + active_tab = active_tab, + inactive_tab = inactive_tab, + inactive_tab_hover = active_tab, + new_tab = inactive_tab, + new_tab_hover = active_tab, + inactive_tab_edge = M.palette.muted, + }, + } +end + +function M.window_frame() + return { + active_titlebar_bg = M.palette.base, + inactive_titlebar_bg = M.palette.base, + } +end + +return M diff --git a/wezterm/.config/wezterm/theme/init.lua b/wezterm/.config/wezterm/theme/init.lua index 32f7a4f..052837f 100644 --- a/wezterm/.config/wezterm/theme/init.lua +++ b/wezterm/.config/wezterm/theme/init.lua @@ -1,84 +1,11 @@ --- Bearded Arc Theme --- Based on: https://github.com/BeardedBear/bearded-theme --- Adapted for WezTerm +-- Theme registry +-- Standalone themes: bearded-arc (dark), bearded-arc-light +-- Legacy variants: moon, dawn -local main = {} - -local main_palette = { - base = '#1c2433', - overlay = '#212a3b', - muted = '#4a5e84', - text = '#afbbd2', - red = '#FF738A', - yellow = '#EACD61', - orange = '#FF955C', - green = '#3CEC85', - cyan = '#69C3FF', - purple = '#B78AFF', - highlight = '#8196b5', -} - -local main_active_tab = { - bg_color = main_palette.overlay, - fg_color = main_palette.text, -} - -local main_inactive_tab = { - bg_color = main_palette.base, - fg_color = main_palette.muted, -} - -function main.colors() - return { - foreground = main_palette.text, - background = main_palette.base, - cursor_bg = main_palette.yellow, - cursor_border = main_palette.yellow, - cursor_fg = main_palette.text, - selection_bg = '#405275', - selection_fg = main_palette.text, - - ansi = { - main_palette.overlay, - main_palette.red, - main_palette.green, - main_palette.yellow, - main_palette.cyan, - main_palette.purple, - main_palette.orange, - main_palette.text, - }, - - brights = { - main_palette.muted, - main_palette.red, - main_palette.green, - main_palette.yellow, - main_palette.cyan, - main_palette.purple, - main_palette.orange, - main_palette.text, - }, - - tab_bar = { - background = main_palette.base, - active_tab = main_active_tab, - inactive_tab = main_inactive_tab, - inactive_tab_hover = main_active_tab, - new_tab = main_inactive_tab, - new_tab_hover = main_active_tab, - inactive_tab_edge = main_palette.muted, -- (Fancy tab bar only) - }, - } -end - -function main.window_frame() -- (Fancy tab bar only) - return { - active_titlebar_bg = main_palette.base, - inactive_titlebar_bg = main_palette.base, - } -end +local main = require('theme/bearded-arc') +local light = require('theme/bearded-arc-light') +-- Moon variant (kept here for backward compat) local moon = {} local moon_palette = { @@ -144,18 +71,19 @@ function moon.colors() inactive_tab_hover = moon_active_tab, new_tab = moon_inactive_tab, new_tab_hover = moon_active_tab, - inactive_tab_edge = moon_palette.muted, -- (Fancy tab bar only) + inactive_tab_edge = moon_palette.muted, }, } end -function moon.window_frame() -- (Fancy tab bar only) +function moon.window_frame() return { active_titlebar_bg = moon_palette.base, inactive_titlebar_bg = moon_palette.base, } end +-- Dawn variant (kept here for backward compat) local dawn = {} local dawn_palette = { @@ -221,12 +149,12 @@ function dawn.colors() inactive_tab_hover = dawn_active_tab, new_tab = dawn_inactive_tab, new_tab_hover = dawn_active_tab, - inactive_tab_edge = dawn_palette.muted, -- (Fancy tab bar only) + inactive_tab_edge = dawn_palette.muted, }, } end -function dawn.window_frame() -- (Fancy tab bar only) +function dawn.window_frame() return { active_titlebar_bg = dawn_palette.base, inactive_titlebar_bg = dawn_palette.base, @@ -235,6 +163,7 @@ end return { main = main, + light = light, moon = moon, dawn = dawn, } diff --git a/wezterm/.config/wezterm/wezterm.lua b/wezterm/.config/wezterm/wezterm.lua index 8bbd2b7..4ae5a56 100644 --- a/wezterm/.config/wezterm/wezterm.lua +++ b/wezterm/.config/wezterm/wezterm.lua @@ -1,12 +1,31 @@ local wezterm = require 'wezterm' local config = {} -local theme = require('theme/init').main +local themes = require('theme/init') + +-- Watch theme-state file so wezterm auto-reloads when toggle script writes to it +wezterm.add_to_config_reload_watch_list( + os.getenv("HOME") .. "/.config/theme-state" +) + +-- Determine current theme from state file +local function get_theme() + local f = io.open(os.getenv("HOME") .. "/.config/theme-state", "r") + if f then + local state = f:read("*a"):gsub("%s+", "") + f:close() + if state == "light" then return themes.light end + end + return themes.main +end + +local theme = get_theme() -- Font configuration config.font = wezterm.font 'JetBrainsMono Nerd Font' config.font_size = 11.0 config.colors = theme.colors() +config.window_frame = theme.window_frame() -- Window config.enable_tab_bar = true @@ -33,6 +52,13 @@ config.enable_kitty_keyboard = true config.keys = { { key = 'LeftArrow', mods = 'CTRL|SHIFT', action = wezterm.action.ActivateTabRelative(-1) }, { key = 'RightArrow', mods = 'CTRL|SHIFT', action = wezterm.action.ActivateTabRelative(1) }, + { + key = 'n', + mods = 'CTRL|SHIFT', + action = wezterm.action_callback(function(win, pane) + local tab, window = pane:move_to_new_window() + end), + }, } -- Machine-local overrides (not tracked in dotfiles)