Files
NixOS-Configs/home/scripts/herdr-picker.sh

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