Compare commits

..

2 commits

View file

@ -47,27 +47,40 @@ 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 }')
local ip=$(echo "$line" | awk '{ print $1 }')
items+=("$name ($ip)")
hostnames+=("$name")
items+=("$name")
done <<< $(tailscale status --self=false | sort -k 2)
_COLUMNS=$COLUMNS
# Force options to display in one column
COLUMNS=80
select item in "${items[@]}" Cancel; do
if [ $REPLY -eq ${#items[@]} ]; then
echo ""
fi
echo ${hostnames[$((REPLY - 1))]}
break;
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
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
@ -93,3 +106,6 @@ 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