#!/usr/bin/env bash sessions() { tmux show-options -g -v @SESSIONS 2> /dev/null || tmux list-sessions -F '#{session_name}' 2> /dev/null } servers() { (tmux show-options -g -v @SERVERS 2> /dev/null | awk '{print "@" $1}') || (test -f ~/.ssh/config && cat ~/.ssh/config | grep "^Host " | awk '{print $2}' | grep -v "*") } search() { (sessions; [[ $ALL == true ]] && servers) | tr ' ' '\n' | grep -v "^$" | nl -w 1 -s ": " | fzf --no-sort --prompt " " --pointer='➤ ' --marker='➤' | awk '{print $2}' } ALL=false if [[ $# -eq 1 ]]; then case "$1" in --all) ALL=true ;; *) SESSION=$1 ;; esac fi if [[ -z $SESSION ]]; then tmux_running=$(pgrep tmux) if [[ -z $TMUX ]] && [[ -z $tmux_running ]]; then tmux new-session -ds main fi SESSION=$(search) fi if [[ -z $SESSION ]]; then exit 0 fi if [[ $SESSION =~ "@" ]]; then SERVER=$(echo $SESSION | cut -d@ -f2) SESSION=$(echo $SESSION | cut -d@ -f1) exec autossh -M0 -t $SERVER /usr/bin/fish --login --command "tmux-sessions $SESSION" else # 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