#!/usr/bin/env bash function _preview { file=$1; shift host=$1; shift j=$(cat "$file" \ | jc --ssh-conf \ | jq -r ".[] \ | select(.host == \"$host\") \ | .jumps = (if (.proxyjump | type == \"array\" and length > 0) then (.proxyjump | join(\",\")) else \"null\" end)" \ ) user=$(jq -r '.user' <<<"$j") port=$(jq -r '.port' <<<"$j") hostname=$(jq -r '.hostname' <<<"$j") jumps=$(jq -r '.jumps' <<<"$j") echo "$(cat </dev/null \ && echo "Host is reachable!" \ || echo "Host is not reachable!" } export -f _preview function main() { if [[ $# -eq 1 ]]; then selected=$1 else selected="$(rg -N --no-heading '^Host .*' ~/.ssh \ | sed 's/Host \(.*\)/\1/' \ | SHELL=$(which bash) fzf --cycle \ --bind 'tab:toggle-up,btab:toggle-down' \ --delimiter ':' \ --with-nth 2 \ --preview "_preview {1} {2}" \ | cut -d ":" -f2 )" fi if [[ -z $selected ]]; then exit 0 fi selected_name="ssh_$selected" if [[ -z $TMUX ]] && ! tmux list-sessions 2>/dev/null; then tmux new-session -s "$selected_name" ssh "$selected" exit 0 fi if ! tmux has-session -t="$selected_name" 2>/dev/null; then tmux new-session -ds "$selected_name" ssh "$selected" fi tmux switch-client -t "$selected_name" } main "$@"