#!/bin/bash if [ $(id -u) -ne 0 ]; then echo "Installer must be run as root." echo "Try 'sudo bash $0'" exit 1 fi # Given a list of strings representing options, display each option # preceded by a number (1 to N), display a prompt, check input until # a valid number within the selection range is entered. selectN() { for ((i=1; i<=$#; i++)); do echo $i. ${!i} done echo REPLY="" while : do echo -n "SELECT 1-$#: " read if [[ $REPLY -ge 1 ]] && [[ $REPLY -le $# ]]; then return $REPLY fi done } clear echo "This script downloads and installs" echo "retrogame, a GPIO-to-keypress utility" echo "for adding buttons and joysticks, plus" echo "one of several configuration files." echo "Run time <1 minute. Reboot recommended." echo echo "Select configuration:" selectN "PiGRRL 2 controls" \ "Pocket PiGRRL" \ "PiGRRL Zero" \ "Super Game Pi" \ "Two buttons + joystick" \ "Six buttons + joystick" \ "Adafruit Arcade Bonnet" \ "Cupcade (gen 1 & 2 only)" \ "Quit without installing" RETROGAME_SELECT=$? # These are the retrogame.cfg.* filenames on Github corresponding in # order to each of the above selections (e.g. retrogame.cfg.pigrrl2): CONFIGNAME=(pigrrl2 pocket zero super 2button 6button bonnet cupcade-orig) if [ $RETROGAME_SELECT -lt 9 ]; then if [ -e /boot/retrogame.cfg ]; then echo "/boot/retrogame.cfg already exists." echo "Continuing will overwrite file." echo -n "CONTINUE? [y/N] " read if [[ ! "$REPLY" =~ ^(yes|y|Y)$ ]]; then echo "Canceled." exit 0 fi fi echo -n "Downloading, installing retrogame..." # Download to tmpfile because might already be running curl -f -s -o /tmp/retrogame https://raw.githubusercontent.com/adafruit/Adafruit-Retrogame/master/retrogame if [ $? -eq 0 ]; then mv /tmp/retrogame /usr/local/bin chmod 755 /usr/local/bin/retrogame echo "OK" else echo "ERROR" fi echo -n "Downloading, installing retrogame.cfg..." curl -f -s -o /boot/retrogame.cfg https://raw.githubusercontent.com/adafruit/Adafruit-Retrogame/master/configs/retrogame.cfg.${CONFIGNAME[$RETROGAME_SELECT-1]} if [ $? -eq 0 ]; then echo "OK" else echo "ERROR" fi echo -n "Performing other system configuration..." # Add udev rule (will overwrite if present) echo "SUBSYSTEM==\"input\", ATTRS{name}==\"retrogame\", ENV{ID_INPUT_KEYBOARD}=\"1\"" > /etc/udev/rules.d/10-retrogame.rules if [ $RETROGAME_SELECT -eq 7 ]; then # If Bonnet, make sure I2C is enabled. Call the I2C # setup function in raspi-config (noninteractive): raspi-config nonint do_i2c 0 fi # Start on boot grep retrogame /etc/rc.local >/dev/null if [ $? -eq 0 ]; then # retrogame already in rc.local, but make sure correct: sed -i "s/^.*retrogame.*$/\/usr\/local\/bin\/retrogame \&/g" /etc/rc.local >/dev/null else # Insert retrogame into rc.local before final 'exit 0' sed -i "s/^exit 0/\/usr\/local\/bin\/retrogame \&\\nexit 0/g" /etc/rc.local >/dev/null fi echo "OK" echo echo -n "REBOOT NOW? [y/N]" read if [[ "$REPLY" =~ ^(yes|y|Y)$ ]]; then echo "Reboot started..." reboot #else echo echo "Done" fi fi