From 3d0d1e57cdb9bc2a13122dfa084f3afe643e76f6 Mon Sep 17 00:00:00 2001 From: Oliver Ladner Date: Mon, 29 Jan 2024 12:21:02 +0100 Subject: [PATCH] finalize tmux --- .tmux.conf | 31 +++++++++++++++++++------ tmux.sh | 66 ++++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 73 insertions(+), 24 deletions(-) diff --git a/.tmux.conf b/.tmux.conf index 21bd8df..e653465 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,16 +1,32 @@ # Source changes without restarting tmux: # tmux source-file ~/.tmux.conf +# I have a custom Planck EZ layer for tmux +# so I don't have to adjust keyboard shortcuts +# +# Still, the most important ones to me: +# Prefix is Ctrl+b, then: +# c create new window +# n switch to next window +# switch to windows +# o switch to next pane +# % split pane vertically +# " split pane horizontally +# change layout when having more than one pane +# , rename active window # I don't know set -g mouse on -# Mouse scroll speed +# Increase scrollback history +set-option -g history-limit 50000 + +# Faster mouse scrolling set -g @scroll-speed-num-lines-per-scroll 5 # Vi mode to copy things from terminal setw -g mode-keys vi -# Count panes from 1 +# Count panes from 1 instead of 0 set -g base-index 1 setw -g pane-base-index 1 @@ -19,19 +35,20 @@ set -g status-style fg=#9d7cd8,bg=#16161e set-window-option -g window-status-current-style bg=#3e3158 set -g status-position top set -g status-interval 10 -set -g status-left-length 120 -set -g status-left ' New: 󰘴bc Ren: 󰘴b, Go: 󰘴b ' +set -g status-left-length 60 +set -g status-left ' Remember tmux layer' set -g status-justify centre set -g status-right "#( ~/tmux.sh )" -set -g status-right-length 120 +set -g status-right-length 60 # Get good colors -set-option -g default-terminal "screen-256color" +# https://www.reddit.com/r/tmux/comments/mesrci/tmux_2_doesnt_seem_to_use_256_colors/ +#set-option -g default-terminal "screen-256color" set -g default-terminal "tmux-256color" set -ga terminal-overrides ",*256col*:Tc" set -ga terminal-overrides '*:Ss=\E[%p1%d q:Se=\E[ q' set-environment -g COLORTERM "truecolor" # Display messages longer (ms) -set-option -g display-time 4000 +#set-option -g display-time 4000 diff --git a/tmux.sh b/tmux.sh index 3b569d7..4333ec8 100755 --- a/tmux.sh +++ b/tmux.sh @@ -1,24 +1,56 @@ #!/usr/bin/env bash -# This is not as good as activity monitor, as it shows per-core not overall usage -cpu=$(ps -Ac -o %cpu,comm | sort -nk1 | grep -vE "(top)" | tail -1 \ - | awk -v OFMT=%.0f '{print int($1+0.5)"%",$2,$3}') +# This doesn't show overall/summarized CPU usage as e.g. macOS Activity Monitor +# But still capable of showing high/multicore process CPU usage +cpu_usage=$(ps -Ac -o %cpu,comm | sort -nk1 | grep -vE "(top)" | tail -1) +float=$(echo "$cpu_usage" | awk '{print $1}') +cpu_percent=${float%.*} +cpu_procname=$(echo "$cpu_usage" | awk '{print $2,$3,$4}') # nettop needs at least two samples (-L 2) to calculate a delta -# the beasty awk then throws away the first 50% samples (n=50) with bogus data -# and sorts it by bytes_in +# the beasty awk then throws away the first 50% samples (n=50) with bogus +# data and sorts it by bytes_in bandwidth=$(nettop -t wifi -P -J bytes_in,bytes_out -d -x -L 2 \ - | grep -v '^time' | sort -k1 | awk -v n=50 '{a[FNR]=$0; \ - min=FNR-int(FNR*n/100)} {i=min; while(i in a) delete a[i--]} \ - END{for(i=min+1;i<=FNR;++i) print a[i]}' - | sed 's/,$//' \ - | sed 's#\.[0-9]*##g' | sort -t',' -k 3 -n | tail -1 | \ - awk -F',' {'print $2,"↓ "int($3/1000) " KB/s ↑",int($4/1000) " KB/s"'} -) +| grep -v '^time' | sort -k1 | awk -v n=50 '{a[FNR]=$0; \ +min=FNR-int(FNR*n/100)} {i=min; while(i in a) delete a[i--]} \ +END{for(i=min+1;i<=FNR;++i) print a[i]}' - | sed 's/,$//' \ +| sed 's#\.[0-9]*##g' | sort -t',' -k 3 -n | tail -1 | \ +awk -F',' '{print $3,$4,$2}') -# Pings the default gateway and returns avg ping. Three ping counts recommended -# for a reasonably meaningful average -rtt=$(ping -t 2 -q -c 3 "$(route -n get default | awk '$1 ~ "gateway:" \ - {print $2}')" | awk -F'/' '$1 ~ "round-trip" {print int($5) " ms"}') +value=$(echo "$bandwidth" | awk '{print $1}') + if [ "$value" -lt 1000 ]; then + bw_down=$(echo "$value" | awk '{print int($1),"B/s"}') + elif [ "$value" -ge 1000 ] && [ "$value" -lt 1000000 ]; then + bw_down=$(echo "$value" | awk '{print int($1/1000),"kB/s"}') + elif [ "$value" -ge 1000000 ]; then + bw_down=$(echo "$value" | awk '{print int($1/1000^2),"MB/s"}') + fi +value=$(echo "$bandwidth" | awk '{print $2}') + if [ "$value" -lt 1000 ]; then + bw_up=$(echo "$value" | awk '{print int($2),"B/s"}') + elif [ "$value" -ge 1000 ] && [ "$value" -lt 1000000 ]; then + bw_up=$(echo "$value" | awk '{print int($2/1000),"kB/s"}') + elif [ "$value" -ge 1000000 ]; then + bw_up=$(echo "$value" | awk '{print int($2/1000^2),"MB/s"}') + fi + bw_procname=$(echo "$bandwidth" | awk '{print $3,$4,$5}') -# Icons are shipped with a font from https://www.nerdfonts.com/font-downloads -echo "󱍢 $rtt  $bandwidth  $cpu" +# Pings the default gateway and returns avg ping. Three ping counts +# recommended for a reasonably meaningful average +ping=$(ping -t 2 -q -c 3 "$(route -n get default | \ + awk '$1 ~ "gateway:" {print $2}')" | \ + awk -F'/' '$1 ~ "round-trip" {print int($5)}') + +# cpu load 4 digits max, smaller value is padded +# cpu process name right padded +cpu=$(printf "%4d%% %#-14.14s" "$cpu_percent" "$cpu_procname") + +# up/download 8 digits max each, pad smaller value (has units baked in) +# process name right padded +bandwidth=$(printf "↓%8s ↑%8s %#-14.14s" "$bw_down" "$bw_up" "$bw_procname") + +# cpu load 4 digits max, smaller value is padded +ping=$(printf "%4dms " "$ping") + +# Combine all printf formatted metrics +echo "$ping $bandwidth $cpu"