From 73942b7f3366dda951e66d3597db3dc461153ab1 Mon Sep 17 00:00:00 2001
From: XargonWan <XargonWan@gmail.com>
Date: Tue, 20 Aug 2024 21:09:04 +0900
Subject: [PATCH] SHADPS4: added (missing ES-DE part)

---
 automation_tools/automation_task_list.cfg     |    3 +
 automation_tools/pre_build_automation.sh      |   39 +-
 .../retrodeck/reference_lists/features.json   | 2238 ++++++++---------
 net.retrodeck.retrodeck.yml                   |   16 +
 4 files changed, 1160 insertions(+), 1136 deletions(-)

diff --git a/automation_tools/automation_task_list.cfg b/automation_tools/automation_task_list.cfg
index 979b5998..3f70fe7e 100644
--- a/automation_tools/automation_task_list.cfg
+++ b/automation_tools/automation_task_list.cfg
@@ -24,3 +24,6 @@ hash^RETRODECKMELONDSLATEST^https://github.com/RetroDECK/net.kuribo64.melonDS/re
 hash^RETRODECKSOLARUSLATEST^https://github.com/RetroDECK/org.solarus_games.solarus.Launcher/releases/latest/download/RetroDECK-solarus-Artifact.tar.gz
 hash^RETRODECKGZDOOMLATEST^https://github.com/RetroDECK/org.zdoom.GZDoom/releases/latest/download/RetroDECK-gzdoom-Artifact.tar.gz
 hash^RETRODECKMAMELATEST^https://github.com/RetroDECK/MAME/releases/latest/download/RetroDECK-MAME-Artifact.tar.gz
+
+#This will replace RETRODECKSHADPS4LATESTURL with the URL of the latest artifact and RETRODECKSHADPS4LATESTSHA with its SHA256 hash.
+latestghaartifact^RETRODECKSHADPS4LATESTURL^RETRODECKSHADPS4LATESTSHA^https://github.com/shadps4-emu/shadPS4/actions/workflows/linux-qt.yml^shadps4-linux-qt
diff --git a/automation_tools/pre_build_automation.sh b/automation_tools/pre_build_automation.sh
index c05a9879..dd8d63fd 100755
--- a/automation_tools/pre_build_automation.sh
+++ b/automation_tools/pre_build_automation.sh
@@ -188,8 +188,44 @@ handle_thisrepo() {
   /bin/sed -i 's^'"$placeholder"'^'"$current_repo_url"'^g' "$rd_manifest"
 }
 
+# New function to handle the latest artifact from GitHub Actions
+handle_latestghaartifact() {
+  local placeholder_url="$1"
+  local placeholder_hash="$2"
+  local workflow_url="$3"
+  local artifact_name="$4"
+
+  echo "Fetching workflow runs from: $workflow_url"
+  workflow_runs_url=$(echo "$workflow_url" | sed 's/github.com/api.github.com\/repos/' | sed 's/actions\/workflows\/[^\/]*$/actions\/runs/')
+
+  local runs_data=$(curl -s "$workflow_runs_url")
+  local latest_run_url=$(echo "$runs_data" | jq -r ".workflow_runs[0].artifacts_url")
+
+  if [[ -z "$latest_run_url" ]]; then
+    echo "Error: No workflow runs found"
+    exit 1
+  fi
+
+  echo "Fetching artifacts from the latest run: $latest_run_url"
+  local artifacts_data=$(curl -s "$latest_run_url")
+  local artifact_url=$(echo "$artifacts_data" | jq -r ".artifacts[] | select(.name == \"$artifact_name\").archive_download_url")
+
+  if [[ -z "$artifact_url" ]]; then
+    echo "Error: No artifact found with name $artifact_name"
+    exit 1
+  fi
+
+  echo "Downloading the artifact to calculate the hash..."
+  local artifact_hash=$(curl -sL "$artifact_url" | sha256sum | cut -d ' ' -f1)
+
+  echo "Replacing placeholder $placeholder_url with artifact URL $artifact_url"
+  echo "Replacing placeholder $placeholder_hash with artifact hash $artifact_hash"
+  /bin/sed -i 's^'"$placeholder_url"'^'"$artifact_url"'^g' "$rd_manifest"
+  /bin/sed -i 's^'"$placeholder_hash"'^'"$artifact_hash"'^g' "$rd_manifest"
+}
+
 # Process the task list
-while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
+while IFS="^" read -r action placeholder url branch artifact_name || [[ -n "$action" ]]; do
   if [[ ! "$action" == "#"* ]] && [[ -n "$action" ]]; then
     case "$action" in
       "branch" ) handle_branch "$placeholder" ;;
@@ -203,6 +239,7 @@ while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]]; do
       "custom_command" ) handle_custom_command "$url" ;;
       "url" ) handle_url "$placeholder" "$url" ;;
       "THISREPO" ) handle_thisrepo "$placeholder" ;;
+      "latestghaartifact" ) handle_latestghaartifact "$placeholder" "$branch" "$url" "$artifact_name" ;;
     esac
   fi
 done < "$automation_task_list"
diff --git a/config/retrodeck/reference_lists/features.json b/config/retrodeck/reference_lists/features.json
index 24f0ec09..ad96eb3a 100644
--- a/config/retrodeck/reference_lists/features.json
+++ b/config/retrodeck/reference_lists/features.json
@@ -1,1139 +1,1107 @@
 {
-	"about_links": {
-	  "rd_changelog": {
-		"description": "Opens the RetroDECK change log in your default browser",
-		"name": "Changelog",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_rd_versions/version-history/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_contactus": {
-		"description": "Opens the RetroDECK contact us section in your default browser",
-		"name": "Contact us",
-		"url": "https://github.com/XargonWan/RetroDECK",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_credits": {
-		"description": "Opens the RetroDECK Credits in your default browser",
-		"name": "Credits",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_donate": {
-		"description": "Opens Donations page in your default browser",
-		"name": "Donate",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_licenses": {
-		"description": "Opens the RetroDECK licenses in your default browser",
-		"name": "Licences",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_web": {
-		"description": "Opens the RetroDECK Website in your default browser",
-		"name": "Website",
-		"url": "https://retrodeck.net/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  },
-	  "rd_wiki": {
-		"description": "Opens the RetroDECK Wiki in your default browser",
-		"name": "Wiki",
-		"url": "https://retrodeck.readthedocs.io/en/latest/",
-		"icon": "res://assets/icons/pixelitos/128/internet-web-browser.png"
-	  }
-	},
-	"finit_default_options": {
-	  "rd_controller_profile": {
-		"name": "RetroDECK Steam Controller Profiles Install",
-		"description": "Install RetroDECK Steam Input profiles to Steam - Recommended",
-		"enabled": true
-	  },
-	  "rpcs3_firmware": {
-		"name": "RPCS3 Firmware Install",
-		"description": "Install firmware needed for PS3 emulation",
-		"enabled": false
-	  },
-	  "vita3k_firmware": {
-		"name": "Vita3K Firmware Install",
-		"description": "Install firmware needed for Vita3K emulation",
-		"enabled": false
-	  }
-	},
-	"splash_screens": {
-	  "xmas": {
-		"start_date": "1201",
-		"end_date": "1231",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "rd-xmas-splash.svg"
-	  },
-	  "lunar_dragon": {
-		"start_date": "0209",
-		"end_date": "0212",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "rd-lunar-dragon-splash.svg"
-	  },
-	  "valentines_day": {
-		"start_date": "0214",
-		"end_date": "0214",
-		"start_time": "0001",
-		"end_time": "2359",
-		"filename": "rd-valentines-splash.svg"
-	  },
-	  "retrodeck_birthday": {
-		"start_date": "0304",
-		"end_date": "0304",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "rd-gm-bday-splash.svg"
-	  },
-	  "st_patricks_day": {
-		"start_date": "0317",
-		"end_date": "0317",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "rd-stpatricks-splash.svg"
-	  },
-	  "kodomo_golden_week": {
-		"start_date": "0429",
-		"end_date": "0505",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "rd-kodomo-golden.svg"
-	  },
-	  "tanabata": {
-		"start_date": "0707",
-		"end_date": "0707",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "tanabata.svg"
-	  },
-	  "mountain_day": {
-		"start_date": "0811",
-		"end_date": "0811",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "placeholder.svg"
-	  },
-	  "obon": {
-		"start_date": "0813",
-		"end_date": "0816",
-		"start_time": "0000",
-		"end_time": "2359",
-		"filename": "placeholder.svg"
-	  }
-	},
-	"incompatible_presets": {
-	  "borders": "widescreen"
-	},
-	"helper_files": {
-	  "dolphin_mods": {
-		"filename": "how-to-install-dolphin-mods.txt",
-		"location": "$mods_folder/Dolphin"
-	  },
-	  "primehack_mods": {
-		"filename": "how-to-install-primehack-mods.txt",
-		"location": "$mods_folder/Primehack"
-	  },
-	  "mesen_textures": {
-		"filename": "how-to-install-Mesen-textures.txt",
-		"location": "$texture_packs_folder/RetroArch-Mesen"
-	  },
-	  "ppsspp_textures": {
-		"filename": "how-to-install-PPSSPP-textures.txt",
-		"location": "$texture_packs_folder/PPSSPP"
-	  },
-	  "pcsx2_textures": {
-		"filename": "how-to-install-PCSX2-textures.txt",
-		"location": "$texture_packs_folder/PCSX2"
-	  },
-	  "mupen64plus_cache_textures": {
-		"filename": "how-to-install-Mupen64Plus-textures.txt",
-		"location": "$texture_packs_folder/RetroArch-Mupen64Plus/cache"
-	  },
-	  "mupen64plus_hires_textures": {
-		"filename": "how-to-install-Mupen64Plus-textures.txt",
-		"location": "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture"
-	  },
-	  "duckstation_textures": {
-		"filename": "how-to-install-Duckstation-textures.txt",
-		"location": "$texture_packs_folder/Duckstation"
-	  },
-	  "psvita_games": {
-		"filename": "how-to-install-psvita-games.txt",
-		"location": "$roms_folder/psvita"
-	  },
-	  "ryujinx_firmware": {
-		"filename": "Install-firmware-through-Ryujinx.txt",
-		"location": "$bios_folder/switch/firmware"
-	  }
-	},
-	"compression_targets": {
-	  "chd": [
-		"3do",
-		"amigacd32",
-		"dreamcast",
-		"megacd",
-		"neogeocd",
-		"pcenginecd",
-		"pcfx",
-		"psp",
-		"psx",
-		"ps2",
-		"saturn",
-		"saturnjp",
-		"segacd",
-		"tg-cd"
-	  ],
-	  "rvz": [
-		"gc",
-		"wii"
-	  ],
-	  "zip": [
-		"atari2600",
-		"atari5200",
-		"atari7800",
-		"atari800",
-		"atarijaguar",
-		"atarilynx",
-		"atarist",
-		"gamegear",
-		"gb",
-		"gba",
-		"gbc",
-		"genesis",
-		"mastersystem",
-		"n64",
-		"nds",
-		"nes",
-		"ngp",
-		"ngpc",
-		"sega32x",
-		"sega32xjp",
-		"sega32xna",
-		"snes",
-		"snesna",
-		"tg16"
-	  ]
-	},
-	"zip_compressable_extensions": [
-	  ".32x",
-	  ".68k",
-	  ".NDS",
-	  ".a26",
-	  ".a52",
-	  ".a78",
-	  ".abs",
-	  ".agb",
-	  ".atr",
-	  ".atx",
-	  ".bin",
-	  ".bml",
-	  ".bms",
-	  ".bs",
-	  ".bsx",
-	  ".cas",
-	  ".cdm",
-	  ".cgb",
-	  ".cof",
-	  ".col",
-	  ".dim",
-	  ".dmg",
-	  ".dx2",
-	  ".fds",
-	  ".fig",
-	  ".gb",
-	  ".gba",
-	  ".gbc",
-	  ".gd3",
-	  ".gd7",
-	  ".gen",
-	  ".gg",
-	  ".ipf",
-	  ".j64",
-	  ".jag",
-	  ".lnx",
-	  ".md",
-	  ".mdx",
-	  ".mgd",
-	  ".msa",
-	  ".nds",
-	  ".nes",
-	  ".ngc",
-	  ".o",
-	  ".pce",
-	  ".prg",
-	  ".rom",
-	  ".sfc",
-	  ".sg",
-	  ".sgb",
-	  ".sgd",
-	  ".smc",
-	  ".smd",
-	  ".sms",
-	  ".st",
-	  ".st",
-	  ".stx",
-	  ".swc",
-	  ".unf",
-	  ".unif",
-	  ".xex",
-	  ".xfd",
-	  ".z64"
-	],
-	"system": {
-	  "3do": {
-		"name": "3DO Interactive Multiplayer"
-	  },
-	  "adam": {
-		"name": "Coleco Adam"
-	  },
-	  "amiga": {
-		"name": "Commodore Amiga"
-	  },
-	  "amiga1200": {
-		"name": "Commodore Amiga 1200"
-	  },
-	  "amiga600": {
-		"name": "Commodore Amiga 600"
-	  },
-	  "amigacd32": {
-		"name": "Commodore Amiga CD32"
-	  },
-	  "amstradcpc": {
-		"name": "Amstrad CPC"
-	  },
-	  "apple2": {
-		"name": "Apple II"
-	  },
-	  "apple2gs": {
-		"name": "Apple IIGS"
-	  },
-	  "arcade": {
-		"name": "Arcade"
-	  },
-	  "arcadia": {
-		"name": "Emerson Arcadia 2001"
-	  },
-	  "archimedes": {
-		"name": "Acorn Archimedes"
-	  },
-	  "arduboy": {
-		"name": "Arduboy Miniature Game System"
-	  },
-	  "astrocde": {
-		"name": "Bally Astrocade"
-	  },
-	  "atari2600": {
-		"name": "Atari 2600"
-	  },
-	  "atari5200": {
-		"name": "Atari 5200"
-	  },
-	  "atari7800": {
-		"name": "Atari 7800 ProSystem"
-	  },
-	  "atari800": {
-		"name": "Atari 800"
-	  },
-	  "atarijaguar": {
-		"name": "Atari Jaguar"
-	  },
-	  "atarilynx": {
-		"name": "Atari Lynx"
-	  },
-	  "atarist": {
-		"name": "Atari ST"
-	  },
-	  "atarixe": {
-		"name": "Atari XE"
-	  },
-	  "atomiswave": {
-		"name": "Sammy Corporation Atomiswave"
-	  },
-	  "bbcmicro": {
-		"name": "Acorn Computers BBC Micro"
-	  },
-	  "c64": {
-		"name": "Commodore 64"
-	  },
-	  "cdimono1": {
-		"name": "Philips CD-i"
-	  },
-	  "cdtv": {
-		"name": "Commodore CDTV"
-	  },
-	  "chailove": {
-		"name": "ChaiLove Game Engine"
-	  },
-	  "channelf": {
-		"name": "Fairchild Channel F"
-	  },
-	  "colecovision": {
-		"name": "Coleco ColecoVision"
-	  },
-	  "consolearcade": {
-		"name": "Console Arcade Systems"
-	  },
-	  "cps": {
-		"name": "Capcom Play System"
-	  },
-	  "cps1": {
-		"name": "Capcom Play System I"
-	  },
-	  "cps2": {
-		"name": "Capcom Play System II"
-	  },
-	  "cps3": {
-		"name": "Capcom Play System III"
-	  },
-	  "crvision": {
-		"name": "VTech CreatiVision"
-	  },
-	  "daphne": {
-		"name": "Daphne Arcade LaserDisc Emulator"
-	  },
-	  "desktop": {
-		"name": "Desktop Applications"
-	  },
-	  "doom": {
-		"name": "Doom"
-	  },
-	  "dos": {
-		"name": "DOS (PC)"
-	  },
-	  "dreamcast": {
-		"name": "Sega Dreamcast"
-	  },
-	  "dc": {
-		"name": "Sega Dreamcast"
-	  },
-	  "easyrpg": {
-		"name": "EasyRPG Game Engine"
-	  },
-	  "electron": {
-		"name": "Acorn Electron"
-	  },
-	  "emulators": {
-		"name": "Emulators"
-	  },
-	  "famicom": {
-		"name": "Nintendo Family Computer"
-	  },
-	  "fba": {
-		"name": "FinalBurn Alpha"
-	  },
-	  "fbneo": {
-		"name": "FinalBurn Neo"
-	  },
-	  "fds": {
-		"name": "Nintendo Famicom Disk System"
-	  },
-	  "fm7": {
-		"name": "Fujitsu FM-7"
-	  },
-	  "fmtowns": {
-		"name": "Fujitsu FM Towns"
-	  },
-	  "gamate": {
-		"name": "Bit Corporation Gamate"
-	  },
-	  "gameandwatch": {
-		"name": "Nintendo Game and Watch"
-	  },
-	  "gamecom": {
-		"name": "Tiger Electronics Game.com"
-	  },
-	  "gamegear": {
-		"name": "Sega Game Gear"
-	  },
-	  "gg": {
-		"name": "Sega Game Gear"
-	  },
-	  "gb": {
-		"name": "Nintendo Game Boy"
-	  },
-	  "gba": {
-		"name": "Nintendo Game Boy Advance"
-	  },
-	  "gbc": {
-		"name": "Nintendo Game Boy Color"
-	  },
-	  "gc": {
-		"name": "Nintendo GameCube"
-	  },
-	  "genesis": {
-		"name": "Sega Genesis"
-	  },
-	  "gmaster": {
-		"name": "Hartung Game Master"
-	  },
-	  "gx4000": {
-		"name": "Amstrad GX4000"
-	  },
-	  "intellivision": {
-		"name": "Mattel Electronics Intellivision"
-	  },
-	  "j2me": {
-		"name": "Java 2 Micro Edition (J2ME)"
-	  },
-	  "laserdisc": {
-		"name": "LaserDisc Games"
-	  },
-	  "lcdgames": {
-		"name": "LCD Handheld Games"
-	  },
-	  "lowresnx": {
-		"name": "LowRes NX Fantasy Console"
-	  },
-	  "lutris": {
-		"name": "Lutris Open Gaming Platform"
-	  },
-	  "lutro": {
-		"name": "Lutro Game Engine"
-	  },
-	  "macintosh": {
-		"name": "Apple Macintosh"
-	  },
-	  "mame": {
-		"name": "Multiple Arcade Machine Emulator"
-	  },
-	  "mastersystem": {
-		"name": "Sega Master System"
-	  },
-	  "megacd": {
-		"name": "Sega Mega-CD"
-	  },
-	  "megacdjp": {
-		"name": "Sega Mega-CD (Japan)"
-	  },
-	  "megadrive": {
-		"name": "Sega Mega Drive"
-	  },
-	  "megaduck": {
-		"name": "Creatronic Mega Duck"
-	  },
-	  "mess": {
-		"name": "Multi Emulator Super System"
-	  },
-	  "model2": {
-		"name": "Sega Model 2"
-	  },
-	  "moto": {
-		"name": "Thomson MO/TO Series"
-	  },
-	  "msx": {
-		"name": "MSX"
-	  },
-	  "msx1": {
-		"name": "MSX1"
-	  },
-	  "msx2": {
-		"name": "MSX2"
-	  },
-	  "msxturbor": {
-		"name": "MSX Turbo R"
-	  },
-	  "mugen": {
-		"name": "M.U.G.E.N Game Engine"
-	  },
-	  "multivision": {
-		"name": "Othello Multivision"
-	  },
-	  "n3ds": {
-		"name": "Nintendo 3DS"
-	  },
-	  "n64": {
-		"name": "Nintendo 64"
-	  },
-	  "n64dd": {
-		"name": "Nintendo 64DD"
-	  },
-	  "naomi": {
-		"name": "Sega NAOMI"
-	  },
-	  "naomi2": {
-		"name": "Sega NAOMI 2"
-	  },
-	  "naomigd": {
-		"name": "Sega NAOMI GD-ROM"
-	  },
-	  "nds": {
-		"name": "Nintendo DS"
-	  },
-	  "neogeo": {
-		"name": "SNK Neo Geo"
-	  },
-	  "neogeocd": {
-		"name": "SNK Neo Geo CD"
-	  },
-	  "neogeocdjp": {
-		"name": "SNK Neo Geo CD (Japan)"
-	  },
-	  "nes": {
-		"name": "Nintendo Entertainment System"
-	  },
-	  "ngp": {
-		"name": "SNK Neo Geo Pocket"
-	  },
-	  "ngpc": {
-		"name": "SNK Neo Geo Pocket Color"
-	  },
-	  "odyssey2": {
-		"name": "Magnavox Odyssey 2"
-	  },
-	  "openbor": {
-		"name": "OpenBOR Game Engine"
-	  },
-	  "palm": {
-		"name": "Palm OS"
-	  },
-	  "pc": {
-		"name": "IBM PC"
-	  },
-	  "pc88": {
-		"name": "NEC PC-8800 Series"
-	  },
-	  "pc98": {
-		"name": "NEC PC-9800 Series"
-	  },
-	  "pcarcade": {
-		"name": "PC Arcade Systems"
-	  },
-	  "pcengine": {
-		"name": "NEC PC Engine"
-	  },
-	  "pcenginecd": {
-		"name": "NEC PC Engine CD"
-	  },
-	  "pcfx": {
-		"name": "NEC PC-FX"
-	  },
-	  "pico8": {
-		"name": "PICO-8 Fantasy Console"
-	  },
-	  "plus4": {
-		"name": "Commodore Plus/4"
-	  },
-	  "pokemini": {
-		"name": "Nintendo Pokémon Mini"
-	  },
-	  "ports": {
-		"name": "Ports"
-	  },
-	  "ps2": {
-		"name": "Sony PlayStation 2"
-	  },
-	  "ps3": {
-		"name": "Sony PlayStation 3"
-	  },
-	  "psp": {
-		"name": "Sony PlayStation Portable"
-	  },
-	  "psvita": {
-		"name": "Sony PlayStation Vita"
-	  },
-	  "psx": {
-		"name": "Sony PlayStation"
-	  },
-	  "pv1000": {
-		"name": "Casio PV-1000"
-	  },
-	  "quake": {
-		"name": "Quake"
-	  },
-	  "satellaview": {
-		"name": "Nintendo Satellaview"
-	  },
-	  "saturn": {
-		"name": "Sega Saturn"
-	  },
-	  "saturnjp": {
-		"name": "Sega Saturn (Japan)"
-	  },
-	  "scummvm": {
-		"name": "ScummVM Game Engine"
-	  },
-	  "scv": {
-		"name": "Epoch Super Cassette Vision"
-	  },
-	  "sega32x": {
-		"name": "Sega Mega Drive 32X"
-	  },
-	  "sega32xjp": {
-		"name": "Sega Super 32X (Japan)"
-	  },
-	  "sega32xna": {
-		"name": "Sega Genesis 32X"
-	  },
-	  "segacd": {
-		"name": "Sega CD"
-	  },
-	  "sfc": {
-		"name": "Nintendo SFC (Super Famicom)"
-	  },
-	  "sg-1000": {
-		"name": "Sega SG-1000"
-	  },
-	  "sgb": {
-		"name": "Nintendo Super Game Boy"
-	  },
-	  "snes": {
-		"name": "Nintendo SNES (Super Nintendo)"
-	  },
-	  "snesna": {
-		"name": "Nintendo SNES (Super Nintendo)"
-	  },
-	  "solarus": {
-		"name": "Solarus Game Engine"
-	  },
-	  "spectravideo": {
-		"name": "Spectravideo"
-	  },
-	  "stv": {
-		"name": "Sega Titan Video Game System"
-	  },
-	  "sufami": {
-		"name": "Bandai SuFami Turbo"
-	  },
-	  "supergrafx": {
-		"name": "NEC SuperGrafx"
-	  },
-	  "supervision": {
-		"name": "Watara Supervision"
-	  },
-	  "supracan": {
-		"name": "Funtech Super A'Can"
-	  },
-	  "switch": {
-		"name": "Nintendo Switch"
-	  },
-	  "tg-cd": {
-		"name": "NEC TurboGrafx-CD"
-	  },
-	  "tg16": {
-		"name": "NEC TurboGrafx-16"
-	  },
-	  "ti99": {
-		"name": "Texas Instruments TI-99"
-	  },
-	  "tic80": {
-		"name": "TIC-80 Fantasy Computer"
-	  },
-	  "to8": {
-		"name": "Thomson TO8"
-	  },
-	  "uzebox": {
-		"name": "Uzebox Open Source Console"
-	  },
-	  "vectrex": {
-		"name": "GCE Vectrex"
-	  },
-	  "vic20": {
-		"name": "Commodore VIC-20"
-	  },
-	  "videopac": {
-		"name": "Philips Videopac G7000"
-	  },
-	  "virtualboy": {
-		"name": "Nintendo Virtual Boy"
-	  },
-	  "vsmile": {
-		"name": "VTech V.Smile"
-	  },
-	  "wasm4": {
-		"name": "WASM-4 Fantasy Console"
-	  },
-	  "wii": {
-		"name": "Nintendo Wii"
-	  },
-	  "wiiu": {
-		"name": "Nintendo Wii U"
-	  },
-	  "windows": {
-		"name": "Microsoft Windows"
-	  },
-	  "windows3x": {
-		"name": "Microsoft Windows 3.x"
-	  },
-	  "windows9x": {
-		"name": "Microsoft Windows 9x"
-	  },
-	  "wonderswan": {
-		"name": "Bandai WonderSwan"
-	  },
-	  "wonderswancolor": {
-		"name": "Bandai WonderSwan Color"
-	  },
-	  "x1": {
-		"name": "Sharp X1"
-	  },
-	  "x68000": {
-		"name": "Sharp X68000"
-	  },
-	  "xbox": {
-		"name": "Microsoft Xbox"
-	  },
-	  "zx81": {
-		"name": "Sinclair ZX81"
-	  },
-	  "zxspectrum": {
-		"name": "Sinclair ZX Spectrum"
-	  }
-	},
-	"emulator": {
-	  "retroarch": {
-		"description": "RetroArch (Multi-emulator Frontend)",
-		"name": "RetroArch",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/retroarch/retroarch-guide/",
-		"launch": "retroarch",
-		"system": "retroarch",
-		"properties": [
-		  {
-			"cheevos": true,
-			"cheevos_hardcore": true,
-			"quick_resume": true
-		  }
-		],
-		"cores": {
-		  "citra_libretro": {
-			"description": "Nintendo 3DS Libretro Core",
-			"name": "Citra",
-			"system": "n3ds",
-			"properties": [
-			  {
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "mame_libretro": {
-			"description": "MAME: Multiple Arcade Machine Libretro Core",
-			"name": "MAME",
-			"system": "arcade",
-			"properties": [
-			  {
-				"tate_mode": true
-			  }
-			]
-		  },
-		  "desmume_libretro": {
-			"description": "DeSmuME Nintendo DS Libretro Core",
-			"name": "desmume",
-			"system": "nds",
-			"properties": [
-			  {
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "melonds_libretro": {
-			"description": "MelonDS Nintendo DS Libretro Core",
-			"name": "melonds",
-			"system": "nds",
-			"properties": [
-			  {
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "swanstation_libretro": {
-			"name": "SwanStation",
-			"description": "Swanstation Libretro Core",
-			"system": "psx",
-			"properties": [
-			  {
-				"widescreen": true,
-				"borders": true
-			  }
-			]
-		  },
-		  "picodrive_libretro": {
-			"name": "PicoDrive",
-			"description": "SEGA MS/MD/CD/32X Libretro Core",
-			"system": [
-			  "ms",
-			  "md",
-			  "cd",
-			  "32x"
-			],
-			"properties": [
-			  {
-				"widescreen": true,
-				"borders": true,
-				"rewind": true
-			  }
-			]
-		  },
-		  "genesisplusgx_libretro": {
-			"name": "Genesis Plus GX",
-			"description": "SEGA MS/GG/MD/CD Libretro Core",
-			"system": [
-			  "ms",
-			  "gg",
-			  "mc",
-			  "cd"
-			],
-			"properties": [
-			  {
-				"widescreen": true,
-				"borders": true,
-				"rewind": true
-			  }
-			]
-		  },
-		  "genesisplusgxwide_libretro": {
-			"name": "Genesis Plus GX Wide",
-			"description": "SEGA MS/GG/MD/CD Libretro Core for Wide Screen",
-			"system": [
-			  "ms",
-			  "gg",
-			  "mc",
-			  "cd"
-			],
-			"properties": [
-			  {
-				"widescreen": true,
-				"rewind": true
-			  }
-			]
-		  },
-		  "mupen64plus-next_libretro": {
-			"name": "Mupen64Plus-Next",
-			"description": "Nintendo 64 Libretro Core",
-			"system": "n64",
-			"properties": [
-			  {
-				"widescreen": true,
-				"borders": true,
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "snes9x-current_libretro": {
-			"name": "Snes9x - Current",
-			"description": "Super Nintendo Libretro Core",
-			"system": "snes",
-			"properties": [
-			  {
-				"widescreen": true,
-				"borders": true,
-				"rewind": true,
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "gambatte_libretro": {
-			"name": "Gambatte",
-			"description": "Game Boy/Color Libretro Core",
-			"system": [
-			  "gb",
-			  "gbc"
-			],
-			"properties": [
-			  {
-				"borders": true,
-				"rewind": true,
-				"abxy_button": true
-			  }
-			]
-		  },
-		  "mgba_libretro": {
-			"name": "mGBA",
-			"description": "Game Boy Advance Libretro Core",
-			"system": "gba",
-			"properties": [
-			  {
-				"borders": true,
-				"rewind": true,
-				"abxy_button": true
-			  }
-			]
-		  }
-		}
-	  },
-	  "mame": {
-		"description": "MAME: Multiple Arcade Machine Emulator",
-		"name": "MAME",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/mame/mame-guide/",
-		"system": [
-		  "arcade"
-		],
-		"launch": "mame",
-		"launch-args": "-inipath /var/config/mame/ini -rompath $(dirname \"$game\") $game"
-	  },
-	  "citra": {
-		"description": "Citra Nintendo 3DS Emulator (via Ponzu)",
-		"name": "Citra (via Ponzu)",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
-		"system": "n3ds",
-		"ponzu": true,
-		"launch": "citra-qt",
-		"properties": [
-		  {
-			"abxy_button": true,
-			"ask_to_exit": true
-		  }
-		]
-	  },
-	  "ruffle": {
-	  	"description": "Flash Games emulator",
-	  	"name" : "Ruffle",
-	  	"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
-	  	"system" : "flash",
-	  	"launch": "ruffle-rd-wrapper.sh"
-	  },
-	  "melonds": {
-		"description": "MelonDS Nintendo DS Emulator",
-		"name": "melonds",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/melonds/melonds-guide/",
-		"system": "nds",
-		"launch": "melonDS"
-	  },
-	  "pcsx2": {
-		"name": "pcsx2",
-		"description": "PCSX2 Play Station 2 Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/pcsx2/pcsx2-guide/",
-		"system": "ps2",
-		"launch": "pcsx2-qt",
-		"launch-args": "-batch $game", 
-		"properties": [
-		  {
-			"ask_to_exit": true,
-			"cheevos": true
-		  }
-		]
-	  },
-	  "duckstation": {
-		"name": "Duckstation",
-		"description": "PlayStation Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/duckstation/duckstation-guide/",
-		"launch": "duckstation-qt",
-		"launch-args": "-batch $game",
-		"system": "psx",
-		"properties": [
-		  {
-			"ask_to_exit": true,
-			"cheevos": true
-		  }
-		]
-	  },
-	  "ppsspp": {
-		"name": "PPSSPP",
-		"description": "PPSSPP: PlayStation Portable Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/ppsspp/ppsspp-guide/",
-		"launch": "PPSSPPSDL",
-		"system": "psp",
-		"properties": [
-		  {
-			"cheevos": true,
-			"cheevos_hardcore": true
-		  }
-		]
-	  },
-	  "vita3k": {
-		"name": "Vita3k",
-		"description": "Vita3K PSVita Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/vita3k/vita3k-guide/",
-		"system": "psvita",
-		"launch": "Vita3K",
-		"launch-args": "-r $game.psvita"
-	  },
-	  "rpcs3": {
-		"name": "RPCS3",
-		"description": "RPCS3 PlayStation 3 Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/rpcs3/rpcs3-guide/",
-		"system": "ps3",
-		"launch": "rpcs3",
-		"launch-override": "cd $(dirname $game) && rpcs3 $game",
-		"properties": [
-		  {
-			"ask_to_exit": true
-		  }
-		]
-	  },
-	  "ryujinx": {
-		"name": "Ryujinx",
-		"description": "Ryujinx Nintendo Switch Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/ryujinx/ryujinx-guide/",
-		"system": "switch",
-		"launch": "Ryujinx.sh"
-	  },
-	  "yuzu": {
-		"name": "Yuzu (via Ponzu)",
-		"description": "Yuzu Nintendo Switch Emulator (via Ponzu)",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_about/what-is-retrodeck/",
-		"launch": "Yuzu",
-		"system": "switch",
-		"launch-args": "-f -g $game",
-		"ponzu": true,
-		"abxy_button": true
-	  },
-	  "dolphin": {
-		"name": "Dolphin",
-		"description": "Dolphin Wii and GameCube Emulator",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
-		"launch": "dolphin-emu-wrapper",
-		"launch-args": "-e $game",
-		"system": [
-		  "gc",
-		  "wii"
-		],
-		"properties": [
-		  {
-			"abxy_button": true,
-			"ask_to_exit": true,
-			"cheevos": true,
-			"cheevos_hardcore": true,
-			"universal_dyn_input": true
-		  }
-		]
-	  },
-	  "primehack": {
-		"name": "PrimeHack",
-		"description": "A fork of Dolphiin to enhance Metroid Prime experience",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/dolphin-primehack/dolphin-primehack-guide/",
-		"launch": "primehack-wrapper",
-		"launch-args": "-e $game",
-		"system": [
-		  "wii"
-		],
-		"properties": [
-		  {
-			"ask_to_exit": true,
-			"universal_dyn_input": true
-		  }
-		]
-	  },
-	  "cemu": {
-		"description": "Wii U emulator",
-		"name": "Cemu",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/cemu/cemu-guide/",
-		"system": "wiiu",
-		"launch": "Cemu-wrapper",
-		"launch-args": "-g $game",
-		"properties": [
-		  {
-			"abxy_button": true,
-			"multi_user_config_dir": "Cemu"
-		  }
-		]
-	  },
-	  "xemu": {
-		"description": "xemu Xbox Emulator",
-		"name": "xemu",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/xemu/xemu-guide/",
-		"system": "xbox",
-		"launch": "xemu",
-		"launch-args": "-dvd_path $game"
-	  },
-	  "es-de": {
-		"description": "ES-DE Emulation Frontend",
-		"name": "ES-DE",
-		"url": "https://retrodeck.readthedocs.io/en/latest/wiki_es_de/esde-guide/."
-,		"launch": "es-de"
-	  }
+    "about_links": {
+      "example_site": {
+        "description": "Updated description.",
+        "name": "Updated Site",
+        "url": "https://updated-example.com"
+      },
+      "rd_changelog": {
+        "description": "Opens the RetroDECK change log in your default browser",
+        "name": "Changelog",
+        "url": "https://retrodeck.readthedocs.io/en/latest/wiki_rd_versions/version-history/"
+      },
+      "rd_contactus": {
+        "description": "Opens the RetroDECK contact us section in your default browser",
+        "name": "Contact us",
+        "url": "https://github.com/XargonWan/RetroDECK"
+      },
+      "rd_credits": {
+        "description": "Opens the RetroDECK Credits in your default browser",
+        "name": "Credits",
+        "url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/"
+      },
+      "rd_donate": {
+        "description": "Opens Donations page in your default browser",
+        "name": "Donate",
+        "url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/"
+      },
+      "rd_licenses": {
+        "description": "Opens the RetroDECK licenses in your default browser",
+        "name": "Licences",
+        "url": "https://retrodeck.readthedocs.io/en/latest/wiki_credits/donations-licenses/"
+      },
+      "rd_web": {
+        "description": "Opens the RetroDECK Website in your default browser",
+        "name": "Website",
+        "url": "https://retrodeck.net/"
+      },
+      "rd_wiki": {
+        "description": "Opens the RetroDECK Wiki in your default browser",
+        "name": "Wiki",
+        "url": "https://retrodeck.readthedocs.io/en/latest/"
+      }
+    },
+    "finit_default_options": {
+      "rd_controller_profile": {
+        "name": "RetroDECK Steam Controller Profiles Install",
+        "description": "Install RetroDECK Steam Input profiles to Steam - Recommended",
+        "enabled": true
+      },
+      "rpcs3_firmware": {
+        "name": "RPCS3 Firmware Install",
+        "description": "Install firmware needed for PS3 emulation",
+        "enabled": false
+      },
+      "vita3k_firmware": {
+        "name": "Vita3K Firmware Install",
+        "description": "Install firmware needed for Vita3K emulation",
+        "enabled": false
+      }
+    },
+    "splash_screens": {
+      "xmas": {
+        "start_date": "1201",
+        "end_date": "1231",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "rd-xmas-splash.svg"
+      },
+      "lunar_dragon": {
+        "start_date": "0209",
+        "end_date": "0212",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "rd-lunar-dragon-splash.svg"
+      },
+      "valentines_day": {
+        "start_date": "0214",
+        "end_date": "0214",
+        "start_time": "0001",
+        "end_time": "2359",
+        "filename": "rd-valentines-splash.svg"
+      },
+      "retrodeck_birthday": {
+        "start_date": "0304",
+        "end_date": "0304",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "rd-gm-bday-splash.svg"
+      },
+      "st_patricks_day": {
+        "start_date": "0317",
+        "end_date": "0317",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "rd-stpatricks-splash.svg"
+      },
+      "kodomo_golden_week": {
+        "start_date": "0429",
+        "end_date": "0505",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "rd-kodomo-golden.svg"
+      },
+      "tanabata": {
+        "start_date": "0707",
+        "end_date": "0707",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "tanabata.svg"
+      },
+      "mountain_day": {
+        "start_date": "0811",
+        "end_date": "0811",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "placeholder.svg"
+      },
+      "obon": {
+        "start_date": "0813",
+        "end_date": "0816",
+        "start_time": "0000",
+        "end_time": "2359",
+        "filename": "placeholder.svg"
+      }
+    },
+    "incompatible_presets": {
+      "borders": "widescreen"
+    },
+    "helper_files": {
+      "dolphin_mods": {
+        "filename": "how-to-install-dolphin-mods.txt",
+        "location": "$mods_folder/Dolphin"
+      },
+      "primehack_mods": {
+        "filename": "how-to-install-primehack-mods.txt",
+        "location": "$mods_folder/Primehack"
+      },
+      "mesen_textures": {
+        "filename": "how-to-install-Mesen-textures.txt",
+        "location": "$texture_packs_folder/RetroArch-Mesen"
+      },
+      "ppsspp_textures": {
+        "filename": "how-to-install-PPSSPP-textures.txt",
+        "location": "$texture_packs_folder/PPSSPP"
+      },
+      "pcsx2_textures": {
+        "filename": "how-to-install-PCSX2-textures.txt",
+        "location": "$texture_packs_folder/PCSX2"
+      },
+      "mupen64plus_cache_textures": {
+        "filename": "how-to-install-Mupen64Plus-textures.txt",
+        "location": "$texture_packs_folder/RetroArch-Mupen64Plus/cache"
+      },
+      "mupen64plus_hires_textures": {
+        "filename": "how-to-install-Mupen64Plus-textures.txt",
+        "location": "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture"
+      },
+      "duckstation_textures": {
+        "filename": "how-to-install-Duckstation-textures.txt",
+        "location": "$texture_packs_folder/Duckstation"
+      },
+      "psvita_games": {
+        "filename": "how-to-install-psvita-games.txt",
+        "location": "$roms_folder/psvita"
+      },
+      "ryujinx_firmware": {
+        "filename": "Install-firmware-through-Ryujinx.txt",
+        "location": "$bios_folder/switch/firmware"
+      }
+    },
+    "compression_targets": {
+      "chd": [
+        "3do",
+        "amigacd32",
+        "dreamcast",
+        "megacd",
+        "neogeocd",
+        "pcenginecd",
+        "pcfx",
+        "psp",
+        "psx",
+        "ps2",
+        "saturn",
+        "saturnjp",
+        "segacd",
+        "tg-cd"
+      ],
+      "rvz": [
+        "gc",
+        "wii"
+      ],
+      "zip": [
+        "atari2600",
+        "atari5200",
+        "atari7800",
+        "atari800",
+        "atarijaguar",
+        "atarilynx",
+        "atarist",
+        "gamegear",
+        "gb",
+        "gba",
+        "gbc",
+        "genesis",
+        "mastersystem",
+        "n64",
+        "nds",
+        "nes",
+        "ngp",
+        "ngpc",
+        "sega32x",
+        "sega32xjp",
+        "sega32xna",
+        "snes",
+        "snesna",
+        "tg16"
+      ]
+    },
+    "zip_compressable_extensions": [
+      ".32x",
+      ".68k",
+      ".NDS",
+      ".a26",
+      ".a52",
+      ".a78",
+      ".abs",
+      ".agb",
+      ".atr",
+      ".atx",
+      ".bin",
+      ".bml",
+      ".bms",
+      ".bs",
+      ".bsx",
+      ".cas",
+      ".cdm",
+      ".cgb",
+      ".cof",
+      ".col",
+      ".dim",
+      ".dmg",
+      ".dx2",
+      ".fds",
+      ".fig",
+      ".gb",
+      ".gba",
+      ".gbc",
+      ".gd3",
+      ".gd7",
+      ".gen",
+      ".gg",
+      ".ipf",
+      ".j64",
+      ".jag",
+      ".lnx",
+      ".md",
+      ".mdx",
+      ".mgd",
+      ".msa",
+      ".nds",
+      ".nes",
+      ".ngc",
+      ".o",
+      ".pce",
+      ".prg",
+      ".rom",
+      ".sfc",
+      ".sg",
+      ".sgb",
+      ".sgd",
+      ".smc",
+      ".smd",
+      ".sms",
+      ".st",
+      ".st",
+      ".stx",
+      ".swc",
+      ".unf",
+      ".unif",
+      ".xex",
+      ".xfd",
+      ".z64"
+    ],
+    "system": {
+      "3do": {
+        "name": "3DO Interactive Multiplayer"
+      },
+      "adam": {
+        "name": "Coleco Adam"
+      },
+      "amiga": {
+        "name": "Commodore Amiga"
+      },
+      "amiga1200": {
+        "name": "Commodore Amiga 1200"
+      },
+      "amiga600": {
+        "name": "Commodore Amiga 600"
+      },
+      "amigacd32": {
+        "name": "Commodore Amiga CD32"
+      },
+      "amstradcpc": {
+        "name": "Amstrad CPC"
+      },
+      "apple2": {
+        "name": "Apple II"
+      },
+      "apple2gs": {
+        "name": "Apple IIGS"
+      },
+      "arcade": {
+        "name": "Arcade"
+      },
+      "arcadia": {
+        "name": "Emerson Arcadia 2001"
+      },
+      "archimedes": {
+        "name": "Acorn Archimedes"
+      },
+      "arduboy": {
+        "name": "Arduboy Miniature Game System"
+      },
+      "astrocde": {
+        "name": "Bally Astrocade"
+      },
+      "atari2600": {
+        "name": "Atari 2600"
+      },
+      "atari5200": {
+        "name": "Atari 5200"
+      },
+      "atari7800": {
+        "name": "Atari 7800 ProSystem"
+      },
+      "atari800": {
+        "name": "Atari 800"
+      },
+      "atarijaguar": {
+        "name": "Atari Jaguar"
+      },
+      "atarilynx": {
+        "name": "Atari Lynx"
+      },
+      "atarist": {
+        "name": "Atari ST"
+      },
+      "atarixe": {
+        "name": "Atari XE"
+      },
+      "atomiswave": {
+        "name": "Sammy Corporation Atomiswave"
+      },
+      "bbcmicro": {
+        "name": "Acorn Computers BBC Micro"
+      },
+      "c64": {
+        "name": "Commodore 64"
+      },
+      "cdimono1": {
+        "name": "Philips CD-i"
+      },
+      "cdtv": {
+        "name": "Commodore CDTV"
+      },
+      "chailove": {
+        "name": "ChaiLove Game Engine"
+      },
+      "channelf": {
+        "name": "Fairchild Channel F"
+      },
+      "colecovision": {
+        "name": "Coleco ColecoVision"
+      },
+      "consolearcade": {
+        "name": "Console Arcade Systems"
+      },
+      "cps": {
+        "name": "Capcom Play System"
+      },
+      "cps1": {
+        "name": "Capcom Play System I"
+      },
+      "cps2": {
+        "name": "Capcom Play System II"
+      },
+      "cps3": {
+        "name": "Capcom Play System III"
+      },
+      "crvision": {
+        "name": "VTech CreatiVision"
+      },
+      "daphne": {
+        "name": "Daphne Arcade LaserDisc Emulator"
+      },
+      "desktop": {
+        "name": "Desktop Applications"
+      },
+      "doom": {
+        "name": "Doom"
+      },
+      "dos": {
+        "name": "DOS (PC)"
+      },
+      "dreamcast": {
+        "name": "Sega Dreamcast"
+      },
+      "dc": {
+        "name": "Sega Dreamcast"
+      },
+      "easyrpg": {
+        "name": "EasyRPG Game Engine"
+      },
+      "electron": {
+        "name": "Acorn Electron"
+      },
+      "emulators": {
+        "name": "Emulators"
+      },
+      "famicom": {
+        "name": "Nintendo Family Computer"
+      },
+      "fba": {
+        "name": "FinalBurn Alpha"
+      },
+      "fbneo": {
+        "name": "FinalBurn Neo"
+      },
+      "fds": {
+        "name": "Nintendo Famicom Disk System"
+      },
+      "fm7": {
+        "name": "Fujitsu FM-7"
+      },
+      "fmtowns": {
+        "name": "Fujitsu FM Towns"
+      },
+      "gamate": {
+        "name": "Bit Corporation Gamate"
+      },
+      "gameandwatch": {
+        "name": "Nintendo Game and Watch"
+      },
+      "gamecom": {
+        "name": "Tiger Electronics Game.com"
+      },
+      "gamegear": {
+        "name": "Sega Game Gear"
+      },
+      "gg": {
+        "name": "Sega Game Gear"
+      },
+      "gb": {
+        "name": "Nintendo Game Boy"
+      },
+      "gba": {
+        "name": "Nintendo Game Boy Advance"
+      },
+      "gbc": {
+        "name": "Nintendo Game Boy Color"
+      },
+      "gc": {
+        "name": "Nintendo GameCube"
+      },
+      "genesis": {
+        "name": "Sega Genesis"
+      },
+      "gmaster": {
+        "name": "Hartung Game Master"
+      },
+      "gx4000": {
+        "name": "Amstrad GX4000"
+      },
+      "intellivision": {
+        "name": "Mattel Electronics Intellivision"
+      },
+      "j2me": {
+        "name": "Java 2 Micro Edition (J2ME)"
+      },
+      "laserdisc": {
+        "name": "LaserDisc Games"
+      },
+      "lcdgames": {
+        "name": "LCD Handheld Games"
+      },
+      "lowresnx": {
+        "name": "LowRes NX Fantasy Console"
+      },
+      "lutris": {
+        "name": "Lutris Open Gaming Platform"
+      },
+      "lutro": {
+        "name": "Lutro Game Engine"
+      },
+      "macintosh": {
+        "name": "Apple Macintosh"
+      },
+      "mame": {
+        "name": "Multiple Arcade Machine Emulator"
+      },
+      "mastersystem": {
+        "name": "Sega Master System"
+      },
+      "megacd": {
+        "name": "Sega Mega-CD"
+      },
+      "megacdjp": {
+        "name": "Sega Mega-CD (Japan)"
+      },
+      "megadrive": {
+        "name": "Sega Mega Drive"
+      },
+      "megaduck": {
+        "name": "Creatronic Mega Duck"
+      },
+      "mess": {
+        "name": "Multi Emulator Super System"
+      },
+      "model2": {
+        "name": "Sega Model 2"
+      },
+      "moto": {
+        "name": "Thomson MO/TO Series"
+      },
+      "msx": {
+        "name": "MSX"
+      },
+      "msx1": {
+        "name": "MSX1"
+      },
+      "msx2": {
+        "name": "MSX2"
+      },
+      "msxturbor": {
+        "name": "MSX Turbo R"
+      },
+      "mugen": {
+        "name": "M.U.G.E.N Game Engine"
+      },
+      "multivision": {
+        "name": "Othello Multivision"
+      },
+      "n3ds": {
+        "name": "Nintendo 3DS"
+      },
+      "n64": {
+        "name": "Nintendo 64"
+      },
+      "n64dd": {
+        "name": "Nintendo 64DD"
+      },
+      "naomi": {
+        "name": "Sega NAOMI"
+      },
+      "naomi2": {
+        "name": "Sega NAOMI 2"
+      },
+      "naomigd": {
+        "name": "Sega NAOMI GD-ROM"
+      },
+      "nds": {
+        "name": "Nintendo DS"
+      },
+      "neogeo": {
+        "name": "SNK Neo Geo"
+      },
+      "neogeocd": {
+        "name": "SNK Neo Geo CD"
+      },
+      "neogeocdjp": {
+        "name": "SNK Neo Geo CD (Japan)"
+      },
+      "nes": {
+        "name": "Nintendo Entertainment System"
+      },
+      "ngp": {
+        "name": "SNK Neo Geo Pocket"
+      },
+      "ngpc": {
+        "name": "SNK Neo Geo Pocket Color"
+      },
+      "odyssey2": {
+        "name": "Magnavox Odyssey 2"
+      },
+      "openbor": {
+        "name": "OpenBOR Game Engine"
+      },
+      "palm": {
+        "name": "Palm OS"
+      },
+      "pc": {
+        "name": "IBM PC"
+      },
+      "pc88": {
+        "name": "NEC PC-8800 Series"
+      },
+      "pc98": {
+        "name": "NEC PC-9800 Series"
+      },
+      "pcarcade": {
+        "name": "PC Arcade Systems"
+      },
+      "pcengine": {
+        "name": "NEC PC Engine"
+      },
+      "pcenginecd": {
+        "name": "NEC PC Engine CD"
+      },
+      "pcfx": {
+        "name": "NEC PC-FX"
+      },
+      "pico8": {
+        "name": "PICO-8 Fantasy Console"
+      },
+      "plus4": {
+        "name": "Commodore Plus/4"
+      },
+      "pokemini": {
+        "name": "Nintendo Pokémon Mini"
+      },
+      "ports": {
+        "name": "Ports"
+      },
+      "ps2": {
+        "name": "Sony PlayStation 2"
+      },
+      "ps3": {
+        "name": "Sony PlayStation 3"
+      },
+	  "ps4": {
+        "name": "Sony PlayStation 4"
+      },
+      "psp": {
+        "name": "Sony PlayStation Portable"
+      },
+      "psvita": {
+        "name": "Sony PlayStation Vita"
+      },
+      "psx": {
+        "name": "Sony PlayStation"
+      },
+      "pv1000": {
+        "name": "Casio PV-1000"
+      },
+      "quake": {
+        "name": "Quake"
+      },
+      "satellaview": {
+        "name": "Nintendo Satellaview"
+      },
+      "saturn": {
+        "name": "Sega Saturn"
+      },
+      "saturnjp": {
+        "name": "Sega Saturn (Japan)"
+      },
+      "scummvm": {
+        "name": "ScummVM Game Engine"
+      },
+      "scv": {
+        "name": "Epoch Super Cassette Vision"
+      },
+      "sega32x": {
+        "name": "Sega Mega Drive 32X"
+      },
+      "sega32xjp": {
+        "name": "Sega Super 32X (Japan)"
+      },
+      "sega32xna": {
+        "name": "Sega Genesis 32X"
+      },
+      "segacd": {
+        "name": "Sega CD"
+      },
+      "sfc": {
+        "name": "Nintendo SFC (Super Famicom)"
+      },
+      "sg-1000": {
+        "name": "Sega SG-1000"
+      },
+      "sgb": {
+        "name": "Nintendo Super Game Boy"
+      },
+      "snes": {
+        "name": "Nintendo SNES (Super Nintendo)"
+      },
+      "snesna": {
+        "name": "Nintendo SNES (Super Nintendo)"
+      },
+      "solarus": {
+        "name": "Solarus Game Engine"
+      },
+      "spectravideo": {
+        "name": "Spectravideo"
+      },
+      "stv": {
+        "name": "Sega Titan Video Game System"
+      },
+      "sufami": {
+        "name": "Bandai SuFami Turbo"
+      },
+      "supergrafx": {
+        "name": "NEC SuperGrafx"
+      },
+      "supervision": {
+        "name": "Watara Supervision"
+      },
+      "supracan": {
+        "name": "Funtech Super A'Can"
+      },
+      "switch": {
+        "name": "Nintendo Switch"
+      },
+      "tg-cd": {
+        "name": "NEC TurboGrafx-CD"
+      },
+      "tg16": {
+        "name": "NEC TurboGrafx-16"
+      },
+      "ti99": {
+        "name": "Texas Instruments TI-99"
+      },
+      "tic80": {
+        "name": "TIC-80 Fantasy Computer"
+      },
+      "to8": {
+        "name": "Thomson TO8"
+      },
+      "uzebox": {
+        "name": "Uzebox Open Source Console"
+      },
+      "vectrex": {
+        "name": "GCE Vectrex"
+      },
+      "vic20": {
+        "name": "Commodore VIC-20"
+      },
+      "videopac": {
+        "name": "Philips Videopac G7000"
+      },
+      "virtualboy": {
+        "name": "Nintendo Virtual Boy"
+      },
+      "vsmile": {
+        "name": "VTech V.Smile"
+      },
+      "wasm4": {
+        "name": "WASM-4 Fantasy Console"
+      },
+      "wii": {
+        "name": "Nintendo Wii"
+      },
+      "wiiu": {
+        "name": "Nintendo Wii U"
+      },
+      "windows": {
+        "name": "Microsoft Windows"
+      },
+      "windows3x": {
+        "name": "Microsoft Windows 3.x"
+      },
+      "windows9x": {
+        "name": "Microsoft Windows 9x"
+      },
+      "wonderswan": {
+        "name": "Bandai WonderSwan"
+      },
+      "wonderswancolor": {
+        "name": "Bandai WonderSwan Color"
+      },
+      "x1": {
+        "name": "Sharp X1"
+      },
+      "x68000": {
+        "name": "Sharp X68000"
+      },
+      "xbox": {
+        "name": "Microsoft Xbox"
+      },
+      "zx81": {
+        "name": "Sinclair ZX81"
+      },
+      "zxspectrum": {
+        "name": "Sinclair ZX Spectrum"
+      }
+    },
+    "emulator": {
+      "retroarch": {
+        "description": "RetroArch (Multi-emulator Frontend)",
+        "name": "RetroArch",
+        "launch": "retroarch",
+        "properties": [
+          {
+            "cheevos": true,
+            "cheevos_hardcore": true,
+            "quick_resume": true
+          }
+        ],
+        "cores": {
+          "citra_libretro": {
+            "description": "Nintendo 3DS Libretro Core",
+            "name": "Citra",
+            "system": "n3ds",
+            "properties": [
+              {
+                "abxy_button": true
+              }
+            ]
+          },
+          "mame_libretro": {
+            "description": "MAME: Multiple Arcade Machine Libretro Core",
+            "name": "MAME",
+            "system": "arcade",
+            "properties": [
+              {
+                "tate_mode": true
+              }
+            ]
+          },
+          "desmume_libretro": {
+            "description": "DeSmuME Nintendo DS Libretro Core",
+            "name": "desmume",
+            "system": "nds",
+            "properties": [
+              {
+                "abxy_button": true
+              }
+            ]
+          },
+          "melonds_libretro": {
+            "description": "MelonDS Nintendo DS Libretro Core",
+            "name": "melonds",
+            "system": "nds",
+            "properties": [
+              {
+                "abxy_button": true
+              }
+            ]
+          },
+          "swanstation_libretro": {
+            "name": "SwanStation",
+            "description": "Swanstation Libretro Core",
+            "system": "psx",
+            "properties": [
+              {
+                "widescreen": true,
+                "borders": true
+              }
+            ]
+          },
+          "picodrive_libetro": {
+            "name": "PicoDrive",
+            "description": "SEGA MS/MD/CD/32X Libretro Core",
+            "system": [
+              "ms",
+              "md",
+              "cd",
+              "32x"
+            ],
+            "properties": [
+              {
+                "widescreen": true,
+                "borders": true,
+                "rewind": true
+              }
+            ]
+          },
+          "genesisplusgx_libetro": {
+            "name": "Genesis Plus GX",
+            "description": "SEGA MS/GG/MD/CD Libretro Core",
+            "system": [
+              "ms",
+              "gg",
+              "mc",
+              "cd"
+            ],
+            "properties": [
+              {
+                "widescreen": true,
+                "borders": true,
+                "rewind": true
+              }
+            ]
+          },
+          "genesisplusgxwide_libetro": {
+            "name": "Genesis Plus GX Wide",
+            "description": "SEGA MS/GG/MD/CD Libretro Core for Wide Screen",
+            "system": [
+              "ms",
+              "gg",
+              "mc",
+              "cd"
+            ],
+            "properties": [
+              {
+                "widescreen": true,
+                "rewind": true
+              }
+            ]
+          },
+          "mupen64plus-next_libetro": {
+            "name": "Mupen64Plus-Next",
+            "description": "Nintendo 64 Libretro Core",
+            "system": "n64",
+            "properties": [
+              {
+                "widescreen": true,
+                "borders": true,
+                "abxy_button": true
+              }
+            ]
+          },
+          "snes9x-current_libetro": {
+            "name": "Snes9x - Current",
+            "description": "Super Nintendo Libretro Core",
+            "system": "snes",
+            "properties": [
+              {
+                "widescreen": true,
+                "borders": true,
+                "rewind": true,
+                "abxy_button": true
+              }
+            ]
+          },
+          "gambatte_libetro": {
+            "name": "Gambatte",
+            "description": "Game Boy/Color Libretro Core",
+            "system": [
+              "gb",
+              "gbc"
+            ],
+            "properties": [
+              {
+                "borders": true,
+                "rewind": true,
+                "abxy_button": true
+              }
+            ]
+          },
+          "mgba_libetro": {
+            "name": "mGBA",
+            "description": "Game Boy Advance Libretro Core",
+            "system": "gba",
+            "properties": [
+              {
+                "borders": true,
+                "rewind": true,
+                "abxy_button": true
+              }
+            ]
+          }
+        }
+      },
+      "mame": {
+        "description": "MAME: Multiple Arcade Machine Emulator",
+        "name": "MAME",
+        "system": [
+          "arcade"
+        ],
+        "launch": "mame"
+      },
+      "citra": {
+        "description": "Citra Nintendo 3DS Emulator (via Ponzu)",
+        "name": "Citra (via Ponzu)",
+        "system": "n3ds",
+        "ponzu": true,
+        "launch" : "citra-qt",
+        "properties": [
+          {
+            "abxy_button": true,
+            "ask_to_exit": true
+          }
+        ]
+      },
+      "melonds": {
+        "description": "MelonDS Nintendo DS Emulator",
+        "name": "melonds",
+        "system": "nds",
+        "launch": "MelonDS"
+      },
+      "pcsx2": {
+        "name": "pcsx2",
+        "description": "PCSX2 Play Station 2 Emulator",
+        "system": "ps2",
+        "launch" : "pcsx2-qt",
+        "properties": [
+          {
+            "ask_to_exit": true,
+            "cheevos": true
+          }
+        ]
+      },
+      "duckstation": {
+        "name": "Duckstation",
+        "description": "PlayStation Emulator",
+        "launch": "duckstation-qt",
+        "system": "psx",
+        "properties": [
+          {
+            "ask_to_exit": true,
+            "cheevos": true
+          }
+        ]
+      },
+      "ppsspp": {
+        "name": "PPSSPP",
+        "description": "PPSSPP: PlayStation Portable Emulator",
+        "launch": "PPSSPPSDL",
+        "system": "psp",
+        "properties": [
+          {
+            "cheevos": true,
+            "cheevos_hardcore": true
+          }
+        ]
+      },
+      "vita3k": {
+        "name": "Vita3k",
+        "description": "Vita3K PSVita Emulator",
+        "system": "psvita",
+        "launch": "Vita3K"
+      },
+      "rpcs3": {
+        "name": "RPCS3",
+        "description": "RPCS3 PlayStation 3 Emulator",
+        "system": "ps3",
+        "launch": "rpcs3",
+        "properties": [
+          {
+            "ask_to_exit": true
+          }
+        ]
+      },
+      "ryujinx": {
+        "name": "Ryujinx",
+        "description": "Ryujinx Nintendo Switch Emulator",
+        "system": "switch",
+        "launch": "Ryujinx.sh"
+      },
+	"shadps4" : {
+	  "description": "PS4 Emulator for Linux",
+	  "name": "shadps4",
+	  "system": "ps4",
+	  "launch": "shadps4-qt"
 	}
+      "yuzu": {
+        "name": "Yuzu (via Ponzu)",
+        "description": "Yuzu Nintendo Switch Emulator (via Ponzu)",
+        "launch": "Yuzu",
+        "system": "switch",
+        "ponzu": true,
+        "abxy_button": true
+      },
+      "dolphin": {
+        "name": "Dolphin",
+        "description": "Dolphin Wii and GameCube Emulator",
+        "launch": "dolphin-emu-wrapper",
+        "system": [
+          "gc",
+          "wii"
+        ],
+        "properties": [
+          {
+            "abxy_button": true,
+            "ask_to_exit": true,
+            "cheevos": true,
+            "cheevos_hardcore": true,
+            "universal_dyn_input": true
+          }
+        ]
+      },
+      "primehack": {
+        "name": "PrimeHack",
+        "description": "A fork of Dolphiin to enhance Metroid Prime experience",
+        "launch": "primehack-wrapper",
+        "system": [
+          "wii"
+        ],
+        "properties": [
+          {
+            "ask_to_exit": true,
+            "universal_dyn_input": true
+          }
+        ]
+      },
+      "cemu": {
+        "description": "Wii U emulator",
+        "name": "Cemu",
+        "system": "wiiu",
+        "launch": "Cemu-wrapper",
+        "properties": [
+          {
+            "abxy_button": true,
+            "multi_user_config_dir": "Cemu"
+          }
+        ]
+      },
+      "xemu": {
+        "description": "xemu Xbox Emulator",
+        "name": "xemu",
+        "system": "xbox",
+        "launch": "xemu"
+      }
+    }
   }
   
\ No newline at end of file
diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml
index acda1f52..24292a61 100644
--- a/net.retrodeck.retrodeck.yml
+++ b/net.retrodeck.retrodeck.yml
@@ -524,6 +524,22 @@ modules:
         url: https://github.com/RetroDECK/MAME/releases/latest/download/RetroDECK-MAME-Artifact.tar.gz
         sha256: RETRODECKMAMELATEST
 
+  # SHADPS4
+
+  - name: shadps4
+    buildsystem: simple
+    build-commands:
+      - unzip shadps4-linux-qt.zip
+      - chmod +x *.AppImage
+      - ./*.AppImage --appimage-extract
+      - mkdir -p "${FLATPAK_DEST}/retrodeck/tmplib" "${FLATPAK_DEST}/retrodeck/tmplib/debug"
+      - mv "squashfs-root/usr/lib/"* "${FLATPAK_DEST}/retrodeck/tmplib"
+      - cp -r squashfs-root/usr/* "${FLATPAK_DEST}/"
+    sources:
+      - type: file
+        url: RETRODECKSHADPS4LATESTURL
+        sha256: RETRODECKSHADPS4LATESTSHA
+
   # ES-DE
 
   - name: ES-DE