diff --git a/bash/.bashrc b/bash/.bashrc index 964d703..1436d63 100644 --- a/bash/.bashrc +++ b/bash/.bashrc @@ -47,40 +47,27 @@ function sshunlock() { # Show a menu of all known Tailscale nodes for the user to select from function tsselect() { local items=() + local hostnames=() while read -r line; do [ -z "$line" ] && continue [[ "$line" =~ ^\# ]] && continue local name=$(echo "$line" | awk '{ print $2 }') - items+=("$name") + local ip=$(echo "$line" | awk '{ print $1 }') + items+=("$name ($ip)") + hostnames+=("$name") done <<< $(tailscale status --self=false | sort -k 2) _COLUMNS=$COLUMNS # Force options to display in one column COLUMNS=80 - while [ "${#items[@]}" -gt 1 ]; do - select item in "${items[@]}" Cancel; do - if [[ "$REPLY" =~ ^[0-9]+$ ]]; then - # Number selections -- break immediately - if [ $REPLY -eq $((1 + ${#items[@]})) ]; then - items=("") - break - elif [ $REPLY -le ${#items[@]} ]; then - items=("${items[$((REPLY - 1))]}") - break - fi - fi - # Not a number selection -- filter the items - items=($(printf "%s\n" "${items[@]}" | grep -E "^$REPLY")) - break - done + select item in "${items[@]}" Cancel; do + if [ $REPLY -eq ${#items[@]} ]; then + echo "" + fi + echo ${hostnames[$((REPLY - 1))]} + break; done COLUMNS=$_COLUMNS - if ! ([[ "$REPLY" =~ ^[0-9]+$ ]] || [ "$REPLY" == "${items[0]}" ]); then - echo -n "${items[0]}? (y/n) " >&2 - read yn - [ "$yn" == "y" ] || return 1 - fi - echo "${items[0]}" } # SSH shorthands, same as before but for tailscale nodes @@ -106,6 +93,3 @@ export PATH="$PATH:~/.local/bin" # Password Store export PASSWORD_STORE_ENABLE_EXTENSIONS=true - -# Use gpg-agent-ssh -export SSH_AUTH_SOCK=/run/user/1000/gnupg/S.gpg-agent.ssh