89 lines
2.5 KiB
Bash
Executable File
89 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Prevent nested execution if already inside Herdr, tmux, zellij, or running non-interactively
|
|
if [ -n "$HERDR" ] || [ -n "$HERDR_SESSION" ] || [ -n "$TMUX" ] || [ -n "$ZELLIJ" ] || [ ! -t 0 ]; then
|
|
exec zsh "$@"
|
|
fi
|
|
|
|
# Function to start raw shell
|
|
start_plain_shell() {
|
|
exec zsh "$@"
|
|
}
|
|
|
|
# If herdr binary is not found, launch zsh directly without producing noisy stdout
|
|
if ! command -v herdr &>/dev/null; then
|
|
start_plain_shell "$@"
|
|
fi
|
|
|
|
# Fetch active herdr sessions
|
|
active_sessions=()
|
|
raw_output=$(herdr session list 2>/dev/null)
|
|
if [ $? -eq 0 ] && [ -n "$raw_output" ]; then
|
|
while IFS= read -r line; do
|
|
# Extract first word as session name
|
|
sname=$(echo "$line" | awk '{print $1}' | tr -d '*:')
|
|
if [ -n "$sname" ] && [ "$sname" != "NAME" ] && [ "$sname" != "Sessions:" ] && [ "$sname" != "No" ]; then
|
|
active_sessions+=("$sname")
|
|
fi
|
|
done <<< "$raw_output"
|
|
fi
|
|
|
|
# Prepare menu options
|
|
menu_items=()
|
|
menu_items+=("✨ [Create New Session]")
|
|
menu_items+=("⚡ [Default Session]")
|
|
|
|
for s in "${active_sessions[@]}"; do
|
|
if [ "$s" != "default" ]; then
|
|
menu_items+=("📦 $s")
|
|
fi
|
|
done
|
|
|
|
menu_items+=("🐚 [Skip - Plain Shell]")
|
|
|
|
# Interactive session selector using fzf
|
|
if command -v fzf &>/dev/null; then
|
|
selected=$(printf '%s\n' "${menu_items[@]}" | fzf \
|
|
--height=45% \
|
|
--layout=reverse \
|
|
--border=rounded \
|
|
--prompt=" Herdr Session > " \
|
|
--header="Select Herdr session to attach / create | Esc for plain shell" \
|
|
--header-first)
|
|
else
|
|
echo "=========================================="
|
|
echo " HERDR SESSION PICKER "
|
|
echo "=========================================="
|
|
PS3="Choose an option: "
|
|
select selected in "${menu_items[@]}"; do
|
|
[ -n "$selected" ] && break
|
|
done
|
|
fi
|
|
|
|
case "$selected" in
|
|
"✨ [Create New Session]")
|
|
echo ""
|
|
read -r -p "Enter session name (press Enter for auto-generated name): " s_name
|
|
if [ -z "$s_name" ]; then
|
|
s_name="workspace-$(date +%m%d-%H%M)"
|
|
fi
|
|
export HERDR_SESSION="$s_name"
|
|
exec herdr session attach "$s_name" 2>/dev/null || exec herdr session new "$s_name" 2>/dev/null || exec herdr "$s_name"
|
|
;;
|
|
"⚡ [Default Session]")
|
|
export HERDR_SESSION="default"
|
|
exec herdr
|
|
;;
|
|
"🐚 [Skip - Plain Shell]"|"")
|
|
start_plain_shell "$@"
|
|
;;
|
|
📦\ *)
|
|
s_name="${selected#📦 }"
|
|
export HERDR_SESSION="$s_name"
|
|
exec herdr session attach "$s_name" 2>/dev/null || exec herdr "$s_name"
|
|
;;
|
|
*)
|
|
start_plain_shell "$@"
|
|
;;
|
|
esac
|