dotfiles/config/macos/bin/vm

82 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# ~/bin/vm
#
# SSH helper script for connecting to VMs or workstations.
# Usage:
# vm [--no-tmux] <host>
#
# Host patterns:
# personal-orb -> ssh $USER@personal@orb
# personal-utm -> ssh $USER@personal.utm.local
# personal-workstation -> ssh $USER@personal.workstation.lan
#
# Optional:
# --no-tmux -> skips attaching to tmux session
# TMP: Tmux will be disabled (switch to 0 to enable it again)
skip_tmux=0
# Check for --no-tmux flag
if [[ "$1" == "--no-tmux" ]]; then
skip_tmux=1
shift
fi
full="$1"
shift # remove host from args
user="$USER"
host="$full"
# Split user@host if explicitly specified
if [[ "$full" == *@* ]]; then
user="${full%@*}"
host="${full#*@}"
fi
# Map host patterns to SSH target and machine type
case "$host" in
*-orb)
ssh_host="${host%-orb}@orb"
TARGET_MACHINE="orb"
;;
*-utm)
ssh_host="${host%-utm}.utm.local"
TARGET_MACHINE="utm"
ssh_identity="$HOME/.ssh/id_ed25519_internal"
;;
*-workstation)
ssh_host="${host%-workstation}.workstation.lan"
TARGET_MACHINE="workstation"
ssh_identity="$HOME/.ssh/id_ed25519_internal"
;;
*)
echo "Error: unknown host pattern '$host'" >&2
exit 1
;;
esac
# Always use "default" tmux session
tmux_session="default"
# Build SSH command safely using an array
ssh_cmd=(ssh -tt)
# Include identity file if needed
[[ -n "$ssh_identity" ]] && ssh_cmd+=(-i "$ssh_identity" -o IdentitiesOnly=yes)
# Add target user and host
ssh_cmd+=("$user@$ssh_host")
# Add tmux session unless skipped
if [[ $skip_tmux -eq 0 ]]; then
ssh_cmd+=("tmux" "new-session" "-As" "$tmux_session" "-e" "TARGET_MACHINE=$TARGET_MACHINE")
else
# Pass through any extra args user supplied
ssh_cmd+=("$@")
fi
# echo "Executing: ${ssh_cmd[*]}" >&2
exec "${ssh_cmd[@]}"