#!/usr/bin/env bash sessions() { (tmux show-options -g -v @SESSIONS 2> /dev/null | tr ' ' '\n') || (tmux list-sessions -F '#{session_name}' 2> /dev/null | sort | uniq) } servers() { tmux show-options -g -v @SERVERS 2> /dev/null | tr ' ' '\n' | awk '{print "@" $1}' } search_sessions() { sessions | grep -v "^$" | nl -w 1 -s ": " | fzf --no-sort --prompt " " --pointer='➤ ' --marker='➤' | awk '{print $2}' } search_servers() { servers | grep -v "^$" | nl -w 1 -s ": " | fzf --no-sort --prompt " " --pointer='➤ ' --marker='➤' | awk '{print $2}' } SESSION="$1" if [[ -z $SESSION || "$SESSION" == "sessions" ]]; then tmux_running=$(pgrep tmux) if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then tmux new-session -ds main fi SESSION=$(search_sessions) elif [[ "$SESSION" == "servers" ]]; then tmux_running=$(pgrep tmux) if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then tmux new-session -ds main fi SESSION=$(search_servers) fi if [[ $SESSION =~ "@" ]]; then SERVER=$(echo $SESSION | cut -d@ -f2) SESSION=$(echo $SESSION | cut -d@ -f1) exec autossh -M0 -t $SERVER '/bin/bash --login -c "tmux-sessions '$SESSION'"' elif [[ -n $SESSION ]]; then # new session if session is not available tmux_running=$(pgrep tmux) if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then tmux new-session -A -D -s $SESSION else if ! tmux has-session -t $SESSION 2> /dev/null; then WORKING_DIRECTORY=$PROJECTS/$SESSION INITIAL_FILE="~/.dotfiles/tmux/sessions/$SESSION.tmux.conf" if [[ -f "$INITIAL_FILE" ]]; then INITIAL_COMMAND="tmux source-file $INTIALL_FILE" fi if [[ ! -d "$WORKING_DIRECTORY" ]]; then WORKING_DIRECTORY="~" fi tmux new-session -ds $SESSION -c $WORKING_DIRECTORY $INTIAL_COMMAND fi if [[ -z $TMUX ]]; then tmux new-session -A -D -s $SESSION else tmux switch-client -t $SESSION fi fi fi