diff --git a/dot_config/fish/functions/fish_greeting.fish b/dot_config/fish/functions/fish_greeting.fish index 4fdde42..495f0dd 100644 --- a/dot_config/fish/functions/fish_greeting.fish +++ b/dot_config/fish/functions/fish_greeting.fish @@ -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) diff --git a/dot_config/tmux/statusbar-overrides.conf b/dot_config/tmux/statusbar-overrides.conf new file mode 100644 index 0000000..45d3fd2 --- /dev/null +++ b/dot_config/tmux/statusbar-overrides.conf @@ -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] }}" diff --git a/dot_config/tmux/statusbar.conf b/dot_config/tmux/statusbar.conf new file mode 100644 index 0000000..313f52b --- /dev/null +++ b/dot_config/tmux/statusbar.conf @@ -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' diff --git a/dot_config/tmux/tmux-which-key/config.yaml b/dot_config/tmux/tmux-which-key/config.yaml new file mode 100644 index 0000000..1b68a60 --- /dev/null +++ b/dot_config/tmux/tmux-which-key/config.yaml @@ -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 diff --git a/dot_config/tmux/tmux.conf.tmpl b/dot_config/tmux/tmux.conf.tmpl index 0382ceb..3db235e 100644 --- a/dot_config/tmux/tmux.conf.tmpl +++ b/dot_config/tmux/tmux.conf.tmpl @@ -157,14 +157,17 @@ bind v run-shell "~/.config/tmux/scripts/container-split.sh -v" # Mouse: double-click status bar for new window, middle-click tab to close bind -T root DoubleClick1Status new-window -c "#{pane_current_path}" bind -T root MouseDown2Status kill-window -t= +unbind -T root MouseDown1StatusRight # ── Plugins ────────────────────────────────────────────────────────── set-environment -g TMUX_PLUGIN_MANAGER_PATH '~/.config/tmux/plugins' -set -g @plugin 'tmux-plugins/tmux-cpu' set -g @plugin 'tmux-plugins/tmux-resurrect' set -g @plugin 'tmux-plugins/tmux-continuum' set -g @plugin 'sainnhe/tmux-fzf' +set -g @plugin 'alexwforsythe/tmux-which-key' +set -g @tmux-which-key-xdg-enable 1 +set -g @tmux-which-key-xdg-plugin-path "tmux/tmux-which-key" set -g @resurrect-capture-pane-contents 'on' set -g @continuum-restore 'off' @@ -175,45 +178,11 @@ set -g @resurrect-strategy-nvim 'session' set -g @resurrect-hook-post-save-layout 'sed -i "s|/var/home|/home|g" $1' {{- end }} -# ── Catppuccin Theme ───────────────────────────────────────────────── -# [omarchy override] Uncomment this block to replace the omarchy inline theme -set -g @plugin 'catppuccin/tmux' -set -g @catppuccin_flavor "mocha" - -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_overlay_2}},bg=default]#[fg=#{@thm_crust},bg=##{?window_activity_flag,##{@thm_lavender},##{@thm_overlay_2}}]" -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_mauve},bg=default]#[fg=#{@thm_crust},bg=#{@thm_mauve}]" -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" - -set -g @catppuccin_status_right_separator " " -set -g @catppuccin_window_flags "icon" -set -g @catppuccin_window_text "#{?window_activity_flag,#[bold fg=#{@thm_lavender}],} #T (#{window_panes})" -set -g @catppuccin_window_current_text " #T (#{window_panes})" -set -g status-right-length 200 -set -g status-left-length 100 -set -g status-left "" +# ── Status Bar ─────────────────────────────────────────────────────── +# [omarchy override] Catppuccin theme + Zellij-style status bar. +# Split into two files: pre-TPM config and post-TPM overrides. +source-file ~/.config/tmux/statusbar.conf bind -T root MouseDown1StatusLeft new-window -c "#{pane_current_path}" -bind -T root MouseDown1StatusRight choose-tree -Zw -set -g status 2 -set -g status-format[1] "#[fg=#{@thm_surface_1},bg=default,fill=default]#(printf '·%.0s' $(seq 1 #{client_width}))" -set -g status-right "#[fg=#{@thm_mauve}]#(~/.config/tmux/scripts/container-status.sh) " -set -agF status-right "#{E:@catppuccin_status_application}" -set -agF status-right "#{E:@catppuccin_status_cpu}" -set -ag status-right "#{E:@catppuccin_status_host}" -set -ag status-right "#{E:@catppuccin_status_session}" - -# ── Statusbar Auto-hide ────────────────────────────────────────────── -# Show statusbar only when >1 window; toggle manually with prefix+b -set-hook -g after-new-window 'if -F "#{==:#{session_windows},1}" "set status off" "set status 2"' -set-hook -g window-unlinked 'if -F "#{==:#{session_windows},1}" "set status off" "set status 2"' -set-hook -g client-session-changed 'if -F "#{==:#{session_windows},1}" "set status off" "set status 2"' -set-hook -g session-created 'set status off' -bind b if -F '#{==:#{status},off}' 'set status 2' 'set status off' # ── Right-click Menu Fix ───────────────────────────────────────────── # Patch right-click menus: add -O flag so menus stay open after release @@ -222,8 +191,5 @@ run-shell 'tmux list-keys -T root | grep "MouseDown3.*display-menu" | sed "s/dis # Initialize TMUX plugin manager (cloned by chezmoi to ~/.config/tmux/plugins/tpm) run '~/.config/tmux/plugins/tpm/tpm' -# Override catppuccin's activity/bell styles (must be after TPM loads the plugin, -# otherwise the plugin's set -gF overwrites them). Solid bg breaks custom separators. -set -g window-status-activity-style "bold" -set -g window-status-bell-style "bold" -set -g status-left "#[fg=#313244,bg=default]#[fg=#cdd6f4,bg=#313244,bold]+#[fg=#313244,bg=default,nobold] " +# Post-TPM overrides (catppuccin overwrites borders, pill styles at load time) +source-file ~/.config/tmux/statusbar-overrides.conf diff --git a/dot_config/zellij/layouts/default.kdl b/dot_config/zellij/layouts/default.kdl index 3538442..a88737f 100644 --- a/dot_config/zellij/layouts/default.kdl +++ b/dot_config/zellij/layouts/default.kdl @@ -31,7 +31,7 @@ layout { format_left "{tabs}" format_center "{notifications}" - format_right "#[bg=default,fg=#b4befe]#[bg=#b4befe,fg=#11111b]⮁ #[bg=#45475a,fg=#b4befe,bold] {swap_layout}#[bg=default,fg=#45475a] #[bg=default,fg=#cba6f7]#[bg=#cba6f7,fg=#11111b] #[bg=#45475a,fg=#cba6f7,bold] {command_hostname}#[bg=default,fg=#45475a] #[bg=default,fg=#74c7ec]#[bg=#74c7ec,fg=#11111b,bold] {session} #[bg=default] {mode}" + format_right "#[bg=default,fg=#b4befe]#[bg=#b4befe,fg=#11111b]⮁ #[bg=#45475a,fg=#b4befe,bold] {swap_layout}#[bg=default,fg=#45475a] #[bg=default,fg=#cba6f7]#[bg=#cba6f7,fg=#11111b] #[bg=#45475a,fg=#cba6f7,bold] {command_hostname}#[bg=default,fg=#45475a] #[bg=default,fg=#74c7ec]#[bg=#74c7ec,fg=#11111b] #[bg=#45475a,fg=#74c7ec,bold] {command_session_count}#[bg=default,fg=#45475a] {mode}" format_space "" format_hide_on_overlength "true" format_precedence "rlc" @@ -41,19 +41,19 @@ layout { border_format "#[fg=#313244]{char}" border_position "bottom" - mode_normal "#[bg=#a6e3a1,fg=#11111b,bold] NORMAL#[bg=default,fg=#a6e3a1]" - mode_locked "#[bg=#f38ba8,fg=#11111b,bold] LOCKED#[bg=default,fg=#f38ba8]" - mode_pane "#[bg=#94e2d5,fg=#11111b,bold] PANE#[bg=default,fg=#94e2d5]" - mode_tab "#[bg=#94e2d5,fg=#11111b,bold] TAB#[bg=default,fg=#94e2d5]" - mode_resize "#[bg=#f9e2af,fg=#11111b,bold] RESIZE#[bg=default,fg=#f9e2af]" - mode_move "#[bg=#f9e2af,fg=#11111b,bold] MOVE#[bg=default,fg=#f9e2af]" - mode_scroll "#[bg=#f2cdcd,fg=#11111b,bold] SCROLL#[bg=default,fg=#f2cdcd]" - mode_search "#[bg=#f2cdcd,fg=#11111b,bold] SEARCH#[bg=default,fg=#f2cdcd]" - mode_enter_search "#[bg=#f2cdcd,fg=#11111b,bold] SEARCH#[bg=default,fg=#f2cdcd]" - mode_session "#[bg=#f5c2e7,fg=#11111b,bold] SESSION#[bg=default,fg=#f5c2e7]" - mode_tmux "#[bg=#cba6f7,fg=#11111b,bold] TMUX#[bg=default,fg=#cba6f7]" - mode_rename_tab "#[bg=#f9e2af,fg=#11111b,bold] RENAME#[bg=default,fg=#f9e2af]" - mode_rename_pane "#[bg=#f9e2af,fg=#11111b,bold] RENAME#[bg=default,fg=#f9e2af]" + mode_normal "#[bg=default,fg=#a6e3a1]#[bg=#a6e3a1,fg=#11111b]󰌶 #[bg=#45475a,fg=#a6e3a1,bold] normal#[bg=default,fg=#45475a]" + mode_locked "#[bg=default,fg=#f38ba8]#[bg=#f38ba8,fg=#11111b]󰌶 #[bg=#45475a,fg=#f38ba8,bold] locked#[bg=default,fg=#45475a]" + mode_pane "#[bg=default,fg=#94e2d5]#[bg=#94e2d5,fg=#11111b]󰌶 #[bg=#45475a,fg=#94e2d5,bold] pane#[bg=default,fg=#45475a]" + mode_tab "#[bg=default,fg=#94e2d5]#[bg=#94e2d5,fg=#11111b]󰌶 #[bg=#45475a,fg=#94e2d5,bold] tab#[bg=default,fg=#45475a]" + mode_resize "#[bg=default,fg=#f9e2af]#[bg=#f9e2af,fg=#11111b]󰌶 #[bg=#45475a,fg=#f9e2af,bold] resize#[bg=default,fg=#45475a]" + mode_move "#[bg=default,fg=#f9e2af]#[bg=#f9e2af,fg=#11111b]󰌶 #[bg=#45475a,fg=#f9e2af,bold] move#[bg=default,fg=#45475a]" + mode_scroll "#[bg=default,fg=#f2cdcd]#[bg=#f2cdcd,fg=#11111b]󰌶 #[bg=#45475a,fg=#f2cdcd,bold] scroll#[bg=default,fg=#45475a]" + mode_search "#[bg=default,fg=#f2cdcd]#[bg=#f2cdcd,fg=#11111b]󰌶 #[bg=#45475a,fg=#f2cdcd,bold] search#[bg=default,fg=#45475a]" + mode_enter_search "#[bg=default,fg=#f2cdcd]#[bg=#f2cdcd,fg=#11111b]󰌶 #[bg=#45475a,fg=#f2cdcd,bold] search#[bg=default,fg=#45475a]" + mode_session "#[bg=default,fg=#f5c2e7]#[bg=#f5c2e7,fg=#11111b]󰌶 #[bg=#45475a,fg=#f5c2e7,bold] session#[bg=default,fg=#45475a]" + mode_tmux "#[bg=default,fg=#cba6f7]#[bg=#cba6f7,fg=#11111b]󰌶 #[bg=#45475a,fg=#cba6f7,bold] tmux#[bg=default,fg=#45475a]" + mode_rename_tab "#[bg=default,fg=#f9e2af]#[bg=#f9e2af,fg=#11111b]󰌶 #[bg=#45475a,fg=#f9e2af,bold] rename#[bg=default,fg=#45475a]" + mode_rename_pane "#[bg=default,fg=#f9e2af]#[bg=#f9e2af,fg=#11111b]󰌶 #[bg=#45475a,fg=#f9e2af,bold] rename#[bg=default,fg=#45475a]" tab_normal "#[bg=default,fg=#89b4fa]#[bg=#89b4fa,fg=#11111b,bold]{index} #[bg=#45475a,fg=#89b4fa,bold] {name}{floating_indicator}#[bg=default,fg=#45475a]" tab_normal_fullscreen "#[bg=default,fg=#89b4fa]#[bg=#89b4fa,fg=#11111b,bold]{index} #[bg=#45475a,fg=#89b4fa,bold] {name}{fullscreen_indicator}#[bg=default,fg=#45475a]" @@ -79,6 +79,11 @@ layout { command_hostname_interval "0" command_hostname_rendermode "static" + command_session_count_command "sh -c 'zellij list-sessions 2>/dev/null | grep -cv EXITED'" + command_session_count_format "{stdout}" + command_session_count_interval "5" + command_session_count_rendermode "dynamic" + } }