diff --git a/scripts/megadrive.sh b/scripts/megadrive.sh index f66205d..f6ef947 100755 --- a/scripts/megadrive.sh +++ b/scripts/megadrive.sh @@ -31,18 +31,49 @@ title() { # Dependencies # ------------------------- check_dependencies() { - for cmd in flashkit fzf md5sum; do - if ! command -v $cmd &> /dev/null; then - gum confirm "$cmd is not installed. Install it now?" && { - gum spin --spinner="line" --title="Installing $cmd..." -- sudo apt-get install -y $cmd - } - fi - done + # Ensure ~/.local/bin is in PATH (for pip installs) + export PATH="$HOME/.local/bin:$PATH" + # flashkit + if ! command -v flashkit &> /dev/null; then + gum confirm "flashkit is not installed. Install it now?" || exit 1 + + gum spin --spinner="line" --title="Installing flashkit..." -- \ + python3 -m pip install --user flashkit + + # Re-check after install + if ! command -v flashkit &> /dev/null; then + gum style --foreground="#FFA500" "flashkit install failed or not in PATH." + gum style --foreground="#FFA500" "Try: export PATH=\$HOME/.local/bin:\$PATH" + exit 1 + fi + fi + + # pyserial if ! python3 -c "import serial" &> /dev/null; then - gum confirm "pyserial is not installed. Install it now?" && { - gum spin --spinner="line" --title="Installing pyserial..." -- python3 -m pip install pyserial - } + gum confirm "pyserial is not installed. Install it now?" || exit 1 + + gum spin --spinner="line" --title="Installing pyserial..." -- \ + python3 -m pip install --user pyserial + + if ! python3 -c "import serial" &> /dev/null; then + gum style --foreground="#FFA500" "pyserial install failed." + exit 1 + fi + fi + + # fzf + if ! command -v fzf &> /dev/null; then + gum confirm "fzf is not installed. Install it now?" || exit 1 + + gum spin --spinner="line" --title="Installing fzf..." -- \ + sudo apt-get update && sudo apt-get install -y fzf + fi + + # md5sum (usually present, but just in case) + if ! command -v md5sum &> /dev/null; then + gum style --foreground="#FFA500" "md5sum not found. Please install coreutils." + exit 1 fi } @@ -96,7 +127,9 @@ read_cart() { # FZF file browser # ------------------------- browse_files() { - find ~/ -type f -name "*.md" -size +256k 2>/dev/null \ + search_path="$1" + + find "$search_path" -type f -name "*.md" -size +256k 2>/dev/null \ | fzf \ --height=40% \ --reverse \ @@ -112,7 +145,32 @@ write_rom() { clear title - rom_file=$(browse_files) + # Build menu dynamically + options=() + + if [ -d "/mnt/nas/Games/ROMs/megadrive" ]; then + options+=("NAS (/mnt/nas/Games/ROMs/megadrive)") + fi + + options+=("Search Home (~)") + + source_choice=$(printf "%s\n" "${options[@]}" | gum choose --header="Select ROM source:") + + case "$source_choice" in + "NAS (/mnt/nas/Games/ROMs/megadrive)") + if [ ! -d "/mnt/nas/Games/ROMs/megadrive" ]; then + gum style --foreground="#FFA500" "NAS path not available." + return + fi + rom_file=$(browse_files "/mnt/nas/Games/ROMs/megadrive") + ;; + "Search Home (~)") + rom_file=$(browse_files "$HOME") + ;; + *) + return + ;; + esac [ -z "$rom_file" ] && { gum style --foreground="#FFA500" "No file selected." @@ -120,8 +178,8 @@ write_rom() { } # File info - rom_size=$(du -h "$rom_file" | cut -f1) - rom_md5=$(md5sum "$rom_file" | cut -d ' ' -f1) + rom_size=$(du -h "$rom_file" | awk '{print $1}') + rom_md5=$(md5sum "$rom_file" | awk '{print $1}') gum style \ --foreground="#FFA500" \ @@ -136,7 +194,6 @@ MD5: $rom_md5" gum spin --spinner="line" --title="Writing ROM..." -- flashkit --port "$selected_port" write-rom -i "$rom_file" gum style --foreground="#FFA500" "Done! ROM written successfully." - # Auto refresh read_cart } || { gum style --foreground="#FFA500" "Cancelled."