dotfiles/config/macos/bin/con
2025-10-12 06:48:26 +02:00

136 lines
2.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
ATTACH_TMUX=1
DRY_RUN=0
TMUX_SESSION_DEFAULT="default"
df_platform=""
df_namespace=""
df_user=""
ssh_identity=""
ssh_host=""
ssh_args=()
usage() {
local prog
prog=$(basename "$0")
echo "Usage: $prog <platform> [user@]namespace [--no-tmux|-t] [--dry-run|-n] [-- <ssh args...>]" >&2
echo
echo "Examples:"
echo " $prog orb namespace"
echo " $prog utm user@namespace --no-tmux"
echo " $prog core user@namespace --dry-run -- -v -p 2222"
exit 1
}
parse_args() {
if [[ $# -lt 2 ]]; then
usage
fi
df_platform="$1"
local user_namespace_arg="$2"
shift 2
# Extract df_user and df_namespace
if [[ "$user_namespace_arg" == *@* ]]; then
df_user="${user_namespace_arg%@*}"
df_namespace="${user_namespace_arg#*@}"
else
df_user="$USER"
df_namespace="$user_namespace_arg"
fi
# Parse remaining flags and ssh args
while [[ $# -gt 0 ]]; do
case "$1" in
-t|--no-tmux)
ATTACH_TMUX=0
shift
;;
-n|--dry-run)
DRY_RUN=1
shift
;;
--)
shift
ssh_args+=("$@")
break
;;
*)
echo "Unknown option: $1" >&2
usage
;;
esac
done
}
resolve_host() {
case "$df_platform" in
orb)
# orb-stack handles user@namespace internally
ssh_host="${df_namespace}@orb"
;;
utm)
ssh_host="${df_namespace}.utm.local"
ssh_identity="$HOME/.ssh/id_ed25519_internal"
;;
core)
ssh_host="${df_namespace}.core.lan"
ssh_identity="$HOME/.ssh/id_ed25519_internal"
;;
ec2)
ssh_host="${df_namespace}.ec2.internal"
;;
hetzner)
ssh_host="${df_namespace}.hetzner.test"
;;
*)
echo "Error: unknown platform '$df_platform'" >&2
exit 1
;;
esac
}
build_ssh_cmd() {
local cmd=(ssh -tt)
if [[ -n "$ssh_identity" ]]; then
cmd+=(-i "$ssh_identity" -o IdentitiesOnly=yes)
fi
if [[ ${#ssh_args[@]} -gt 0 ]]; then
cmd+=("${ssh_args[@]}")
fi
cmd+=("${df_user}@${ssh_host}")
if [[ $ATTACH_TMUX -eq 1 ]]; then
cmd+=("tmux" "new-session" "-As" "$TMUX_SESSION_DEFAULT"
"-e" "DF_NAMESPACE=$df_namespace"
"-e" "DF_PLATFORM=$df_platform")
fi
echo "${cmd[@]}"
}
main() {
parse_args "$@"
resolve_host
ssh_cmd=($(build_ssh_cmd))
if [[ $DRY_RUN -eq 1 ]]; then
echo "Dry run command:"
printf '%q ' "${ssh_cmd[@]}"
echo
exit 0
fi
exec "${ssh_cmd[@]}"
}
main "$@"