Merge pull request #28 from brianpooe/claude/cool-hopper-8vgG8

feat: control WezTerm appearance from .zshrc via generated env.lua
This commit is contained in:
Brian Pooe 2026-06-11 18:10:50 +02:00 committed by GitHub
commit 995af1df20
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 43 additions and 5 deletions

View file

@ -12,6 +12,18 @@ local function env_number(name, fallback)
end
return parsed
end
-- User-tunable settings live in ~/.zshrc, which writes them to env.lua
-- (GUI-launched WezTerm never sees shell exports). WezTerm watches that
-- file and live-reloads, so editing .zshrc + opening a new shell applies.
-- Precedence: env.lua > process env > defaults.
local user = {}
local env_file = wezterm.home_dir .. "/.config/wezterm/env.lua"
local ok, loaded = pcall(dofile, env_file)
if ok and type(loaded) == "table" then
user = loaded
end
wezterm.add_to_config_reload_watch_list(env_file)
-- Basic settings
config.automatically_reload_config = true
config.window_close_confirmation = "NeverPrompt"
@ -22,7 +34,7 @@ config.use_fancy_tab_bar = false
config.tab_bar_at_bottom = false
config.enable_tab_bar = false
-- Font configuration
config.font_size = env_number("WEZTERM_FONT_SIZE", 16)
config.font_size = user.font_size or env_number("WEZTERM_FONT_SIZE", 16)
config.font = wezterm.font("JetBrainsMono Nerd Font", { weight = "Regular" })
config.bold_brightens_ansi_colors = true
config.force_reverse_video_cursor = false
@ -89,7 +101,7 @@ local themes = {
},
}
local variant = (os.getenv("WEZTERM_THEME") or "wave"):lower()
local variant = (user.theme or os.getenv("WEZTERM_THEME") or "wave"):lower()
if variant == "kanagawa-wave" then variant = "wave" end
if variant == "kanagawa-dragon" then variant = "dragon" end
config.colors = themes[variant] or themes.wave
@ -101,10 +113,10 @@ config.window_padding = {
bottom = 8,
}
-- Window transparency
config.window_background_opacity = env_number("WEZTERM_WINDOW_OPACITY", 0.80)
config.window_background_opacity = user.window_opacity or env_number("WEZTERM_WINDOW_OPACITY", 0.80)
-- Keep text cells opaque by default; transparent text backgrounds can show
-- grid/dot artifacts on some GPU/compositor combinations.
config.text_background_opacity = env_number("WEZTERM_TEXT_OPACITY", 1.0)
config.text_background_opacity = user.text_opacity or env_number("WEZTERM_TEXT_OPACITY", 1.0)
-- Performance
config.scrollback_lines = 10000
config.enable_scroll_bar = false

2
.gitignore vendored
View file

@ -28,6 +28,8 @@ tags
!.config/lazygit/
!.config/starship/
!.config/wezterm/
# machine-local, generated by .zshrc
.config/wezterm/env.lua
!.config/zed/
!.config/zed/settings.json
!.config/zed/keymap.json

26
.zshrc
View file

@ -4,8 +4,16 @@ if [ -x /home/linuxbrew/.linuxbrew/bin/brew ]; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi
# ===================== User-tunable environment ========================
# Single place to control the look of the whole stack. Everything below
# (and the wezterm env.lua writer further down) derives from these.
export KANAGAWA_THEME="${KANAGAWA_THEME:-wave}" # wave | dragon
export WEZTERM_FONT_SIZE="${WEZTERM_FONT_SIZE:-16}"
export WEZTERM_WINDOW_OPACITY="${WEZTERM_WINDOW_OPACITY:-0.80}"
export WEZTERM_TEXT_OPACITY="${WEZTERM_TEXT_OPACITY:-1.0}"
# ========================================================================
# Theme (kanagawa variants: dragon|wave)
export KANAGAWA_THEME="${KANAGAWA_THEME:-wave}"
case "${KANAGAWA_THEME}" in
wave|kanagawa-wave)
export TMUX_THEME="wave"
@ -33,6 +41,22 @@ else
printf 'source-file %s\n' "$HOME/.config/tmux/dragon-theme.conf" >| "$TMUX_THEME_FILE"
fi
# Write WezTerm settings file (same pattern as tmux above). GUI-launched
# WezTerm never sees shell exports, so it watches this file and live-reloads
# when the values change.
_wez_env_file="$HOME/.config/wezterm/env.lua"
_wez_env_content="return {
theme = \"$WEZTERM_THEME\",
font_size = $WEZTERM_FONT_SIZE,
window_opacity = $WEZTERM_WINDOW_OPACITY,
text_opacity = $WEZTERM_TEXT_OPACITY,
}"
mkdir -p "$HOME/.config/wezterm"
if [ ! -f "$_wez_env_file" ] || [ "$(cat "$_wez_env_file")" != "$_wez_env_content" ]; then
printf '%s\n' "$_wez_env_content" >| "$_wez_env_file"
fi
unset _wez_env_file _wez_env_content
# Starship
if command -v starship >/dev/null 2>&1; then
eval "$(starship init zsh)"