-
Notifications
You must be signed in to change notification settings - Fork 1
Zellij-style tmux status bar, unified catppuccin theming, and shell improvements #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
4954eb9
Add Zellij-style pane borders, thin divider, and tmux-which-key plugin
tyvsmith 4d9d419
Add mode indicator pill to right status bar (NORMAL/PREFIX/COPY)
tyvsmith 7ed425e
Remove cpu status pill and tmux-cpu plugin
tyvsmith da12411
Fix corrupted powerline glyphs and use thinner divider character
tyvsmith bdf2b8d
Fix powerline glyphs, pane borders after TPM, which-key quoting, mode…
tyvsmith 6489858
Add empty spacer line between tab pills and divider (status 3 lines)
tyvsmith 7a5bd48
Remove auto-hide status bar, keep manual toggle (prefix+b)
tyvsmith b136acb
Remove spacer line, use lower-eighth-block divider for tighter Zellij…
tyvsmith ba8d2fc
Drop to single status line, remove divider (Zellij uses no separator …
tyvsmith 93f4d14
Use pane-border-status top as divider line below status bar
tyvsmith 9b3c437
Revert to 2-line status with thin upper-eighth divider, remove pane-b…
tyvsmith 3fd39bb
Use dim dotted divider line, explicitly disable pane-border-status
tyvsmith 04952db
Use solid line divider (─) instead of dots
tyvsmith 2dd7068
Dim divider line further (#232334) so it appears thinner
tyvsmith 321836b
Use lower-eighth block (▁) for thinner solid divider line
tyvsmith e2ee43e
Revert to dotted divider line (·)
tyvsmith b8563ee
Add icons to mode pill, fix color bleed into adjacent status pills
tyvsmith e17dc19
Two-tone mode pill: colored icon left, gray text right (matches catpp…
tyvsmith b19163f
Fix mode pill: constant icon, catppuccin sizing, green/mauve/yellow c…
tyvsmith ebd6f68
Fix mode pill padding, lowercase text; override session pill to const…
tyvsmith 4a3b5da
Fix mode pill: escape commas with #, inside tmux conditionals
tyvsmith 4af1336
Remove MouseDown1StatusRight binding that triggered choose-tree on al…
tyvsmith 443bcec
Unbind default MouseDown1StatusRight to disable right status bar clicks
tyvsmith f347802
Match Zellij catppuccin theme: blue/orange tabs, colored pill text, Z…
tyvsmith 4d93c3b
Split status bar config into statusbar.conf and statusbar-overrides.conf
tyvsmith a1a2da7
Zellij: two-tone mode/session pills, lowercase text, session count re…
tyvsmith 01d6562
Throttle fish greeting to show tips once every 6 hours
tyvsmith File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| # ── Post-TPM Status Bar Overrides ──────────────────────────────────── | ||
| # Must be sourced AFTER TPM loads catppuccin, otherwise the plugin | ||
| # overwrites these settings. See statusbar.conf for pre-TPM config. | ||
|
|
||
| # ── Activity / Bell ────────────────────────────────────────────────── | ||
| # Solid bg breaks custom separators, so use bold-only styles. | ||
| set -g window-status-activity-style "bold" | ||
| set -g window-status-bell-style "bold" | ||
|
|
||
| # ── Status Left: "+" new-window button ────────────────────────────── | ||
| set -g status-left "#[fg=#313244,bg=default]#[fg=#cdd6f4,bg=#313244,bold]+#[fg=#313244,bg=default,nobold] " | ||
|
|
||
| # ── Pane Borders ──────────────────────────────────────────────────── | ||
| # Zellij-style: subtle, thin, dim. Catppuccin sets bright borders. | ||
| set -g pane-border-lines single | ||
| set -g pane-border-style "fg=#313244" | ||
| set -g pane-active-border-style "fg=#45475a" | ||
| set -g pane-border-indicators off | ||
| set -g pane-border-status off | ||
|
|
||
| # ── Right-Side Pill Overrides ──────────────────────────────────────── | ||
| # Text color in each pill matches its primary (icon) color. | ||
|
|
||
| # Application pill: flamingo | ||
| set -g @catppuccin_status_application "#[fg=#eba0ac]#[bg=default]#[fg=#11111b,bg=#eba0ac] #[fg=#eba0ac,bg=#313244]#{E:@catppuccin_application_text}#[fg=#313244]#[bg=default] " | ||
| # Host pill: mauve, monitor icon | ||
| set -g @catppuccin_status_host "#[fg=#cba6f7]#[bg=default]#[fg=#11111b,bg=#cba6f7] #[fg=#cba6f7,bg=#313244]#{E:@catppuccin_host_text}#[fg=#313244]#[bg=default] " | ||
| # Session pill: constant blue (override catppuccin green/red prefix switch) | ||
| set -g @catppuccin_status_session "#[fg=#89b4fa]#[bg=default]#[fg=#11111b,bg=#89b4fa] #[fg=#89b4fa,bg=#313244]#{E:@catppuccin_session_text}#[fg=#313244]#[bg=default] " | ||
|
|
||
| # ── 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] }}" | ||
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # ── Catppuccin Status Bar ──────────────────────────────────────────── | ||
| # Pre-TPM catppuccin theme settings. Sourced before TPM loads the plugin. | ||
| # Post-TPM overrides are in statusbar-overrides.conf (sourced after TPM). | ||
|
|
||
| set -g @plugin 'catppuccin/tmux' | ||
| set -g @catppuccin_flavor "mocha" | ||
|
|
||
| # ── Tab Styling ────────────────────────────────────────────────────── | ||
| # Custom window separators with catppuccin pill styling. | ||
| # Unfocused tabs: blue. Focused tab: orange (peach). | ||
| # Activity flag: lavender override on unfocused tabs. | ||
| set -g @catppuccin_status_background "none" | ||
| set -g @catppuccin_window_status_style "custom" | ||
| set -g @catppuccin_window_left_separator "#[fg=##{?window_activity_flag,#{@thm_lavender},#{@thm_blue}},bg=default]#[fg=#{@thm_crust},bg=##{?window_activity_flag,#{@thm_lavender},#{@thm_blue}}]" | ||
| set -g @catppuccin_window_middle_separator " " | ||
| set -g @catppuccin_window_right_separator "#[fg=#{@thm_surface_0},bg=default]" | ||
| set -g @catppuccin_window_current_left_separator "#[fg=#{@thm_peach},bg=default]#[fg=#{@thm_crust},bg=#{@thm_peach}]" | ||
| set -g @catppuccin_window_current_middle_separator " " | ||
| set -g @catppuccin_window_current_right_separator "#[fg=#{@thm_surface_1},bg=default]" | ||
| set -g @catppuccin_status_connect_separator "no" | ||
|
|
||
| # ── Tab Content ────────────────────────────────────────────────────── | ||
| # Text color matches the tab's primary color (blue unfocused, peach focused). | ||
| # Shows: window title + pane count. Icon flags for zoom/activity/bell. | ||
| set -g @catppuccin_status_right_separator " " | ||
| set -g @catppuccin_window_flags "icon" | ||
| set -g @catppuccin_window_text "#{?window_activity_flag,#[bold fg=#{@thm_lavender}],#[fg=#{@thm_blue}]} #T (#{window_panes})" | ||
| set -g @catppuccin_window_current_text "#[fg=#{@thm_peach}] #T (#{window_panes})" | ||
|
|
||
| # ── Status Bar Layout ──────────────────────────────────────────────── | ||
| # 2-line status: line 1 = tabs + right pills, line 2 = dotted divider. | ||
| set -g status-right-length 200 | ||
| set -g status-left-length 100 | ||
| set -g status-left "" | ||
| set -g status 2 | ||
| set -g status-format[1] "#[fg=#313244,bg=default,fill=default]#(printf '·%.0s' $(seq 1 #{client_width}))" | ||
|
|
||
| # ── Right-Side Pill Modules ────────────────────────────────────────── | ||
| # Order: containers | application | host | session | mode | ||
| set -g status-right "#[fg=#{@thm_mauve}]#(~/.config/tmux/scripts/container-status.sh) " | ||
| set -agF status-right "#{E:@catppuccin_status_application}" | ||
| set -ag status-right "#{E:@catppuccin_status_host}" | ||
| set -ag status-right "#{E:@catppuccin_status_session}" | ||
|
|
||
| # ── Statusbar Toggle ──────────────────────────────────────────────── | ||
| bind b if -F '#{==:#{status},off}' 'set status 2' 'set status off' |
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,280 @@ | ||
| # yaml-language-server: $schema=config.schema.yaml | ||
| # tmux-which-key config — customized for dotfiles keybindings | ||
| # Prefix is C-Space; root_table disabled to avoid conflict | ||
| command_alias_start_index: 200 | ||
| keybindings: | ||
| # root_table: C-Space # disabled — conflicts with prefix | ||
| prefix_table: Space | ||
| title: | ||
| style: align=centre,bold | ||
| prefix: tmux | ||
| prefix_style: fg=#cba6f7,align=centre,bold | ||
| position: | ||
| x: R | ||
| y: P | ||
| custom_variables: | ||
| - name: log_info | ||
| value: "#[fg=#a6e3a1,italics] [info]#[default]#[italics]" | ||
| macros: | ||
| - name: reload-config | ||
| commands: | ||
| - display "#{log_info} Loading config..." | ||
| - source-file ~/.config/tmux/tmux.conf | ||
| - display -p "\n\n... Press ENTER to continue" | ||
| - name: restart-pane | ||
| commands: | ||
| - display "#{log_info} Restarting pane" | ||
| - respawnp -k -c "#{pane_current_path}" | ||
| - name: container-split-h | ||
| commands: | ||
| - run-shell "~/.config/tmux/scripts/container-split.sh -h" | ||
| - name: container-split-v | ||
| commands: | ||
| - run-shell "~/.config/tmux/scripts/container-split.sh -v" | ||
| - name: toggle-status | ||
| commands: | ||
| - if -F "#{==:#{status},off}" "set status 2" "set status off" | ||
| - name: lazygit-popup | ||
| commands: | ||
| - display-popup -E -w 90% -h 90% -d "#{pane_current_path}" lazygit | ||
| - name: new-window-here | ||
| commands: | ||
| - neww -c "#{pane_current_path}" | ||
| - name: container-pick | ||
| commands: | ||
| - display-popup -E -w 80% -h 60% ~/.config/tmux/scripts/container-pick-send.sh | ||
| items: | ||
| - name: Run command | ||
| key: space | ||
| command: command-prompt | ||
| - name: Last window | ||
| key: tab | ||
| command: last-window | ||
| - name: Last pane | ||
| key: "`" | ||
| command: last-pane | ||
| - name: Lazygit | ||
| key: g | ||
| macro: lazygit-popup | ||
| - name: Copy mode | ||
| key: c | ||
| command: copy-mode | ||
| - separator: true | ||
| - name: +Windows | ||
| key: w | ||
| menu: | ||
| - name: Choose tree | ||
| key: w | ||
| command: choose-tree -Zw | ||
| - name: Last | ||
| key: tab | ||
| command: last-window | ||
| - name: Previous | ||
| key: p | ||
| command: previous-window | ||
| - name: Next | ||
| key: n | ||
| command: next-window | ||
| - name: New | ||
| key: c | ||
| macro: new-window-here | ||
| - name: Kill | ||
| key: x | ||
| command: 'confirm -p "Kill window #W? (y/n)" killw' | ||
| - name: Rename | ||
| key: r | ||
| command: command-prompt -I "#W" "renamew -- \"%%\"" | ||
| - separator: true | ||
| - name: +Layout | ||
| key: l | ||
| menu: | ||
| - name: Next | ||
| key: l | ||
| command: nextl | ||
| transient: true | ||
| - name: Tiled | ||
| key: t | ||
| command: selectl tiled | ||
| - name: Horizontal | ||
| key: h | ||
| command: selectl even-horizontal | ||
| - name: Vertical | ||
| key: v | ||
| command: selectl even-vertical | ||
| - name: Main horizontal | ||
| key: H | ||
| command: selectl main-horizontal | ||
| - name: Main vertical | ||
| key: V | ||
| command: selectl main-vertical | ||
| - name: Rotate | ||
| key: o | ||
| command: rotatew | ||
| transient: true | ||
| - name: +Panes | ||
| key: p | ||
| menu: | ||
| - name: Last | ||
| key: tab | ||
| command: lastp | ||
| - name: Choose | ||
| key: p | ||
| command: displayp -d 0 | ||
| - separator: true | ||
| - name: Split horizontal (container-aware) | ||
| key: h | ||
| macro: container-split-h | ||
| - name: Split vertical (container-aware) | ||
| key: v | ||
| macro: container-split-v | ||
| - separator: true | ||
| - name: Left | ||
| key: Left | ||
| command: selectp -L | ||
| - name: Down | ||
| key: Down | ||
| command: selectp -D | ||
| - name: Up | ||
| key: Up | ||
| command: selectp -U | ||
| - name: Right | ||
| key: Right | ||
| command: selectp -R | ||
| - separator: true | ||
| - name: Zoom | ||
| key: z | ||
| command: resizep -Z | ||
| - name: Swap next | ||
| key: x | ||
| command: swapp -t :.+ | ||
| - name: +Resize | ||
| key: r | ||
| menu: | ||
| - name: Left | ||
| key: h | ||
| command: resizep -L 5 | ||
| transient: true | ||
| - name: Down | ||
| key: j | ||
| command: resizep -D 5 | ||
| transient: true | ||
| - name: Up | ||
| key: k | ||
| command: resizep -U 5 | ||
| transient: true | ||
| - name: Right | ||
| key: l | ||
| command: resizep -R 5 | ||
| transient: true | ||
| - name: Break to window | ||
| key: "!" | ||
| command: break-pane | ||
| - separator: true | ||
| - name: Mark | ||
| key: m | ||
| command: selectp -m | ||
| - name: Unmark | ||
| key: M | ||
| command: selectp -M | ||
| - name: Respawn | ||
| key: R | ||
| macro: restart-pane | ||
| - name: Kill | ||
| key: X | ||
| command: 'confirm -p "Kill pane #P? (y/n)" killp' | ||
| - name: +Sessions | ||
| key: s | ||
| menu: | ||
| - name: Choose | ||
| key: s | ||
| command: choose-tree -Zs | ||
| - name: New | ||
| key: n | ||
| command: new-session | ||
| - name: Rename | ||
| key: R | ||
| command: command-prompt -I "#S" "rename-session -- \"%%\"" | ||
| - name: Kill | ||
| key: X | ||
| command: 'confirm -p "Kill session #S? (y/n)" kill-session' | ||
| - name: +Containers | ||
| key: e | ||
| menu: | ||
| - name: Pick container (fzf) | ||
| key: e | ||
| macro: container-pick | ||
| - name: Split horizontal in container | ||
| key: h | ||
| macro: container-split-h | ||
| - name: Split vertical in container | ||
| key: v | ||
| macro: container-split-v | ||
| - name: +Buffers | ||
| key: b | ||
| menu: | ||
| - name: Choose | ||
| key: b | ||
| command: choose-buffer -Z | ||
| - name: List | ||
| key: l | ||
| command: lsb | ||
| - name: Paste | ||
| key: p | ||
| command: pasteb | ||
| - name: +Client | ||
| key: C | ||
| menu: | ||
| - name: Choose | ||
| key: c | ||
| command: choose-client -Z | ||
| - name: Last | ||
| key: l | ||
| command: switchc -l | ||
| - name: Previous | ||
| key: p | ||
| command: switchc -p | ||
| - name: Next | ||
| key: n | ||
| command: switchc -n | ||
| - separator: true | ||
| - name: Refresh | ||
| key: R | ||
| command: refresh | ||
| - name: Toggle status bar | ||
| key: b | ||
| macro: toggle-status | ||
| - name: +Plugins | ||
| key: P | ||
| menu: | ||
| - name: Install | ||
| key: i | ||
| command: | ||
| run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bindings/install_plugins | ||
| - name: Update | ||
| key: u | ||
| command: | ||
| run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bindings/update_plugins | ||
| - name: Clean | ||
| key: c | ||
| command: | ||
| run-shell $TMUX_PLUGIN_MANAGER_PATH/tpm/bindings/clean_plugins | ||
| - name: Detach | ||
| key: D | ||
| command: detach | ||
| - separator: true | ||
| - name: Reload config | ||
| key: r | ||
| macro: reload-config | ||
| - name: Customize | ||
| key: "," | ||
| command: customize-mode -Z | ||
| - separator: true | ||
| - name: Time | ||
| key: T | ||
| command: clock-mode | ||
| - name: Show messages | ||
| key: "~" | ||
| command: show-messages | ||
| - name: +Keys | ||
| key: "?" | ||
| command: list-keys -N |
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 isfg=#RRGGBB/bg=#RRGGBB.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These are necessary.