#!/bin/bash

# omarchy:summary=Install RetroArch with the full libretro core set plus FBNeo and a ~/Games ROM directory.

set -e

omarchy-pkg-add \
  retroarch \
  retroarch-assets-glui retroarch-assets-ozone retroarch-assets-xmb \
  libretro-beetle-pce libretro-beetle-pce-fast libretro-beetle-psx libretro-beetle-psx-hw libretro-beetle-supergrafx \
  libretro-blastem \
  libretro-bsnes libretro-bsnes-hd libretro-bsnes2014 \
  libretro-core-info \
  libretro-desmume libretro-dolphin libretro-flycast \
  libretro-gambatte libretro-genesis-plus-gx \
  libretro-kronos \
  libretro-mame libretro-mame2016 libretro-melonds libretro-mesen libretro-mesen-s libretro-mgba libretro-mupen64plus-next \
  libretro-nestopia \
  libretro-overlays \
  libretro-parallel-n64 libretro-picodrive libretro-play libretro-ppsspp \
  libretro-sameboy libretro-scummvm libretro-shaders-slang libretro-snes9x \
  libretro-yabause \
  libretro-fbneo-git

# Set up ~/Games for BIOS files and ROMs
mkdir -p "$HOME/Games/bios" "$HOME/Games/roms"

CFG="$HOME/.config/retroarch/retroarch.cfg"
mkdir -p "$(dirname "$CFG")"
touch "$CFG"

set_cfg() {
  local key=$1 value=$2
  if grep -q "^$key = " "$CFG"; then
    sed -i "s|^$key = .*|$key = \"$value\"|" "$CFG"
  else
    echo "$key = \"$value\"" >>"$CFG"
  fi
}

set_cfg rgui_browser_directory "$HOME/Games/roms"
set_cfg system_directory "$HOME/Games/bios"

# Point at the cores and assets installed by pacman
set_cfg libretro_directory "/usr/lib/libretro"
set_cfg libretro_info_path "/usr/share/libretro/info"
set_cfg overlay_directory "/usr/share/libretro/overlays"
set_cfg osk_overlay_directory "/usr/share/libretro/overlays/keyboards"
set_cfg video_shader_dir "/usr/share/libretro/shaders/shaders_slang"

# Vulkan is required for slang shaders and unlocks hardware renderers in beetle-psx-hw, parallel-n64, dolphin
set_cfg video_driver "vulkan"

setsid gtk-launch com.libretro.RetroArch.desktop >/dev/null 2>&1 &
