#!/bin/bash # ## Wizard Kit: TMUX Launcher # Live macOS env workaround tmux_args=() if [[ -e "/.wk-live-macos" ]]; then tmux_args=(-f "/etc/tmux.conf" -S "/Volumes/RAM_Disk/.tmux.socket") fi function ask() { while :; do read -p "$1 [Y/N] " -r answer if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then return 0 elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then return 1 fi done } function err () { echo "$0:" "$@" >&2 return 1 } function launch_in_tmux() { # Check for required vars [[ -n "${SESSION_NAME:-}" ]] || return $(err "Required variable missing (SESSION_NAME)") [[ -n "${WINDOW_NAME:-}" ]] || return $(err "Required variable missing (WINDOW_NAME)") [[ -n "${TMUX_CMD:-}" ]] || return $(err "Required variable missing (TMUX_CMD)") # Check for running session if tmux "${tmux_args[@]}" list-session 2>&1 | grep -q "$SESSION_NAME"; then echo "WARNING: tmux session $SESSION_NAME already exists." echo "" if ask "Connect to current session?"; then if [[ -n "${TMUX:-}" ]]; then # Running inside TMUX, switch to session tmux "${tmux_args[@]}" switch-client -t "$SESSION_NAME" if ! jobs %% >/dev/null 2>&1; then # No running jobs, try exiting abandoned tmux session exit 0 fi else # Running outside TMUX, attach to session tmux "${tmux_args[@]}" attach-session -t "$SESSION_NAME" fi return 0 elif ask "Kill current session and start new session?"; then tmux "${tmux_args[@]}" kill-session -t "$SESSION_NAME" || \ die "Failed to kill session: $SESSION_NAME" else echo "Aborted." return 1 fi fi # Start session if [[ -n "${TMUX:-}" ]]; then # Running inside TMUX, save current session/window names ORIGINAL_SESSION_NAME="$(tmux "${tmux_args[@]}" display-message -p '#S')" ORIGINAL_WINDOW_NAME="$(tmux "${tmux_args[@]}" display-message -p '#W')" tmux "${tmux_args[@]}" rename-session "$SESSION_NAME" tmux "${tmux_args[@]}" rename-window "$WINDOW_NAME" "$TMUX_CMD" "$@" # Restore previous session/window names tmux "${tmux_args[@]}" rename-session "${ORIGINAL_SESSION_NAME}" tmux "${tmux_args[@]}" rename-window "${ORIGINAL_WINDOW_NAME}" else # Running outside TMUX, start/attach to session tmux "${tmux_args[@]}" new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$TMUX_CMD" "$@" fi }