diff options
Diffstat (limited to 'tmux/.local/bin/tmux-sshr')
-rwxr-xr-x | tmux/.local/bin/tmux-sshr | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/tmux/.local/bin/tmux-sshr b/tmux/.local/bin/tmux-sshr new file mode 100755 index 0000000..7120703 --- /dev/null +++ b/tmux/.local/bin/tmux-sshr @@ -0,0 +1,53 @@ +#!/bin/sh + +HOST=$(tmux display -p '#h' 2>/dev/null) + +if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then + tmux -L ssh run-shell "tmux-sshr" + exit 0 +fi + +if [ "$#" -eq 0 ]; then + ATTACHED=$(tmux display -p '#{?#{m:*ssh,#{socket_path}},#S,#{host}}' 2>/dev/null) + + set -- "$( + sshr --all --exclude="$ATTACHED" | + fzf-tmux -p20%,20% -- --print-query --tac | + tail -1 + )" +fi + +if [ -z "$1" ]; then + exit 0 +fi + +target="$1" + +if [ "$target" = "$HOST" ]; then + tmux detach -E 'tmux new -A' +else + if ! tmux -L ssh has-session -t "$target"; then + local_socket=$(tmux -L ssh start-server \; display -p "#{socket_path}") + remote_socket=$( + ssh -T \ + -o "ControlMaster=auto" \ + -o "ControlPath=${XDG_RUNTIME_DIR}/ssh.%C" \ + "$target" 'tmux -L ssh start-server \; display -p "#{socket_path}"' + ) + + tmux -L ssh new-session -ds "$target" \ + ssh -t \ + -o "ControlMaster=auto" \ + -o "ControlPath=${XDG_RUNTIME_DIR}/ssh.%C" \ + -R "$local_socket":"$remote_socket" \ + "$target" "zsh -l -c 'tmux new -A'" + fi + + if [ -z "$TMUX" ]; then + tmux -L ssh attach -t "$target" + else + tmux detach -E "tmux -L ssh attach -t $target" + fi + + exit 0 +fi |