143 lines
4.7 KiB
Bash
Executable file
143 lines
4.7 KiB
Bash
Executable file
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# OMA-ROIDS Installer / Uninstaller
|
|
# Usage: ./install.sh — install the game
|
|
# ./install.sh uninstall — remove the game
|
|
|
|
GAME_NAME="oma-roids"
|
|
DISPLAY_NAME="OMA-ROIDS"
|
|
COMMENT="Classic asteroids arcade game with Omarchy theme integration"
|
|
REPO_URL="https://git.no-signal.uk/nosignal/oma-roids.git"
|
|
|
|
INSTALL_DIR="$HOME/.local/share/$GAME_NAME"
|
|
DESKTOP_FILE="$HOME/.local/share/applications/$GAME_NAME.desktop"
|
|
ICON_DIR="$HOME/.local/share/icons/hicolor"
|
|
UNINSTALL_BIN="$HOME/.local/bin/$GAME_NAME-uninstall"
|
|
|
|
# ── UNINSTALL ──
|
|
if [ "${1:-}" = "uninstall" ]; then
|
|
echo "=== Uninstalling $DISPLAY_NAME ==="
|
|
|
|
[ -f "$DESKTOP_FILE" ] && rm "$DESKTOP_FILE" && echo "Removed desktop entry"
|
|
|
|
for size in 16 32 48 64 128 256 512; do
|
|
local_icon="$ICON_DIR/${size}x${size}/apps/$GAME_NAME.png"
|
|
[ -f "$local_icon" ] && rm "$local_icon"
|
|
done
|
|
[ -f "$ICON_DIR/scalable/apps/$GAME_NAME.svg" ] && rm -f "$ICON_DIR/scalable/apps/$GAME_NAME.svg"
|
|
echo "Removed icons"
|
|
|
|
[ -d "$INSTALL_DIR" ] && rm -rf "$INSTALL_DIR" && echo "Removed game files"
|
|
[ -f "$UNINSTALL_BIN" ] && rm "$UNINSTALL_BIN" && echo "Removed uninstall command"
|
|
|
|
command -v gtk-update-icon-cache &>/dev/null && gtk-update-icon-cache -f -t "$ICON_DIR" 2>/dev/null || true
|
|
command -v omarchy-restart-walker &>/dev/null && omarchy-restart-walker 2>/dev/null || true
|
|
|
|
echo "=== $DISPLAY_NAME uninstalled ==="
|
|
exit 0
|
|
fi
|
|
|
|
# ── INSTALL ──
|
|
echo "=== Installing $DISPLAY_NAME ==="
|
|
|
|
# Install dependencies
|
|
DEPS=()
|
|
command -v love &>/dev/null || DEPS+=(love)
|
|
command -v git &>/dev/null || DEPS+=(git)
|
|
command -v rsvg-convert &>/dev/null || DEPS+=(librsvg)
|
|
|
|
if [ ${#DEPS[@]} -gt 0 ]; then
|
|
echo "Installing dependencies: ${DEPS[*]}"
|
|
if command -v pacman &>/dev/null; then
|
|
sudo pacman -S --noconfirm "${DEPS[@]}"
|
|
else
|
|
echo "Error: missing ${DEPS[*]} and pacman not found."
|
|
echo "Install them manually and re-run this script."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Clone or update the game
|
|
if [ -d "$INSTALL_DIR/.git" ]; then
|
|
echo "Updating existing installation..."
|
|
cd "$INSTALL_DIR"
|
|
git pull --ff-only
|
|
else
|
|
[ -d "$INSTALL_DIR" ] && rm -rf "$INSTALL_DIR"
|
|
echo "Cloning game repository..."
|
|
git clone "$REPO_URL" "$INSTALL_DIR"
|
|
fi
|
|
|
|
# Install icon
|
|
echo "Installing icon..."
|
|
ICON_SVG="$INSTALL_DIR/icon.svg"
|
|
|
|
if command -v rsvg-convert &>/dev/null; then
|
|
for size in 16 32 48 64 128 256 512; do
|
|
mkdir -p "$ICON_DIR/${size}x${size}/apps"
|
|
rsvg-convert -w "$size" -h "$size" "$ICON_SVG" -o "$ICON_DIR/${size}x${size}/apps/$GAME_NAME.png"
|
|
done
|
|
elif command -v magick &>/dev/null; then
|
|
for size in 16 32 48 64 128 256 512; do
|
|
mkdir -p "$ICON_DIR/${size}x${size}/apps"
|
|
magick "$ICON_SVG" -resize "${size}x${size}" "$ICON_DIR/${size}x${size}/apps/$GAME_NAME.png"
|
|
done
|
|
else
|
|
echo "No SVG converter found, using SVG icon directly"
|
|
mkdir -p "$ICON_DIR/scalable/apps"
|
|
cp "$ICON_SVG" "$ICON_DIR/scalable/apps/$GAME_NAME.svg"
|
|
fi
|
|
|
|
# Create .desktop file
|
|
echo "Creating desktop entry..."
|
|
mkdir -p "$(dirname "$DESKTOP_FILE")"
|
|
cat > "$DESKTOP_FILE" << EOF
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=$DISPLAY_NAME
|
|
Comment=$COMMENT
|
|
Exec=uwsm app -- love $INSTALL_DIR
|
|
Icon=$GAME_NAME
|
|
Terminal=false
|
|
Categories=Game;ArcadeGame;
|
|
StartupNotify=true
|
|
TryExec=love
|
|
EOF
|
|
|
|
# Install uninstall command so user can remove it any time
|
|
mkdir -p "$HOME/.local/bin"
|
|
cat > "$UNINSTALL_BIN" << 'UNINSTALL'
|
|
#!/bin/bash
|
|
# Uninstall OMA-ROIDS
|
|
SCRIPT_URL="https://git.no-signal.uk/nosignal/oma-roids/raw/branch/master/install.sh"
|
|
curl -sL "$SCRIPT_URL" | bash -s uninstall 2>/dev/null || bash "$HOME/.local/share/oma-roids/install.sh" uninstall 2>/dev/null || {
|
|
# Fallback: inline uninstall
|
|
rm -f "$HOME/.local/share/applications/oma-roids.desktop"
|
|
rm -rf "$HOME/.local/share/oma-roids"
|
|
for s in 16 32 48 64 128 256 512; do
|
|
rm -f "$HOME/.local/share/icons/hicolor/${s}x${s}/apps/oma-roids.png"
|
|
done
|
|
rm -f "$HOME/.local/share/icons/hicolor/scalable/apps/oma-roids.svg"
|
|
rm -f "$HOME/.local/bin/oma-roids-uninstall"
|
|
command -v omarchy-restart-walker &>/dev/null && omarchy-restart-walker 2>/dev/null
|
|
echo "OMA-ROIDS uninstalled"
|
|
}
|
|
UNINSTALL
|
|
chmod +x "$UNINSTALL_BIN"
|
|
|
|
# Update icon cache
|
|
command -v gtk-update-icon-cache &>/dev/null && gtk-update-icon-cache -f -t "$ICON_DIR" 2>/dev/null || true
|
|
|
|
# Restart walker
|
|
if command -v omarchy-restart-walker &>/dev/null; then
|
|
echo "Refreshing app launcher..."
|
|
omarchy-restart-walker 2>/dev/null || true
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== $DISPLAY_NAME installed ==="
|
|
echo ""
|
|
echo " Launch: search '$DISPLAY_NAME' in app launcher or run: love $INSTALL_DIR"
|
|
echo " Uninstall: $GAME_NAME-uninstall"
|
|
echo ""
|