mirror of
https://github.com/arthur-pbty/arthur-os.git
synced 2026-08-01 20:28:16 +02:00
77 lines
2.3 KiB
Bash
Executable File
77 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Create a desktop launcher for a RetroArch game
|
|
# omarchy:args=[core path-to-game]
|
|
# omarchy:examples=omarchy games retro install snes9x ~/Games/roms/snes/game.sfc | omarchy-games-retro-install /usr/lib/libretro/mgba_libretro.so ~/Games/roms/gba/game.gba
|
|
|
|
set -e
|
|
|
|
if (( $# == 0 )); then
|
|
mapfile -t cores < <(omarchy-games-retro-cores)
|
|
|
|
if (( ${#cores[@]} == 0 )); then
|
|
omarchy-notification-send -g "No RetroArch cores found" "/usr/lib/libretro"
|
|
exit 1
|
|
fi
|
|
|
|
core=$(omarchy-menu-select "RetroArch core" "${cores[@]}") || exit 0
|
|
[[ -n $core ]] || exit 0
|
|
core="${core##*(}"
|
|
core="${core%)}"
|
|
|
|
game_path=$(omarchy-menu-file "Retro game" "$HOME/Games/roms" "7z bin ccd chd cue dmg elf fds gb gba gbc iso lha m3u md n64 nds nes pbp sfc smc swc zip z64") || exit 0
|
|
[[ -n $game_path ]] || exit 0
|
|
elif (( $# == 2 )); then
|
|
core="$1"
|
|
game_path="$2"
|
|
else
|
|
echo "Usage: omarchy-games-retro-install [core path-to-game]"
|
|
echo "Example: omarchy-games-retro-install snes9x ~/Games/roms/snes/game.sfc"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f $game_path ]]; then
|
|
echo "Game not found: $game_path"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $core == */* ]]; then
|
|
core_path="$core"
|
|
else
|
|
core_path="/usr/lib/libretro/${core}_libretro.so"
|
|
fi
|
|
|
|
if [[ ! -f $core_path ]]; then
|
|
echo "Core not found: $core_path"
|
|
exit 1
|
|
fi
|
|
|
|
game_name=$(printf '%s' "${game_path##*/}" | sed 's/\.[^.]*$//; s/[[:space:]]*([^)]*)//g; s/[[:space:]]\+/ /g; s/^ //; s/ $//' | perl -Mopen=locale -pe 's/(^|[[:space:]])([^[:space:]])/$1\U$2/g')
|
|
desktop_name="$game_name"
|
|
desktop_id=$(printf '%s' "$desktop_name" | tr '[:upper:]' '[:lower:]' | tr -cs '[:alnum:]' '-' | sed 's/^-//; s/-$//')
|
|
desktop_dir="$HOME/.local/share/applications"
|
|
desktop_file="$desktop_dir/$desktop_id.desktop"
|
|
icon_dir="$desktop_dir/icons"
|
|
icon_path="$icon_dir/Retro Gaming.png"
|
|
|
|
mkdir -p "$desktop_dir" "$icon_dir"
|
|
[[ -f $icon_path ]] || cp "$HOME/.local/share/omarchy/applications/icons/Retro Gaming.png" "$icon_path"
|
|
|
|
cat >"$desktop_file" <<EOF
|
|
[Desktop Entry]
|
|
Version=1.0
|
|
Name=$desktop_name
|
|
Comment=Play $game_name with RetroArch
|
|
Exec=retroarch -L "$core_path" "$game_path"
|
|
Terminal=false
|
|
Type=Application
|
|
Icon=$icon_path
|
|
StartupNotify=true
|
|
Categories=Game;Emulator;
|
|
EOF
|
|
|
|
chmod +x "$desktop_file"
|
|
update-desktop-database "$desktop_dir" &>/dev/null || true
|
|
|
|
omarchy-notification-send -g "$game_name installed" "Start it with Super + Space"
|