Updated home and work conf files

Added tmi.sh script
Updated README
This commit is contained in:
2026-07-21 15:27:08 -04:00
parent 385cce1f5b
commit 674bcc13ee
4 changed files with 120 additions and 18 deletions
-6
View File
@@ -97,11 +97,6 @@ set-window-option -g window-active-style bg=default # Background color for the
# Window List Appearance
#########################################
#set-window-option -g window-status-style fg=blue # Or your preferred inactive style
#set-window-option -g window-status-format "#[fg=blue] #I:#W#[fg=blue]#{?window_activity_flag,#[fg=yellow bg=default]!,}"
#set-window-option -g window-status-current-style fg=green,bright
#set-window-option -g window-status-current-format "#[fg=green,bright]● #I:#W ●#[fg=green]"
# Stolen from https://github.com/mhartington/dotfiles/blob/main/config/tmux/tmux-status.conf
# Not active window
@@ -116,4 +111,3 @@ set-window-option -g window-status-current-format "#[bg=default fg=#7cfc00]● #
set-option -g set-titles on # Enable automatic window titles
set-option -g set-titles-string '#H:#S.#I.#P #W #T' # Format string for window titles (hostname:session.window_index.pane_index window_number window_name)
+5 -9
View File
@@ -59,6 +59,7 @@ set-option -g visual-activity on # Enable visual notification of activity in ot
#########################################
set-option -g status on # Turn the status bar on
set-option -g status-position top # Put the Status Bar on top of the screen
set-option -g status-interval 5 # Set the status bar update frequency to 5 seconds
set-option -g status-justify centre # Justify the window list to the left
@@ -71,7 +72,7 @@ set-option -g status-right-length 60 # Set the maximum length of the right
set-option -g status-right "S:#S W:#I P:#P | %b %d %H:%M" # Display session name, window index, pane index, and the date/time on the right
# Status bar style
set-option -g status-style bg=#000000,fg=colour8,bright # Set the background to default (transparent), foreground color, and brightness
set-option -g status-style bg=#000000,fg=grey # Set the background to default (transparent), foreground color, and brightness
#########################################
# Pane Appearance
@@ -90,22 +91,17 @@ set-option -g message-style bg=default,fg=colour13 # Style for messages displaye
# Window Appearance
#########################################
set-option -g window-style bg=default # Default background color for windows
set-option -g window-active-style bg=default # Background color for the active window
set-window-option -g window-style bg=default # Default background color for windows
set-window-option -g window-active-style bg=default # Background color for the active window
#########################################
# Window List Appearance
#########################################
#set-option -g window-status-current-format "#[fg=colour2,bg=colour0]● #I:#W ●#[fg=colour2,bg=colour0]"
#set-option -g window-status-style fg=colour8,bg=default # Or your preferred inactive style
#set-option -g window-status-current-style fg=colour2,bg=default,bright
#set-option -g window-status-format "#[fg=colour8,bg=default] #I:#W#[fg=colour8,bg=default]#{?window_activity_flag,#[fg=colour11]! ,}"
# Stolen from https://github.com/mhartington/dotfiles/blob/main/config/tmux/tmux-status.conf
# Not active window
set-window-option -g window-status-format "#{?window_activity_flag,#[bg=#8802ad fg=#000000 bold],#[fg=#5e708c bg=default]}#I:#W"
set-window-option -g window-status-format "#{?window_activity_flag,#[bg=#ffff00 fg=#000000 bold],#[fg=#228b22 bg=default]}#I:#W"
# Active window
set-window-option -g window-status-current-format "#[bg=default fg=#059df5]● #I:#W"
+17 -3
View File
@@ -1,9 +1,10 @@
---
CREATED : 2026-03-03
UPDATED : 2026-03-03
AUTHOR : chawley
created: 2015-09-09
updated: 2026-07-21
author: chawley
---
#readme
# TMUX Hack Session Launcher
A Bash script designed to manage and automate pre-defined tmux-sessions. This script allows you to launch complex development or administration environments - complete with multiple windows and SSH connections - using a single command.
@@ -32,6 +33,7 @@ A Bash script designed to manage and automate pre-defined tmux-sessions. This sc
1. Copy the script to a directory in your `$PATH` (e.g., `~/bin` or `/usr/local/bin`).
2. Rename it to something short, like `tm`.
3. Make the script executable:
```bash
chmod +x ~/bin/tm
```
@@ -67,4 +69,16 @@ To add a new session, add a new case stanza inside the `case $session in` block.
```
### Script Variables
- `TMUX_CONF`: Defaults to `$HOME/.tmux.conf`. Modify this variable if your configuration file is located elsewhere.
## Tmux Menu Improved (TMI)
A vibe-coded improvement on the original
### Key Improvements & Refactor Notes
- **Robust Session Detection (`tmux has-session`):** Replaced `tmux list-sessions | grep -c` with `tmux has-session -t "=${session}"`. Using exact match targeting (`=`) prevents substring false positives (e.g., matching `mine` against `mine-dev` or log strings) and eliminates pipe subshell overhead.
- **Declarative Data Structure:** Session definitions are separated from the initialization logic using an associative array (`SESSIONS`). Adding a new layout only requires defining a new key and window matrix, removing repetitive `tmux new-window` boilerplates.
- **Process Handover via `exec`:** Replaced subshell execution of `tmux attach-session` with `exec tmux ...`. This replaces the bash script process with the tmux client process directly, eliminating an orphaned shell process remaining in memory while attached.
- **Strict Shell Hygiene:** Added `set -euo pipefail` and proper variable quoting to prevent unhandled failures or field splitting errors. redirected operational error output to `stderr` (`>&2`).
- **Interactive Fallback (`fzf`):** If invoked without arguments (`tm`), the script checks for `fzf` in `$PATH`. If present, it serves an interactive fuzzy selector of configured session keys rather than instantly printing an error.
+98
View File
@@ -0,0 +1,98 @@
#!/usr/bin/env bash
#===============================================================================
#
# created: 2015-09-09
# updated: 2026-07-21
# usage: tm [session_name]
# desc: Interactive and declarative tmux session manager.
# notes:
# author: chawley
#
#===============================================================================
set -euo pipefail
readonly TMUX_CONF="${HOME}/.tmux.conf"
# Ensure we are not nesting tmux sessions
if [[ -n "${TMUX:-}" ]]; then
echo "Error: Already inside a tmux session. Nesting is disabled." >&2
exit 1
fi
# Define session layouts as data maps: "window_index:window_name:command"
# Index 1 is reserved for the initial session window (renamed inline).
declare -A SESSIONS
SESSIONS[mine]="
1:local(phansible@aamon):
2:phansible@overlook:exec ssh phansible@overlook.tailc38dc9.ts.net
3:weechat:exec ssh overlook-ts && docker start weechat && docker attach weechat
4:chawley@overlook:exec ssh overlook-ts
5:chawley@shawshank:exec ssh shawshank-ts
6:root@derry:exec ssh derry-ts
"
list_active_sessions() {
echo "----------------------------------"
echo "Active Tmux Sessions"
echo "----------------------------------"
if tmux has-session 2>/dev/null; then
tmux list-sessions
else
echo "No active tmux sessions."
fi
}
# Resolve target session (argument or fuzzy picker via fzf if available)
session="${1:-}"
if [[ -z "${session}" ]]; then
if command -v fzf &>/dev/null; then
session=$(printf '\%s\n' "${!SESSIONS[@]}" | fzf --prompt="Select Tmux Session > " --height=10 --reverse || true)
fi
fi
if [[ -z "${session}" ]]; then
echo "Usage: $(basename "$0") <session_name>"
echo ""
list_active_sessions
exit 1
fi
if [[ -z "${SESSIONS[$session]:-}" ]]; then
echo "Error: Unknown session layout '${session}'" >&2
echo ""
list_active_sessions
exit 1
fi
# Attach if session exists; otherwise construct and attach
if tmux has-session -t "=${session}" 2>/dev/null; then
echo "Attaching to existing session: ${session}"
exec tmux -f "${TMUX_CONF}" attach-session -t "=${session}"
fi
echo "Building session: ${session}"
# Process layout line by line
first_window=true
while IFS=':' read -r idx name cmd; do
[[ -z "${idx}" ]] && continue
if [[ "${first_window}" == true ]]; then
tmux -f "${TMUX_CONF}" new-session -d -s "${session}" -n "${name}"
if [[ -n "${cmd}" ]]; then
tmux send-keys -t "=${session}:1" "${cmd}" C-m
fi
first_window=false
else
if [[ -n "${cmd}" ]]; then
tmux -f "${TMUX_CONF}" new-window -t "=${session}:${idx}" -n "${name}" "${cmd}"
else
tmux -f "${TMUX_CONF}" new-window -t "=${session}:${idx}" -n "${name}"
fi
fi
done <<< "${SESSIONS[$session]}"
exec tmux -f "${TMUX_CONF}" attach-session -t "=${session}"