Skip to content
Merged
Show file tree
Hide file tree
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 Mar 1, 2026
4d9d419
Add mode indicator pill to right status bar (NORMAL/PREFIX/COPY)
tyvsmith Mar 1, 2026
7ed425e
Remove cpu status pill and tmux-cpu plugin
tyvsmith Mar 1, 2026
da12411
Fix corrupted powerline glyphs and use thinner divider character
tyvsmith Mar 1, 2026
bdf2b8d
Fix powerline glyphs, pane borders after TPM, which-key quoting, mode…
tyvsmith Mar 1, 2026
6489858
Add empty spacer line between tab pills and divider (status 3 lines)
tyvsmith Mar 1, 2026
7a5bd48
Remove auto-hide status bar, keep manual toggle (prefix+b)
tyvsmith Mar 1, 2026
b136acb
Remove spacer line, use lower-eighth-block divider for tighter Zellij…
tyvsmith Mar 1, 2026
ba8d2fc
Drop to single status line, remove divider (Zellij uses no separator …
tyvsmith Mar 1, 2026
93f4d14
Use pane-border-status top as divider line below status bar
tyvsmith Mar 1, 2026
9b3c437
Revert to 2-line status with thin upper-eighth divider, remove pane-b…
tyvsmith Mar 1, 2026
3fd39bb
Use dim dotted divider line, explicitly disable pane-border-status
tyvsmith Mar 1, 2026
04952db
Use solid line divider (─) instead of dots
tyvsmith Mar 1, 2026
2dd7068
Dim divider line further (#232334) so it appears thinner
tyvsmith Mar 1, 2026
321836b
Use lower-eighth block (▁) for thinner solid divider line
tyvsmith Mar 1, 2026
e2ee43e
Revert to dotted divider line (·)
tyvsmith Mar 1, 2026
b8563ee
Add icons to mode pill, fix color bleed into adjacent status pills
tyvsmith Mar 1, 2026
e17dc19
Two-tone mode pill: colored icon left, gray text right (matches catpp…
tyvsmith Mar 1, 2026
b19163f
Fix mode pill: constant icon, catppuccin sizing, green/mauve/yellow c…
tyvsmith Mar 1, 2026
ebd6f68
Fix mode pill padding, lowercase text; override session pill to const…
tyvsmith Mar 1, 2026
4a3b5da
Fix mode pill: escape commas with #, inside tmux conditionals
tyvsmith Mar 1, 2026
4af1336
Remove MouseDown1StatusRight binding that triggered choose-tree on al…
tyvsmith Mar 1, 2026
443bcec
Unbind default MouseDown1StatusRight to disable right status bar clicks
tyvsmith Mar 1, 2026
f347802
Match Zellij catppuccin theme: blue/orange tabs, colored pill text, Z…
tyvsmith Mar 1, 2026
4d93c3b
Split status bar config into statusbar.conf and statusbar-overrides.conf
tyvsmith Mar 1, 2026
a1a2da7
Zellij: two-tone mode/session pills, lowercase text, session count re…
tyvsmith Mar 1, 2026
01d6562
Throttle fish greeting to show tips once every 6 hours
tyvsmith Mar 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 22 additions & 0 deletions dot_config/fish/functions/fish_greeting.fish
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,28 @@ function fish_greeting
"tv fuzzy finder TUI (television)" \
"tv --preview fuzzy find with preview"

# Only show tips once every 6 hours
set -l stamp_file ~/.cache/fish_greeting_stamp
set -l interval 21600 # 6 hours in seconds
set -l now (date +%s)
set -l show false

if not test -f $stamp_file
set show true
else
set -l last (cat $stamp_file)
if test (math $now - $last) -ge $interval
set show true
end
end

if test $show = false
return
end

mkdir -p ~/.cache
echo $now > $stamp_file

set -l count (count $tips)
set -l idx1 (random 1 $count)
set -l idx2 (random 1 $count)
Expand Down
33 changes: 33 additions & 0 deletions dot_config/tmux/statusbar-overrides.conf
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] }}"
Copy link

Copilot AI Mar 1, 2026

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 is fg=#RRGGBB / bg=#RRGGBB.

Suggested change
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] }}"

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are necessary.

46 changes: 46 additions & 0 deletions dot_config/tmux/statusbar.conf
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'
280 changes: 280 additions & 0 deletions dot_config/tmux/tmux-which-key/config.yaml
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
Loading