added quickshell and updated zsh
This commit is contained in:
88
home/scripts/herdr-picker.sh
Executable file
88
home/scripts/herdr-picker.sh
Executable file
@@ -0,0 +1,88 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user