[Update] bulk update

This commit is contained in:
2026-09-12 23:38:18 +02:00
parent 3ec2503f38
commit 675ce12b2e
162 changed files with 3348 additions and 2419 deletions
+71 -5
View File
@@ -3,6 +3,18 @@
set -g extended-keys on
set -g extended-keys-format csi-u
# Mouse/touch reporting. Chiefly so the window list in the status bar is
# tappable — tmux binds MouseDown1Status to `switch-client -t =` out of the box,
# and status-format[1] below keeps the `range=window|…` markers that make each
# entry a hit target, so a tap on a tab switches to it with no extra binding.
# Wheel over the bar cycles windows; right-click a tab or the session name for
# tmux's built-in menus (no touch equivalent — a phone can't right-click).
#
# The cost: drag-select now goes to tmux instead of kitty, so hold Shift when you
# want kitty's own selection. Scroll wheel enters copy-mode on the pane rather
# than kitty's scrollback, and a click focuses the pane under it.
set -g mouse on
# Number windows (and panes) from 1 instead of 0 — easier to reach on the
# keyboard. renumber-windows keeps them gap-free when a window is closed.
set -g base-index 1
@@ -42,8 +54,36 @@ set -g status-style "bg=default,fg=#cdd6f4" # transparent: no bar background
set -g status-left-length 40
set -g status-right-length 100
# Left: session name (mauve/bold) + thin divider.
set -g status-left " #[fg=#cba6f7,bold]#S #[fg=#45475a]│ "
# --- Mobile view -----------------------------------------------------------
# status-left and status-right are re-evaluated per client on every draw, and
# #{client_width} is that client's own width — so in `auto` mode a phone attached
# to the same session as the desktop renders the compact bars while the desktop
# keeps the full ones, simultaneously and with no intervention.
#
# @status_mode is auto (per-client, by width) | full | compact, cycled with
# prefix+S. Rather than branch each bar three ways, the mode picks the width a
# client has to beat — 0 nothing can lose, 9999 nothing can win — so each
# decision below stays a single comparison. The 100 is the switch point: the full
# right segment is ~60 columns before the window list even starts. Set
# @status_mode without -g to scope an override to one session, so a grouped
# mobile session can sit on `compact` while the desktop session stays on `auto`.
#
# Each variant lives in its own option instead of inline because #{?a,b,c} splits
# its branches on commas and the styles are full of them (#[fg=…,bold]); option
# values are substituted after the ternary is parsed, so those commas are never
# seen as separators.
#
# NOTE: the comparisons MUST use #{e|>=:…}. Plain #{>=:…} compares as strings, so
# "144" >= "100" is false and every client would get the compact bar.
set -g @status_mode auto
set -g @status_cutoff "#{?#{==:#{@status_mode},full},0,#{?#{==:#{@status_mode},compact},9999,100}}"
# Left: session name (mauve/bold) + thin divider. Compact clips the name to two
# characters — enough to tell sessions apart when every column counts. #{=2:…}
# takes a format NAME, so it's session_name here rather than the #S shorthand.
set -g @left_full " #[fg=#cba6f7,bold]#S #[fg=#45475a]│ "
set -g @left_compact " #[fg=#cba6f7,bold]#{=2:session_name} #[fg=#45475a]│ "
set -g status-left "#{?#{e|>=:#{client_width},#{E:@status_cutoff}},#{E:@left_full},#{E:@left_compact}}"
# Middle: flat window list — inactive muted, active mauve/bold, 2-space gaps.
set -g window-status-separator " "
@@ -52,9 +92,35 @@ setw -g window-status-current-format "#[fg=#cba6f7,bold]#I #[fg=#cdd6f4,bold]#W"
setw -g window-status-activity-style "fg=#f9e2af"
# Right: net dl/ul · cpu · mem │ date │ clock. continuum prepends its invisible
# save hook here (this block sits above the tpm `run` line, so the hook survives
# every reload). Metrics are scripts/*.sh, symlinked into ~/.config/tmux/scripts/.
set -g status-right "#[fg=#a6e3a1]#(~/.config/tmux/scripts/net.sh dl) #[fg=#f9e2af]#(~/.config/tmux/scripts/net.sh ul) #[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) #[fg=#fab387]#(~/.config/tmux/scripts/temp.sh)#[fg=#45475a]│ #[fg=#a6adc8]%a %b %-d #[fg=#45475a]│ #[fg=#cba6f7,bold]%H:%M "
# save hook to status-right (this block sits above the tpm `run` line, so the
# hook survives every reload). Metrics are scripts/*.sh, symlinked into
# ~/.config/tmux/scripts/. The hook lands ahead of the #{?} below, i.e. outside
# it, so it keeps running for every client regardless of which variant is drawn.
set -g @right_full "#[fg=#a6e3a1]#(~/.config/tmux/scripts/net.sh dl) #[fg=#f9e2af]#(~/.config/tmux/scripts/net.sh ul) #[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) #[fg=#fab387]#(~/.config/tmux/scripts/temp.sh)#[fg=#45475a]│ #[fg=#a6adc8]%a %b %-d #[fg=#45475a]│ #[fg=#cba6f7,bold]%H:%M "
# Compact: cpu + mem only. Net rates and the temp glyph go first (widest, least
# useful on a phone), then the date, then the clock — a phone shows its own.
set -g @right_compact "#[fg=#89b4fa]#(~/.config/tmux/scripts/cpu.sh) #[fg=#94e2d5]#(~/.config/tmux/scripts/mem.sh) "
set -g status-right "#{?#{e|>=:#{client_width},#{E:@status_cutoff}},#{E:@right_full},#{E:@right_compact}}"
# Cycle auto -> compact -> full -> auto. Braces instead of nested quoted strings
# so the styles' commas and the inner if-shell don't need escaping.
bind S {
if -F '#{==:#{@status_mode},auto}' {
set -g @status_mode compact
display 'status bar: compact (forced)'
} {
if -F '#{==:#{@status_mode},compact}' {
set -g @status_mode full
display 'status bar: full (forced)'
} {
set -g @status_mode auto
display 'status bar: auto — switches at 100 columns'
}
}
refresh-client -S
}
# Two rows: [0] drawn top-border rule · [1] the bar content. The rule doubles as
# the separator from the pane content above; tmux status height is whole rows, so