Switch back from Ghostty to Wezterm#310
Merged
djensenius merged 13 commits intomainfrom Apr 29, 2026
Merged
Conversation
Move wezterm.lua out of no-longer-used/ to wezterm/ and bring it up to parity with the previous Ghostty setup. Highlights: - Use Monaspace variable fonts (Neon/Xenon/Radon/Krypton Var) with Light weight for a thinner stroke - Use Monaspace Neon NF as a scaled fallback so nerd font icons render at the right size (use_cap_height_to_scale_fallback_fonts + scale) - Enable ligatures and texture healing via harfbuzz features (calt, liga, dlig, clig, ss01-ss10) - Apply freetype_load_flags = NO_HINTING to make ligatures actually render with Monaspace Var (per wezterm/wezterm#4874) - OLED Catppuccin theme and custom tab title formatting Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Default hyperlink rules so URLs/commit SHAs/issue refs are clickable - enable_kitty_keyboard so nvim/tmux can see Ctrl+Shift+<key> properly - 10k line scrollback - Disable audible bell Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…9;4 progress - use_fancy_tab_bar = true (native-looking tab bar) - INTEGRATED_BUTTONS|RESIZE so traffic lights live in the tab strip - window_frame styled to match the OLED theme, using Monaspace Neon Var - format-tab-title now shows: * existing host-specific icons (codespaces / pt / server / pi) * a process icon for non-SSH tabs (nvim, fish, git, yazi, docker, etc.) * an OSC 9;4 progress glyph + percentage from pane:get_progress() * an indeterminate spinner / error glyph for non-percent progress states * a bell glyph when a tab has unseen output Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
With INTEGRATED_BUTTONS, hiding the tab bar leaves the traffic lights overlapping the terminal content. Keep the tab bar visible at all times. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replace the static circle-slice glyph with a richer progress display: - Percentage progress: smooth 5-cell horizontal bar built from Unicode eighth-blocks (\xe2\x96\x8f \xe2\x96\x8e \xe2\x96\x8d \xe2\x96\x8c \xe2\x96\x8b \xe2\x96\x8a \xe2\x96\x89 \xe2\x96\x88), the look NSProgressIndicator / uv / cargo / starship use, plus a numeric percent - Error progress: red alert glyph + percent - Indeterminate progress: animated braille spinner (\xe2\xa0\x8b \xe2\xa0\x99 \xe2\xa0\xb9 \xe2\xa0\xb8 \xe2\xa0\xbc \xe2\xa0\xb4 \xe2\xa0\xa6 \xe2\xa0\xa7 \xe2\xa0\x87 \xe2\xa0\x8f) advanced via the update-status event, with status_update_interval = 200ms (~5fps) - Catppuccin-mocha colors for each state (blue/red/yellow) format-tab-title now returns a multi-attribute format list so the progress segment gets its own foreground color independent of the tab. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bump status_update_interval to 16ms (60fps) but only force a tab-bar redraw when at least one pane currently has indeterminate progress. When nothing is animating, update-status iterates panes and returns without calling set_left_status, so idle CPU cost stays at ~0. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
format-tab-title only fires when tab state changes, so advancing spinner_state.idx in update-status didn't redraw the tab title. Move the animated spinner into the left status bar (set_left_status forces its own re-render) and keep a static loading glyph in the tab title so you can still see which tab is busy. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Switch animation strategy: instead of putting the spinner in the window's left status bar, set a 'spinner_frame' user_var on every pane with indeterminate progress on each update-status tick. user_var changes are part of PaneInformation, which forces format-tab-title to re-fire and pick up the new spinner_state.idx. Result: the animated spinner is grouped with the tab title (and with the static glyph for percent/error), and the left status bar stays empty. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…determinate glyph WezTerm doesn't reliably re-fire format-tab-title on a timer (verified that neither set_left_status nor pane:set_user_var triggers it on update-status), and the published wezterm dotfiles that handle OSC 9;4 (noidilin/wezterm, OSDDQD/wezterm-config) all use a static glyph for the indeterminate state. Match that pattern: - Read progress directly from PaneInformation.progress (cleaner than going through wezterm.mux.get_pane) - Indeterminate state shows a static \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 glyph - Drop status_update_interval, the SPINNER table, the spinner_state and the update-status handler entirely Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Now we have both: - Static \xe2\x80\xa2\xe2\x80\xa2\xe2\x80\xa2 glyph in the tab title (so you can see *which* tab is busy) - Animated braille spinner in the left status bar (where set_left_status forces a reliable re-render every status tick) format-tab-title only re-fires on pane state changes, so percent OSC sequences animate naturally as the shell streams new values, but the single 'Indeterminate' state can't drive its own animation. The left status bar is the only place where update-status produces a timer- driven re-render. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Less UI to overlap with on the right side; the left sits right next to the integrated traffic lights. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Switched terminal back to wezterm. Also removes the ~/.config/ghostty symlink locally. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Move wezterm.lua out of
no-longer-used/towezterm/and bring it up to parity with (and a bit beyond) the Ghostty setup.Highlights
Lightweight for a thinner strokeuse_cap_height_to_scale_fallback_fonts = true,scale = 1.2) so icons match the base font metricscalt,liga,dlig,clig,ss01-ss10)freetype_load_flags = "NO_HINTING"— required for ligatures to actually render with Monaspace Var (per wez/wezterm#4874)Setup
Requires these Homebrew casks:
font-monaspace-var(variable fonts — needed for ligatures)font-monaspace-nf(Nerd Font patched)Symlink:
ln -sf $(pwd)/wezterm ~/.config/