52 lines
1.2 KiB
Bash
Executable File
52 lines
1.2 KiB
Bash
Executable File
#! /bin/bash
|
||
|
||
|
||
if ! command -v stow >/dev/null 2>&1; then
|
||
echo "stow is not installed. Please install it before running this script."
|
||
exit 1
|
||
fi
|
||
|
||
|
||
# Collect all sub‑directories into an array
|
||
dirs=()
|
||
for d in */ ; do
|
||
# Remove trailing slash for clean names
|
||
dir="${d%/}"
|
||
[[ -d "$dir" ]] && dirs+=("$dir")
|
||
done
|
||
|
||
if [ ${#dirs[@]} -eq 0 ]; then
|
||
echo "No modules found."
|
||
exit 1
|
||
fi
|
||
|
||
echo "Available modules:"
|
||
for i in "${!dirs[@]}"; do
|
||
printf ' %2d) %s\n' $((i+1)) "${dirs[i]}"
|
||
done
|
||
|
||
# Prompt for a number
|
||
while true; do
|
||
read -r -p "Select module to install [1-${#dirs[@]}] (or press Enter to skip): " choice
|
||
# Allow empty input → exit without installing
|
||
if [[ -z "$choice" ]]; then
|
||
echo "No selection made. Bye!"
|
||
exit 0
|
||
fi
|
||
|
||
# Check that the choice is an integer within range
|
||
if ! [[ "$choice" =~ ^[1-9][0-9]*$ ]] || (( choice < 1 || choice > ${#dirs[@]} )); then
|
||
echo "Invalid selection. Please enter a number between 1 and ${#dirs[@]}."
|
||
continue
|
||
fi
|
||
|
||
selected="${dirs[$((choice-1))]}"
|
||
break
|
||
done
|
||
|
||
echo "Installing $selected"
|
||
# Place your actual install logic here, e.g.:
|
||
# cd "$selected" && ./install.sh || echo "Failed to install $selected"
|
||
|
||
exit 0
|