Zellij-style tmux status bar, unified catppuccin theming, and shell improvements#12
Zellij-style tmux status bar, unified catppuccin theming, and shell improvements#12
Conversation
- Pane borders: single-line, dim (#313244/#45475a) to match Zellij's subtle separators - Status divider: replace dotted line with thin solid line (─) in matching dim color - Add tmux-which-key plugin for on-demand keybinding discovery (prefix+Space) - Custom which-key config with all dotfiles keybindings organized by category
… pill position - Restore corrupted powerline separator glyphs (U+E0B6/U+E0B4) - Move pane border overrides after TPM run (catppuccin was overwriting them) - Add rounded powerline ends to mode indicator pill, move to end of status-right - Fix tmux-which-key syntax errors: use macros for commands with nested quotes - Use upper-eighth-block character for thinner divider line
…olors; session pill blue
…ant blue after TPM
…ellij icons, outline mode icon
…places session name
9f497e3 to
01d6562
Compare
There was a problem hiding this comment.
Pull request overview
This PR updates the terminal-multiplexer UX across tmux and zellij to a unified Catppuccin Mocha “Zellij-style” status bar/pill aesthetic, adds tmux keybinding discovery via tmux-which-key, and makes a couple of fish interactive-shell quality-of-life tweaks (tip throttle + abbr cleanup).
Changes:
- Add a new Zellij default layout using
zjstatuswith two-tone pills + session-count widget, and extend Zellij config with autolock, new keybinds, and a custom “subtle borders” theme. - Redesign tmux status bar and split configuration into pre-TPM (
statusbar.conf) and post-TPM (statusbar-overrides.conf) files; add tmux-which-key plugin + config. - Throttle
fish_greetingtips to once per 6 hours and clean up / extend fish abbreviations.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| dot_config/zellij/layouts/default.kdl | New default layout using zjstatus to implement the Zellij-style pill status bars. |
| dot_config/zellij/config.kdl.tmpl | Adds autolock plugin + keybind integrations and defines/sets a custom subtle Catppuccin theme. |
| dot_config/tmux/tmux.conf.tmpl | Switches tmux status bar config to sourced files, removes cpu plugin, adds tmux-which-key plugin. |
| dot_config/tmux/tmux-which-key/config.yaml | New which-key menu describing the repo’s tmux keybindings and macros. |
| dot_config/tmux/statusbar.conf | New pre-TPM Catppuccin + status layout configuration (tabs, dotted divider, right-side modules). |
| dot_config/tmux/statusbar-overrides.conf | New post-TPM overrides for pane borders and pill styling (incl. mode indicator). |
| dot_config/fish/functions/fish_greeting.fish | Adds a 6-hour cooldown stamp so tips don’t show on every new shell. |
| dot_config/fish/conf.d/zz_04_abbr.fish | Simplifies abbr definitions and adds a zj abbreviation. |
| dot_config/fish/conf.d/zz_03_interactive.fish | Minor whitespace-only change at end of the file. |
| docs/zellij-future-changes.md | New doc tracking upstream Zellij items/plugins to watch for future improvements. |
Comments suppressed due to low confidence (2)
dot_config/zellij/layouts/default.kdl:4
plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm"loads a WASM plugin directly from a mutablereleases/latestURL on GitHub at runtime, with no pinning or integrity verification. If the GitHub account, repository, or release artifact is compromised, malicious plugin code will execute inside your Zellij session with the same privileges as your shell (able to read keystrokes, environment variables, and secrets). To reduce this supply-chain risk, vendor the.wasmfile locally or pin to a specific release asset/hash instead of usinglatest.
plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm" {
dot_config/zellij/layouts/default.kdl:93
- This second
plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm"instance also downloads and executes the zjstatus WASM from a mutablereleases/latestURL each time the layout is used. A compromise of that GitHub release stream would let an attacker silently run arbitrary code in your terminal multiplexer, exposing all shell activity and credentials. Prefer a locally vendored plugin or a URL pinned to a specific, verified release instead oflatest.
plugin location="https://github.com/dj95/zjstatus/releases/latest/download/zjstatus.wasm" {
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| # ── Mode Indicator Pill ────────────────────────────────────────────── | ||
| # Appended to status-right. PREFIX=mauve, COPY=yellow, NORMAL=green. | ||
| set -ag status-right "#{?client_prefix,#[fg=#cba6f7]#[bg=default]#[fg=#11111b#,bg=#cba6f7] #[fg=#cba6f7#,bg=#313244] prefix#[fg=#313244]#[bg=default] ,#{?pane_in_mode,#[fg=#f9e2af]#[bg=default]#[fg=#11111b#,bg=#f9e2af] #[fg=#f9e2af#,bg=#313244] copy#[fg=#313244]#[bg=default] ,#[fg=#a6e3a1]#[bg=default]#[fg=#11111b#,bg=#a6e3a1] #[fg=#a6e3a1#,bg=#313244] normal#[fg=#313244]#[bg=default] }}" |
There was a problem hiding this comment.
The mode-indicator format string has several invalid tmux style segments like #[fg=#11111b#,...] / #[fg=#cba6f7#,...] (extra # after the hex color). Tmux will treat these as malformed attributes and may render incorrectly or log errors. Remove the stray # characters so each attribute is fg=#RRGGBB / bg=#RRGGBB.
| set -ag status-right "#{?client_prefix,#[fg=#cba6f7]#[bg=default]#[fg=#11111b#,bg=#cba6f7] #[fg=#cba6f7#,bg=#313244] prefix#[fg=#313244]#[bg=default] ,#{?pane_in_mode,#[fg=#f9e2af]#[bg=default]#[fg=#11111b#,bg=#f9e2af] #[fg=#f9e2af#,bg=#313244] copy#[fg=#313244]#[bg=default] ,#[fg=#a6e3a1]#[bg=default]#[fg=#11111b#,bg=#a6e3a1] #[fg=#a6e3a1#,bg=#313244] normal#[fg=#313244]#[bg=default] }}" | |
| set -ag status-right "#{?client_prefix,#[fg=#cba6f7]#[bg=default]#[fg=#11111b,bg=#cba6f7] #[fg=#cba6f7,bg=#313244] prefix#[fg=#313244]#[bg=default] ,#{?pane_in_mode,#[fg=#f9e2af]#[bg=default]#[fg=#11111b,bg=#f9e2af] #[fg=#f9e2af,bg=#313244] copy#[fg=#313244]#[bg=default] ,#[fg=#a6e3a1]#[bg=default]#[fg=#11111b,bg=#a6e3a1] #[fg=#a6e3a1,bg=#313244] normal#[fg=#313244]#[bg=default] }}" |
| command_hostname_interval "0" | ||
| command_hostname_rendermode "static" | ||
|
|
||
| command_session_count_command "sh -c 'zellij list-sessions 2>/dev/null | grep -cv EXITED'" |
There was a problem hiding this comment.
There is trailing whitespace after the closing quote on this line. It’s minor, but it tends to create noisy diffs and can trip whitespace linters/editors; consider removing the trailing space.
| command_session_count_command "sh -c 'zellij list-sessions 2>/dev/null | grep -cv EXITED'" | |
| command_session_count_command "sh -c 'zellij list-sessions 2>/dev/null | grep -cv EXITED'" |
Summary
statusbar.conf(pre-TPM) andstatusbar-overrides.conf(post-TPM) for maintainabilityDetails
Tmux
monitor (host), `` terminal-tmux (session),lightbulb outline (mode)Zellij
zellij list-sessions | grep -cv EXITEDFish
fish_greetingwrites timestamp to~/.cache/fish_greeting_stamp, only shows tips after 6-hour cooldown