diff --git a/.github/workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml index c841996f..3bfc2c23 100644 --- a/.github/workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -1,13 +1,16 @@ -name: cooker-selfhosted +name: "Build cooker" on: push: branches: - cooker* + - feat* paths: - '.github/workflows/**' + - 'automation_tools/**' - 'emu-configs/**' - 'es-configs/**' + - 'functions/**' - 'rd-submodules/**' - '*.sh' - 'net.retrodeck.retrodeck.yml' @@ -29,36 +32,50 @@ jobs: - name: Remove stuck mounts run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* continue-on-error: true + + - name: Clone RetroDECK repo + uses: actions/checkout@v3 + with: + submodules: 'true' - - name: Generate build ID - id: generating_buildid - run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" - - - uses: actions/checkout@v3 + - name: "Install dependencies" + run: "automation_tools/install_dependencies.sh" - - name: Initialize environment + - name: Generate cooker build ID run: | - git pull - git submodule init - git submodule update - sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - flatpak install --user -y --noninteractive \ - org.kde.Sdk//6.3 \ - org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ - io.qt.qtwebengine.BaseApp/x86_64/6.3 \ - org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ - runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 - /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks + word1=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word1="$(tr '[:lower:]' '[:upper:]' <<< ${word1:0:1})${word1:1}" + word2=$(shuf -n 1 ${GITHUB_WORKSPACE}/automation_tools/codename_wordlist.txt) + capitalized_word2="$(tr '[:lower:]' '[:upper:]' <<< ${word2:0:1})${word2:1}" + result=$capitalized_word1$capitalized_word2 + echo $result > ${GITHUB_WORKSPACE}/buildid + echo "buildid=$result" >> $GITHUB_ENV + echo "VersionID is $result" + + - name: Run pre-build automation tasks + run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + + - name: "Adding flatpak portal for automated updates (cooker only)" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_flatpak_portal_add.sh" + + - name: "Updating release notes in appdata" + run: "automation_tools/appdata_management.sh" + + - name: "[DEBUG] Outputting manifest" + run: cat net.retrodeck.retrodeck.yml + + - name: "Build flatpak: download only" + id: "flatpak-download" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + continue-on-error: true + + # Sometimes flatpak download fails, in this case it tries a second time + - name: "Build flatpak: download only (retry)" + if: steps.flatpak-download.outcome == 'failure' + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak - run: | - git config --global protocol.file.allow always - mkdir -vp ${GITHUB_WORKSPACE}/local - mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker - flatpak-builder --user --force-clean --install-deps-from=flathub --install-deps-from=flathub-beta --repo=${GITHUB_WORKSPACE}/local ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" - name: Create Artifact for flathub run: | @@ -69,36 +86,64 @@ jobs: continue-on-error: true - name: Create Bundle - run: | - flatpak build-bundle ${GITHUB_WORKSPACE}/local RetroDECK.flatpak net.retrodeck.retrodeck + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh" - name: Set environment variable with current branch name run: echo "GITHUB_REF_SLUG=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV + - name: Get commits since last release + run: | + # Get the latest release tag + LATEST_TAG=$(git describe --tags --abbrev=0) + # Get all commits since the latest release tag + COMMITS=$(git log $LATEST_TAG..HEAD --pretty=format:"- %s") + # Set the output variable + echo "::set-output name=commits::$COMMITS" + id: commits + continue-on-error: true + + - name: Get branch name + id: branch_name + run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV + + # if it's a feature branch it will not marked as "latest" cooker version + - name: "Set makeLatest (cooker only)" + run: | + if [[ "$BRANCH_NAME" == 'feat/'* ]]; then + echo "MAKE_LATEST=false" >> $GITHUB_ENV + else + echo "MAKE_LATEST=true" >> $GITHUB_ENV + fi + - name: Publish the flatpak in a new cooker release uses: ncipollo/release-action@v1 with: - tag: "${{ env.GITHUB_REF_SLUG }}-${{ steps.generating_buildid.outputs.build-id }}" + tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}" body: | # Release Notes (Cooker) This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + On branch [${{env.BRANCH_NAME}}](https://github.com/XargonWan/RetroDECK/tree/${{env.BRANCH_NAME}}). + + ## Commits since last release + ${{ steps.commits.outputs.commits }} + + For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/qQcrFvaA2C) on our Discord server. Cooker channel is provided for the community to test fixes and explore new functionality. Please DO NOT open issues or ask support on this build. - artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" + artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz" allowUpdates: true - #prerelease: true - makeLatest: true - #draft: true + makeLatest: ${{env.MAKE_LATEST}} # if it's a feat branch is not considered the latest build token: ${{ secrets.TRIGGER_BUILD_TOKEN }} repo: RetroDECK-cooker continue-on-error: true # In case it cannot publish the release at least it's providing the flatpak file for creating a manual release - - name: Upload RetroDECK.flatpak + - name: Upload RetroDECK-cooker.flatpak uses: actions/upload-artifact@v3 with: name: retrodeck-flatpak - path: RetroDECK.flatpak + path: RetroDECK-cooker.flatpak continue-on-error: true + diff --git a/.github/workflows/flathub_push_main.yml b/.github/workflows/flathub_push_main.yml index 1b4bad8f..7e085521 100644 --- a/.github/workflows/flathub_push_main.yml +++ b/.github/workflows/flathub_push_main.yml @@ -1,5 +1,5 @@ -name: PUSH-main-flathub +name: "Push main on Flathub" on: workflow_dispatch: @@ -9,6 +9,7 @@ jobs: Pushing_main_into_flathub: runs-on: ubuntu-latest steps: + - name: Pushing shell: bash run: | @@ -47,17 +48,35 @@ jobs: # Copying only a few files as the others are cloned by git in retrodeck.sh cd $gits_folder/RetroDECK cp -rf \ - 'flathub.json' \ 'LICENSE' \ - 'flathub.yml' \ 'README.md' \ $gits_folder/flathub/ cd $gits_folder/flathub ls -lah - # manipulating manifest - mv flathub.yml net.retrodeck.retrodeck.yml + # Creating the manifest for flathub + manifest='net.retrodeck.retrodeck.yml' + sed -n '/cleanup/q;p' $gits_folder/RetroDECK/net.retrodeck.retrodeck.yml > $manifest + sed -i '/^[[:space:]]*#/d' $manifest + sed -i 's/[[:space:]]*#.*$//' $manifest + cat << EOF >> $manifest + modules: + - name: retrodeck + buildsystem: simple + build-commands: + - cp -rn files/* /app + sources: + - type: archive + url: https://artifacts.retrodeck.net/artifacts/RetroDECK-Artifact.tar.gz + sha256: __SHA__ + EOF + + cat << EOF >> flathub.json + { + "only-arches": ["x86_64"] + } + EOF # Getting latest release name # version=$(\ diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index 438b25f7..b71961c6 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -1,9 +1,19 @@ -name: main-selfhosted +name: "Build main" on: push: branches: - main + paths: + - '.github/workflows/**' + - 'automation_tools/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'functions/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' pull_request: branches: - main @@ -22,35 +32,43 @@ jobs: run: sudo umount -f /home/ubuntu/actions-runner/_work/RetroDECK/RetroDECK/.flatpak-builder/rofiles/* continue-on-error: true - - name: Generate build ID - id: generating_buildid - run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")" - - - uses: actions/checkout@v3 + - name: Clone RetroDECK repo + uses: actions/checkout@v3 + with: + submodules: 'true' - - name: Initialize enviornment - run: | - git pull - git submodule init - git submodule update - sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet bzip2 - flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - flatpak install --user -y --noninteractive \ - org.kde.Sdk//6.3 \ - org.kde.Platform//6.3 \ - org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 \ - io.qt.qtwebengine.BaseApp/x86_64/6.3 \ - org.freedesktop.Sdk.Extension.llvm13 \ - org.freedesktop.Sdk.Extension.dotnet6/x86_64/22.08 \ - runtime/org.freedesktop.Platform.ffmpeg-full/x86_64/22.08 - /bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh # Run pre-build automation tasks + - name: "Install dependencies" + run: "automation_tools/install_dependencies.sh" + + - name: Run pre-build automation tasks + run : "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/pre_build_automation.sh" + + - name: Read manifest content + id: read_manifest + run: echo "::set-output name=file_content::$(cat net.retrodeck.retrodeck.yml)" + + # - name: "Updating release notes in appdata" + # run: "automation_tools/appdata_management.sh" + + - name: Check versions (main only) + id: check_version_string + run: "automation_tools/main_version_checker.sh" + + - name: "[DEBUG] Outputting manifest" + run: cat net.retrodeck.retrodeck.yml + + - name: "Build flatpak: download only" + id: "flatpak-download" + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" + continue-on-error: true + + # Sometimes flatpak download fails, in this case it tries a second time + - name: "Build flatpak: download only (retry)" + if: steps.flatpak-download.outcome == 'failure' + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_download_only.sh" - name: Build flatpak - run: | - git config --global protocol.file.allow always - mkdir -vp ${GITHUB_WORKSPACE}/local - mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-flatpak-cooker - flatpak-builder --user --force-clean --install-deps-from=flathub --install-deps-from=flathub-beta --repo=${GITHUB_WORKSPACE}/local ${GITHUB_WORKSPACE}/retrodeck-flatpak-main net.retrodeck.retrodeck.yml + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_only.sh" - name: Create Artifact for flathub run: | @@ -61,8 +79,7 @@ jobs: continue-on-error: true - name: Create Bundle - run: | - flatpak build-bundle ${GITHUB_WORKSPACE}/local RetroDECK.flatpak net.retrodeck.retrodeck + run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/flatpak_build_bundle.sh" - name: Getting version info id: version @@ -84,7 +101,6 @@ jobs: bodyFile: "body.md" artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" allowUpdates: true - #prerelease: true makeLatest: true token: ${{ secrets.TRIGGER_BUILD_TOKEN }} repo: RetroDECK diff --git a/.github/workflows/TEST_release_info.yml b/.github/workflows/removed/TEST_release_info.yml similarity index 100% rename from .github/workflows/TEST_release_info.yml rename to .github/workflows/removed/TEST_release_info.yml diff --git a/.github/workflows/cooker.yml b/.github/workflows/removed/cooker.yml similarity index 100% rename from .github/workflows/cooker.yml rename to .github/workflows/removed/cooker.yml diff --git a/.github/workflows/flathub_push_cooker.yml b/.github/workflows/removed/flathub_push_cooker.yml similarity index 100% rename from .github/workflows/flathub_push_cooker.yml rename to .github/workflows/removed/flathub_push_cooker.yml diff --git a/.github/workflows/main.yml b/.github/workflows/removed/main.yml similarity index 100% rename from .github/workflows/main.yml rename to .github/workflows/removed/main.yml diff --git a/.github/workflows/remove-artifacts.yml b/.github/workflows/removed/remove-artifacts.yml similarity index 100% rename from .github/workflows/remove-artifacts.yml rename to .github/workflows/removed/remove-artifacts.yml diff --git a/.github/workflows/removed/update-readthedocs.yml b/.github/workflows/removed/update-readthedocs.yml new file mode 100644 index 00000000..f32127e4 --- /dev/null +++ b/.github/workflows/removed/update-readthedocs.yml @@ -0,0 +1,34 @@ +name: Update-ReadTheDocs + +on: + gollum + # push: + # branches: + # - main + # paths: + # - 'wiki-rtd' + # pull_request: + # branches: + # - main + # paths: + # - 'wiki-rtd' + # workflow_dispatch: + + +jobs: + + Job1_-_Building_P1: + runs-on: ubuntu-latest + steps: + + - uses: actions/checkout@v3 + + - name: Update ReadTheDocs wiki-rtd + id: wiki-rtd-update + run: | + git checkout https://github.com/XargonWan/RetroDECK.wiki-rtd.git tmp/wiki-rtd + cp -rf tmp/wiki-rtd/* wiki-rtd + rm wiki-rtd/index.md + mv wiki-rtd/Home.md wiki-rtd/index.md + git commit -m "Updating wiki-rtd" + git push \ No newline at end of file diff --git a/.github/workflows/submodule-update.yml b/.github/workflows/submodule-update.yml new file mode 100644 index 00000000..af02cfd7 --- /dev/null +++ b/.github/workflows/submodule-update.yml @@ -0,0 +1,57 @@ +name: Sunday Submodule Update + +on: + # At 4:00 (CET) + schedule: + - cron: '0 2 * * 0' + workflow_dispatch: + +jobs: + update_submodules: + name: Update submodules and create PR + runs-on: ubuntu-latest + steps: + + - name: Checkout repo with submodules + uses: actions/checkout@v2 + with: + token: ${{ secrets.REPO_TOKEN }} + submodules: recursive + + - name: Fetch all remote branches + run: git fetch --all + + - name: List cooker branches by date + id: list_branches + run: | + BRANCHES=$(git for-each-ref --sort=-committerdate refs/remotes/origin/cooker* --format='%(refname)') echo “::set-output name=branches::$BRANCHES” + + - name: Select target branch + id: select_branch + run: | + TARGET_BRANCH=(echo{{ steps.list_branches.outputs.branches }} | head -n 1) + echo “::set-output name=target_branch::$TARGET_BRANCH” + git checkout $TARGET_BRANCH + echo "Working on $TARGET_BRANCH" + + - name: Update submodules with command + run: git submodule update --remote --merge --recursive + + - name: Configure Git credentials + run: | + git config --global user.name 'GitHub bot' + git config --global user.email 'bot@noreply.github.com' + + - name: Commit and push changes + run: | + git commit -am "Sunday submodule update" + git push origin HEAD:submodule-update + + - name: Create PR + uses: repo-sync/pull-request@v2 + with: + github_token: ${{ secrets.REPO_TOKEN }} + pr_title: "Sunday submodule update" + pr_body: "This PR updates the submodules to the latest commit on their remote repositories." + source_branch: "submodule-update" + destination_branch: "cooker*" diff --git a/.gitignore b/.gitignore index 934dbffd..d1256aed 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,7 @@ Thumbs.db .flatpak-builder/ retrodeck-flatpak-cooker/ retrodeck-flatpak/ -bakcup +backup .old +tmp +.godot diff --git a/.gitmodules b/.gitmodules index 03419e80..038a6d59 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "rd-submodules/shared-modules"] path = rd-submodules/shared-modules url = https://github.com/flathub/shared-modules.git +[submodule "rd-submodules/ryujinx"] + path = rd-submodules/ryujinx + url = https://github.com/flathub/org.ryujinx.Ryujinx diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000..5bf1fa68 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,31 @@ +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +# Set the OS, Python version and other tools you might need +build: + os: ubuntu-22.04 + tools: + python: "3.11" + # You can also specify other tool versions: + # nodejs: "19" + # rust: "1.64" + # golang: "1.19" + +# Build documentation in the "docs/" directory with Sphinx +sphinx: + configuration: wiki-rtd/conf.py + +# Optionally build your docs in additional formats such as PDF and ePub +formats: + - pdf + - epub + +# Optional but recommended, declare the Python requirements required +# to build your documentation +# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html +python: + install: + - requirements: wiki-rtd/requirements.txt \ No newline at end of file diff --git a/README.md b/README.md index 7f85254e..d3db6cd5 100644 --- a/README.md +++ b/README.md @@ -6,16 +6,11 @@ ![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck) ![Discord](https://img.shields.io/discord/951662718102962256?label=discord) ![GitHub](https://img.shields.io/github/license/XargonWan/RetroDECK) +[![Documentation Status](https://readthedocs.org/projects/retrodeck/badge/?version=latest)](https://retrodeck.readthedocs.io/en/latest/?badge=latest) -# RetroDECK -**RetroDECK** brings an environment to catalog and play your retro games directly from SteamOS and it's tailored specifically for the **Steam Deck**. +# RetroDECK on your device! -It's inspired by embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera. - -Powered by [EmulationStation Desktop Edition](https://es-de.org), which uses RetroArch and other standalone emulators to allow you to import and play your favorite retro (and even not-so-retro) games in a tidy environment without flooding your Steam library. - -Visit our [website](https://retrodeck.net) and Join our [Discord](https://discord.gg/Dz3szYsP8g)!
@@ -24,22 +19,60 @@ Visit our [website](https://retrodeck.net) and Join our [Discord](https://discor
${section_name}
) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs.
+
+ (
+ if [[ $prev_version -le "062" ]]; then
+ # In version 0.6.2b, the following changes were made that required config file updates/reset:
+ # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default.
+ # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now!
+ # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/
+
+ rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack.
+ prepare_emulator "reset" "primehack"
+
+ dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards"
+ dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates"
+
+ mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion
+ dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
+ dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
+ dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder
+ fi
+ if [[ $prev_version -le "063" ]]; then
+ # In version 0.6.3b, the following changes were made that required config file updates/reset:
+ # - Put Dolphin and Primehack save states in different folders inside $rd_home/states
+ # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~)
+ # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates.
+
+ dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
+ dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
+
+ rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b
+ rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion
+ dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
+ dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency.
+
+ cp -f "$emuconfigs/citra/qt-config.ini" /var/config/citra-emu/qt-config.ini
+ sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
+ cp -fr "$emuconfigs/yuzu/"* /var/config/yuzu/
+ sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
+
+ # Remove unneeded tools folder, as location has changed to RO space
+ rm -rfv /var/config/retrodeck/tools/
+ fi
+ if [[ $prev_version -le "064" ]]; then
+ # In version 0.6.4b, the following changes were made:
+ # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect.
+ # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled.
+ # The default configs have been updated for new installs and resets, a patch was created to address existing installs.
+
+ deploy_multi_patch "emu-configs/patches/updates/064b_update.patch"
+ fi
+ if [[ $prev_version -le "065" ]]; then
+ # In version 0.6.5b, the following changes were made:
+ # Change Yuzu GPU accuracy to normal for better performance
+
+ set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer"
+ fi
+ if [[ $prev_version -le "070" ]]; then
+ # In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem:
+ # - Update retrodeck.cfg and set new paths to $rdhome by default
+ # - Update PCSX2 and Duckstation configs to latest templates (to accomadate RetroAchievements feature) and move Duckstation config folder from /var/data to /var/config
+ # - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported)
+ # - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists
+ # - Copy new borders into RA config location
+ # - Copy new RetroArch control remaps into RA config location
+ # - Add shipped Amiga bios if it doesn't already exist
+ # - Update RPCS3 vfs file contents. migrate from old location if needed
+ # - Disable ESDE update checks for existing installs
+ # - Move Duckstation saves and states to new locations
+ # - Clean up legacy tools files (Configurator is now accessible through the main ES-DE menu)
+ # - Move Dolphin and Primehack save folder names
+ # - Move PPSSPP saves/states to appropriate folders
+ # - Set ESDE user themes folder directly
+ # - Disable auto-save/load in existing RA / PCSX2 / Duckstation installs for proper preset functionality
+ # - Disable ask-on-exit in existing Citra / Dolphin / Duckstation / Primehack installs for proper preset functionality
+ # - Disable auto-load-state in existing PPSSPP installs for proper preset functionality
+ # - Init Cemu as it is a new emulator
+ # - Init PICO-8 as it has newly-shipped config files
+
+ update_rd_conf # Expand retrodeck.cfg to latest template
+ set_setting_value $rd_conf "screenshots_folder" "$rdhome/screenshots"
+ set_setting_value $rd_conf "mods_folder" "$rdhome/mods"
+ set_setting_value $rd_conf "texture_packs_folder" "$rdhome/texture_packs"
+ set_setting_value $rd_conf "borders_folder" "$rdhome/borders"
+ conf_read
+
+ mv -f "$pcsx2conf" "$pcsx2conf.bak"
+ generate_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "$pcsx2conf.bak" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" pcsx2
+ deploy_single_patch "$emuconfigs/PCSX2/PCSX2.ini" "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch" "$pcsx2conf"
+ rm -f "/var/config/PCSX2/inis/PCSX2-cheevos-upgrade.patch"
+ dir_prep "/var/config/duckstation" "/var/data/duckstation"
+ mv -f "$duckstationconf" "$duckstationconf.bak"
+ generate_single_patch "$emuconfigs/duckstation/settings.ini" "$duckstationconf.bak" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" pcsx2
+ deploy_single_patch "$emuconfigs/duckstation/settings.ini" "/var/config/duckstation/duckstation-cheevos-upgrade.patch" "$duckstationconf"
+ rm -f "/var/config/duckstation/duckstation-cheevos-upgrade.patch"
+
+ mkdir -p "$mods_folder"
+ mkdir -p "$texture_packs_folder"
+ mkdir -p "$borders_folder"
+
+ dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
+ dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
+ dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
+ dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
+ dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
+ dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
+ dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
+ dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
+ dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
+
+ dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists"
+
+ dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders"
+ rsync -rlD --mkpath "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders/"
+
+ rsync -rlD --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/"
+
+ if [[ ! -f "$bios_folder/capsimg.so" ]]; then
+ cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so"
+ fi
+
+ cp -f $emuconfigs/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml
+ sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf"
+ set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3"
+ if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once.
+ mkdir "$bios_folder/rpcs3"
+ mv "$roms_folder/ps3/emudir/"* "$bios_folder/rpcs3/"
+ rm "$roms_folder/ps3/emudir"
+ configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update and due to a RPCS3 config upgrade, the files that used to exist at\n\n~/retrodeck/roms/ps3/emudir\n\nare now located at\n\n~/retrodeck/bios/rpcs3.\nYour existing files have been moved automatically."
+ fi
+ mkdir -p "$bios_folder/rpcs3/dev_hdd0"
+ mkdir -p "$bios_folder/rpcs3/dev_hdd1"
+ mkdir -p "$bios_folder/rpcs3/dev_flash"
+ mkdir -p "$bios_folder/rpcs3/dev_flash2"
+ mkdir -p "$bios_folder/rpcs3/dev_flash3"
+ mkdir -p "$bios_folder/rpcs3/dev_bdvd"
+ mkdir -p "$bios_folder/rpcs3/dev_usb000"
+ dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3"
+
+ set_setting_value $es_settings "ApplicationUpdaterFrequency" "never" "es_settings"
+
+ if [[ -f "$saves_folder/duckstation/shared_card_1.mcd" || -f "$saves_folder/duckstation/shared_card_2.mcd" ]]; then
+ configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "As part of this update, the location of saves and states for Duckstation has been changed.\n\nYour files will be moved automatically, and can now be found at\n\n~.../saves/psx/duckstation/memcards/\nand\n~.../states/psx/duckstation/"
+ fi
+ mkdir -p "$saves_folder/psx/duckstation/memcards"
+ mv "$saves_folder/duckstation/"* "$saves_folder/psx/duckstation/memcards/"
+ rmdir "$saves_folder/duckstation" # File-safe folder cleanup
+ unlink "/var/config/duckstation/memcards"
+ set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
+ mkdir -p "$states_folder/psx"
+ mv -t "$states_folder/psx/" "$states_folder/duckstation"
+ unlink "/var/config/duckstation/savestates"
+ dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates"
+
+ rm -rf /var/config/retrodeck/tools
+ rm -rf /var/config/emulationstation/.emulationstation/gamelists/tools/
+
+ mv "$saves_folder/gc/dolphin/EUR" "$saves_folder/gc/dolphin/EU"
+ mv "$saves_folder/gc/dolphin/USA" "$saves_folder/gc/dolphin/US"
+ mv "$saves_folder/gc/dolphin/JAP" "$saves_folder/gc/dolphin/JP"
+ dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR"
+ dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA"
+ dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP"
+ mv "$saves_folder/gc/primehack/EUR" "$saves_folder/gc/primehack/EU"
+ mv "$saves_folder/gc/primehack/USA" "$saves_folder/gc/primehack/US"
+ mv "$saves_folder/gc/primehack/JAP" "$saves_folder/gc/primehack/JP"
+ dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
+ dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
+ dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
+
+ dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
+ dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
+
+ set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
+ set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
+ sed -i '$ a ' "$es_settings" # Add new default line to existing file
+ set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
+ unlink "/var/config/emulationstation/ROMs"
+ unlink "/var/config/emulationstation/.emulationstation/downloaded_media"
+ unlink "/var/config/emulationstation/.emulationstation/themes"
+
+ set_setting_value "$raconf" "savestate_auto_load" "false" "retroarch"
+ set_setting_value "$raconf" "savestate_auto_save" "false" "retroarch"
+ set_setting_value "$pcsx2conf" "SaveStateOnShutdown" "false" "pcsx2" "EmuCore"
+ set_setting_value "$duckstationconf" "SaveStateOnExit" "false" "duckstation" "Main"
+ set_setting_value "$duckstationconf" "Enabled" "false" "duckstation" "Cheevos"
+
+ set_setting_value "$citraconf" "confirmClose" "false" "citra" "UI"
+ set_setting_value "$citraconf" "confirmClose\default" "false" "citra" "UI"
+ set_setting_value "$dolphinconf" "ConfirmStop" "False" "dolphin" "Interface"
+ set_setting_value "$duckstationconf" "ConfirmPowerOff" "false" "duckstation" "Main"
+ set_setting_value "$primehackconf" "ConfirmStop" "False" "primehack" "Interface"
+
+ set_setting_value "$ppssppconf" "AutoLoadSaveState" "0" "ppsspp" "General"
+
+ prepare_emulator "reset" "cemu"
+
+ prepare_emulator "reset" "pico8"
+
+ configurator_generic_dialog "RetroDECK 0.7.0b Upgrade" "Would you like to install the official controller profile?\n(this will reset your custom emulator settings)\n\nAfter installation you can enable it from from Controller Settings -> Templates."
+ if [[ $(configurator_generic_question_dialog "RetroDECK Official Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then
+ install_retrodeck_controller_profile
+ prepare_emulator "reset" "all"
+ fi
+ fi
+ if [[ $prev_version -le "071" ]]; then
+ # In version 0.7.1b, the following changes were made that required config file updates/reset or other changes to the filesystem:
+ # - Force update PPSSPP standalone keybinds for L/R.
+ set_setting_value "$ppssppcontrolsconf" "L" "1-45,10-193" "ppsspp" "ControlMapping"
+ set_setting_value "$ppssppcontrolsconf" "R" "1-51,10-192" "ppsspp" "ControlMapping"
+ fi
+
+ # The following commands are run every time.
+
+ if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
+ rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/"
+ fi
+ if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then # Refresh installed textures if they have been enabled
+ rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/"
+ fi
+
+ if [[ -f "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" ]]; then # If RetroDECK controller profile has been previously installed
+ install_retrodeck_controller_profile
+ fi
+
+ update_splashscreens
+ deploy_helper_files
+ build_retrodeck_current_presets
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Finishing Upgrade" \
+ --text="RetroDECK is finishing the upgrade process, please wait."
+
+ version=$hard_version
+ conf_write
+
+ if grep -qF "cooker" <<< $hard_version; then
+ changelog_dialog "$(echo $version | cut -d'-' -f2)"
+ else
+ changelog_dialog "$version"
+ fi
+}
diff --git a/functions/prepare_emulator.sh b/functions/prepare_emulator.sh
new file mode 100644
index 00000000..0f880fe3
--- /dev/null
+++ b/functions/prepare_emulator.sh
@@ -0,0 +1,674 @@
+#!/bin/bash
+
+prepare_emulator() {
+ # This function will perform one of several actions on one or more emulators
+ # The actions currently include "reset" and "postmove"
+ # The "reset" action will initialize the emulator
+ # The "postmove" action will update the emulator settings after one or more RetroDECK folders were moved
+ # An emulator can be called by name, by parent folder name in the /var/config root or use the option "all" to perform the action on all emulators equally
+ # The function will also behave differently depending on if the initial request was from the Configurator, the CLI interface or a normal function call if needed
+ # USAGE: prepare_emulator "$action" "$emulator" "$call_source(optional)"
+
+ action="$1"
+ emulator="$2"
+ call_source="$3"
+
+ if [[ "$emulator" == "retrodeck" ]]; then
+ if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them
+ while read -r config_line; do
+ local current_setting_name=$(get_setting_name "$config_line" "retrodeck")
+ if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations
+ local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths")
+ eval "$current_setting_name=$rdhome/$(basename $current_setting_value)"
+ mkdir -p "$rdhome/$(basename $current_setting_value)"
+ fi
+ done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
+ fi
+ if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move
+ while read -r config_line; do
+ local current_setting_name=$(get_setting_name "$config_line" "retrodeck")
+ if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations
+ local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths")
+ if [[ -d "$rdhome/$(basename $current_setting_value)" ]]; then # If the folder exists at the new ~/retrodeck location
+ eval "$current_setting_name=$rdhome/$(basename $current_setting_value)"
+ fi
+ fi
+ done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(emulationstation|all)$ ]]; then # For use after ESDE-related folders are moved or a reset
+ if [[ "$action" == "reset" ]]; then
+ rm -rf /var/config/emulationstation/
+ mkdir -p /var/config/emulationstation/.emulationstation/
+ cp -f /app/retrodeck/es_settings.xml /var/config/emulationstation/.emulationstation/es_settings.xml
+ set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
+ set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
+ set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
+ emulationstation --home /var/config/emulationstation --create-system-dirs
+ update_splashscreens
+ dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists"
+ fi
+ if [[ "$action" == "postmove" ]]; then
+ set_setting_value "$es_settings" "ROMDirectory" "$roms_folder" "es_settings"
+ set_setting_value "$es_settings" "MediaDirectory" "$media_folder" "es_settings"
+ set_setting_value "$es_settings" "UserThemeDirectory" "$themes_folder" "es_settings"
+ dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(retroarch|RetroArch|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/retroarch"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/retroarch"
+ cp -fv $emuconfigs/retroarch/retroarch.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
+ cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg "$multi_user_data_folder/$SteamAppUser/config/retroarch/"
+ else # Single-user actions
+ rm -rf /var/config/retroarch
+ mkdir -p /var/config/retroarch
+ dir_prep "$bios_folder" "/var/config/retroarch/system"
+ dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs"
+ mkdir -pv /var/config/retroarch/shaders/
+ cp -rf /app/share/libretro/shaders /var/config/retroarch/
+ dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
+ rsync -rlD --mkpath "/app/share/libretro/cores/" "/var/config/retroarch/cores/"
+ cp -fv $emuconfigs/retroarch/retroarch.cfg /var/config/retroarch/
+ cp -fv $emuconfigs/retroarch/retroarch-core-options.cfg /var/config/retroarch/
+ rsync -rlD --mkpath "$emuconfigs/retroarch/core-overrides/" "/var/config/retroarch/config/"
+ rsync -rlD --mkpath "$emuconfigs/defaults/retrodeck/presets/remaps/" "/var/config/retroarch/config/remaps/"
+ dir_prep "$borders_folder" "/var/config/retroarch/overlays/borders"
+ rsync -rlD --mkpath "/app/retrodeck/emu-configs/retroarch/borders/" "/var/config/retroarch/overlays/borders/"
+ set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch"
+ set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch"
+ set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch"
+ set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch"
+ fi
+ # Shared actions
+
+ # PPSSPP
+ echo "--------------------------------"
+ echo "Initializing PPSSPP_LIBRETRO"
+ echo "--------------------------------"
+ if [ -d $bios_folder/PPSSPP/flash0/font ]
+ then
+ mv -fv $bios_folder/PPSSPP/flash0/font $bios_folder/PPSSPP/flash0/font.bak
+ fi
+ cp -rf "/app/retrodeck/extras/PPSSPP" "$bios_folder/PPSSPP"
+ if [ -d $bios_folder/PPSSPP/flash0/font.bak ]
+ then
+ mv -f $bios_folder/PPSSPP/flash0/font.bak $bios_folder/PPSSPP/flash0/font
+ fi
+
+ # MSX / SVI / ColecoVision / SG-1000
+ echo "-----------------------------------------------------------"
+ echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO"
+ echo "-----------------------------------------------------------"
+ cp -rf "/app/retrodeck/extras/MSX/Databases" "$bios_folder/Databases"
+ cp -rf "/app/retrodeck/extras/MSX/Machines" "$bios_folder/Machines"
+
+ # AMIGA
+ echo "-----------------------------------------------------------"
+ echo "Initializing AMIGA LIBRETRO"
+ echo "-----------------------------------------------------------"
+ cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so"
+
+ dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos")" "retrodeck" "cheevos"
+ set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore"
+ set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "genesis" "$(get_setting_value "$rd_defaults" "genesis" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "gg" "$(get_setting_value "$rd_defaults" "gg" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "borders")" "retrodeck" "borders"
+ set_setting_value "$rd_conf" "genesis" "$(get_setting_value "$rd_defaults" "genesis" "retrodeck" "widescreen")" "retrodeck" "widescreen"
+ set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "n64" "retrodeck" "widescreen")" "retrodeck" "widescreen"
+ set_setting_value "$rd_conf" "psx_ra" "$(get_setting_value "$rd_defaults" "psx_ra" "retrodeck" "widescreen")" "retrodeck" "widescreen"
+ set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "snes" "retrodeck" "widescreen")" "retrodeck" "widescreen"
+ set_setting_value "$rd_conf" "gb" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "gba" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "gbc" "$(get_setting_value "$rd_defaults" "gbc" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "n64" "$(get_setting_value "$rd_defaults" "gb" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "snes" "$(get_setting_value "$rd_defaults" "gba" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_load")" "retrodeck" "savestate_auto_load"
+ set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$bios_folder" "/var/config/retroarch/system"
+ dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs"
+ dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
+ dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
+ dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
+ set_setting_value "$raconf" "savefile_directory" "$saves_folder" "retroarch"
+ set_setting_value "$raconf" "savestate_directory" "$states_folder" "retroarch"
+ set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch"
+ set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(cemu|Cemu|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing CEMU"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/Cemu"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Cemu"
+ cp -fr "$emuconfigs/cemu/"* "$multi_user_data_folder/$SteamAppUser/config/Cemu/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "mlc_path" "$bios_folder/cemu" "cemu"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/Cemu/settings.ini" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/Cemu" "/var/config/Cemu"
+ else
+ rm -rf /var/config/Cemu
+ mkdir -pv /var/config/Cemu/
+ cp -fr "$emuconfigs/cemu/"* /var/config/Cemu/
+ set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu"
+ set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths"
+ fi
+ # Shared actions
+ dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
+ set_setting_value "$cemuconf" "mlc_path" "$bios_folder/cemu" "cemu"
+ set_setting_value "$cemuconf" "Entry" "$roms_folder/wiiu" "cemu" "GamePaths"
+ dir_prep "$saves_folder/wiiu/cemu" "$bios_folder/cemu/usr/save"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(citra|citra-emu|Citra|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing CITRA"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/citra-emu"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/citra-emu"
+ cp -fv $emuconfigs/citra/qt-config.ini "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/citra-emu/qt-config.ini" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/citra-emu" "/var/config/citra-emu"
+ else # Single-user actions
+ rm -rf /var/config/citra-emu
+ mkdir -pv /var/config/citra-emu/
+ cp -f $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini
+ set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
+ set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
+ set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
+ set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI"
+ fi
+ # Shared actions
+ mkdir -pv "$saves_folder/n3ds/citra/nand/"
+ mkdir -pv "$saves_folder/n3ds/citra/sdmc/"
+ dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata"
+ dir_prep "$logs_folder/citra" "/var/data/citra-emu/log"
+ dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
+ dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata"
+ dir_prep "$rdhome/.logs/citra" "/var/data/citra-emu/log"
+ dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
+ dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
+ set_setting_value "$citraconf" "nand_directory" "$saves_folder/n3ds/citra/nand/" "citra" "Data%20Storage"
+ set_setting_value "$citraconf" "sdmc_directory" "$saves_folder/n3ds/citra/sdmc/" "citra" "Data%20Storage"
+ set_setting_value "$citraconf" "Paths\gamedirs\3\path" "$roms_folder/n3ds" "citra" "UI"
+ set_setting_value "$citraconf" "Paths\screenshotPath" "$screenshots_folder" "citra" "UI"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(dolphin|dolphin-emu|Dolphin|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing DOLPHIN"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu"
+ cp -fvr "$emuconfigs/dolphin/"* "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "BIOS" "$bios_folder" "dolphin" "GBA"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "SavesPath" "$saves_folder/gba" "dolphin" "GBA"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "ISOPath1" "$roms_folder/gc" "dolphin" "General"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu/Dolphin.ini" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/dolphin-emu" "/var/config/dolphin-emu"
+ else # Single-user actions
+ rm -rf /var/config/dolphin-emu
+ mkdir -pv /var/config/dolphin-emu/
+ cp -fvr "$emuconfigs/dolphin/"* /var/config/dolphin-emu/
+ set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA"
+ set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA"
+ set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
+ set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General"
+ set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General"
+ fi
+ # Shared actions
+ dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR" # TODO: Multi-user one-off
+ dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA" # TODO: Multi-user one-off
+ dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP" # TODO: Multi-user one-off
+ dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots"
+ dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves"
+ dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii"
+ dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "dolphin" "$(get_setting_value "$rd_defaults" "dolphin" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$saves_folder/gc/dolphin/EU" "/var/data/dolphin-emu/GC/EUR"
+ dir_prep "$saves_folder/gc/dolphin/US" "/var/data/dolphin-emu/GC/USA"
+ dir_prep "$saves_folder/gc/dolphin/JP" "/var/data/dolphin-emu/GC/JAP"
+ dir_prep "$screenshots_folder" "/var/data/dolphin-emu/ScreenShots"
+ dir_prep "$states_folder/dolphin" "/var/data/dolphin-emu/StateSaves"
+ dir_prep "$saves_folder/wii/dolphin" "/var/data/dolphin-emu/Wii"
+ dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
+ set_setting_value "$dolphinconf" "BIOS" "$bios_folder" "dolphin" "GBA"
+ set_setting_value "$dolphinconf" "SavesPath" "$saves_folder/gba" "dolphin" "GBA"
+ set_setting_value "$dolphinconf" "ISOPath0" "$roms_folder/wii" "dolphin" "General"
+ set_setting_value "$dolphinconf" "ISOPath1" "$roms_folder/gc" "dolphin" "General"
+ set_setting_value "$dolphinconf" "WiiSDCardPath" "$saves_folder/wii/dolphin/sd.raw" "dolphin" "General"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(duckstation|Duckstation|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing DUCKSTATION"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/duckstation"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/data/duckstation/"
+ cp -fv "$emuconfigs/duckstation/"* "$multi_user_data_folder/$SteamAppUser/data/duckstation"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "SearchDirectory" "$bios_folder" "duckstation" "BIOS"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/data/duckstation/settings.ini" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/duckstation" "/var/config/duckstation"
+ else # Single-user actions
+ rm -rf /var/config/duckstation
+ mkdir -p /var/config/duckstation/
+ cp -fv "$emuconfigs/duckstation/"* /var/config/duckstation
+ set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS"
+ set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
+ fi
+ # Shared actions
+ dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed
+ dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "cheevos")" "retrodeck" "cheevos"
+ set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore"
+ set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save"
+ set_setting_value "$rd_conf" "duckstation" "$(get_setting_value "$rd_defaults" "duckstation" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ set_setting_value "$duckstationconf" "SearchDirectory" "$bios_folder" "duckstation" "BIOS"
+ set_setting_value "$duckstationconf" "Card1Path" "$saves_folder/psx/duckstation/memcards/shared_card_1.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Card2Path" "$saves_folder/psx/duckstation/memcards/shared_card_2.mcd" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "Directory" "$saves_folder/psx/duckstation/memcards" "duckstation" "MemoryCards"
+ set_setting_value "$duckstationconf" "RecursivePaths" "$roms_folder/psx" "duckstation" "GameList"
+ dir_prep "$states_folder/psx/duckstation" "/var/config/duckstation/savestates" # This is hard-coded in Duckstation, always needed
+ dir_prep "$texture_packs_folder/Duckstation" "/var/config/duckstation/textures"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(melonds|melonDS|MelonDS|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing MELONDS"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/melonDS"
+ mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/melonDS/"
+ cp -fvr $emuconfigs/melonds/melonDS.ini "$multi_user_data_folder/$SteamAppUser/config/melonDS/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SaveFilePath" "$saves_folder/nds/melonds" "melonds"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/melonDS/melonDS.ini" "SavestatePath" "$states_folder/nds/melonds" "melonds"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/melonDS" "/var/config/melonDS"
+ else # Single-user actions
+ rm -rf /var/config/melonDS
+ mkdir -pv /var/config/melonDS/
+ cp -fvr $emuconfigs/melonds/melonDS.ini /var/config/melonDS/
+ set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
+ set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
+ set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
+ set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds"
+ set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds"
+ fi
+ # Shared actions
+ mkdir -pv "$saves_folder/nds/melonds"
+ mkdir -pv "$states_folder/nds/melonds"
+ dir_prep "$bios_folder" "/var/config/melonDS/bios"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$bios_folder" "/var/config/melonDS/bios"
+ set_setting_value "$melondsconf" "BIOS9Path" "$bios_folder/bios9.bin" "melonds"
+ set_setting_value "$melondsconf" "BIOS7Path" "$bios_folder/bios7.bin" "melonds"
+ set_setting_value "$melondsconf" "FirmwarePath" "$bios_folder/firmware.bin" "melonds"
+ set_setting_value "$melondsconf" "SaveFilePath" "$saves_folder/nds/melonds" "melonds"
+ set_setting_value "$melondsconf" "SavestatePath" "$states_folder/nds/melonds" "melonds"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(pcsx2|PCSX2|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing PCSX2"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/PCSX2"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis"
+ cp -fvr "$emuconfigs/PCSX2/"* "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Bios" "$bios_folder" "pcsx2" "Folders"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "Snapshots" "$screenshots_folder" "pcsx2" "Folders"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/PCSX2/inis/PCSX2.ini" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/PCSX2" "/var/config/PCSX2"
+ else # Single-user actions
+ rm -rf /var/config/PCSX2
+ mkdir -pv "/var/config/PCSX2/inis"
+ cp -fvr "$emuconfigs/PCSX2/"* /var/config/PCSX2/inis/
+ set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
+ fi
+ # Shared actions
+ mkdir -pv "$saves_folder/ps2/pcsx2/memcards"
+ mkdir -pv "$states_folder/ps2/pcsx2"
+ dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "cheevos")" "retrodeck" "cheevos"
+ set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore"
+ set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "savestate_auto_save")" "retrodeck" "savestate_auto_save"
+ set_setting_value "$rd_conf" "pcsx2" "$(get_setting_value "$rd_defaults" "pcsx2" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ set_setting_value "$pcsx2conf" "Bios" "$bios_folder" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "Snapshots" "$screenshots_folder" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "SaveStates" "$states_folder/ps2/pcsx2" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "MemoryCards" "$saves_folder/ps2/pcsx2/memcards" "pcsx2" "Folders"
+ set_setting_value "$pcsx2conf" "RecursivePaths" "$roms_folder/ps2" "pcsx2" "GameList"
+ dir_prep "$texture_packs_folder/PCSX2" "/var/config/PCSX2/textures"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(pico8|pico-8|all)$ ]]; then
+ if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then
+ dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
+ dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
+ dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder
+ cp -fv "$emuconfigs/pico-8/config.txt" "$bios_folder/pico-8/config.txt"
+ cp -fv "$emuconfigs/pico-8/sdl_controllers.txt" "$bios_folder/pico-8/sdl_controllers.txt"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(ppsspp|PPSSPP|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing PPSSPPSDL"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/ppsspp"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/"
+ cp -fv "$emuconfigs/ppssppsdl/"* "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/ppsspp/PSP/SYSTEM/ppsspp.ini" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/ppsspp" "/var/config/ppsspp"
+ else # Single-user actions
+ rm -rf /var/config/ppsspp
+ mkdir -p /var/config/ppsspp/PSP/SYSTEM/
+ cp -fv "$emuconfigs/ppssppsdl/"* /var/config/ppsspp/PSP/SYSTEM/
+ set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
+ fi
+ # Shared actions
+ dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
+ dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
+ dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ set_setting_value "$ppssppconf" "CurrentDirectory" "$roms_folder/psp" "ppsspp" "General"
+ dir_prep "$saves_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/SAVEDATA"
+ dir_prep "$states_folder/PSP/PPSSPP-SA" "/var/config/ppsspp/PSP/PPSSPP_STATE"
+ dir_prep "$texture_packs_folder/PPSSPP" "/var/config/ppsspp/PSP/TEXTURES"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(primehack|Primehack|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing Primehack"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/primehack"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/primehack"
+ cp -fvr "$emuconfigs/primehack/"* "$multi_user_data_folder/$SteamAppUser/config/primehack/"
+ set_setting_value ""$multi_user_data_folder/$SteamAppUser/config/primehack/Dolphin.ini"" "ISOPath0" "$roms_folder/gc" "primehack" "General"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/primehack" "/var/config/primehack"
+ else # Single-user actions
+ rm -rf /var/config/primehack
+ mkdir -pv /var/config/primehack/
+ cp -fvr "$emuconfigs/primehack/"* /var/config/primehack/
+ set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General"
+ fi
+ # Shared actions
+ dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
+ dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
+ dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
+ dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots"
+ dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves"
+ mkdir -pv /var/data/primehack/Wii/
+ dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii"
+ dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "primehack" "$(get_setting_value "$rd_defaults" "primehack" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$saves_folder/gc/primehack/EU" "/var/data/primehack/GC/EUR"
+ dir_prep "$saves_folder/gc/primehack/US" "/var/data/primehack/GC/USA"
+ dir_prep "$saves_folder/gc/primehack/JP" "/var/data/primehack/GC/JAP"
+ dir_prep "$screenshots_folder" "/var/data/primehack/ScreenShots"
+ dir_prep "$states_folder/primehack" "/var/data/primehack/StateSaves"
+ dir_prep "$saves_folder/wii/primehack" "/var/data/primehack/Wii/"
+ dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
+ dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
+ set_setting_value "$primehackconf" "ISOPath0" "$roms_folder/gc" "primehack" "General"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(rpcs3|RPCS3|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing RPCS3"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/rpcs3"
+ mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/rpcs3/"
+ cp -fr "$emuconfigs/rpcs3/"* "$multi_user_data_folder/$SteamAppUser/config/rpcs3/"
+ # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name.
+ sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/rpcs3/vfs.yml" "/games/" "$roms_folder/ps3/" "rpcs3"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/rpcs3" "/var/config/rpcs3"
+ else # Single-user actions
+ rm -rf /var/config/rpcs3
+ mkdir -pv /var/config/rpcs3/
+ cp -fr "$emuconfigs/rpcs3/"* /var/config/rpcs3/
+ # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name.
+ sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3/"'^' "$rpcs3vfsconf"
+ set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3/" "rpcs3"
+ dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3"
+ fi
+ # Shared actions
+ mkdir -p "$bios_folder/rpcs3/dev_hdd0"
+ mkdir -p "$bios_folder/rpcs3/dev_hdd1"
+ mkdir -p "$bios_folder/rpcs3/dev_flash"
+ mkdir -p "$bios_folder/rpcs3/dev_flash2"
+ mkdir -p "$bios_folder/rpcs3/dev_flash3"
+ mkdir -p "$bios_folder/rpcs3/dev_bdvd"
+ mkdir -p "$bios_folder/rpcs3/dev_usb000"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ # This is an unfortunate one-off because set_setting_value does not currently support settings with $ in the name.
+ sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf"
+ set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(ryujunx|Ryujinx|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing RYUJINX"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/Ryujinx"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/system"
+ cp -fv $emuconfigs/ryujinx/* "$multi_user_data_folder/$SteamAppUser/config/Ryujinx"
+ sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$multi_user_data_folder/$SteamAppUser/config/Ryujinx/Config.json"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/Ryujinx" "/var/config/Ryujinx"
+ else
+ # removing config directory to wipe legacy files
+ rm -rf /var/config/Ryujinx
+ mkdir -p /var/config/Ryujinx/system
+ cp -fv $emuconfigs/ryujinx/* /var/config/Ryujinx
+ sed -i 's#/home/deck/retrodeck#'$rdhome'#g' "$ryujinxconf"
+ fi
+ fi
+ if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
+ dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' "$ryujinxconf" # This is an unfortunate one-off because set_setting_value does not currently support JSON
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(xemu|XEMU|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "------------------------"
+ echo "Initializing XEMU"
+ echo "------------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf /var/config/xemu
+ rm -rf /var/data/xemu
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/xemu"
+ mkdir -pv "$multi_user_data_folder/$SteamAppUser/config/xemu/"
+ cp -fv $emuconfigs/xemu/xemu.toml "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/xemu/xemu.toml" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/config/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/xemu" "/var/data/xemu/xemu"
+ else # Single-user actions
+ rm -rf /var/config/xemu
+ rm -rf /var/data/xemu
+ dir_prep "/var/config/xemu" "/var/data/xemu/xemu" # Creating config folder in /var/config for consistentcy and linking back to original location where emulator will look
+ cp -fv $emuconfigs/xemu/xemu.toml "$xemuconf"
+ set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
+ set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files"
+ fi # Shared actions
+ mkdir -pv $saves_folder/xbox/xemu/
+ # Preparing HD dummy Image if the image is not found
+ if [ ! -f $bios_folder/xbox_hdd.qcow2 ]
+ then
+ cp -f "/app/retrodeck/extras/XEMU/xbox_hdd.qcow2" "$bios_folder/xbox_hdd.qcow2"
+ fi
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ set_setting_value "$xemuconf" "screenshot_dir" "'$screenshots_folder'" "xemu" "General"
+ set_setting_value "$xemuconf" "bootrom_path" "'$bios_folder/mcpx_1.0.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "flashrom_path" "'$bios_folder/Complex.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "eeprom_path" "'$saves_folder/xbox/xemu/xbox-eeprom.bin'" "xemu" "sys.files"
+ set_setting_value "$xemuconf" "hdd_path" "'$bios_folder/xbox_hdd.qcow2'" "xemu" "sys.files"
+ fi
+ fi
+
+ if [[ "$emulator" =~ ^(yuzu|Yuzu|all)$ ]]; then
+ if [[ "$action" == "reset" ]]; then # Run reset-only commands
+ echo "----------------------"
+ echo "Initializing YUZU"
+ echo "----------------------"
+ if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
+ rm -rf "$multi_user_data_folder/$SteamAppUser/config/yuzu"
+ mkdir -p "$multi_user_data_folder/$SteamAppUser/config/yuzu"
+ cp -fvr "$emuconfigs/yuzu/"* "$multi_user_data_folder/$SteamAppUser/config/yuzu/"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
+ set_setting_value "$multi_user_data_folder/$SteamAppUser/config/yuzu/qt-config.ini" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI"
+ dir_prep "$multi_user_data_folder/$SteamAppUser/config/yuzu" "/var/config/yuzu"
+ else # Single-user actions
+ rm -rf /var/config/yuzu
+ mkdir -pv /var/config/yuzu/
+ cp -fvr "$emuconfigs/yuzu/"* /var/config/yuzu/
+ set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage"
+ set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
+ set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
+ set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI"
+ fi
+ # Shared actions
+ dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand"
+ dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc"
+ dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys"
+ dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered"
+ dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log"
+ dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots"
+ dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
+ mkdir -pv "$rdhome/customs/yuzu"
+ # removing dead symlinks as they were present in a past version
+ if [ -d $bios_folder/switch ]; then
+ find $bios_folder/switch -xtype l -exec rm {} \;
+ fi
+
+ # Reset default preset settings
+ set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "nintendo_button_layout")" "retrodeck" "nintendo_button_layout"
+ set_setting_value "$rd_conf" "yuzu" "$(get_setting_value "$rd_defaults" "yuzu" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
+ fi
+ if [[ "$action" == "postmove" ]]; then # Run only post-move commands
+ dir_prep "$bios_folder/switch/keys" "/var/data/yuzu/keys"
+ dir_prep "$bios_folder/switch/registered" "/var/data/yuzu/nand/system/Contents/registered"
+ dir_prep "$saves_folder/switch/yuzu/nand" "/var/data/yuzu/nand"
+ dir_prep "$saves_folder/switch/yuzu/sdmc" "/var/data/yuzu/sdmc"
+ dir_prep "$logs_folder/yuzu" "/var/data/yuzu/log"
+ dir_prep "$screenshots_folder" "/var/data/yuzu/screenshots"
+ dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
+ set_setting_value "$yuzuconf" "nand_directory" "$saves_folder/switch/yuzu/nand" "yuzu" "Data%20Storage"
+ set_setting_value "$yuzuconf" "sdmc_directory" "$saves_folder/switch/yuzu/sdmc" "yuzu" "Data%20Storage"
+ set_setting_value "$yuzuconf" "Paths\gamedirs\4\path" "$roms_folder/switch" "yuzu" "UI"
+ set_setting_value "$yuzuconf" "Screenshots\screenshot_path" "$screenshots_folder" "yuzu" "UI"
+ fi
+ fi
+
+ # Update presets for all emulators after any reset or move
+ if [[ ! "$emulator" == "retrodeck" ]]; then
+ build_retrodeck_current_presets
+ fi
+}
diff --git a/functions/presets.sh b/functions/presets.sh
new file mode 100644
index 00000000..664b7893
--- /dev/null
+++ b/functions/presets.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+change_preset_dialog() {
+ # This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more
+ # USAGE: change_preset_dialog "$preset"
+
+ local preset="$1"
+ pretty_preset_name=${preset//_/ } # Preset name prettification
+ pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification
+ local current_preset_settings=()
+ local current_enabled_systems=()
+ local current_disabled_systems=()
+ local changed_systems=()
+ local changed_presets=()
+ local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
+
+ while IFS= read -r config_line
+ do
+ system_name=$(get_setting_name "$config_line" "retrodeck")
+ all_systems=("${all_systems[@]}" "$system_name")
+ system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset")
+ if [[ "$system_value" == "true" ]]; then
+ current_enabled_systems=("${current_enabled_systems[@]}" "$system_name")
+ elif [[ "$system_value" == "false" ]]; then
+ current_disabled_systems=("${current_disabled_systems[@]}" "$system_name")
+ fi
+ current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name")
+ done < <(printf '%s\n' "$section_results")
+
+ choice=$(zenity \
+ --list --width=1200 --height=720 \
+ --checklist \
+ --separator="," \
+ --hide-column=3 --print-column=3 \
+ --text="Enable $pretty_preset_name:" \
+ --column "Enabled" \
+ --column "Emulator" \
+ --column "internal_system_name" \
+ "${current_preset_settings[@]}")
+
+ local rc=$?
+
+ if [[ ! -z $choice || "$rc" == 0 ]]; then
+ (
+ IFS="," read -ra choices <<< "$choice"
+ for emulator in "${all_systems[@]}"; do
+ if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then
+ changed_systems=("${changed_systems[@]}" "$emulator")
+ if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then
+ changed_presets=("${changed_presets[@]}" "$preset")
+ fi
+ set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset"
+ # Check for conflicting presets for this system
+ while IFS=: read -r preset_being_checked known_incompatible_preset; do
+ if [[ "$preset" == "$preset_being_checked" ]]; then
+ if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then
+ changed_presets=("${changed_presets[@]}" "$known_incompatible_preset")
+ set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset"
+ fi
+ fi
+ done < "$incompatible_presets_reference_list"
+ fi
+ if [[ ! " ${choices[*]} " =~ " ${emulator} " && ! " ${current_disabled_systems[*]} " =~ " ${emulator} " ]]; then
+ changed_systems=("${changed_systems[@]}" "$emulator")
+ if [[ ! " ${changed_presets[*]} " =~ " ${preset} " ]]; then
+ changed_presets=("${changed_presets[@]}" "$preset")
+ fi
+ set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$preset"
+ fi
+ done
+ for emulator in "${changed_systems[@]}"; do
+ build_preset_config $emulator ${changed_presets[*]}
+ done
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - Presets Configuration" \
+ --text="Setting up your presets, please wait..."
+ else
+ echo "No choices made"
+ fi
+}
+
+build_preset_config() {
+ # This function will apply one or more presets for a given system, as listed in retrodeck.cfg
+ # USAGE: build_preset_config "system name" "preset class 1" "preset class 2" "preset class 3"
+
+ local system_being_changed="$1"
+ shift
+ local presets_being_changed="$*"
+ for current_preset in $presets_being_changed
+ do
+ local preset_section=$(sed -n '/\['"$current_preset"'\]/, /\[/{ /\['"$current_preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
+ while IFS= read -r system_line
+ do
+ local read_system_name=$(get_setting_name "$system_line")
+ if [[ "$read_system_name" == "$system_being_changed" ]]; then
+ local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset")
+ while IFS='^' read -r action read_preset read_setting_name new_setting_value section
+ do
+ case "$action" in
+
+ "config_file_format" )
+ if [[ "$read_preset" == "retroarch-all" ]]; then
+ local retroarch_all="true"
+ local read_config_format="retroarch"
+ else
+ local read_config_format="$read_preset"
+ fi
+ ;;
+
+ "target_file" )
+ if [[ "$read_preset" = \$* ]]; then
+ eval read_preset=$read_preset
+ fi
+ local read_target_file="$read_preset"
+ ;;
+
+ "defaults_file" )
+ if [[ "$read_preset" = \$* ]]; then
+ eval read_preset=$read_preset
+ fi
+ local read_defaults_file="$read_preset"
+ ;;
+
+ "change" )
+ if [[ "$read_preset" == "$current_preset" ]]; then
+ if [[ "$read_system_enabled" == "true" ]]; then
+ if [[ "$new_setting_value" = \$* ]]; then
+ eval new_setting_value=$new_setting_value
+ fi
+ if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then # If this is a RetroArch core, generate the override file
+ if [[ ! -f "$read_target_file" ]]; then
+ mkdir -p "$(realpath "$(dirname "$read_target_file")")"
+ echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file"
+ else
+ if [[ -z $(grep "$read_setting_name" "$read_target_file") ]]; then
+ add_setting "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section"
+ else
+ set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section"
+ fi
+ fi
+ else
+ set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section"
+ fi
+ else
+ if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then
+ if [[ -f "$read_target_file" ]]; then
+ delete_setting "$read_target_file" "$read_setting_name" "$read_config_format" "$section"
+ if [[ -z $(cat "$read_target_file") ]]; then # If the override file is empty
+ rm -f "$read_target_file"
+ fi
+ if [[ -z $(ls -1 "$(dirname "$read_target_file")") ]]; then # If the override folder is empty
+ rmdir "$(realpath "$(dirname "$read_target_file")")"
+ fi
+ fi
+ else
+ local default_setting_value=$(get_setting_value "$read_defaults_file" "$read_setting_name" "$read_config_format" "$section")
+ set_setting_value "$read_target_file" "$read_setting_name" "$default_setting_value" "$read_config_format" "$section"
+ fi
+ fi
+ fi
+ ;;
+
+ "enable" )
+ if [[ "$read_preset" == "$current_preset" ]]; then
+ if [[ "$read_system_enabled" == "true" ]]; then
+ enable_file "$read_setting_name"
+ else
+ disable_file "$read_setting_name"
+ fi
+ fi
+ ;;
+
+ * )
+ echo "Other data: $action $read_preset $read_setting_name $new_setting_value $section" # DEBUG
+ ;;
+
+ esac
+ done < <(cat "$presets_dir/$read_system_name"_presets.cfg)
+ fi
+ done < <(printf '%s\n' "$preset_section")
+ done
+}
+
+build_retrodeck_current_presets() {
+ # This function will read the presets sections of the retrodeck.cfg file and build the default state
+ # This can also be used to build the "current" state post-update after adding new systems
+ # USAGE: build_retrodeck_current_presets
+
+ while IFS= read -r current_setting_line # Read the existing retrodeck.cfg
+ do
+ if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it
+ if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header
+ local current_section=$(sed 's^[][]^^g' <<< $current_setting_line) # Remove brackets from section name
+ else
+ if [[ ! ("$current_section" == "" || "$current_section" == "paths" || "$current_section" == "options" || "$current_section" == "cheevos" || "$current_section" == "cheevos_hardcore") ]]; then
+ local system_name=$(get_setting_name "$current_setting_line" "retrodeck") # Read the variable name from the current line
+ local system_enabled=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$current_section") # Read the variables value from active retrodeck.cfg
+ if [[ "$system_enabled" == "true" ]]; then
+ build_preset_config "$system_name" "$current_section"
+ fi
+ fi
+ fi
+ fi
+ done < $rd_conf
+}
diff --git a/net.retrodeck.retrodeck.Configurator.desktop b/net.retrodeck.retrodeck.Configurator.desktop
index ce38bb89..89c01fff 100644
--- a/net.retrodeck.retrodeck.Configurator.desktop
+++ b/net.retrodeck.retrodeck.Configurator.desktop
@@ -4,7 +4,7 @@ GenericName=RetroDECK Configuration Utility
Type=Application
Comment=A handy tool to change common RetroDECK settings
Icon=net.retrodeck.retrodeck
-Exec=--configurator
+Exec=/app/tools/configurator.sh
Terminal=false
StartupNotify=false
Keywords=multi;engine;emulator;standalone;steam;deck
diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml
index 431a0009..57db832a 100644
--- a/net.retrodeck.retrodeck.appdata.xml
+++ b/net.retrodeck.retrodeck.appdata.xml
@@ -65,17 +65,142 @@
GPL-3.0
CC0-1.0
-
- https://github.com/XargonWan/RetroDECK/releases/tag/0.6.4b
+
+ https://github.com/XargonWan/RetroDECK/releases/tag/0.8.0b
- New features - General:
+ News:
- - Added CEMU, WiiU Emulator
- - Dolphin (Standalone) is now default for GameCube and Wii
+ - Welcome to cooker 0.8.0b!
+
+
+
+
+ https://github.com/XargonWan/RetroDECK/releases/tag/0.7.2b
+
+ Updates:
+
+ - All Emulators, ES-DE and the included theme have been updated.
+
+ Bugfixes and other changes:
+
+ - Added helper .txt files to the mod and texture pack folders.
+ - The builtin changelog is now scrollable.
+ - Gameboy Advanced and Game Gear integer scaling changes based on feedback.
+ - Optimized and retooled the patching process for ES-DE.
+ - Various fixes and optimizations to the RetroDECK build process.
+
+ Known issues:
+
+ - PPSSPP now have Retroachievements, but it is right now not configurable in the configurator (as it works a bit different the other emulators), we hope to have a solution for it at a later date. You can still login / logout / enable hardcore mode normally from the PPSSPP interface.
+ - Quitting the RetroArch GB core with the radial function makes the core swap the palette.
+ - Borders sometimes are disappearing, a possible workaround is to reset RetroArch from the configurator.
+
+
+
+
+ https://github.com/XargonWan/RetroDECK/releases/tag/0.7.1b
+
+ Information:
+
+ - Steam Deck users update RetroDECK from Discover in Desktop Mode.
+ - Don't forget to reapply the latest controller layout: Go into the Templates tab and reapply the new profile ending with 0.7.1b (there is no need to reinstall the entire layout from the Configurator).
Bug fixes and other changes:
- - PLACEHOLDER
+ - Fixed an issue to make sure the RD controller layout file at update with each RD update.
+ - Fixed an issue with PPSSPP that made L and R incorrectly bound.
+ - Fixed an issue in the Configurator that prevented the Yuzu preset for swapping A/B X/Y from working.
+ - Fixed a notification issue on the latest SteamOS Beta releases.
+ - Fixed an rsync permissions issue in the RetroDECK Framework.
+ - Updated Yuzu presets to handle new config syntax in the RetroDECK Framework.
+ - Changed auto-update to notification only, until permissions error can be worked out.
+ - Added some new pixelart icons by ItzSelenux (pixelitos-icon-theme)
+
+ Updates:
+ All Emulators and ES-DE have been updated
+ Steam Deck - Global Controller Layout:
+ We have done some changes based on community feedback
+
+ - Select is now a hotkey trigger while pressing it down, L4 and R4 are still triggers as well.
+ - The RetroArch combo of Select + Start = Quit now works on many SA-Emulators.
+ - Open Menu is removed from Select.
+ - R5 = A button (this allows for great Wii controls on the right touchpad and pressing down the R5 for A).
+ - L5 = B button.
+
+ Global hotkey changes:
+
+ - Open Menu is on Y.
+ - Increase Emulation Speed is on Dpad-UP.
+ - Decrease Emulation Speed is on Dpad-Down.
+ - Fullscreen OFF command is removed (as emulators have migrated to toggle).
+
+ Known issues:
+
+ - The built-in auto-updater is not working (we are working on it). Discover is ok.
+ - Some emulators don't have hotkey support or have bugs affecting their hotkeys.
+
+
+
+
+ https://github.com/XargonWan/RetroDECK/releases/tag/0.7.0b
+
+ New - System features:
+
+ - The Configurator has a new home inside the ES-DE main menu and thus the tools menu has been removed.
+ - The Configurator also has a .deskop icon for ease of access for both Steam Deck desktop mode and Linux Desktop users.
+ - Added RetroDECK auto updates on launch, this can be disabled from the Configurator this works in Game Mode for the Steam Deck.
+
+ New RetroDECK Configurator features:
+
+ - The Configurator has a new structure, with more menus and options.
+ - The compression tool has been updated to allow for even more formats such as .zip in addition to the standard disc-based formats for certain systems.
+ - The compression tool has been updated to have an even stronger verification before a compression job starts.
+ - Added a global preset to swap A/B and X/Y in all supported emulators (aka N layout).
+ - Added a global preset to enable/disable Widescreen in all supported emulators, globally or per core/emulator.
+ - Added a global preset to enable/disable Ask-to-Exit prompts in all supported emulators.
+ - Added a preset to enable/disable Pegasus and NyNy77 Borders for RetroArch, globally or per core.
+ - Added an option to install Venomalia's Universial Dynamic Input Textures for Dolphin.
+ - Added an RetroDECK: About section
+ - Added an option to install the RetroDECK Steam Deck controller profile
+ - Added an “RetroDECK: Auto Updates” function that enables or disables auto updates on RetroDECK launch.
+ - Added a Semi-automated RPCS3 firmware installer.
+ - The Move Folder tool has been greatly expanded
+ - You can now move the entire folder or different folders as you choose. (WARNING! Please do not try to move the data to more exotic locations).
+ - The basic BIOS checker has been removed.
+ - The BIOS checker has been updated to look for over 120+ BIOS.
+ - RetroAchivements Login: Now logs into all supported emulators/cores at once.
+ - RetroAchivements Logout: Now logs out of all supported emulators/cores at once.
+ - Added RetroAchivements: Hardcore Mode, that lets you toggle hardcore mode for supported emulators/cores with a logged in RetroAchivements account.
+
+ Updates:
+
+ - Updated ES-DE to the latest version.
+ - Updated RetroArch and the cores to latest versions.
+ - Updated all standalone emulators and to their latest versions.
+
+ Bugfixes and other changes:
+
+ - Dolphin/Primehack Wii Mote controls have been redesigned for the Steam Deck to allow both for touch input or right radial as pointer and R2 emulates the Wii Remote Shake needed for certain games.
+ - Updated the RPCS3 to run better and with a better configuration. Read more on the wiki on how to install DLC and patches.
+ - RPCS3 and Duckstations save files where in the wrong directory. They have been moved to fit the overall inside the RetroDECK Framework. If you have any issues, contact us on discord or add them on github.
+ - We made a unique PICO-8 wrapper that makes it runs better in a flatpak environment.
+ - Fixed an avcodec issue that caused some roms for certain emulators to break.
+ - Changed the ES-DE progress bar color
+ - Changed how Yuzu builds are handled and should allow for better Yuzu updates.
+ - Added a low space warning on launch.
+ - Various backend improvements and fixes.
+ - Added the foss Capsimg BIOS for the Amiga RetroArch core.
+ - Implemented ES-DE's experimental theme downloader. For fresh new installs we only now ship one theme: ArtBookNext (as all other themes can be downloaded from the interface).
+
+
+
+
+ https://github.com/XargonWan/RetroDECK/releases/tag/0.6.6b
+
+ Bug fixes:
+
+ - Fixed ES-DE that was showing the update notification
+ - PSX: Swanstation is back as default emulator
diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml
index fe97c1fb..39d9be22 100644
--- a/net.retrodeck.retrodeck.yml
+++ b/net.retrodeck.retrodeck.yml
@@ -1,46 +1,45 @@
app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform
runtime-version: 5.15-22.08
-#runtime-version: 6.3 # bumped because of pcsx2-qt
sdk: org.kde.Sdk
sdk-extensions:
- org.freedesktop.Sdk.Extension.llvm14 # Needed for rpcs3
- #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else
base: io.qt.qtwebengine.BaseApp # Needed for Yuzu
base-version: 5.15-22.08 # Needed for Yuzu
-# add-extensions:
-# org.freedesktop.Platform.ffmpeg-full:
-# directory: lib/ffmpeg
-# add-ld-path: .
-# version: '22.08'
-# autodownload: true
-# autodelete: false
command: retrodeck.sh
+add-extensions:
+ org.ppsspp.PPSSPP.Locale:
+ directory: share/locale
+ bundle: true
+ no-autodownload: false
+ subdirectories: false
+ autodelete: true
+ locale-subset: true
+
finish-args:
- - --socket=x11
- #- --socket=wayland
+ - --socket=fallback-x11
+ - --socket=wayland
- --socket=pulseaudio
- --share=ipc
- --share=network
- --device=all
- - --filesystem=home # Needed to be able to relocate / remove / create symlink at ~/retrodeck
+ - --filesystem=home
- --filesystem=/run/media
- --filesystem=/media
- --allow=multiarch
- --talk-name=org.freedesktop.ScreenSaver
- --talk-name=org.freedesktop.PowerManagement.Inhibit
- --talk-name=org.freedesktop.login1.Manager
- - --talk-name=org.freedesktop.Flatpak
+ - --talk-name=org.freedesktop.portal.Flatpak.UpdateMonitor
- --filesystem=xdg-run/app/com.discordapp.Discord:create
- # Yuzu
- # - --filesystem=home:ro # This may break Yuzu, let's see
- # - --filesystem=/run/media:ro
+ - --filesystem=xdg-config/gtk-3.0:ro
# Dolphin
- --allow=bluetooth
- #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something
- # rpcs3
- #- --socket=fallback-x11
+ # PPSSPP
+ # It allows an SDL application to specify its window class, which can be useful for window managers and desktop environments to identify and group similar windows
+ - --env=SDL_VIDEO_X11_WMCLASS=net.retrodeck.retrodeck
+ - --env=SDL_VIDEO_WAYLAND_WMCLASS=net.retrodeck.retrodeck
cleanup:
# ES-DE
@@ -68,7 +67,1202 @@ cleanup-commands:
modules:
+ # dependency of: CEMU
+ - rd-submodules/shared-modules/libusb/libusb.json
+
+ # This module is used to define the RetroDECK version
+ # If the version is set as cooker it will automatically generate the version tag based on the date
+ # else it will just put what is written, "v" is not needed
+ # The version number is hardcoded in /app/retrodeck/version
+ #
+ # UPDATE STEPS FOR MAIN:
+ # [X] Update the VERSION variable on line containing "VERSION=THISBRANCH"
+ # [X] Update the appdata.xml with the version number and notes
+ #
+ - name: version-initialization
+ buildsystem: simple
+ build-commands:
+ - |
+
+ # on main please update this with the version variable, eg: VERSION='0.7.0b'
+ VERSION=THISBRANCH
+
+ git checkout ${GITHUB_REF_NAME}
+ mkdir -p ${FLATPAK_DEST}/retrodeck/
+ if [[ $VERSION == *"cooker"* ]];
+ then
+ VERSION="$VERSION-VERSIONPLACEHOLDER"
+ fi
+ echo $VERSION >> ${FLATPAK_DEST}/retrodeck/version
+ cat ${FLATPAK_DEST}/retrodeck/version
+ echo "Version is $VERSION"
+ sources:
+ - type: git
+ url: https://github.com/XargonWan/RetroDECK.git
+ branch: THISBRANCH
+
+ - name: xmlstarlet
+ config-opts:
+ - --disable-static-libs
+ - --with-libxml-libs-prefix=/usr/lib
+ - --with-libxml-include-prefix=/usr/include/libxml2
+ sources:
+ - type: archive
+ url: https://downloads.sourceforge.net/xmlstar/xmlstarlet-1.6.1.tar.gz
+ sha256: 15d838c4f3375332fd95554619179b69e4ec91418a3a5296e7c631b7ed19e7ca
+ - type: shell
+ commands:
+ - cp -p /usr/share/automake-*/config.{sub,guess} .
+ - autoreconf -vfi
+ post-install:
+ - ln -s "xml" "${FLATPAK_DEST}/bin/xmlstarlet" ||:
+
+ # mesa repo got a double certificate issue and gnutils cannot handle that so GLU download fails,
+ # this affects even the shared-modules's glu so I have to replace it temporarly
+ # more info there: https://gitlab.com/gnutls/gnutls/-/issues/1335
+ # dependency of: CEMU
+ - name: glu
+ buildsystem: meson
+ cleanup:
+ - /include
+ - /lib/debug
+ - /lib/pkgconfig
+ - /lib/*.a
+ sources:
+ - type: archive
+ url: https://ftp.osuosl.org/pub/blfs/conglomeration/glu/glu-9.0.2.tar.xz
+ sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
+
+ - name: libgudev
+ buildsystem: meson
+ config-opts:
+ - -Dtests=disabled
+ - -Dvapi=disabled
+ - -Dintrospection=disabled
+ - -Dgtk_doc=false
+ cleanup:
+ - /include
+ - /etc
+ - /libexec
+ - /sbin
+ - /lib/pkgconfig
+ - /lib/systemd
+ - /man
+ - /share/aclocal
+ - /share/doc
+ - /share/gtk-doc
+ - /share/man
+ - /share/pkgconfig
+ - '*.la'
+ - '*.a'
+ sources:
+ - type: archive
+ url: https://ftp.osuosl.org/pub/blfs/conglomeration/libgudev/libgudev-237.tar.xz
+ sha256: 0d06b21170d20c93e4f0534dbb9b0a8b4f1119ffb00b4031aaeb5b9148b686aa
+
+ - name: chdman-tool
+ buildsystem: simple
+ build-commands:
+ - cmake -B . -G Ninja
+ - cmake --build .
+ - cp chdman /app/bin
+ sources:
+ - type: git
+ url: https://github.com/CharlesThobe/chdman.git
+ commit: f7cadf1720cbeba8a14f2685830ff424a0c7f6cd
+
+ - name: rclone
+ buildsystem: simple
+ build-commands:
+ - cp rclone ${FLATPAK_DEST}/bin/
+ sources:
+ - type: archive
+ url: https://github.com/rclone/rclone/releases/download/v1.61.1/rclone-v1.61.1-linux-amd64.zip
+ sha256: 6d6455e1cb69eb0615a52cc046a296395e44d50c0f32627ba8590c677ddf50a9
+
+ # Source: https://github.com/flathub/com.valvesoftware.Steam.Utility.steamtinkerlaunch/blob/129c9192f874405d21612d95f9749dc2bcaf8cea/modules/rsync.yml#L5
+ - name: rsync
+ no-autogen: true
+ config-opts:
+ - --prefix=${FLATPAK_DEST}
+ - --with-included-popt
+ - --with-included-zlib
+ - --disable-debug
+ - --disable-xxhash # Unable to meet dependency -- rsync refuses to see the required xxhash.h file
+ sources:
+ - type: archive
+ url: https://download.samba.org/pub/rsync/src/rsync-3.2.7.tar.gz
+ sha256: 4e7d9d3f6ed10878c58c5fb724a67dacf4b6aac7340b13e488fb2dc41346f2bb
+ x-checker-data:
+ type: anitya
+ project-id: 4217
+ stable-only: true
+ url-template: https://download.samba.org/pub/rsync/src/rsync-$version.tar.gz
+
+ - name: jq
+ buildsystem: simple
+ build-commands:
+ - cp jq-linux64 ${FLATPAK_DEST}/bin/jq
+ - chmod +x ${FLATPAK_DEST}/bin/jq
+ sources:
+ - type: file
+ url: https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64
+ sha256: af986793a515d500ab2d35f8d2aecd656e764504b789b66d7e1a0b727a124c44
+
+ - name: yq
+ buildsystem: simple
+ build-commands:
+ - cp yq_linux_amd64 ${FLATPAK_DEST}/bin/yq
+ - chmod +x ${FLATPAK_DEST}/bin/yq
+ sources:
+ - type: file
+ url: https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64
+ sha256: 4ee662847c588c3ef2fec8bfb304e8739e3dbaba87ccb9a608d691c88f5b64dc
+
+ # dependency of: CEMU (13.0.0)
+ - name: glslang
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DCMAKE_BUILD_TYPE=Release
+ - -DENABLE_CTEST=OFF
+ cleanup:
+ - /include
+ - /lib/cmake
+ sources:
+ - type: archive
+ url: https://github.com/KhronosGroup/glslang/archive/13.0.0.tar.gz
+ sha256: bcda732434f829aa74414ea0e06d329ec8ac28637c38a0de45e17c8fd25a4715
+ x-checker-data:
+ type: anitya
+ stable-only: true
+ project-id: 205796
+ url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz
+
+ # ES-DE - START
+ # https://gitlab.com/es-de/emulationstation-de
+
+ #This is disabled because we added the extension (line 11), check if the videos are ok.
+ - name: ffmpeg
+ config-opts:
+ - --disable-static
+ - --disable-programs
+ - --disable-doc
+ - --enable-gpl
+ - --enable-shared
+ - --enable-libvorbis
+ - --enable-libopus
+ - --enable-libvpx
+ - --enable-postproc
+ sources:
+ - type: git
+ url: https://github.com/FFmpeg/FFmpeg.git
+ tag: n5.1.1
+
+ - name: freeimage
+ no-autogen: true
+ build-options:
+ cxxflags: -std=c++14
+ make-args:
+ - DESTDIR=/app
+ sources:
+ - type: archive
+ url: http://downloads.sourceforge.net/freeimage/FreeImage3180.zip
+ sha256: f41379682f9ada94ea7b34fe86bf9ee00935a3147be41b6569c9605a53e438fd
+ - type: shell
+ commands:
+ - sed -i 's|-o root -g root ||' ./Makefile.gnu
+ - sed -i 's|/usr|/app|' ./Makefile.gnu
+
+ # dependency of: CEMU
+ - name: pugixml
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DBUILD_SHARED_LIBS=ON
+ cleanup:
+ - /include
+ - /lib/cmake
+ - /lib/pkgconfig
+ sources:
+ - type: archive
+ url: https://github.com/zeux/pugixml/releases/download/v1.13/pugixml-1.13.tar.gz
+ sha256: 40c0b3914ec131485640fa57e55bf1136446026b41db91c1bef678186a12abbe
+ x-checker-data:
+ type: anitya
+ project-id: 3728
+ url-template: https://github.com/zeux/pugixml/releases/download/v$version/pugixml-$version.tar.gz
+
+ - name: libgit2
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DCMAKE_BUILD_TYPE=Release
+ - -DBUILD_SHARED_LIBS:BOOL=ON
+ - -DTHREADSAFE=ON
+ sources:
+ - type: git
+ url: https://github.com/libgit2/libgit2.git
+ tag: v1.6.3
+
+ # Needed from ES-DE 2.1.0+
+ - name: libpoppler-glib
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DENABLE_BOOST=OFF
+ sources:
+ - type: archive
+ url: https://gitlab.freedesktop.org/poppler/poppler/-/archive/poppler-22.11.0/poppler-poppler-22.11.0.tar.bz2
+ sha256: b8f618d5c62030034d5c8da4d3f6a740260b7620b9a31021679ce1914d327f81
+ cleanup:
+ - /lib/pkgconfig
+ - /include
+ - '*.a'
+ - '*.la'
+
+ # When updating this module remember to check those:
+ # https://gitlab.com/es-de/emulationstation-de/-/blob/[VERSION]/resources/systems/unix/es_find_rules.xml
+ # But we don't include them 1:1 as RetroDECK got some specific configs in some cases
+ - name: emulationstation-de
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DRETRODECK=on
+ cleanup:
+ - es-app
+ - es-core
+ sources:
+ - type: git
+ url: https://gitlab.com/es-de/emulationstation-de
+ branch: 5545187d82fabf93256b7d176f39a0a98bcd6c54
+ - type: shell
+ commands:
+ - sed -i 's#"EMULATIONSTATION-DE V" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#"RetroDECK
+ v'$(cat ${FLATPAK_DEST}/retrodeck/version)', ES-DE v" + Utils::String::toUpper(PROGRAM_VERSION_STRING)#g'
+ es-app/src/guis/GuiMenu.cpp
+ - type: patch
+ path: rd-submodules/es-de/GuiMenu.cpp.patch
+ - type: patch
+ path: rd-submodules/es-de/GuiMenu.h.patch
+ - type: patch
+ path: rd-submodules/es-de/ViewController.cpp.patch
+ - type: patch
+ path: rd-submodules/es-de/Window.cpp.patch
+
+ # ES-DE - END
+
+ # ES-DE Themes - START
+
+ - name: art-book-next-es-de
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-es-de/
+ - mv -f * ${FLATPAK_DEST}/share/emulationstation/themes/art-book-next-es-de/
+ sources:
+ - type: git
+ url: https://github.com/anthonycaccese/art-book-next-es-de.git
+ commit: 4fe896af7447404f6ea083335cd661c91b0f7860
+
+ # ES-DE Themes - END
+
+ # External manifests start
+
+ # RetroArch - START
+ # https://github.com/flathub/org.libretro.RetroArch
+
+ - name: retroarch
+ config-opts:
+ - '--enable-dbus'
+ make-args:
+ - 'GLOBAL_CONFIG_DIR=${FLATPAK_DEST}/etc'
+ - HAVE_TRANSLATE=1
+ - HAVE_ACCESSIBILITY=1
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/RetroArch.git'
+ commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04
+ - type: file
+ path: rd-submodules/retroarch/retroarch.cfg
+ post-install:
+ - mkdir -p ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
+ - >-
+ mv ${FLATPAK_DEST}/share/pixmaps/retroarch.svg
+ ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/
+ - rmdir --ignore-fail-on-non-empty ${FLATPAK_DEST}/share/pixmaps/
+ - mkdir -p ${FLATPAK_DEST}/etc
+ - >-
+ sed s:@prefix@:${FLATPAK_DEST}:g retroarch.cfg >
+ ${FLATPAK_DEST}/etc/retroarch.cfg
+ modules:
+ - rd-submodules/retroarch/modules/libpng/libpng-1.6.35.json
+ - rd-submodules/retroarch/modules/nvidia-cg-toolkit/nvidia-cg-toolkit-3.1.0013.json
+ - rd-submodules/shared-modules/SDL/SDL-1.2.15.json
+ - rd-submodules/shared-modules/SDL/SDL_image-1.2.12.json
+ - rd-submodules/shared-modules/SDL/SDL_mixer-1.2.12.json
+ - rd-submodules/shared-modules/SDL/SDL_net-1.2.8.json
+ - rd-submodules/shared-modules/SDL/SDL_ttf-2.0.11.json
+ #- rd-submodules/shared-modules/libusb/libusb.json moved outside
+ # certificate glu issue
+ #- rd-submodules/shared-modules/gudev/gudev.json
+ - rd-submodules/retroarch/modules/libbz2/libbz2-1.0.8.json
+ - rd-submodules/retroarch/modules/xrandr/xrandr-1.5.1.json
+ - rd-submodules/retroarch/modules/libaio/libaio-0.3.112.json
+ # certificate issue, check glu module for more info
+ #- rd-submodules/shared-modules/glu/glu-9.json
+ - rd-submodules/shared-modules/libdecor/libdecor-0.1.1.json
+ - name: retroarch-filers-video
+ subdir: gfx/video_filters
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/RetroArch.git'
+ commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04
+ - name: retroarch-filers-audio
+ subdir: libretro-common/audio/dsp_filters
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/RetroArch.git'
+ commit: 712b9350a5c2b1b9129d939a2ae622093dfabd04
+ - name: retroarch-assets
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/retroarch-assets.git'
+ commit: 7b735ef18bcc6508b1c9a626eb237779ff787179
+ - name: libretro-database
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/libretro-database.git'
+ commit: e3b5cb00da4f3ab99491bf67c19630ffa7ee19f2
+ - name: libretro-core-info
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/libretro-core-info.git'
+ commit: dacae85b406131feb12395a415fdf57fc4745201
+ - name: retroarch-joypad-autoconfig
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/retroarch-joypad-autoconfig.git'
+ commit: 5666e46bb89caf4e9af358fdb97a2b384cb62f36
+ - name: common-shaders
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: https://github.com/libretro/common-shaders.git
+ commit: 86cfa146a8dfddf6377ddb5dbcff552feae2e5bf
+ - name: slang-shaders
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/slang-shaders.git'
+ commit: 9266fa24b64b274fd429b73469ded3561de7b8f4
+ - name: glsl-shaders
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/glsl-shaders.git'
+ commit: c26b9e1913eda8c25d6cd218818745a3b451f982
+ - name: common-overlays
+ make-install-args:
+ - PREFIX=${FLATPAK_DEST}
+ sources:
+ - type: git
+ url: 'https://github.com/libretro/common-overlays.git'
+ commit: 115d8670c2e032e4a41ba45f766f5cfd9dae28b8
+
+ # RetroArch - END
+
+ # Not part of the offical RetroArch manifest
+ - name: retroarch-cores
+ buildsystem: simple
+ build-commands:
+ - mkdir -p /app/share/libretro/cores/
+ - mv ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/
+ sources:
+ - type: archive
+ url: https://buildbot.libretro.com/stable/1.16.0/linux/x86_64/RetroArch_cores.7z
+ sha256: a149d34662516d791e8f90507d1107949cb158196d6bbf75105c649fb26504b6
+
+ - name: retroarch-sameduck-core
+ buildsystem: simple
+ build-commands:
+ - mv sameduck_libretro.so /app/share/libretro/cores/sameduck_libretro.so
+ sources:
+ - type: archive
+ url: https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip
+ sha256: SAMEDUCKSHAPLACEHOLDER
+
+ - name: ppsspp-bios
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/PPSSPP
+ - mv -f assets/* ${FLATPAK_DEST}/retrodeck/extras/PPSSPP/
+ sources:
+ - type: archive
+ url: https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip
+ sha256: PPSSPPBIOSHASHPLACEHOLDER
+
+ - name: msx-bios
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/MSX
+ - mv -f Databases ${FLATPAK_DEST}/retrodeck/extras/MSX/Databases
+ - mv -f Machines ${FLATPAK_DEST}/retrodeck/extras/MSX/Machines
+ sources:
+ - type: archive
+ url: http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip
+ sha256: MSXBIOSHASHPLACEHOLDER
+ strip-components: 0
+
+ - name: amiga-bios
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/Amiga
+ - cp -f Linux/x86-64/capsimg.so ${FLATPAK_DEST}/retrodeck/extras/Amiga/capsimg.so
+ sources:
+ - type: archive
+ url: https://github.com/rsn8887/capsimg/releases/download/1.1/Capsimg_for_Retroarch.zip
+ sha256: 16c1b511b8e1374a2b6461a66bb6f07b7d2627eb4e941fd1497a432330acaad1
+ strip-components: 0
+
+ # PPSSPP - START
+ # https://github.com/flathub/org.ppsspp.PPSSPP
+
+ - name: ppsspp
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DUSE_SYSTEM_FFMPEG=OFF
+ - -DUSE_SYSTEM_LIBZIP=ON
+ - -DUSE_SYSTEM_ZSTD=ON
+
+ - -DUSE_WAYLAND_WSI=ON
+ - -DUSING_QT_UI=OFF
+
+ - -DBUILD_TESTING=OFF
+ - -DOpenGL_GL_PREFERENCE=GLVND
+ build-options:
+ arch:
+ aarch64:
+ config-opts:
+ - -DUSING_EGL=ON
+ - -DUSING_GLES2=ON
+ post-install:
+ - install -Dm644 icons/icon-512.svg ${FLATPAK_DEST}/share/icons/hicolor/scalable/apps/ppsspp.svg
+ cleanup:
+ - /share/ppsspp/assets/lang/README.md
+ sources:
+ - type: git
+ url: &ppsspp-url https://github.com/hrydgard/ppsspp.git
+ tag: v1.16.3
+ commit: a9b6421dfde68be9d065b51e9d519699ce2e9053
+ x-checker-data:
+ type: json
+ url: https://api.github.com/repos/hrydgard/ppsspp/releases/latest
+ version-query: .tag_name | sub("^v"; "")
+ tag-query: .tag_name
+ timestamp-query: .published_at
+
+ - name: ppsspp-localization
+ buildsystem: simple
+ build-commands:
+ - |
+ for LANG_FILE in assets/lang/*.ini; do
+ LANG_FILE_NAME="$(basename "$LANG_FILE")"
+ LANG_PREFIX="${LANG_FILE_NAME:0:2}"
+ LANG_DEST="$FLATPAK_DEST/share/locale/$LANG_PREFIX/ppsspp/$LANG_FILE_NAME";
+ ln -fsr "$LANG_DEST" "$FLATPAK_DEST/share/ppsspp/$LANG_FILE"
+ install -Dm644 "$LANG_FILE" "$LANG_DEST"
+ done
+ sources:
+ - type: shell
+ commands:
+ - cp -a $FLATPAK_DEST/share/ppsspp/assets .
+
+ # PPSSPP - END
+
+ # Yuzu - START
+ # https://github.com/yuzu-emu/yuzu-mainline/releases
+
+ - name: Yuzu
+ buildsystem: simple
+ build-commands:
+ - chmod +x yuzu*.AppImage
+ - ./yuzu*.AppImage --appimage-extract
+ - mkdir -p "${FLATPAK_DEST}/yuzu"
+ - cp -r squashfs-root/* "${FLATPAK_DEST}/yuzu"
+ - ln -s "${FLATPAK_DEST}/yuzu/usr/bin/yuzu" "${FLATPAK_DEST}/bin/yuzu"
+ sources:
+ - type: file
+ url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1567/yuzu-mainline-20230923-ace91dd0c.AppImage
+ sha256: 965bdfa63e713a0672fb5a037ecb527b4860600c6a2526f7c053bfe082b5a9d8
+
+ # Yuzu - END
+
+ # CITRA - START
+ # DO NOT UPDATE! WENT ON QT6
+ # https://github.com/flathub/org.citra_emu.citra
+
+ - rd-submodules/shared-modules/SDL2/SDL2-with-libdecor.json
+
+ - name: citra
+ buildsystem: cmake-ninja
+ builddir: true
+ config-opts:
+ - '-DCMAKE_BUILD_TYPE=Release'
+ - '-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON'
+ - '-DENABLE_LTO=ON'
+ - '-DENABLE_QT_TRANSLATION=ON'
+ - '-DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON'
+ - '-DENABLE_COMPATIBILITY_LIST_DOWNLOAD=OFF'
+ # - '-DENABLE_FFMPEG_VIDEO_DUMPER=ON'
+ # FFMPEG VIDEO DUMPER was disabled because of this: https://github.com/citra-emu/citra/issues/5949
+ - '-DUSE_SYSTEM_SDL2=ON'
+ - '-DCMAKE_POLICY_DEFAULT_CMP0069=NEW'
+ - '-DENABLE_FDK=ON'
+ cleanup:
+ - /share/man
+ - /share/pixmaps
+ post-install:
+ - install -Dm644 ../dist/citra.svg /app/share/icons/hicolor/scalable/apps/citra.svg
+ - install -Dm644 ../dist/icon.png /app/share/icons/hicolor/512x512/apps/citra.png
+ sources:
+ - type: archive
+ url: >-
+ https://github.com/citra-emu/citra-nightly/releases/download/nightly-1898/citra-unified-source-20230504-70335a7.tar.xz
+ sha256: b320585bd8c4c075f63d3d9c74b830718e58fcf04d987a5dcead402a72abf753
+ x-checker-data:
+ type: json
+ url: https://api.github.com/repos/citra-emu/citra-nightly/releases/latest
+ version-query: .tag_name
+ url-query: >-
+ .assets[] | .browser_download_url |
+ match("https://.+citra-unified-source-.+.xz$") | .string
+ is-main-source: true
+ - type: patch
+ path: rd-submodules/citra/unified-source-compat.patch
+
+
+ # CITRA - END
+
+ # PCSX2 - START
+ # Inspired by:
+ # https://github.com/flathub/com.zettlr.Zettlr/blob/master/com.zettlr.Zettlr.yaml
+ # https://pcsx2.net/downloads/
+
+ - name: pcsx2-qt
+ buildsystem: simple
+ build-commands:
+ - chmod +x pcsx2*.AppImage
+ - ./pcsx2*.AppImage --appimage-extract
+ - mkdir -p "${FLATPAK_DEST}/pcsx2-qt"
+ - cp -r squashfs-root/* "${FLATPAK_DEST}/pcsx2-qt"
+ - ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt"
+ sources:
+ - type: file
+ url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5059/pcsx2-v1.7.5059-linux-appimage-x64-Qt.AppImage
+ sha256: a51addc9bd15b77e842160acecb1f18486f8a024e5e73e8aea5de71de2b164c7
+
+ # PCSX2 - END
+
+ # Dolphin - START
+ # DO NOT UPDATE! WENT ON QT6
+ # https://github.com/flathub/org.DolphinEmu.dolphin-emu
+ # WHEN UPADTING: remember to update rd-submodules/dolphin contents
+
+ # needed for the emulate bluetooth adapter feature to work
+ - name: bluez
+ config-opts:
+ - --enable-library
+ - --disable-manpages
+ - --disable-udev
+ - --disable-tools
+ - --disable-cups
+ - --disable-monitor
+ - --disable-client
+ - --disable-systemd
+ - --disable-a2dp
+ - --disable-avrcp
+ - --disable-network
+ - --disable-obex
+ - --disable-bap
+ - --disable-mcp
+ - --with-dbusconfdir=/app/etc
+ - --with-dbussessionbusdir=/app/usr/lib/system-services
+ sources:
+ - type: archive
+ url: https://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz
+ sha256: 39fea64b590c9492984a0c27a89fc203e1cdc74866086efb8f4698677ab2b574
+ x-checker-data:
+ type: anitya
+ project-id: 10029
+ stable-only: true
+ url-template: https://www.kernel.org/pub/linux/bluetooth/bluez-$version.tar.xz
+
+ # enables motion controls on non-wii controllers (switch, ps4, etc)
+ # requires a udev rule enabling Motion Sensors access
+ - name: libevdev
+ buildsystem: meson
+ config-opts:
+ - -Dtests=disabled
+ - -Ddocumentation=disabled
+ sources:
+ - type: archive
+ url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.0.tar.xz
+ sha256: 9edf2006cc86a5055279647c38ec923d11a821ee4dc2c3033e8d20e8ee237cd9
+ x-checker-data:
+ type: anitya
+ project-id: 20540
+ stable-only: true
+ url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz
+
+ # needed for screensaver inhibition
+ - name: xdg-screensaver-shim
+ buildsystem: meson
+ sources:
+ - type: archive
+ url: https://github.com/Unrud/xdg-screensaver-shim/archive/0.0.2.tar.gz
+ sha256: 0ed2a69fe6ee6cbffd2fe16f85116db737f17fb1e79bfb812d893cf15c728399
+
+ - name: dolphin-emu
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DCMAKE_BUILD_TYPE=Release
+ - -DENABLE_ALSA=OFF
+ - -DENABLE_SDL=ON
+ - -DENABLE_EVDEV=ON
+ - -DDISTRIBUTOR=Flathub
+ cleanup:
+ - /share/man
+ post-install:
+ - install -D -t ${FLATPAK_DEST}/bin/ dolphin-emu-wrapper
+ - sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg
+ sources:
+ - type: git
+ # Sometimes Dolphin or its submodules clone are failing in https so it must done in ssh
+ # fatal: remote transport reported error
+ # url: ssh://git@github.com/dolphin-emu/dolphin.git
+ url: https://github.com/dolphin-emu/dolphin.git
+ commit: 46b99671d9158e0ca840c1d8ef249db0f321ced7
+ x-checker-data:
+ type: json
+ url: https://dolphin-emu.org/update/latest/beta
+ commit-query: .hash
+ version-query: .shortrev
+ timestamp-query: .date
+ is-main-source: true
+ # detects whether dolphin is running in a flatpak sandbox
+ # and makes it use xdg directories if it is.
+ # prevents dolphin from attempting to write conf files
+ # in non-writable paths, typically happens when a user
+ # has leftover files from a previous non-flatpak install
+ - type: patch
+ path: rd-submodules/dolphin/detectflatpak.patch
+ # version strings must match exactly for online multiplayer
+ - type: patch
+ path: rd-submodules/dolphin/nodirtyversion.patch
+ - type: script
+ commands:
+ - |
+ for i in {0..9}; do
+ test -S $XDG_RUNTIME_DIR/discord-ipc-$i ||
+ ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
+ done
+ dolphin-emu "$@"
+ dest-filename: dolphin-emu-wrapper
+
+ - name: universal_dynamic_input
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures
+ - cp -r * ${FLATPAK_DEST}/retrodeck/extras/DynamicInputTextures/
+ sources:
+ - type: git
+ url: https://github.com/Venomalia/UniversalDynamicInput.git
+ commit: UNIVERSALDYNAMICINPUTCOMMITPLACEHOLDER
+
+ # Dolphin - END
+
+ # XEMU - START
+ # https://github.com/flathub/app.xemu.xemu
+
+ - name: libpcap
+ buildsystem: cmake-ninja
+ cleanup:
+ - /bin
+ - /include
+ - /lib/debug
+ - /lib/pkgconfig
+ - /lib/*.a
+ - /share
+ sources:
+ - type: archive
+ url: https://www.tcpdump.org/release/libpcap-1.10.4.tar.gz
+ sha256: ed19a0383fad72e3ad435fd239d7cd80d64916b87269550159d20e47160ebe5f
+ x-checker-data:
+ type: anitya
+ project-id: 1702
+ stable-only: true
+ url-template: https://www.tcpdump.org/release/libpcap-$version.tar.gz
+
+ - name: PyYAML
+ buildsystem: simple
+ build-commands:
+ - python3 setup.py install --prefix=/app --root=/
+ sources:
+ - type: archive
+ url: https://github.com/yaml/pyyaml/archive/refs/tags/6.0.tar.gz
+ sha256: f33eaba25d8e0c1a959bbf00655198c287dfc5868f5b7b01e401eaa1796cc778
+
+ - name: xemu
+ buildsystem: autotools
+ builddir: true
+ no-make-install: true
+ build-options:
+ cflags: -O3 -DXBOX=1 -Wno-error=redundant-decls
+ config-opts:
+ - --audio-drv-list=sdl
+ - --disable-werror
+ - --target-list=i386-softmmu
+ make-args:
+ - qemu-system-i386
+ post-install:
+ - |-
+ for px in 16 32 48 64 128 256 512; do
+ install -Dm644 ../ui/icons/xemu_${px}x${px}.png $FLATPAK_DEST/share/icons/hicolor/${px}x${px}/apps/app.xemu.xemu.png
+ done
+ - install -Dm644 ../ui/icons/xemu.svg $FLATPAK_DEST/share/icons/hicolor/scalable/apps/app.xemu.xemu.svg
+ - mv qemu-system-i386 $FLATPAK_DEST/bin/xemu
+ - mkdir -p $FLATPAK_DEST/share/licenses/xemu
+ - cd .. && python3 scripts/gen-license.py > $FLATPAK_DEST/share/licenses/xemu/LICENSE.txt
+ sources:
+ - type: git
+ url: https://github.com/xemu-project/xemu.git
+ tag: v0.7.98
+ commit: 7bfb7c85378f64f93556c365ea0cc18cb2181dc8
+ x-checker-data:
+ type: json
+ url: https://api.github.com/repos/xemu-project/xemu/releases/latest
+ tag-query: .tag_name
+ timestamp-query: .published_at
+ version-query: .tag_name
+
+ - name: xemu-dummy-hdd
+ buildsystem: simple
+ build-commands:
+ - mkdir -p ${FLATPAK_DEST}/retrodeck/extras/XEMU
+ - mv -f "xbox_hdd.qcow2" "${FLATPAK_DEST}/retrodeck/extras/XEMU/xbox_hdd.qcow2"
+ sources:
+ - type: archive
+ url: https://github.com/mborgerson/xemu-hdd-image/releases/latest/download/xbox_hdd.qcow2.zip
+ sha256: XEMUHDDHASHPLACEHOLDER
+
+ # XEMU - END
+
+ # MELONDS - START
+ # https://github.com/flathub/net.kuribo64.melonDS
+ # ちっちゃい、かわいい!
+
+ - name: libslirp
+ buildsystem: meson
+ sources:
+ - type: git
+ url: https://gitlab.freedesktop.org/slirp/libslirp.git
+ tag: v4.7.0
+ - name: melonds
+ buildsystem: cmake-ninja
+ builddir: true
+ build-options:
+ arch:
+ aarch64:
+ config-opts:
+ - -DENABLE_LTO_RELEASE=OFF
+ sources:
+ - type: git
+ url: https://github.com/melonDS-emu/melonDS.git
+ commit: 430de6b2702bb93faa8c2004aff3fbd084db4a1e
+ - type: patch
+ path: rd-submodules/melonds/hotkeys.patch
+
+ # MELONDS - END
+
+ # RPCS3 - START
+ # DO NOT UPDATE! WENT ON QT6
+ # https://github.com/flathub/net.rpcs3.RPCS3
+
+ # glu issue, check glu module for more info
+ #- rd-submodules/shared-modules/glu/glu-9.json
+
+ # dependency of: CEMU
+ - rd-submodules/shared-modules/glew/glew.json
+
+ - name: rpcs3
+ buildsystem: cmake-ninja
+ builddir: true
+ build-options:
+ append-ld-library-path: /usr/lib/sdk/llvm16/lib
+ append-path: /usr/lib/sdk/llvm16/bin
+ cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
+ -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection
+ -fcf-protection -fno-omit-frame-pointer
+ cflags-override: true
+ cxxflags: *optflags
+ cxxflags-override: true
+ env:
+ AR: llvm-ar
+ CC: clang
+ CXX: clang++
+ RANLIB: llvm-ranlib
+ ldflags: -fuse-ld=lld
+ config-opts:
+ - -DCMAKE_BUILD_TYPE=RelWithDebInfo
+ #- -DBUILD_LLVM_SUBMODULE=ON this was replaced by the fllowing:
+ - -DBUILD_LLVM=OFF
+ - -DUSE_NATIVE_INSTRUCTIONS=OFF
+ - -DUSE_PRECOMPILED_HEADERS=OFF
+ - -DUSE_SDL=ON
+ - -DUSE_SYSTEM_CURL=ON
+ # Disabled this to force RPCS3 to use our built FFMPEG
+ - -DUSE_SYSTEM_FFMPEG=OFF
+ - -DUSE_SYSTEM_LIBPNG=ON
+ - -DUSE_SYSTEM_SDL=ON
+ - -DUSE_SYSTEM_ZLIB=ON
+ - -Wno-dev
+ post-install:
+ - cp /usr/lib/sdk/llvm16/lib/libLLVM-16.so /app/lib/
+ - |-
+ set -eux
+
+ COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)"
+ COMM_COUNT="$(git rev-list --count HEAD)";
+ COMM_HASH="$(git rev-parse --short=8 HEAD)";
+ sources:
+ - type: git
+ url: https://github.com/RPCS3/rpcs3.git
+ commit: a828c214b5c0b87b81fcd13ff3c1e952c9a5d6dd
+
+ # RPCS3 - END
+
+ # PRIMEHACK - START
+ # https://github.com/flathub/io.github.shiiion.primehack
+
+ - name: primehack
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DCMAKE_BUILD_TYPE=Release
+ - -DENABLE_ALSA=OFF
+ - -DENABLE_SDL=ON
+ - -DENABLE_EVDEV=ON
+ - -DDISTRIBUTOR=Flathub
+ cleanup:
+ - /share/man
+ post-install:
+ - install -D primehack-wrapper /app/bin/primehack-wrapper
+ sources:
+ - type: git
+ url: https://github.com/TheDrifter363/primehack.git
+ commit: 6295c695307a67f11ee202b05cbdd7b5c1edae5c
+ # detects whether dolphin is running in a flatpak sandbox
+ # and makes it use xdg directories if it is.
+ # prevents dolphin from attempting to write conf files
+ # in non-writable paths, typically happens when a user
+ # has leftover files from a previous non-flatpak install
+ - type: patch
+ path: rd-submodules/dolphin/detectflatpak.patch
+ # version strings must match exactly for online multiplayer
+ - type: patch
+ path: rd-submodules/dolphin/nodirtyversion.patch
+ - type: script
+ commands:
+ - for i in {0..9}; do
+ - test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
+ - done
+ - primehack "$@"
+ dest-filename: primehack-wrapper
+
+ # # PRIMEHACK - END
+
+ # Duckstation-AppImage - START
+ # https://github.com/stenzek/duckstation/releases/tag/preview
+
+ - name: Duckstation-AppImage
+ buildsystem: simple
+ build-commands:
+ - chmod +x DuckStation-*.AppImage
+ - ./DuckStation-x64*.AppImage --appimage-extract
+ - mkdir -p "${FLATPAK_DEST}/duckstation"
+ - cp -r squashfs-root/* "${FLATPAK_DEST}/duckstation"
+ - ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation-qt" "${FLATPAK_DEST}/bin/duckstation-qt"
+ sources:
+ - type: file
+ url: https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage
+ sha256: DUCKSTATIONSHAPLACEHOLDER
+
+ # Duckstation-AppImage - END
+
+ # Cemu - START
+ # LATEST BUILD BEFORE RUNTIME 23.08
+ # https://github.com/cemu-project/Cemu/releases
+ # https://github.com/flathub/info.cemu.Cemu
+
+ - name: hidapi
+ buildsystem: cmake-ninja
+ sources:
+ - type: archive
+ url: https://github.com/libusb/hidapi/archive/refs/tags/hidapi-0.14.0.tar.gz
+ sha256: a5714234abe6e1f53647dd8cba7d69f65f71c558b7896ed218864ffcf405bcbd
+ x-checker-data:
+ type: anitya
+ project-id: 5594
+ stable-only: true
+ url-template: https://github.com/libusb/hidapi/archive/refs/tags/hidapi-$version.tar.gz
+
+ - name: boost
+ buildsystem: simple
+ build-commands:
+ - ./bootstrap.sh --prefix=${FLATPAK_DEST} --with-toolset=gcc --with-libraries=filesystem,system,program_options,nowide
+ - ./b2 install variant=release link=shared runtime-link=shared cxxflags="$CXXFLAGS"
+ linkflags="$LDFLAGS" -j ${FLATPAK_BUILDER_N_JOBS}
+ cleanup:
+ - /include
+ - /lib/cmake
+ sources:
+ - type: archive
+ url: https://boostorg.jfrog.io/artifactory/main/release/1.83.0/source/boost_1_83_0.tar.bz2
+ sha256: 6478edfe2f3305127cffe8caf73ea0176c53769f4bf1585be237eb30798c3b8e
+ x-checker-data:
+ type: anitya
+ project-id: 6845
+ stable-only: true
+ url-template: https://boostorg.jfrog.io/artifactory/main/release/$version/source/boost_${major}_${minor}_$patch.tar.bz2
+
+ - name: libzip
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DBUILD_DOC=OFF
+ - -DBUILD_EXAMPLES=OFF
+ - -DBUILD_REGRESS=OFF
+ - -DBUILD_TOOLS=OFF
+ cleanup:
+ - /bin
+ - /include
+ - /lib/cmake
+ - /lib/pkgconfig
+ sources:
+ - type: archive
+ url: https://libzip.org/download/libzip-1.10.1.tar.xz
+ mirror-urls:
+ - https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.xz
+ sha256: dc3c8d5b4c8bbd09626864f6bcf93de701540f761d76b85d7c7d710f4bd90318
+ x-checker-data:
+ type: anitya
+ project-id: 10649
+ url-template: https://libzip.org/download/libzip-$version.tar.xz
+
+ - name: rapidjson
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DRAPIDJSON_BUILD_DOC=OFF
+ - -DRAPIDJSON_BUILD_EXAMPLES=OFF
+ - -DRAPIDJSON_BUILD_TESTS=OFF
+ - -DRAPIDJSON_BUILD_THIRDPARTY_GTEST=OFF
+ cleanup:
+ - /include
+ - /lib/cmake
+ - /lib/pkgconfig
+ - /share/doc
+ sources:
+ - type: archive
+ url: https://github.com/Tencent/rapidjson/archive/refs/tags/v1.1.0.tar.gz
+ sha256: bf7ced29704a1e696fbccf2a2b4ea068e7774fa37f6d7dd4039d0787f8bed98e
+ x-checker-data:
+ type: anitya
+ project-id: 7422
+ stable-only: true
+ url-template: https://github.com/Tencent/rapidjson/archive/refs/tags/v$version.tar.gz
+
+ - name: glm
+ buildsystem: cmake-ninja
+ cleanup: ['*']
+ no-make-install: true
+ post-install:
+ - install -d ${FLATPAK_DEST}/include
+ - cp -R glm ${FLATPAK_DEST}/include
+ - cp -R cmake/glm ${FLATPAK_DEST}/lib/cmake
+ sources:
+ - type: archive
+ url: https://github.com/g-truc/glm/releases/download/0.9.9.8/glm-0.9.9.8.zip
+ sha256: 37e2a3d62ea3322e43593c34bae29f57e3e251ea89f4067506c94043769ade4c
+
+ - name: fmt
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DFMT_TEST=Off
+ cleanup:
+ - '*'
+ sources:
+ - type: archive
+ url: https://github.com/fmtlib/fmt/archive/9.1.0.tar.gz
+ sha256: 5dea48d1fcddc3ec571ce2058e13910a0d4a6bab4cc09a809d8b1dd1c88ae6f2
+ x-checker-data:
+ type: anitya
+ project-id: 11526
+ url-template: https://github.com/fmtlib/fmt/archive/$version.tar.gz
+ versions: {<: '10.0'}
+
+ - name: wxwidgets
+ cleanup:
+ - /bin
+ - /include
+ - /lib/cmake
+ - /lib/wx
+ - /share
+ sources:
+ - type: archive
+ url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.2.1/wxWidgets-3.2.2.1.tar.bz2
+ sha256: dffcb6be71296fff4b7f8840eb1b510178f57aa2eb236b20da41182009242c02
+ x-checker-data:
+ type: anitya
+ project-id: 5150
+ stable-only: true
+ url-template: https://github.com/wxWidgets/wxWidgets/releases/download/v$version/wxWidgets-$version.tar.bz2
+
+ - name: Cemu
+ buildsystem: cmake-ninja
+ config-opts:
+ - -DPORTABLE=false
+ - -DENABLE_VCPKG=false
+ build-options:
+ env:
+ - LC_ALL=C
+ sources:
+ - type: git
+ url: https://github.com/cemu-project/Cemu
+ # TODO: Update tag pattern on next stable ^v([\d.]+)$
+ x-checker-data:
+ type: git
+ tag-pattern: ^v([\d.]+-\d+)$
+ tag: v2.0-47
+ commit: 85aa4f095b119e98620451a0c19c80f656d944a6
+ - type: shell
+ commands:
+ - sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe
+ --tag | sed "s/v2.0-//")\" CACHE STRING \"\")/g" -i CMakeLists.txt
+ - type: script
+ commands:
+ - |
+ for d in DiscordCanary Discord; do
+ for i in {0..9}; do
+ test -S $XDG_RUNTIME_DIR/discord-ipc-$i ||
+ ln -sf {app/com.discordapp.$d,$XDG_RUNTIME_DIR}/discord-ipc-$i;
+ done
+ done
+ Cemu_relwithdebinfo "$@"
+ dest-filename: Cemu-wrapper
+ - type: script
+ dest-filename: dev_release_metainfo.py
+ commands:
+ - |
+ import os
+ import xml.etree.ElementTree as ET
+ meta_file = os.environ.get('AS_META_FILE')
+ version = os.environ.get('AS_META_VERSION')
+ release_type = os.environ.get('AS_META_TYPE')
+ release_date = os.environ.get('AS_META_DATE')
+ release_url = os.environ.get('AS_META_URL')
+ tree = ET.parse(meta_file)
+ root = tree.getroot()
+ el_releases = root.find('releases')
+ for el_release in el_releases:
+ el_releases.remove(el_release)
+ el_release = ET.SubElement(el_releases, 'release')
+ el_url = ET.SubElement(el_release, 'url')
+ el_url.text = release_url
+ el_release.attrib['type'] = release_type
+ el_release.attrib['date'] = release_date
+ el_release.attrib['version'] = version
+ ET.indent(tree, space=' ', level=0)
+ tree.write(meta_file, encoding='utf8')
+ post-install:
+ - cp -r bin/gameProfiles ${FLATPAK_DEST}/share/Cemu/
+ - cp -r bin/resources ${FLATPAK_DEST}/share/Cemu/
+ - install -Dm644 -t ${FLATPAK_DEST}/share/icons/hicolor/128x128/apps/ dist/linux/info.cemu.Cemu.png
+ - install -D -t ${FLATPAK_DEST}/bin/ bin/Cemu_relwithdebinfo Cemu-wrapper
+
+ # Cemu - END
+
+ # Ryujinx - START
+ # https://github.com/flathub/org.ryujinx.Ryujinx
+
+ - name: Ryujinx
+ buildsystem: simple
+ build-options:
+ no-debuginfo: true
+ no-debuginfo-compression: true
+ strip: false
+ arch:
+ x86_64:
+ env:
+ RUNTIME: linux-x64
+ env:
+ PKG_CONFIG_PATH: /app/lib/pkgconfig:/app/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
+ DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
+ DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 'true'
+ RYUJINX_VERSION: 1.1.1014
+ RYUJINX_TARGET_RELEASE_CHANNEL_OWNER: flathub
+ RYUJINX_TARGET_RELEASE_CHANNEL_REPO: org.ryujinx.Ryujinx
+ RYUJINX_TARGET_RELEASE_CHANNEL_NAME: master
+ build-commands:
+ - |
+ export PATH=$PATH:/run/build/Ryujinx/dotnet-sdk
+ export RYUJINX_GIT_SHORT_HASH=$(git rev-parse --short HEAD)
+ export RUNTIME_FRAMEWORK_VERSION=$(find nuget-sources -name 'microsoft.netcore.app.host.linux-x64.*' | grep -oP '(\d.\d.\d+.nupkg)' | grep -oP '(\d.\d.\d+)')
+ sed -r --in-place "s/\%\%RYUJINX_BUILD_VERSION\%\%/$RYUJINX_VERSION/g;" src/Ryujinx.Common/ReleaseInformation.cs
+ sed -r --in-place "s/\%\%RYUJINX_BUILD_GIT_HASH\%\%/$RYUJINX_GIT_SHORT_HASH/g;" src/Ryujinx.Common/ReleaseInformation.cs
+ sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_NAME\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_NAME/g;" src/Ryujinx.Common/ReleaseInformation.cs
+ sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_OWNER\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_OWNER/g;" src/Ryujinx.Common/ReleaseInformation.cs
+ sed -r --in-place "s/\%\%RYUJINX_TARGET_RELEASE_CHANNEL_REPO\%\%/$RYUJINX_TARGET_RELEASE_CHANNEL_REPO/g;" src/Ryujinx.Common/ReleaseInformation.cs
+ mkdir -p /app/bin
+ dotnet publish -c Release -r $RUNTIME /p:DebugType=embedded src/Ryujinx /p:Version=$RYUJINX_VERSION /p:SourceRevisionId=$RYUJINX_GIT_SHORT_HASH /p:ExtraDefineConstants="DISABLE_UPDATER%2CFORCE_EXTERNAL_BASE_DIR" /p:RuntimeFrameworkVersion=$RUNTIME_FRAMEWORK_VERSION --self-contained --source nuget-sources
+ if [ $? -ne 0 ]; then
+ exit 1;
+ fi;
+ cp -r --remove-destination /run/build/Ryujinx/src/Ryujinx/bin/Release/net7.0/$RUNTIME/publish/* /app/bin/
+ chmod +x /app/bin/Ryujinx.sh
+ mkdir -p /app/lib/ffmpeg
+ ln -s /usr/lib/x86_64-linux-gnu/libX11.so.6 /app/lib/libX11.so
+ install -Dm755 ryujinx-wrapper /app/bin/ryujinx-wrapper
+ install -Dm644 distribution/misc/Logo.svg /app/share/icons/hicolor/scalable/apps/ryujinx.svg
+ sources:
+ - type: archive
+ only-arches:
+ - x86_64
+ dest: dotnet-sdk
+ url: https://dotnetcli.azureedge.net/dotnet/Sdk/7.0.401/dotnet-sdk-7.0.401-linux-x64.tar.gz
+ sha256: 4634fa4da7ae4e3dadb83e320a87fb26f0cb12a7ca02bf9f10e6c3c1c91d645c
+ x-checker-data:
+ type: rotating-url
+ url: https://aka.ms/dotnet/7.0/dotnet-sdk-linux-x64.tar.gz
+ pattern: https://dotnetcli.azureedge.net/dotnet/Sdk/^([\d\.a-z-]+)$/dotnet-sdk-^([\d\.a-z-]+)$-linux-x64.tar.gz
+ - rd-submodules/ryujinx/nuget_sources.json
+ - type: git
+ url: https://github.com/Ryujinx/Ryujinx.git
+ commit: 7ccff037e87f82f3461f3e1422235e29800eaa2f
+ - type: file
+ path: rd-submodules/ryujinx/ryujinx-wrapper
+
+ # Ryujinx - END
+
# MAME - Start
+ # https://github.com/flathub/org.mamedev.MAME
- name: mame
buildsystem: simple
@@ -94,22 +1288,84 @@ modules:
- cp -r hash/ ${FLATPAK_DEST}/share/mame/
- cp -r hlsl/ ${FLATPAK_DEST}/share/mame/
- cp -r ini/ ${FLATPAK_DEST}/share/mame/
- #- install -Dm 0644 mame.ini ${FLATPAK_DEST}/share/mame/ini/mame.ini
+ - install -Dm 0644 mame.ini ${FLATPAK_DEST}/share/mame/ini/mame.ini
- cp -r language/ ${FLATPAK_DEST}/share/mame/
- cp -r plugins/ ${FLATPAK_DEST}/share/mame/
- cp -r roms/ ${FLATPAK_DEST}/share/mame/
- cp -r samples/ ${FLATPAK_DEST}/share/mame/
sources:
- type: archive
- url: https://github.com/mamedev/mame/archive/refs/tags/mame0253.tar.gz
- sha256: 52065a1ae0db365a9aa35d62bafb226edc546ad993d6c75327e166596f25e4e4
- # - type: file
- # path: mame.ini
- # - type: patch
- # path: floppy.patch
- # - type: patch
- # path: sound.patch
- # - type: patch
- # path: ym3802.patch
+ url: https://github.com/mamedev/mame/archive/refs/tags/mame0259.tar.gz
+ sha256: 46baf431079a3373ffe8d984b3ba5d62ad5b1d5e356d1f60cf60f6ad03d4cec6
+ - type: file
+ path: rd-submodules/mame/mame.ini
+ - type: patch
+ path: rd-submodules/mame/floppy.patch
+ - type: patch
+ path: rd-submodules/mame/sound.patch
+ - type: patch
+ path: rd-submodules/mame/ym3802.patch
- # MAME - End
\ No newline at end of file
+ # MAME - End
+
+ # External manifests end
+
+ - name: retrodeck
+ buildsystem: simple
+ build-commands:
+
+ # Initializing RO retrodeck config folder
+ - mkdir -p ${FLATPAK_DEST}/retrodeck
+
+ # Prep the ES-DE and RetroArch config files - I will have to SED/XMLSTARLET them soon
+ - rm -rf /app/share/emulationstation/resources/systems/unix/es_find_rules.xml
+ - cp es-configs/es_find_rules.xml /app/share/emulationstation/resources/systems/unix/
+ - rm -rf /app/share/emulationstation/resources/systems/unix/es_systems.xml
+ - cp es-configs/es_systems.xml /app/share/emulationstation/resources/systems/unix/
+ # These must be put in home folder, managed by retrodeck.sh
+ - cp es-configs/es_settings.xml ${FLATPAK_DEST}/retrodeck/es_settings.xml
+ - mv -f -t ${FLATPAK_DEST}/retrodeck es-configs/rd_prepacks
+
+ # Logo, res, move graphics directory away from default location so splash can be changed after build
+ - mv -f -t ${FLATPAK_DEST}/retrodeck /app/share/emulationstation/resources/graphics
+ - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash.svg
+ - cp -f res/splash.svg ${FLATPAK_DEST}/retrodeck/graphics/splash-orig.svg
+ - cp -rf res/extra_splashes/ ${FLATPAK_DEST}/retrodeck/graphics
+ - cp -f res/icon.svg /app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg
+ - mv -f -t ${FLATPAK_DEST}/retrodeck res/binding_icons
+
+ # RetroDECK core script
+ - cp retrodeck.sh /app/bin/retrodeck.sh
+ - chmod +x /app/bin/retrodeck.sh
+
+ # Tools
+ - mkdir -p /app/tools
+ - cp -r tools/** /app/tools
+ - find /app/tools -name '*.py|*.sh' -exec chmod +x {} \;
+
+ # Function libraries
+ - mkdir -p /app/libexec
+ - cp -r functions/* "/app/libexec/"
+
+ # Desktop entries
+ - cp net.retrodeck.retrodeck.desktop /app/share/applications/net.retrodeck.retrodeck.desktop
+ - cp net.retrodeck.retrodeck.Configurator.desktop /app/share/applications/net.retrodeck.retrodeck.Configurator.desktop
+
+ # Initializing default emulator configs
+ - cp -r emu-configs ${FLATPAK_DEST}/retrodeck/emu-configs/
+
+ # PICO-8 wrapper
+ - cp ${FLATPAK_DEST}/retrodeck/emu-configs/pico-8/pico8-wrapper.sh /app/bin/pico8
+ - chmod +x /app/bin/pico8
+
+ # Needed for ffmpeg (RPCS3)
+ - mkdir -p ${FLATPAK_DEST}/lib/ffmpeg
+
+ # Placing appdata
+ - mkdir -p ${FLATPAK_DEST}/share/appdata
+ - cp net.retrodeck.retrodeck.appdata.xml ${FLATPAK_DEST}/share/appdata
+
+ sources:
+ - type: git
+ url: https://github.com/XargonWan/RetroDECK.git
+ branch: THISBRANCH
\ No newline at end of file
diff --git a/old/removed-modules.yml b/old/removed-modules.yml
new file mode 100644
index 00000000..968982ed
--- /dev/null
+++ b/old/removed-modules.yml
@@ -0,0 +1,154 @@
+ sdk-extensions:
+ #- org.freedesktop.Sdk.Extension.dotnet6 # Needed for Ryujinx - Removed, check if it's not breaking something else
+ finish-args:
+ #- --env=QT_QPA_PLATFORM=xcb #not sure if this will break something
+
+ # pcsx2-qt needs QT6, maybe others, here until every qt emulator will support qt6 (not yuzu atm)
+ # from: https://github.com/flathub/org.profex_xrd.Profex
+
+ # - name: qt6-core5compat
+ # buildsystem: cmake-ninja
+ # builddir: true
+ # sources:
+ # - type: archive
+ # url: https://download.qt.io/official_releases/qt/6.2/6.2.4/submodules/qt5compat-everywhere-src-6.2.4.tar.xz
+ # sha256: 5de2b9e25bf7de161fbb88ecdd468ed1788bc899392fc05ed80aa590ebb352fa
+ # x-checker-data:
+ # type: html
+ # url: https://download.qt.io/official_releases/qt/6.2/
+ # version-pattern: '>([\d\.-]*)/<'
+ # url-template: https://download.qt.io/official_releases/qt/6.2/$version/submodules/qt5compat-everywhere-src-$version.tar.xz
+ # post-install:
+ # - mkdir -p /app/lib/mkspecs
+ # - cp -R /app/mkspecs/* /app/lib/mkspecs/
+ # - ln -fsr ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/libQt*.so* -t ${FLATPAK_DEST}/lib/
+ # - sed -i 's/\\([0-9]\\+\\.[0-9]\\+\\)\\.[0-9]\\+ ${_Qt6.*_FIND_VERSION_EXACT}/\\1/'
+ # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake
+ # - sed -e 's@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\" NO_DEFAULT_PATH@PATHS \"${CMAKE_CURRENT_LIST_DIR}/..\"
+ # \"/usr/lib/${CMAKE_CXX_LIBRARY_ARCHITECTURE}/cmake/\" NO_DEFAULT_PATH@' -i
+ # ${FLATPAK_DEST}/lib/${FLATPAK_ARCH}-linux-gnu/cmake/Qt6*/Qt6*Config.cmake
+ # - sed -e 's@\\($$QT_MODULE_BIN_BASE\\)@\\1 '${FLATPAK_DEST}'/bin @' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri
+ # - sed -e 's@\\($$QT_MODULE_INCLUDE_BASE \\)@\\1'${FLATPAK_DEST}'/include @'
+ # -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri
+ # - sed -e 's@$$QT_MODULE_INCLUDE_BASE/@'${FLATPAK_DEST}'/include/@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri
+ # - sed -e 's@$$QT_MODULE_LIB_BASE@'${FLATPAK_DEST}'/lib@g' -i ${FLATPAK_DEST}/lib/mkspecs/modules/*.pri
+ # cleanup:
+ # - /app/mkspecs
+
+ # XEMU: libglu removed due to a certificate issue, check libglu module for more info
+ # - name: libglu
+ # buildsystem: meson
+ # cleanup:
+ # - /include
+ # - /lib/debug
+ # - /lib/pkgconfig
+ # - /lib/*.a
+ # sources:
+ # - type: archive
+ # url: http://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
+ # sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
+ # x-checker-data:
+ # type: anitya
+ # project-id: 13518
+ # stable-only: true
+ # url-template: http://mesa.freedesktop.org/archive/glu/glu-$version.tar.xz
+
+ # Duckstation - START
+ # https://github.com/flathub/org.duckstation.DuckStation
+ # Disabled until we completely switch to QT6
+
+ # - name: duckstation
+ # buildsystem: cmake-ninja
+ # no-make-install: true
+ # builddir: true
+ # config-opts:
+ # - -DCMAKE_BUILD_TYPE=RelWithDebInfo
+ # - -DUSE_EGL=ON
+ # - -DUSE_SDL2=ON
+ # - -DUSE_WAYLAND=ON
+ # - -DUSE_X11=ON
+ # - -DUSE_DRMKMS=ON
+ # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
+ # post-install:
+ # - install -m755 bin/duckstation-qt /app/bin
+ # - cp -r ../data/* bin/translations /app/bin
+ # sources:
+ # - type: git
+ # url: https://github.com/stenzek/duckstation.git
+ # commit: 6f709468601183083b8581d4952aaba7baf77084
+ # # Cloning dep/msvc/qt is only necessary for Windows
+ # disable-submodules: true
+
+ # Duckstation - END
+
+ # Duckstation-DontUpdate - START
+ # Old version moved to QT6 so it's either this or AppImage
+ # But AppImage is a single one that keep getting updated at the same link so the sha (that's mandatory) will break the build
+ # So yeah we're stuck with this for a while
+
+ # - name: duckstation-DontUpdate
+ # buildsystem: cmake-ninja
+ # no-make-install: true
+ # builddir: true
+ # config-opts:
+ # - -DCMAKE_BUILD_TYPE=Release
+ # - -DUSE_EGL=ON
+ # - -DUSE_SDL2=ON
+ # - -DUSE_WAYLAND=ON
+ # - -DUSE_X11=ON
+ # - -DUSE_DRMKMS=ON
+ # - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
+ # post-install:
+ # - install -m 755 -t /app/bin/ bin/duckstation-nogui bin/duckstation-qt
+ # - |-
+ # for px in 16 32 48 64 128 256; do
+ # install -Dm644 ../extras/icons/icon-${px}px.png /app/share/icons/hicolor/${px}x${px}/apps/org.duckstation.DuckStation.png
+ # done
+ # - cp -r ../data/* bin/translations /app/bin
+ # sources:
+ # - type: git
+ # url: https://github.com/stenzek/duckstation.git
+ # commit: 3fb61865e505ba639609fbf16cb8bdf5c66e020c
+
+ # Duckstation-DontUpdate - END
+
+ # Ryujinx Appimage - START
+ # https://ryujinx.org/download
+
+ # - name: Ryujinx
+ # buildsystem: simple
+ # build-commands:
+ # - |
+ # tar -zxvf ryujinx-1.1.685-linux_x64.tar.gz
+ # mv -v publish ${FLATPAK_DEST}/ryujinx
+ # ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx ${FLATPAK_DEST}/bin/Ryujinx
+ # sources:
+ # - type: file
+ # url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.685/ryujinx-1.1.685-linux_x64.tar.gz
+ # sha256: bc4d7076106d7aa59c3a3ea22b83c553e5fa1a897815831adcf18cc13d729e15
+
+ # Ryujinx Appimage - END
+
+ # Vita3K - START
+ # Very broken, disabled
+ # NOTE: this is a continuos release, it's provided but not supported
+ # to update this module:
+ # wget https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip -O rd-submodules/vita3k/vita3k-14-01-23.zip
+ # sha256sum rd-submodules/vita3k/vita3k*.zip
+ # change url and sha
+ # check the branch in the url
+
+ # - name: Vita3K
+ # buildsystem: simple
+ # build-commands:
+ # - |
+ # mkdir -p ${FLATPAK_DEST}/vita3k
+ # cp -r * ${FLATPAK_DEST}/vita3k
+ # chmod +x ${FLATPAK_DEST}/vita3k/Vita3K
+ # ln -s ${FLATPAK_DEST}/vita3k/Vita3K /app/bin/Vita3K
+ # sources:
+ # - type: archive
+ # url: https://github.com/Vita3K/Vita3K/releases/download/continuous/ubuntu-latest.zip
+ # sha256: VITASHAPLACEHOLDER
+
+ # Vita3K - END
\ No newline at end of file
diff --git a/old/workflows/TEST_release_info.yml b/old/workflows/TEST_release_info.yml
new file mode 100644
index 00000000..ebf21609
--- /dev/null
+++ b/old/workflows/TEST_release_info.yml
@@ -0,0 +1,62 @@
+name: TEST_release_info
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - .github/workflows/TEST_release_info.yml
+ pull_request:
+ branches:
+ - main
+
+ workflow_dispatch:
+
+
+jobs:
+
+ Building_RetroDECK:
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Generate build ID
+ id: generating_buildid
+ run: echo "##[set-output name=build-id;]$(echo "$( git rev-parse --short HEAD )")"
+
+ - uses: actions/checkout@v3
+
+ - name: Initialize enviornment
+ run: |
+ git pull
+ git submodule init
+ git submodule update
+ sudo apt install -y flatpak flatpak-builder p7zip-full xmlstarlet appstream-util
+
+ - name: Validating the appdata
+ run: appstream-util validate "net.retrodeck.retrodeck.appdata.xml"
+ continue-on-error: true
+
+ - name: Getting version info
+ id: version
+ run: |
+ appdata="https://raw.githubusercontent.com/XargonWan/RetroDECK/main/net.retrodeck.retrodeck.appdata.xml"
+ REL_VER=$(curl -s $appdata | xmlstarlet sel -t -v "//release/@version" | head -1)
+ DES="$(curl -s $appdata | xmlstarlet sel -t -m "//release[1]" -v "description" -n | sed '1,2d;$d;s/^ */- /;/^- $/d')"
+ echo "REL_VER=$REL_VER" >> $GITHUB_ENV
+ echo -e "# Release Notes\n" >> "body.md"
+ echo "$DES" >> "body.md"
+
+ - name: Publish the flatpak in a new release
+ uses: ncipollo/release-action@v1
+ env:
+ REL_VER: ${{ env.REL_VER }}
+ with:
+ tag: ${{ env.REL_VER }}
+ name: "RetroDECK v${{ env.REL_VER }}"
+ bodyFile: "body.md"
+ #artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz"
+ allowUpdates: true
+ draft: true
+ token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
+ repo: RetroDECK
+ #continue-on-error: true
\ No newline at end of file
diff --git a/old/workflows/cooker.yml b/old/workflows/cooker.yml
new file mode 100644
index 00000000..ff8330e3
--- /dev/null
+++ b/old/workflows/cooker.yml
@@ -0,0 +1,205 @@
+name: cooker
+
+on:
+ # push:
+ # branches:
+ # - cooker*
+ # pull_request:
+ # branches:
+ # - cooker*
+
+ workflow_dispatch:
+
+
+jobs:
+
+ Job1_-_Building_P1:
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Get date for artifacts
+ id: date
+ run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M%S')"
+
+ - name: Extract branch name
+ shell: bash
+ run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
+ id: extract_branch
+
+ - name: Generate build ID
+ id: generating_buildid
+ run: echo "##[set-output name=build-id;]$(echo "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}")"
+
+ - uses: actions/checkout@v3
+
+ - name: Download global cache
+ uses: dawidd6/action-download-artifact@v2
+ with:
+ workflow: cooker.yml
+ name: global-cache
+ search_artifacts: true
+ skip_unpack: true
+ continue-on-error: true
+
+ - name: Extract global cache
+ run: |
+ tar --skip-old-files -xzvf retrodeck-cooker.tar.gz
+ rm -f retrodeck-cooker.tar.gz
+ continue-on-error: true
+
+ - name: DEBUG
+ run: |
+ echo "Listing folder $PWD contents"
+ ls -lna
+ echo "Checking for version file"
+ find ~ -iname version
+ cat $(find ~ -iname version)
+
+ - name: Initialize enviornment
+ run: |
+ git pull
+ git submodule init
+ git submodule update
+ sudo add-apt-repository ppa:alexlarsson/flatpak
+ sudo apt-get update
+ sudo apt install flatpak flatpak-builder p7zip-full
+ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+ sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13
+
+ - name: Buld part 1 - Until melonds
+ run: |
+ sudo flatpak-builder --build-only --stop-at=melonds --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml
+
+ - name: Compress cache
+ run: |
+ touch retrodeck-cooker.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build
+
+ - name: Upload build specific cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: "${{ steps.generating_buildid.outputs.build-id }}"
+ path: retrodeck-cooker.tar.gz
+
+ # this is done to speed up the things now, it may be removed later
+ - name: Compress global cache
+ run: |
+ touch retrodeck-cooker.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build
+ continue-on-error: true
+
+ - name: Upload global cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: global-cache
+ path: retrodeck-cooker.tar.gz RetroDECK.flatpak
+ continue-on-error: true
+
+ outputs:
+ buildID: "${{ steps.generating_buildid.outputs.build-id }}"
+
+ Job2_-_Build_P2_and_publish:
+ runs-on: ubuntu-latest
+ needs: [Job1_-_Building_P1]
+ steps:
+
+ - uses: actions/checkout@v3
+
+ - name: Download build specific cache
+ uses: actions/download-artifact@v2
+ with:
+ name: ${{ needs.Job1_-_Building_P1.outputs.buildID }}
+
+ - name: Extract cache
+ run: |
+ tar --skip-old-files -xzvf retrodeck-cooker.tar.gz
+ rm -f retrodeck-cooker.tar.gz
+
+ - name: DEBUG
+ run: |
+ echo "Listing folder $PWD contents"
+ ls -lna
+ echo "Checking for version file"
+ find ~ -iname version
+ cat $(find ~ -iname version)
+
+ - name: Initialize enviornment
+ run: |
+ git pull
+ git submodule init
+ git submodule update
+ sudo add-apt-repository ppa:alexlarsson/flatpak
+ sudo apt-get update
+ sudo apt install flatpak flatpak-builder p7zip-full
+ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+ sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13
+
+ - name: Create Bundle
+ run: |
+ sudo flatpak-builder --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-cooker net.retrodeck.retrodeck.yml
+ sudo flatpak build-bundle $GITHUB_WORKSPACE/local RetroDECK.flatpak net.retrodeck.retrodeck
+
+ - name: Get date for artifacts
+ id: date
+ run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M')"
+
+ - name: Extract branch name
+ shell: bash
+ run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
+ id: extract_branch
+
+ - name: Read version from version file
+ id: version
+ run: echo "##[set-output name=version;]$(cat $(find . -name version))"
+
+ - name: DEBUG - Print version name
+ shell: bash
+ run: |
+ echo "DEBUG: printing version from version file"
+ echo "${{ steps.version.outputs.version }}"
+
+ - name: Publish the flatpak in a new cooker release
+ uses: ncipollo/release-action@v1
+ with:
+ #tag: "${{ steps.version.outputs.version }}"
+ tag: "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}"
+ body: |
+ # Release Notes (Cooker)
+ This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}.
+
+ Cooker channel is provided for the community to test fixes and explore new functionality.
+ Please DO NOT open issues or ask support on this build.
+
+ artifacts: "RetroDECK.flatpak"
+ allowUpdates: true
+ prerelease: true
+ draft: false
+ token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
+ repo: RetroDECK-cooker
+ continue-on-error: true
+
+ - name: Compress global cache
+ run: |
+ touch retrodeck-cooker.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-cooker.tar.gz retrodeck-flatpak-cooker .flatpak-builder/build
+ continue-on-error: true
+
+ - name: Upload global cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: global-cache
+ path: retrodeck-cooker.tar.gz RetroDECK.flatpak
+ continue-on-error: true
+
+ - name: Upload RetroDECK.flatpak
+ uses: actions/upload-artifact@v3
+ with:
+ name: retrodeck-flatpak
+ path: RetroDECK.flatpak
+ continue-on-error: true
diff --git a/old/workflows/flathub_push_cooker.yml b/old/workflows/flathub_push_cooker.yml
new file mode 100644
index 00000000..65a4d349
--- /dev/null
+++ b/old/workflows/flathub_push_cooker.yml
@@ -0,0 +1,88 @@
+
+name: PUSH-cooker-flathub
+
+on:
+ workflow_dispatch:
+
+jobs:
+
+ Pushing_cooker_into_flathub:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Pushing
+ shell: bash
+ run: |
+
+ # EDITABLES:
+ rd_branch=${GITHUB_REF_NAME}
+ echo $rd_branch
+ gits_folder="${GITHUB_WORKSPACE}/gits" # without last /
+
+ mkdir -vp $gits_folder
+ cd $gits_folder
+ if [ -d flathub ]; then
+ rm -rf flathub
+ fi
+ git clone --recursive https://github.com/flathub/net.retrodeck.retrodeck.git flathub
+ cd $gits_folder
+ git clone --recursive https://github.com/XargonWan/RetroDECK RetroDECK
+ cd $gits_folder/RetroDECK
+
+ # NON-EDITABLES
+ #relname="$rd_branch-"$(date +%d%m%y.%H%M)
+ relname="cooker-"$(git rev-parse --short HEAD)
+
+ git checkout $rd_branch
+ git submodule init
+ git submodule update
+ # NOTE: the only linked submodules are: rd-submodules/retroarch
+ # these must be included in the exclusion list as they must be redownloaded
+ #sync -rav --progress --exclude={'res/screenshots/','shared-modules/','rd-submodules/retroarch','.git/','docs','retrodeck-flatpak/','retrodeck-flatpak-cooker/','.flatpak-builder/'} ~/RetroDECK/ ~/flathub/
+
+ cd $gits_folder/flathub
+
+ git checkout -b $relname
+
+ git rm -rf *
+ git clean -fxd # restroing git index
+
+ # Copying only a few files as the others are cloned by git in retrodeck.sh
+ cd $gits_folder/RetroDECK
+ cp -rf \
+ 'flathub.json' \
+ 'LICENSE' \
+ 'flathub.yml' \
+ 'README.md' \
+ $gits_folder/flathub/
+
+ cd $gits_folder/flathub
+ ls -lah
+
+ # manipulating manifest
+ mv flathub.yml net.retrodeck.retrodeck.yml
+
+ # Getting latest release name
+ # version=$(\
+ # curl -sL \
+ # -H "Accept: application/vnd.github+json" \
+ # -H "Authorization: Bearer ${{ secrets.TRIGGER_BUILD_TOKEN }}" \
+ # https://api.github.com/repos/XargonWan/RetroDECK-cooker/releases \
+ # | jq .[0].tag_name \
+ # | tr -d \" \
+ # )
+
+ sha=$(curl -sL https://artifacts.retrodeck.net/artifacts/RetroDECK-Artifact.sha)
+
+ sed -i "s#__SHA__#$sha#g" net.retrodeck.retrodeck.yml
+
+ echo -e "Resulting manifest:\n"
+ cat net.retrodeck.retrodeck.yml
+
+ git config --global user.name "${{ secrets.GITNAME }}"
+ git config --global user.email "${{ secrets.GITMAIL }}"
+
+ git add *
+ git commit -m "Updated flathub/net.retrodeck.retrodeck from RetroDECK/$rd_branch"
+
+ git remote -v
+ git push --force https://${{ secrets.TRIGGER_BUILD_TOKEN }}@github.com/flathub/net.retrodeck.retrodeck.git $relname
diff --git a/old/workflows/main.yml b/old/workflows/main.yml
new file mode 100644
index 00000000..0404e018
--- /dev/null
+++ b/old/workflows/main.yml
@@ -0,0 +1,188 @@
+name: main
+
+on:
+ # Triggers the workflow on push or pull request events but only for the main branch
+ # push:
+ # branches:
+ # - main
+ # pull_request:
+ # branches:
+ # - main
+
+ workflow_dispatch:
+
+
+jobs:
+
+ Job1_-_Building_P1:
+ runs-on: ubuntu-latest
+ steps:
+
+ - name: Get date for artifacts
+ id: date
+ run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M%S')"
+
+ - name: Extract branch name
+ shell: bash
+ run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})"
+ id: extract_branch
+
+ - name: Generate build ID
+ id: generating_buildid
+ run: echo "##[set-output name=build-id;]$(echo "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}")"
+
+ - uses: actions/checkout@v3
+
+ - name: Download global cache
+ uses: dawidd6/action-download-artifact@v2
+ with:
+ workflow: main.yml
+ name: global-cache
+ search_artifacts: true
+ skip_unpack: true
+ continue-on-error: true
+
+ - name: Extract global cache
+ run: |
+ tar --skip-old-files -xzvf retrodeck-main.tar.gz
+ rm -f retrodeck-main.tar.gz
+ continue-on-error: true
+
+ - name: DEBUG
+ run: |
+ echo "Listing folder $PWD contents"
+ ls -lna
+ echo "Checking for version file"
+ find ~ -iname version
+ cat $(find ~ -iname version)
+
+ - name: Initialize enviornment
+ run: |
+ git pull
+ git submodule init
+ git submodule update
+ sudo add-apt-repository ppa:alexlarsson/flatpak
+ sudo apt-get update
+ sudo apt install flatpak flatpak-builder p7zip-full
+ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+ sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13
+
+ - name: Buld part 1 - Until melonds
+ run: |
+ sudo flatpak-builder --build-only --stop-at=melonds --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-main net.retrodeck.retrodeck.yml
+
+ - name: Compress cache
+ run: |
+ touch retrodeck-main.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build
+
+ - name: Upload build specific cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: "${{ steps.generating_buildid.outputs.build-id }}"
+ path: retrodeck-main.tar.gz
+
+ # this is done to speed up the things now, it may be removed later
+ - name: Compress global cache
+ run: |
+ touch retrodeck-main.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build
+ continue-on-error: true
+
+ - name: Upload global cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: global-cache
+ path: retrodeck-main.tar.gz RetroDECK.flatpak
+ continue-on-error: true
+
+ outputs:
+ buildID: "${{ steps.generating_buildid.outputs.build-id }}"
+
+ Job2_-_Build_P2_and_publish:
+ runs-on: ubuntu-latest
+ needs: [Job1_-_Building_P1]
+ steps:
+
+ - uses: actions/checkout@v3
+
+ - name: Download build specific cache
+ uses: actions/download-artifact@v2
+ with:
+ name: ${{ needs.Job1_-_Building_P1.outputs.buildID }}
+
+ - name: Extract cache
+ run: |
+ tar --skip-old-files -xzvf retrodeck-main.tar.gz
+ rm -f retrodeck-main.tar.gz
+
+ - name: DEBUG
+ run: |
+ echo "Listing folder $PWD contents"
+ ls -lna
+ echo "Checking for version file"
+ find ~ -iname version
+ cat $(find ~ -iname version)
+
+ - name: Initialize enviornment
+ run: |
+ git pull
+ git submodule init
+ git submodule update
+ sudo add-apt-repository ppa:alexlarsson/flatpak
+ sudo apt-get update
+ sudo apt install flatpak flatpak-builder p7zip-full
+ sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+ sudo flatpak install -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13
+
+ - name: Create Bundle
+ run: |
+ sudo flatpak-builder --user --force-clean --repo=${GITHUB_WORKSPACE}/local retrodeck-flatpak-main net.retrodeck.retrodeck.yml
+ sudo flatpak build-bundle $GITHUB_WORKSPACE/local RetroDECK.flatpak net.retrodeck.retrodeck
+
+ - name: Read version from version file
+ id: version
+ run: echo "##[set-output name=version;]$(cat $(find . -name version))"
+
+ - name: Publish the flatpak in a new main release
+ uses: ncipollo/release-action@v1
+ with:
+ #tag: "${{ steps.version.outputs.version }}"
+ #tag: "${{ steps.extract_branch.outputs.branch }}-${{ steps.date.outputs.date }}"
+ tag: "0.4.0b"
+ body: |
+ # Release Notes (main)
+
+ artifacts: "RetroDECK.flatpak"
+ allowUpdates: true
+ prerelease: true
+ draft: true
+ token: ${{ secrets.TRIGGER_BUILD_TOKEN }}
+ repo: RetroDECK-main
+ continue-on-error: true
+
+ - name: Compress global cache
+ run: |
+ touch retrodeck-main.tar.gz
+ rm -rf .flatpak-builder/build/*-{2,3,4,5,6}
+ find .flatpak-builder/build -xtype l -exec rm {} \; # removing dead symlinks
+ tar --ignore-failed-read -czvf retrodeck-main.tar.gz retrodeck-flatpak-main .flatpak-builder/build
+ continue-on-error: true
+
+ - name: Upload global cache
+ uses: actions/upload-artifact@v3
+ with:
+ name: global-cache
+ path: retrodeck-main.tar.gz RetroDECK.flatpak
+ continue-on-error: true
+
+ - name: Upload RetroDECK.flatpak
+ uses: actions/upload-artifact@v3
+ with:
+ name: retrodeck-flatpak
+ path: RetroDECK.flatpak
+ continue-on-error: true
\ No newline at end of file
diff --git a/old/workflows/remove-artifacts.yml b/old/workflows/remove-artifacts.yml
new file mode 100644
index 00000000..84c41e8e
--- /dev/null
+++ b/old/workflows/remove-artifacts.yml
@@ -0,0 +1,22 @@
+name: Remove-artifacts
+
+on:
+ #schedule:
+ # Every day at 1am
+ # - cron: '0 1 * * *'
+
+ workflow_dispatch:
+
+jobs:
+ remove-old-artifacts:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+
+ steps:
+ - name: Remove old artifacts
+ uses: c-hive/gha-remove-artifacts@v1
+ with:
+ age: '2 seconds' # ' ', e.g. 5 days, 2 years, 90 seconds, parsed by Moment.js
+ # Optional inputs
+ # skip-tags: true
+ # skip-recent: 5
diff --git a/post_update.sh b/post_update.sh
deleted file mode 100644
index 4ea9580d..00000000
--- a/post_update.sh
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/bash
-
-post_update() {
-
- # post update script
- echo "Executing post-update script"
-
- local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version)
-
- if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b
- save_migration
- fi
-
- # Everything within the following ( ) will happen behind the Zenity dialog. The save migration was a long process so it has its own individual dialogs.
-
- (
- if [[ $prev_version -le "062" ]]; then
- # In version 0.6.2b, the following changes were made that required config file updates/reset:
- # - Primehack preconfiguration completely redone. "Stop emulation" hotkey set to Start+Select, Xbox and Nintendo keymap profiles were created, Xbox set as default.
- # - Duckstation save and state locations were dir_prep'd to the rdhome/save and /state folders, which was not previously done. Much safer now!
- # - Fix PICO-8 folder structure. ROM and save folders are now sane and binary files will go into ~/retrodeck/bios/pico-8/
-
- rm -rf /var/config/primehack # Purge old Primehack config files. Saves are safe as they are linked into /var/data/primehack.
- prepare_emulator "reset" "primehack"
-
- dir_prep "$rdhome/saves/duckstation" "/var/data/duckstation/memcards"
- dir_prep "$rdhome/states/duckstation" "/var/data/duckstation/savestates"
-
- mv "$bios_folder/pico8" "$bios_folder/pico8_olddata" # Move legacy (and incorrect / non-functional ) PICO-8 location for future cleanup / less confusion
- dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
- dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway)
- dir_prep "$bios_folder/pico-8/cdata" "$saves_folder/pico-8" # PICO-8 saves folder
- fi
- if [[ $prev_version -le "063" ]]; then
- # In version 0.6.3b, the following changes were made that required config file updates/reset:
- # - Put Dolphin and Primehack save states in different folders inside $rd_home/states
- # - Fix symlink to hard-coded PICO-8 config folder (dir_prep doesn't like ~)
- # - Overwrite Citra and Yuzu configs, as controller mapping was broken due to emulator updates.
-
- dir_prep "$rdhome/states/dolphin" "/var/data/dolphin-emu/StateSaves"
- dir_prep "$rdhome/states/primehack" "/var/data/primehack/StateSaves"
-
- rm -rf "$HOME/~/" # Remove old incorrect location from 0.6.2b
- rm -f "$HOME/.lexaloffle/pico-8" # Remove old symlink to prevent recursion
- dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed
- dir_prep "$saves_folder/pico-8" "$bios_folder/pico-8/cdata" # PICO-8 saves folder structure was backwards, fixing for consistency.
-
- cp -fv $emuconfigs/citra/qt-config.ini /var/config/citra-emu/qt-config.ini
- sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/citra-emu/qt-config.ini
- cp -fvr $emuconfigs/yuzu/* /var/config/yuzu/
- sed -i 's#RETRODECKHOMEDIR#'$rdhome'#g' /var/config/yuzu/qt-config.ini
-
- # Remove unneeded tools folder, as location has changed to RO space
- rm -rfv /var/config/retrodeck/tools/
- fi
- if [[ $prev_version -le "064" ]]; then
- # In version 0.6.4b, the following changes were made:
- # Changed settings in Primehack: The audio output was not selected by default, default AR was also incorrect.
- # Changed settings in Duckstation and PCSX2: The "ask on exit" was disabled and "save on exit" was enabled.
- # The default configs have been updated for new installs and resets, a patch was created to address existing installs.
-
- deploy_multi_patch "emu-configs/patches/updates/064b_update.patch"
- fi
- if [[ $prev_version -le "065" ]]; then
- # In version 0.6.5b, the following changes were made:
- # Change Yuzu GPU accuracy to normal for better performance
-
- set_setting_value $yuzuconf "gpu_accuracy" "0" "yuzu" "Renderer"
- fi
- if [[ $prev_version -le "070" ]]; then
- # In version 0.7.0b, the following changes were made that required config file updates/reset or other changes to the filesystem:
- # - New ~/retrodeck/mods and ~/retrodeck/texture_packs directories are added and symlinked to multiple different emulators (where supported)
- # - Expose ES-DE gamelists folder to user at ~/retrodeck/gamelists
- # - Add new sections [paths] and [options] headers to retrodeck.cfg
- # - Prepackaged DOOM!
- # - Update RPCS3 vfs file contents. migrate from old location if needed
-
- mkdir -p "$mods_folder"
- mkdir -p "$texture_packs_folder"
- dir_prep "$mods_folder/Primehack" "/var/data/primehack/Load/GraphicMods"
- dir_prep "$texture_packs_folder/Primehack" "/var/data/primehack/Load/Textures"
- dir_prep "$mods_folder/Dolphin" "/var/data/dolphin-emu/Load/GraphicMods"
- dir_prep "$texture_packs_folder/Dolphin" "/var/data/dolphin-emu/Load/Textures"
- dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
- dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
- dir_prep "$mods_folder/Yuzu" "/var/data/yuzu/load"
-
- dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists"
-
- cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it
- mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom"
- cp -f "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml"
- mkdir -p "$media_folder/doom"
- unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/"
-
- cp -f $emuconfigs/rpcs3/vfs.yml /var/config/rpcs3/vfs.yml
- sed -i 's^\^$(EmulatorDir): .*^$(EmulatorDir): '"$bios_folder/rpcs3"'^' "$rpcs3vfsconf"
- set_setting_value "$rpcs3vfsconf" "/games/" "$roms_folder/ps3" "rpcs3"
- if [[ -d "$roms_folder/ps3/emudir" ]]; then # The old location exists, meaning the emulator was run at least once.
- mkdir "$bios_folder/rpcs3"
- mv "$roms_folder/ps3/emudir/*" "$bios_folder/rpcs3/"
- rm "$roms_folder/ps3/emudir"
- configurator_generic_dialog "As part of this update and due to a RPCS3 config upgrade, the files that used to exist at\n\n~/retrodeck/roms/ps3/emudir\n\nare now located at\n\n~/retrodeck/bios/rpcs3.\nYour existing files have been moved automatically."
- fi
- mkdir -p "$bios_folder/rpcs3/dev_hdd0"
- mkdir -p "$bios_folder/rpcs3/dev_hdd1"
- mkdir -p "$bios_folder/rpcs3/dev_flash"
- mkdir -p "$bios_folder/rpcs3/dev_flash2"
- mkdir -p "$bios_folder/rpcs3/dev_flash3"
- mkdir -p "$bios_folder/rpcs3/dev_bdvd"
- mkdir -p "$bios_folder/rpcs3/dev_usb000"
- dir_prep "$bios_folder/rpcs3/dev_hdd0/home/00000001/savedata" "$saves_folder/ps3/rpcs3"
- fi
-
- # The following commands are run every time.
-
- tools_init
- update_splashscreens
- update_rd_conf
- ) |
- zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Finishing Upgrade" \
- --text="RetroDECK is finishing the upgrade process, please wait."
- create_lock
-}
diff --git a/rd-submodules/es-de/GuiMenu.cpp.patch b/rd-submodules/es-de/GuiMenu.cpp.patch
new file mode 100644
index 00000000..b0c035ea
--- /dev/null
+++ b/rd-submodules/es-de/GuiMenu.cpp.patch
@@ -0,0 +1,38 @@
+diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.cpp emulationstation-de/es-app/src/guis/GuiMenu.cpp
+--- emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-08-23 13:12:15.617292576 +0200
++++ emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-08-23 13:44:10.736412006 +0200
+@@ -67,2 +67,4 @@
+
++ addEntry("RETRODECK CONFIGURATOR", mMenuColorPrimary, false, [this] { openRetroDeckConfigurator(); });
++
+ if (!Settings::getInstance()->getBool("ForceKiosk") &&
+@@ -70,3 +72,3 @@
+ #if defined(__APPLE__)
+- addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); });
++ addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); });
+ #else
+@@ -75,3 +77,3 @@
+ else
+- addEntry("QUIT EMULATIONSTATION", mMenuColorPrimary, false, [this] { openQuitMenu(); });
++ addEntry("QUIT RETRODECK", mMenuColorPrimary, false, [this] { openQuitMenu(); });
+ #endif
+@@ -1758,3 +1760,3 @@
+ auto quitText = std::make_shared(
+- "QUIT EMULATIONSTATION", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary);
++ "QUIT RETRODECK", Font::get(FONT_SIZE_MEDIUM), mMenuColorPrimary);
+ quitText->setSelectable(true);
+@@ -1910 +1912,14 @@
+ }
++
++void GuiMenu::openRetroDeckConfigurator()
++{
++ // Launch the configurator.sh script
++ std::string command;
++ std::string startDirectory;
++ bool runInBackground;
++ command = "bash /app/tools/configurator.sh";
++ startDirectory = "/app/tools";
++ runInBackground = false;
++ int result = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground);
++ // You can add any checks for the script's outcome here.
++}
diff --git a/rd-submodules/es-de/GuiMenu.h.patch b/rd-submodules/es-de/GuiMenu.h.patch
new file mode 100644
index 00000000..13a6b687
--- /dev/null
+++ b/rd-submodules/es-de/GuiMenu.h.patch
@@ -0,0 +1,10 @@
+diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.h emulationstation-de/es-app/src/guis/GuiMenu.h
+--- emulationstation-de/es-app/src/guis/GuiMenu.h 2023-08-23 13:12:15.617292576 +0200
++++ emulationstation-de/es-app/src/guis/GuiMenu.h 2023-08-23 13:50:20.978700234 +0200
+@@ -46,2 +46,3 @@
+ void openOtherOptions();
++ void openRetroDeckConfigurator();
+ void openQuitMenu();
+@@ -54 +55,2 @@
+ #endif // ES_APP_GUIS_GUI_MENU_H
++
diff --git a/rd-submodules/es-de/ViewController.cpp.patch b/rd-submodules/es-de/ViewController.cpp.patch
new file mode 100644
index 00000000..2f485a31
--- /dev/null
+++ b/rd-submodules/es-de/ViewController.cpp.patch
@@ -0,0 +1,118 @@
+diff -au1r emulationstation-de/es-app/src/views/ViewController.cpp emulationstation-de/es-app/src/views/ViewController.cpp
+--- emulationstation-de/es-app/src/views/ViewController.cpp 2023-08-23 13:12:15.625292630 +0200
++++ emulationstation-de/es-app/src/views/ViewController.cpp 2023-08-23 14:29:23.547223951 +0200
+@@ -164,9 +164,7 @@
+ {
+- mNoGamesErrorMessage = "NO GAME FILES WERE FOUND. EITHER PLACE YOUR GAMES IN "
+- "THE CURRENTLY CONFIGURED ROM DIRECTORY OR CHANGE "
+- "ITS PATH USING THE BUTTON BELOW. OPTIONALLY THE ROM "
+- "DIRECTORY STRUCTURE CAN BE GENERATED WHICH WILL "
+- "CREATE A TEXT FILE FOR EACH SYSTEM PROVIDING SOME "
+- "INFORMATION SUCH AS THE SUPPORTED FILE EXTENSIONS.\n"
+- "THIS IS THE CURRENTLY CONFIGURED ROM DIRECTORY:\n";
++ mNoGamesErrorMessage = "RETRODECK COULD NOT FIND ANY ROM FILES. "
++ "PLEASE PLACE YOUR ROM FILES INTO THE APPROPRIATE "
++ "SYSTEM SUBFOLDER IN THE CONFIGURED ROM DIRECTORY "
++ "AND RUN RETRODECK AGAIN TO SCAN YOUR LIBRARY.\n"
++ "THE CURRENTLY CONFIGURED ROM DIRECTORY IS:\n";
+
+@@ -179,90 +177,3 @@
+ mNoGamesMessageBox = new GuiMsgBox(
+- HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "CHANGE ROM DIRECTORY",
+- [this] {
+- std::string currentROMDirectory;
+-#if defined(_WIN64)
+- currentROMDirectory = Utils::String::replace(FileData::getROMDirectory(), "/", "\\");
+-#else
+- currentROMDirectory = FileData::getROMDirectory();
+-#endif
+- if (Settings::getInstance()->getBool("VirtualKeyboard")) {
+- mWindow->pushGui(new GuiTextEditKeyboardPopup(
+- HelpStyle(), 0.0f, "ENTER ROM DIRECTORY PATH", currentROMDirectory,
+- [this](const std::string& newROMDirectory) {
+- Settings::getInstance()->setString("ROMDirectory",
+- Utils::String::trim(newROMDirectory));
+- Settings::getInstance()->saveFile();
+-#if defined(_WIN64)
+- mRomDirectory =
+- Utils::String::replace(FileData::getROMDirectory(), "/", "\\");
+-#else
+- mRomDirectory = FileData::getROMDirectory();
+-#endif
+- mNoGamesMessageBox->changeText(mNoGamesErrorMessage + mRomDirectory);
+- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
+- "ROM DIRECTORY SETTING SAVED, RESTART\n"
+- "THE APPLICATION TO RESCAN THE SYSTEMS",
+- "OK", nullptr, "", nullptr, "", nullptr,
+- true, true));
+- },
+- false, "SAVE", "SAVE CHANGES?", "Currently configured path:",
+- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH",
+- "CLEAR (LEAVE BLANK TO RESET TO DEFAULT PATH)"));
+- }
+- else {
+- mWindow->pushGui(new GuiTextEditPopup(
+- HelpStyle(), "ENTER ROM DIRECTORY PATH", currentROMDirectory,
+- [this](const std::string& newROMDirectory) {
+- Settings::getInstance()->setString("ROMDirectory",
+- Utils::String::trim(newROMDirectory));
+- Settings::getInstance()->saveFile();
+-#if defined(_WIN64)
+- mRomDirectory =
+- Utils::String::replace(FileData::getROMDirectory(), "/", "\\");
+-#else
+- mRomDirectory = FileData::getROMDirectory();
+-#endif
+- mNoGamesMessageBox->changeText(mNoGamesErrorMessage + mRomDirectory);
+- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
+- "ROM DIRECTORY SETTING SAVED, RESTART\n"
+- "THE APPLICATION TO RESCAN THE SYSTEMS",
+- "OK", nullptr, "", nullptr, "", nullptr,
+- true));
+- },
+- false, "SAVE", "SAVE CHANGES?", "Currently configured path:",
+- currentROMDirectory, "LOAD CURRENTLY CONFIGURED PATH",
+- "CLEAR (LEAVE BLANK TO RESET TO DEFAULT PATH)"));
+- }
+- },
+- "CREATE DIRECTORIES",
+- [this] {
+- mWindow->pushGui(new GuiMsgBox(
+- HelpStyle(),
+- "THIS WILL CREATE DIRECTORIES FOR ALL THE\n"
+- "GAME SYSTEMS DEFINED IN es_systems.xml\n\n"
+- "THIS MAY CREATE A LOT OF FOLDERS SO IT'S\n"
+- "ADVICED TO REMOVE THE ONES YOU DON'T NEED\n\n"
+- "PROCEED?",
+- "YES",
+- [this] {
+- if (!SystemData::createSystemDirectories()) {
+- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
+- "THE SYSTEM DIRECTORIES WERE SUCCESSFULLY\n"
+- "GENERATED, EXIT THE APPLICATION AND PLACE\n"
+- "YOUR GAMES IN THE NEWLY CREATED FOLDERS",
+- "OK", nullptr, "", nullptr, "", nullptr,
+- true));
+- }
+- else {
+- mWindow->pushGui(new GuiMsgBox(HelpStyle(),
+- "ERROR CREATING THE SYSTEM DIRECTORIES,\n"
+- "PERMISSION PROBLEMS OR DISK FULL?\n\n"
+- "SEE THE LOG FILE FOR MORE DETAILS",
+- "OK", nullptr, "", nullptr, "", nullptr,
+- true));
+- }
+- },
+- "NO", nullptr, "", nullptr, true));
+- },
+- "QUIT",
++ HelpStyle(), mNoGamesErrorMessage + mRomDirectory, "QUIT",
+ [] {
+@@ -272,3 +183,3 @@
+ },
+- true, false,
++ "", nullptr, "", nullptr, true, false,
+ (mRenderer->getIsVerticalOrientation() ?
+@@ -1446 +1357,2 @@
+ }
++
diff --git a/rd-submodules/es-de/Window.cpp.patch b/rd-submodules/es-de/Window.cpp.patch
new file mode 100644
index 00000000..c099d83b
--- /dev/null
+++ b/rd-submodules/es-de/Window.cpp.patch
@@ -0,0 +1,9 @@
+diff -au1r emulationstation-de/es-core/src/Window.cpp emulationstation-de/es-core/src/Window.cpp
+--- emulationstation-de/es-core/src/Window.cpp 2023-08-29 14:14:17.208301836 +0200
++++ emulationstation-de/es-core/src/Window.cpp 2023-08-29 14:12:37.307334069 +0200
+
+@@ -181,3 +181,3 @@
+ progressBarRect.barPosY += borderThickness;
+- progressBarRect.color = 0x79010FFF;
++ progressBarRect.color = 0xC858E6FF;
+ mProgressBarRectangles.emplace_back(progressBarRect);
diff --git a/rd-submodules/es-de/es-de-retrodeck-mods.patch b/rd-submodules/es-de/es-de-retrodeck-mods.patch
deleted file mode 100644
index f5f49bbd..00000000
--- a/rd-submodules/es-de/es-de-retrodeck-mods.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.cpp emulationstation-de/es-app/src/guis/GuiMenu.cpp
---- emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 09:08:12.394935336 -0400
-+++ emulationstation-de/es-app/src/guis/GuiMenu.cpp 2023-04-12 16:25:04.618753274 -0400
-@@ -10,2 +10,3 @@
- #include "guis/GuiMenu.h"
-+#include "utils/PlatformUtil.h"
-
-@@ -66,2 +67,4 @@
-
-+ addEntry("RETRODECK CONFIGURATOR", 0x777777FF, false, [this] { openRetroDeckConfigurator(); });
-+
- if (!Settings::getInstance()->getBool("ForceKiosk") &&
-@@ -69,3 +72,3 @@
- #if defined(__APPLE__)
-- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); });
-+ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); });
- #else
-@@ -74,3 +77,3 @@
- else
-- addEntry("QUIT EMULATIONSTATION", 0x777777FF, false, [this] { openQuitMenu(); });
-+ addEntry("QUIT RETRODECK", 0x777777FF, false, [this] { openQuitMenu(); });
- #endif
-@@ -1704,2 +1707,15 @@
-
-+void GuiMenu::openRetroDeckConfigurator()
-+{
-+ // Launch the configurator.sh script
-+ std::string command;
-+ std::string startDirectory;
-+ bool runInBackground;
-+ command = "bash /app/tools/configurator.sh";
-+ startDirectory = "/app/tools";
-+ runInBackground = false;
-+ int result = Utils::Platform::launchGameUnix(command, startDirectory, runInBackground);
-+ // You can add any checks for the script's outcome here.
-+}
-+
- void GuiMenu::openQuitMenu()
-@@ -1732,3 +1748,3 @@
- });
-- auto quitText = std::make_shared("QUIT EMULATIONSTATION",
-+ auto quitText = std::make_shared("QUIT RETRODECK",
- Font::get(FONT_SIZE_MEDIUM), 0x777777FF);
-diff -au1r emulationstation-de/es-app/src/guis/GuiMenu.h emulationstation-de/es-app/src/guis/GuiMenu.h
---- emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:08:12.394935336 -0400
-+++ emulationstation-de/es-app/src/guis/GuiMenu.h 2023-04-12 09:33:25.023871033 -0400
-@@ -46,2 +46,3 @@
- void openOtherOptions();
-+ void openRetroDeckConfigurator();
- void openQuitMenu();
-diff -au1r emulationstation-de/es-core/src/Window.cpp emulationstation-de/es-core/src/Window.cpp
---- emulationstation-de/es-core/src/Window.cpp 2023-04-12 09:08:12.398268670 -0400
-+++ emulationstation-de/es-core/src/Window.cpp 2023-04-14 11:03:48.261309278 -0400
-@@ -179,3 +179,3 @@
- progressBarRect.barPosY += borderThickness;
-- progressBarRect.color = 0x79010FFF;
-+ progressBarRect.color = 0xC858E6FF;
- mProgressBarRectangles.emplace_back(progressBarRect);
diff --git a/rd-submodules/mame/floppy.patch b/rd-submodules/mame/floppy.patch
new file mode 100644
index 00000000..1754f616
--- /dev/null
+++ b/rd-submodules/mame/floppy.patch
@@ -0,0 +1,41 @@
+diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp
+index 3c00336d..cda94d92 100644
+--- a/src/devices/imagedev/floppy.cpp
++++ b/src/devices/imagedev/floppy.cpp
+@@ -1707,9 +1707,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector<
+ {
+ idx = m_spin_playback_sample;
+ sampleend = m_sample[idx].data.size();
+- out = m_sample[idx].data[m_spin_samplepos++];
+-
+- if (m_spin_samplepos >= sampleend)
++ m_spin_samplepos++;
++ if (m_spin_samplepos < sampleend)
++ out = m_sample[idx].data[m_spin_samplepos];
++ else
+ {
+ // Motor sample has completed
+ switch (m_spin_playback_sample)
+@@ -1763,7 +1764,8 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector<
+ idx = m_step_base + m_seek_playback_sample;
+ sampleend = m_sample[idx].data.size();
+ // Mix it into the stream value
+- out += m_sample[idx].data[(int)m_seek_samplepos];
++ if (m_seek_samplepos < sampleend)
++ out += m_sample[idx].data[(int)m_seek_samplepos];
+ // By adding different values than 1, we can change the playback speed
+ // This will be used to adjust the seek sound
+ m_seek_samplepos += m_seek_pitch;
+@@ -1781,8 +1783,10 @@ void floppy_sound_device::sound_stream_update(sound_stream &stream, std::vector<
+ sampleend = m_sample[idx].data.size();
+
+ // Mix it into the stream value
+- out += m_sample[idx].data[m_step_samplepos++];
+- if (m_step_samplepos >= sampleend)
++ m_step_samplepos++;
++ if (m_step_samplepos < sampleend)
++ out += m_sample[idx].data[m_step_samplepos];
++ else
+ {
+ // Step sample done
+ m_step_samplepos = 0;
\ No newline at end of file
diff --git a/rd-submodules/mame/mame.ini b/rd-submodules/mame/mame.ini
new file mode 100644
index 00000000..0164486f
--- /dev/null
+++ b/rd-submodules/mame/mame.ini
@@ -0,0 +1,33 @@
+#
+# CORE SEARCH PATH OPTIONS
+#
+homepath $HOME/.mame
+rompath /app/share/mame/roms
+hashpath /app/share/mame/hash
+samplepath /app/share/mame/samples
+artpath /app/share/mame/artwork
+ctrlrpath /app/share/mame/ctrlr
+inipath $HOME/.mame;/app/share/mame/ini
+fontpath /app/bin/
+cheatpath /app/share/mame/cheat
+crosshairpath /app/share/mame/crosshair
+pluginspath /app/share/mame/plugins
+languagepath /app/share/mame/language
+swpath /app/share/mame/software
+
+#
+# CORE OUTPUT DIRECTORY OPTIONS
+#
+cfg_directory $HOME/.mame/cfg
+nvram_directory $HOME/.mame/nvram
+input_directory $HOME/.mame/inp
+state_directory $HOME/.mame/sta
+snapshot_directory $HOME/.mame/snap
+diff_directory $HOME/.mame/diff
+comment_directory $HOME/.mame/comments
+share_directory $HOME/.mame/share
+
+#
+# OSD VIDEO OPTIONS
+#
+video opengl
\ No newline at end of file
diff --git a/rd-submodules/mame/sound.patch b/rd-submodules/mame/sound.patch
new file mode 100644
index 00000000..84b51ff6
--- /dev/null
+++ b/rd-submodules/mame/sound.patch
@@ -0,0 +1,28 @@
+diff --git a/src/emu/sound.cpp b/src/emu/sound.cpp
+index a0293063..c4989abb 100644
+--- a/src/emu/sound.cpp
++++ b/src/emu/sound.cpp
+@@ -761,6 +761,9 @@ read_stream_view sound_stream::update_view(attotime start, attotime end, u32 out
+ }
+ g_profiler.stop();
+
++ if (!m_output_view[outputnum].valid())
++ m_output_view[outputnum] = empty_view(start, end);
++
+ // return the requested view
+ return read_stream_view(m_output_view[outputnum], start);
+ }
+diff --git a/src/emu/sound.h b/src/emu/sound.h
+index 15f6a574..bfa45c45 100644
+--- a/src/emu/sound.h
++++ b/src/emu/sound.h
+@@ -284,6 +284,9 @@ public:
+ return *this;
+ }
+
++ // check basic constraints
++ bool valid() const { return m_buffer != nullptr; }
++
+ // return the local gain
+ sample_t gain() const { return m_gain; }
+
\ No newline at end of file
diff --git a/rd-submodules/mame/ym3802.patch b/rd-submodules/mame/ym3802.patch
new file mode 100644
index 00000000..a48925ab
--- /dev/null
+++ b/rd-submodules/mame/ym3802.patch
@@ -0,0 +1,13 @@
+diff --git a/src/devices/machine/ym3802.cpp b/src/devices/machine/ym3802.cpp
+index 4a8f6a7ffae..d1bf2b961f6 100644
+--- a/src/devices/machine/ym3802.cpp
++++ b/src/devices/machine/ym3802.cpp
+@@ -45,7 +45,7 @@ void ym3802_device::device_start()
+
+ void ym3802_device::device_reset()
+ {
+- m_reg.clear();
++ m_reg.assign(REG_MAX, 0);
+ reset_irq(0xff);
+ transmit_register_reset();
+ receive_register_reset();
\ No newline at end of file
diff --git a/rd-submodules/melonds/hotkeys.patch b/rd-submodules/melonds/hotkeys.patch
new file mode 100644
index 00000000..8a90570c
--- /dev/null
+++ b/rd-submodules/melonds/hotkeys.patch
@@ -0,0 +1,18 @@
+diff -au1r melonDS/src/frontend/qt_sdl/main.cpp melonDS/src/frontend/qt_sdl/main.cpp
+--- melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:27:24.822375255 +0200
++++ melonDS/src/frontend/qt_sdl/main.cpp 2023-05-06 17:47:19.587498189 +0200
+@@ -1467,3 +1467,3 @@
+ actSaveState[0] = submenu->addAction("File...");
+- actSaveState[0]->setShortcut(QKeySequence(Qt::ShiftModifier | Qt::Key_F9));
++ actSaveState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_S));
+ actSaveState[0]->setData(QVariant(0));
+@@ -1483,3 +1483,3 @@
+ actLoadState[0] = submenu->addAction("File...");
+- actLoadState[0]->setShortcut(QKeySequence(Qt::Key_F9));
++ actLoadState[0]->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_A));
+ actLoadState[0]->setData(QVariant(0));
+@@ -1489,3 +1489,3 @@
+ actUndoStateLoad = menu->addAction("Undo state load");
+- actUndoStateLoad->setShortcut(QKeySequence(Qt::Key_F12));
++ actUndoStateLoad->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_8));
+ connect(actUndoStateLoad, &QAction::triggered, this, &MainWindow::onUndoStateLoad);
diff --git a/rd-submodules/ryujinx b/rd-submodules/ryujinx
new file mode 160000
index 00000000..ff79306a
--- /dev/null
+++ b/rd-submodules/ryujinx
@@ -0,0 +1 @@
+Subproject commit ff79306a50b484ce992d02a23e091d79fcde4cac
diff --git a/rd-submodules/ryujinx/nuget_sources.json b/rd-submodules/ryujinx/nuget_sources.json
deleted file mode 100644
index e943cede..00000000
--- a/rd-submodules/ryujinx/nuget_sources.json
+++ /dev/null
@@ -1,1528 +0,0 @@
-[
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.cairosharp/3.24.24.59-ryujinx/ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "441db2af76714be2fa020488537f4ad9cd99c6910e9df70c4876a828e776ffa8cd910d06c9a0f5bdf26827be0a6b2c0217eac3c060f0a46be5557083ed263a75",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.cairosharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "fd8e32d7d3e9a465202e391b0ab8b95e212900879bc4d8ac22954fd2d0f98fa579e9d25f88885ac2a4bf1eba755db940f8d131250a3ffec34dbe77431a379cab",
- "dest": "nuget-sources",
- "dest-filename": "runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.osx-x64/7.0.2/microsoft.netcore.app.host.osx-x64.7.0.2.nupkg",
- "sha512": "fdace91cf3c44efc3ccccfc06813ff773f97ada860dcea309dac1a47cf2cd44722b43e87d94fc9fae9ccd946b641662bedf1d47f89d4015d719e99563c085e61",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.host.osx-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding.extensions/4.0.11/system.text.encoding.extensions.4.0.11.nupkg",
- "sha512": "b2ba1f2a96bf14466fb31e4ac1fad25e7032688357340ad8976b8aafe7cbe39c061835a4e17d7cf6ae291d3155f07d3371f6b65ffc1c15474c3c86dbb7735e82",
- "dest": "nuget-sources",
- "dest-filename": "system.text.encoding.extensions.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.io/4.3.0/runtime.any.system.io.4.3.0.nupkg",
- "sha512": "7e0d4a238322d434a19afc79ea988d3727c1687fdd5bcd1c4c39cb6201073caabb924cc201c70545d60acf8b94cde8b783d0c268743e040c357d100677e4c5ed",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.io.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg",
- "sha512": "650799c3e654efbb9ad67157c9c60ce46f288a81597be37ce2a0bf5d4835044065ef3f65b997328cbbbbfb81f4c89b8d7e7d61380880019deee6eb3f963f70d9",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.interopservices.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices/4.1.0/system.runtime.interopservices.4.1.0.nupkg",
- "sha512": "e8511e6a4cd40f3c603df4ffbbf6a4aac4d10be79bcfd0249a9af90d55cf2a02543ad9b82e607a4665d58f28c7ce9bdb0f7f3ff9bc8ded8a252213916a771bd2",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.interopservices.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.xml.xdocument/4.0.11/system.xml.xdocument.4.0.11.nupkg",
- "sha512": "f8ae902901963f2636f39c0652d82daa9df3fb3e3d5a60493c39f6cf01ed07c7d57f175a2d2895f4a872d4e92527e5131522218d1a67da2fd491e162273a8527",
- "dest": "nuget-sources",
- "dest-filename": "system.xml.xdocument.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.5/system.memory.4.5.5.nupkg",
- "sha512": "e8c8e536c97b94ac3443c940b30dad43cf6e97dc7a8c3d989371048fe74e168606384f5e0143bdc0d86f7783bf9fdee8417964cb3a8a5d752713e90b125172dc",
- "dest": "nuget-sources",
- "dest-filename": "system.memory.4.5.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.primitives/4.3.0/runtime.win.system.net.primitives.4.3.0.nupkg",
- "sha512": "fbe0502089649df4a7e6e268f0b4270c5668f49d604ce04cbad1ab1932b4c0415c888469bad664669a1320769d8e14445bfce96111fc3d6079115f6fba1416e2",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.net.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.glibsharp/3.24.24.59-ryujinx/ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "0b25ed67932e8665ceff32b19f767200b2909b3b9daeaa83091ea9d98b084498fe7c610f629568722ba630dbe33f6102df9aee33ed2e86665703d62e20c43ae4",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.glibsharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.linux-x64/7.0.2/microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg",
- "sha512": "b50f95c6609ea02b4894b9aaf4a339aa5bddbf4aaf2b14cce78d9a51ef2cb523d8ff0765d41f3476f47018b461cbbe1af152e79b181c41efd6c06c2bf894748d",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.aspnetcore.app.runtime.linux-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.runtime.extensions/4.3.0/runtime.win.system.runtime.extensions.4.3.0.nupkg",
- "sha512": "f8ddce885541079b78ad27c1d4d53df5b78c976d6395a52cca6777606f0b8327dae6caa617e269034fb8100ab8964f60117708a25def4191e5c6c7c18e043b25",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.runtime.extensions.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.0.1/system.runtime.handles.4.0.1.nupkg",
- "sha512": "966a943195b66118277a340075609676e951216d404478ac55196760f0b7b2bd9314bfbb38051204a1517c53097bd656e588e8ab1ec336ce264957956695848a",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.handles.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg",
- "sha512": "0a5baf1dd554bf9e01bcb4ce082cb26ee82b783364feb47cba730faeecd70edc528efad0394dcce11f37d7f9507f8608f15629ebaf051906bfd3513e46af0f11",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.handles.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "61da1667a5dd1e53a5d19fbe90abbfe332d84fe755fb811a080668a47d41a97db44539e3174fd1d2a0770ff1bd83afa68c82ce06df5775da65a6054ccc12c4be",
- "dest": "nuget-sources",
- "dest-filename": "runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.resources.resourcemanager/4.3.0/runtime.any.system.resources.resourcemanager.4.3.0.nupkg",
- "sha512": "39fab03cbade2b3848d62e137313530c06b37216e24cd58c70ed6ae54bdaf9d9613a3b410375ee167c87ff935a558b1f8766ee016b8b244fde99c38fcf42a49b",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.resources.resourcemanager.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.identitymodel.tokens.jwt/6.25.1/system.identitymodel.tokens.jwt.6.25.1.nupkg",
- "sha512": "286685f006f25c79c1df6153eb802fc0ce49f44c12f4854c870709a1c3f1f6e7ce9e433d54cd92ae19e053c52d154858d2365b73ccd855b2627f593a33c579a5",
- "dest": "nuget-sources",
- "dest-filename": "system.identitymodel.tokens.jwt.6.25.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.microsoft.win32.primitives/4.3.0/runtime.unix.microsoft.win32.primitives.4.3.0.nupkg",
- "sha512": "93e6d3db61f9c2ca2048f25990dda92acd5ec74561e0c776d2c6dd8d1d55128f2c953f33d6832fb6a72bd9edca304a2551085bdeafe6e18af87619c9ba943c32",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.microsoft.win32.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gtksharp/3.24.24.59-ryujinx/ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "35f68992f86629a3face6b13ce0e17933f6576de0279f9eeb023e44fe07dc2765ac58e2636a8a6f9fbfd66f4fc428867cc2bd5a07bd4f2ed8cd8978c4c1ef195",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.gtksharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.io.filesystem/4.3.0/runtime.win.system.io.filesystem.4.3.0.nupkg",
- "sha512": "17b4a6725a2e10e9d413a803130cdbbd6abd2bf94596e68c02b15e2500fe2d4bbbc34c50f1bb9576fd91d16ae11b219eab9f470df711a03e0972d3e9162893f9",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.io.filesystem.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "5dbe6bc007a9b46491e5299602291f5dbf8cc8d51e6c1b08db2fa0efd365990b41b6e181ed6bf82e873a659396427bc0e33e85b47d645d273fef8bf8ec643631",
- "dest": "nuget-sources",
- "dest-filename": "runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.diagnostics.debug/4.3.0/runtime.unix.system.diagnostics.debug.4.3.0.nupkg",
- "sha512": "a8ce331953b1f4424aa7f4b6dfedfce9ad138940bc92f332de2bc6d05185830ec6eb832e752f62eaf425f749caadd4ea1789121cb7ed79740fa5868eba55c838",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.diagnostics.debug.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.atksharp/3.24.24.59-ryujinx/ryujinx.atksharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "6237bbfcd7f80517c9eb40d8b2ceea7586f34cc7e0aaf8e550ba6c1364d0b4bc3560a497bc7ecfb71d6e4cb08a0aabf97568cd38be6153ad74a8504cb59e9c3b",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.atksharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.0.1/system.resources.resourcemanager.4.0.1.nupkg",
- "sha512": "5165916e258dd38fa83278fb98dce271a95e0091c1274b8cf5f17d88b9e6284f7a7bf145194afe4f20250cc31ad714141f9e0687cf235ff05460fb47cea0c525",
- "dest": "nuget-sources",
- "dest-filename": "system.resources.resourcemanager.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg",
- "sha512": "9067db28f1c48d08fc52ad40a608f88c14ad9112646741ddaf426fdfe68bed61ab01954b179461e61d187371600c1e6e5c36c788993f5a105a64f5702a6b81d4",
- "dest": "nuget-sources",
- "dest-filename": "system.resources.resourcemanager.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.common/4.4.0/microsoft.codeanalysis.common.4.4.0.nupkg",
- "sha512": "564fe62e3a4b98770b5bdcc1ca119189ba96e3c52df9c5f5d150de8b3d1bf6e058ac7a3c5cd85f6fc9db3ec91e0666d93566c763a5b2913b3c58589f557a6d29",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.codeanalysis.common.4.4.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.tokens/6.25.1/microsoft.identitymodel.tokens.6.25.1.nupkg",
- "sha512": "64a53939613d80e992f8ad43230cd50680b27fbb23591360b42699a139032315630478136b98cdbc578b56fb3fa82b6650b5278c49bdaf8bf4134f99ca842fe4",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.identitymodel.tokens.6.25.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.handles/4.3.0/runtime.any.system.runtime.handles.4.3.0.nupkg",
- "sha512": "95cdae2867a2182535bd0f4d01dc3eff70319dff044b070ab7791fa2bf8688a69b00a279ed569b7f0c5f3e26bf705303dc344ecf7d1ea014c579436d8e7b7389",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.runtime.handles.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding/4.3.0/runtime.any.system.text.encoding.4.3.0.nupkg",
- "sha512": "cbe6df98acd50e2251d3343620c408af56cfe7c1979277a8ec65b5eef093e93ed93c05980902a7152ed83302d5a625d7058921baa7f446c5e67194fa4c06f20a",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.text.encoding.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/7.0.2/microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg",
- "sha512": "f7eff3e04057ef75b7fab704a1c5a4c5e81af2a931476404a591e1e0e6527cc22d530a4615a8b2be6682b4bf65de30e4fd94dfc8d140cb265a5921488fe89ca1",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.io.filesystem/4.3.0/runtime.unix.system.io.filesystem.4.3.0.nupkg",
- "sha512": "6d4c80aceffac60e1560fda34c5984bbfa2e1bd106bde2c6d3540905cc30c58e6f5f2eaf5703cef5e68e3d25a4b97982193b2db8130a50c622a498e43eb9bdca",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.io.filesystem.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.imagesharp/1.0.4/sixlabors.imagesharp.1.0.4.nupkg",
- "sha512": "66d710910a44505cdee5bbcfa7c2d2d6025891f7c1facdea8fd52e46fbc76122ab4f7bd1e1656ab782dd84292d59bddec93a1ecf8b94117dad75b5f69b52e23e",
- "dest": "nuget-sources",
- "dest-filename": "sixlabors.imagesharp.1.0.4.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.redist.glfw/3.3.8.30/opentk.redist.glfw.3.3.8.30.nupkg",
- "sha512": "2c0f00846b5ecc4e9ce429b3988f624f896924df8390faaf9c45429b1fb4e752f74c3f086b889cd9250e9a2a545db2f925c186030018cb2c3e3005dffc44aef3",
- "dest": "nuget-sources",
- "dest-filename": "opentk.redist.glfw.3.3.8.30.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.csharp/4.4.0/microsoft.codeanalysis.csharp.4.4.0.nupkg",
- "sha512": "fe0f852202c1934df0a5fe5aae60f303685035a93b9ea955c326dc0e53d8d1fd2469dfa813cc0a235b9668fb642a56a18b63eda6ad5fccb58a694abb5fb8953b",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.codeanalysis.csharp.4.4.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.windowing.graphicslibraryframework/4.7.5/opentk.windowing.graphicslibraryframework.4.7.5.nupkg",
- "sha512": "74f7edbea70485aa43a5e5f08d6221674548d9a7cf1c9879576f7a21ef1e46812559f0306a7d6ca260f2446a62a75bbdeb7f5ad8ed749ccccdf21060f50a24d1",
- "dest": "nuget-sources",
- "dest-filename": "opentk.windowing.graphicslibraryframework.4.7.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.0.1/system.reflection.emit.4.0.1.nupkg",
- "sha512": "ff7766886b945148ea65a49e4ddc648336340def2c2e94b8277b584444ec9126d96918f0bcbeb62016a530623a89ccd9eae749d62065b01058387b5d09fc7dd1",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg",
- "sha512": "be45051467a36ab965410f112a475fb81510a5595347d1cc0c46b028e0436a339218dd3c073f048c2d338b67dc13b45742290b6c46f55982503f74a8f2698818",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/crc32.net/1.2.0/crc32.net.1.2.0.nupkg",
- "sha512": "7d8d2291449dfc3fab36f3f3dee48dcc769198e9ca5e6c68b0657ef1bccb4cab12a200374e0dffbf4285d082e8016ad22db3e96431a5bd59fe5b2a1d5bea9123",
- "dest": "nuget-sources",
- "dest-filename": "crc32.net.1.2.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization.calendars/4.3.0/runtime.any.system.globalization.calendars.4.3.0.nupkg",
- "sha512": "19053b502b7160af6f6b0bc5b334a8d124f77f6b4418993294fb485d0bb318cd6e97cdbda9bf8c9927366288413cad7209c9d8156a5425a6320c453a8804fb3d",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.globalization.calendars.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.5.0/microsoft.csharp.4.5.0.nupkg",
- "sha512": "c9659e4db182cc13a544f583088c624d95b579c66231b6a8d194fdeca28459d061acbbd4a94f11773921cee091433be8c73c6547bbf2b4ee3738e805764c6fea",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.csharp.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.csharp/4.7.0/microsoft.csharp.4.7.0.nupkg",
- "sha512": "2c96988515f95714d4b83f5650f183dc6a564e0b3cf5255fa0e3ef48476debab4bde542f9f2f6c47f6620b7a71d6a515e4415e6d2e388b60817a29621d5690df",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.csharp.4.7.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.net.http/4.0.1/runtime.native.system.net.http.4.0.1.nupkg",
- "sha512": "ad933eb14740a111a81b5de6837dd0fc9390dde308fedf4338a498f97cd40ecfc65c745802e92c8ec8543d75dd262ebfef476df2e646b63cd99c609258d1bbd9",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.net.http.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.0.1/system.io.filesystem.primitives.4.0.1.nupkg",
- "sha512": "dce1c4074938391ea4ea01226812982a893bfc910e66ac99ecfe31c9b6fe635f3fbff11dcab222ed5036eb21c4f49cd3f121c310adbf87d22cf3d512bf6a9d73",
- "dest": "nuget-sources",
- "dest-filename": "system.io.filesystem.primitives.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg",
- "sha512": "5885953d09582cffd973d23a21a929064d72f2bc9518af3732d671fffcc628a8b686f1d058a001ee6a114023b3e48b3fc0d0e4b22629a1c7f715e03795ee9ee5",
- "dest": "nuget-sources",
- "dest-filename": "system.io.filesystem.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.codedom/7.0.0/system.codedom.7.0.0.nupkg",
- "sha512": "eb3d7dece2b09817d0e3606f8a2c0e0e94a0fc928f18ae5dd7d5c768606f01fe75c9d70d047c8f44f0ade90a133c77c00f9bce6cb88f09902a9d503ab2cbccc3",
- "dest": "nuget-sources",
- "dest-filename": "system.codedom.7.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.codedom/4.4.0/system.codedom.4.4.0.nupkg",
- "sha512": "13f96f49f3053ed35f94081d33a02e3d4f096d976a752a06a54eba1bb4ab76e0aa76b1723df95aaaa57880dd9dd21ac2069bbdd876a8aa950fe5dfa0f48b5cc7",
- "dest": "nuget-sources",
- "dest-filename": "system.codedom.4.4.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.primitives/4.3.0/runtime.any.system.reflection.primitives.4.3.0.nupkg",
- "sha512": "a2f374276290ad9b799d3e49cd8fe7839c07b52f22894bcd77b9470841564319fb2ebbd7503e76feef42db4e8a362af8648cf0842a1cb0b5d9a60a58ef8b205e",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.reflection.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.linux-x64/7.0.2/microsoft.netcore.app.host.linux-x64.7.0.2.nupkg",
- "sha512": "ccb3b16768fd6609212d5f71cce73f9b8e88a8da6d5918b8af814b6f811d2cde68f5b1c8abecd6b5cb47d24f82569927c1e362829204c3c269dfe15816605b0f",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.host.linux-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/7.0.2/microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg",
- "sha512": "4365c6b2e07d9c5d2dc5fb388213490ba7e00538019b7b56cc08a02f7b0b5f82f7cd24d3094be449c410f0b7b39004844bec8842b066827b47a8380228202c4a",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.logging/6.25.1/microsoft.identitymodel.logging.6.25.1.nupkg",
- "sha512": "48218fef14ea564f1c3577a1cd5a2005d31d504569df97bc427fee245b4a6ad0e8370c560a0c9da8ea6d0283ba0f75f45bcf4f2c157eb2870c4fc94f654dce62",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.identitymodel.logging.6.25.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "b2cf809fe50c4b46bd6f2372265cd3059622550123afceb5dbb2410906c07a7f47bae4273584d29253d5e7a63a17c68c7ba0434608bbc8fd4d00e479b2f128ff",
- "dest": "nuget-sources",
- "dest-filename": "runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.0.1/system.reflection.emit.lightweight.4.0.1.nupkg",
- "sha512": "542863fa085a31705b0b294b64744c11617a098beae4d5664beb53189148d19246c9a112de30f2d597e0888069a414f2aed8e94a2b369294a81b24b991bc2149",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.lightweight.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg",
- "sha512": "ad58af07296bd084907a089f92026fa3898b764eb9d6a07c9414b550a83ac60456f32a34127c29bb93a9633fb07ba9fd828f7b41a31dce5ff019a7cf1ab29435",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.lightweight.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/6.0.0/microsoft.extensions.dependencymodel.6.0.0.nupkg",
- "sha512": "4222e75931c6e471e40966d3cb47ed73987b1bf9082d6753ef41a0ec6c6011df654847b540bc67accfe24b258fa2ea188be5c4e4458849afe7bff1d376e78789",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.extensions.dependencymodel.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.0/netstandard.library.2.0.0.nupkg",
- "sha512": "e3d64072b9cd9f9e86209c06a22688ecda7070427c9a35327d2a9560824c0e1381ccf7bc1d21d2ef8b301761f4bfc7f38fba712df7188d2f4fe4f748aac4d0c7",
- "dest": "nuget-sources",
- "dest-filename": "netstandard.library.2.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/1.6.0/netstandard.library.1.6.0.nupkg",
- "sha512": "9838af4e2a3621de24d117c7fa58e5e8f170e50ea4e0ae3fe3d3401dfadbefd6eb5ecc3b64532c8340f6340727822eed305ef3bc21629f2bb6d76c639d054925",
- "dest": "nuget-sources",
- "dest-filename": "netstandard.library.1.6.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/netstandard.library/2.0.3/netstandard.library.2.0.3.nupkg",
- "sha512": "e78f0cea69c14895b1b089644077dbce8631a626055d96522f4d29e061d8bfc3e48aa1419e74faf265b998612c03f721f5f0cef4690f824150a5689764dee601",
- "dest": "nuget-sources",
- "dest-filename": "netstandard.library.2.0.3.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.3.0/system.numerics.vectors.4.3.0.nupkg",
- "sha512": "1defa2bb3a3791c3a150cb972b39f5f227dd582e31b42110259fd9cd58a51e0325c309c44fd0152d38c29b90397ce9a1d9b3362b24437a0e0fda53d3a354831c",
- "dest": "nuget-sources",
- "dest-filename": "system.numerics.vectors.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg",
- "sha512": "9c04ec0530f608aaf801837a791b33857e2ca6d2265a6049c01fd4e972825967e709cad3070f174829b7400f608e9a641d3afc3a45d4636d4c47dd43dd0657b3",
- "dest": "nuget-sources",
- "dest-filename": "system.numerics.vectors.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.4.0/system.numerics.vectors.4.4.0.nupkg",
- "sha512": "81d46b509b3546b8d6dc9079a7cda162303aef1a1e14bbe1d127522168d388df2a13195b16dfd1b57c1560d73906e909fdff4e2b34104ba81a9336c97874ea1e",
- "dest": "nuget-sources",
- "dest-filename": "system.numerics.vectors.4.4.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/silk.net.core/2.16.0/silk.net.core.2.16.0.nupkg",
- "sha512": "9cea9e04ab772b40da0f48e5f7fede810ee7380bdec00fe98fa59bd2234664adec38ef63e7e0d6fa4cf83e0ecd6054901a814a28b9c804fbac33ff045cb9f3df",
- "dest": "nuget-sources",
- "dest-filename": "silk.net.core.2.16.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.regularexpressions/4.1.0/system.text.regularexpressions.4.1.0.nupkg",
- "sha512": "9b612027e43c33cc256e016e0b400547c5923e93ab6ed1a40d2b97292cb18a1195fa79aba2b0166a6b11842a0fef6685d31b848375daffdf6d2acf297af40bbe",
- "dest": "nuget-sources",
- "dest-filename": "system.text.regularexpressions.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.mathematics/4.7.5/opentk.mathematics.4.7.5.nupkg",
- "sha512": "6b66bd3a3b81e38f60c67f925718aeb103ce556d8424f654bdc1e77df8fca018b570c911c7c9d95b298d0f38e39a08038d1c7572ea28cb171945199e72468d5d",
- "dest": "nuget-sources",
- "dest-filename": "opentk.mathematics.4.7.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal/4.3.0/system.security.principal.4.3.0.nupkg",
- "sha512": "db8a1ed0d189637d9ef83147550ce5da890cf6ec189a7d006ba9de86ab55679e7f025e18bdaed2dc137ddf82a7e6a0131fb4d54d4264831862b1d7c5ee62837e",
- "dest": "nuget-sources",
- "dest-filename": "system.security.principal.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.numerics/4.0.1/system.runtime.numerics.4.0.1.nupkg",
- "sha512": "333a3ba974e80ee66d33a9d8412e0bd585350bd30ecc65ed35e9d7c69284dbb90bc8b8d019c40476f3277049e0c7ae9b05a7d1e27614f057f39a141132304cd4",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.numerics.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.net.sockets/4.3.0/runtime.win.system.net.sockets.4.3.0.nupkg",
- "sha512": "d70b564d53be12665bd4ddb4ce64e60fef42d17c68368a6c7877e059f41f3218bbb72867162b740bf3bd363304397eacbda8c48ea4f83d2d3ec958c11d23493d",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.net.sockets.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.console/4.0.0/system.console.4.0.0.nupkg",
- "sha512": "44937dfe632127d3a7c89ca77502eeb6f66201ef135384e04b570a90a3eee3d72497869344c759c35295d6a4b46afd561ba19562dfff9896ecf2d4b07e96fb9b",
- "dest": "nuget-sources",
- "dest-filename": "system.console.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win7-x64.runtime.native.system.io.compression/4.3.0/runtime.win7-x64.runtime.native.system.io.compression.4.3.0.nupkg",
- "sha512": "892d1791458f9a3901a72630af8a2aa3ffad827da90abca8cca9c972d202f809e6249eb8e06a4b79bf61a09fb60589e923c52a8a5300274de04557aa2992b2ac",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win7-x64.runtime.native.system.io.compression.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win7.system.private.uri/4.3.0/runtime.win7.system.private.uri.4.3.0.nupkg",
- "sha512": "4fd1c04141e6ee4f5fe0a906e7362651afd5cb995cd9fcd1049927a732b071f827bb962df1ea4f3630f3c4e928a0c1911fd82c838e654208c771dee6398abb3d",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win7.system.private.uri.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.dotnet.platformabstractions/3.1.6/microsoft.dotnet.platformabstractions.3.1.6.nupkg",
- "sha512": "55b87f544874686bed96889953b7e99e43426b79b0fac31cc452e0f4a27ca5cc08522c0ac967bf9df649f7c04137a5e2553d134ad79d5c1e69578367c2b4b4c6",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.dotnet.platformabstractions.3.1.6.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg",
- "sha512": "680a32b19c2bd5026f8687aa5382aea4f432b4f032f8bde299facb618c56d57369adef7f7cc8e60ad82ae3c12e5dd50772491363bf8044c778778628a6605bbc",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.extensions.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.extensions/4.1.0/system.runtime.extensions.4.1.0.nupkg",
- "sha512": "42d009be57d6497aa0724924891289f3decd916d0432c1c865cc0494092f5e59287f632a70c5060b3c78e361ab04510d75dfb3c2d2853f54201f735eb6e2dea6",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.extensions.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection.extensions/4.3.0/runtime.any.system.reflection.extensions.4.3.0.nupkg",
- "sha512": "8de7a4c53fc0324e766bfec360342ee4a4b99a5975a9d61faab0a715ef71ff97aa83383a5a8affb354c02a4e2fbbb91e1b4ae6b282d2880108cb489f06aba500",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.reflection.extensions.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.threadpool/4.3.0/system.threading.threadpool.4.3.0.nupkg",
- "sha512": "450a40f94a48e9396979e764e494ad624d8333f3378b91ea69b23fc836df8f5c43bbd6c8cfd91da2ab95a476e1ff042338968e09b720447f2241c014bfc75159",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.threadpool.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading/4.3.0/system.threading.4.3.0.nupkg",
- "sha512": "97a2751bdce69faaf9c54f834a9fd5c60c7a786faa52f420769828dbc9b5804c1f3721ba1ea945ea1d844835d909810f9e782c9a44d0faaecccb230c4cd95a88",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading/4.0.11/system.threading.4.0.11.nupkg",
- "sha512": "05c0dd1bbcfcedb6fc6c5f311c41920a4775f8a28a61ca246b6c65ad8afd9b04881d3357880af000ac056fd121fc5c3ec0b56d6fd607e0c27e7a639157c85e3e",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/libhac/0.17.0/libhac.0.17.0.nupkg",
- "sha512": "870d5f2cbd27c87bb1ed92294847b2433bcc47a078df7643b853442fe06707ae9d636626045bb82fec247533d56b52f2ade9934f9cd7a911fb40fe1cee4bf24a",
- "dest": "nuget-sources",
- "dest-filename": "libhac.0.17.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/concentus/1.1.7/concentus.1.1.7.nupkg",
- "sha512": "ac1cbf5172bbceaf9961ee591fbf39f774720b1c5e841d9829068bf13af6a3519ce957b62c2695954a0cb6ce8bce5d4773941b17810b6c7c3e57a0821e7c0922",
- "dest": "nuget-sources",
- "dest-filename": "concentus.1.1.7.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/shaderc.net/0.1.0/shaderc.net.0.1.0.nupkg",
- "sha512": "04ae2e3da77b5ae29e795291372ca63dcb90534043cbc432f25b72383832a0f010f0e346e7d022a1fb42068c7ec300e37c3592389607c36219847bbb060e2fc5",
- "dest": "nuget-sources",
- "dest-filename": "shaderc.net.0.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography/4.0.0/runtime.native.system.security.cryptography.4.0.0.nupkg",
- "sha512": "83b8befe1f76e75346ea2e49cf27aa86489813034dd6e2845ac700ddb155602968a7c1d9806770418c0426e304aef1efc24b3abd4c57f792cb32449c2adf1310",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.security.cryptography.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.console/4.3.0/runtime.win.system.console.4.3.0.nupkg",
- "sha512": "97473714049c029256d04027f825f0ec4cbd208d4455add8034496425e515437de812f1bd54ba65b00cdee86573502db0662f97100c52bcb47add4d67163febc",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.console.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "c9f219515e268cf40e16b135bd64cba95c35e866dd9bc34954159562314d01d2f9ea7eb8b0db94acf6bdac83d651d90bad7890cb657ffe40fa3440ec662c9944",
- "dest": "nuget-sources",
- "dest-filename": "runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.primitives/4.0.1/microsoft.win32.primitives.4.0.1.nupkg",
- "sha512": "382bd3a66349e077fdf622a69a2d9e2a07d15143cf238f4fa21c74f2c1e5592f8ba97e6fb956c1c69ca0cf4eba91ca4a7d3c8ef195289c5a0e95bcac52e794be",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.win32.primitives.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg",
- "sha512": "366f07a79d72f6d61c2b7c43eaa938dd68dfb6b83599d1f6e02089b136fa82bec74b6d54d6e03e08a3c612d51c5596e3535cbc2b29f39b97a827b3e7c79826f0",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.win32.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "ee5d047908b99b776ff9bb54856454b24b09a0f9271b127239543b1f5faa3381a032d9eeb4d813d01b5a4b7d183b6a16250f159fdc450d5314a7eace1550bea3",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg",
- "sha512": "d4057301be4ec4936f24b9ce003b5ec4d99681ab6d9b65d5393dd38d04cdec37784aaa12c1a8b50ac3767ed878dae425749490773fec01e734f93cf1045822b3",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.compilerservices.unsafe.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/5.0.0/system.runtime.compilerservices.unsafe.5.0.0.nupkg",
- "sha512": "23226c503b06abecee5a9604a6e4dd3dabcdf921f55d6aa6dad2bab1ca12a001c7866af5a6de01cc9b4ace54e5c8ee1d5c2fd29dd9dfd7eda3ed86f9b35fa59f",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.compilerservices.unsafe.5.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.compilerservices.unsafe/4.7.0/system.runtime.compilerservices.unsafe.4.7.0.nupkg",
- "sha512": "14c154122872d3929f4f691aa2cb8db78f62b8b6e18b278b39a53d128d93b5cc59be330fa9b6b4613c81f9acfe004f1c97f2f815df753a8b97628c17dd543605",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.compilerservices.unsafe.4.7.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.ext/2.16.0/silk.net.vulkan.extensions.ext.2.16.0.nupkg",
- "sha512": "1efe3177b98eec2457c6ee7ade30012580cf6077f6985ed76a9fb5ad358a9934cc9dd621bc1fdedcca90219f321e952344b898fdb5b23a59a6445e870d8d6a00",
- "dest": "nuget-sources",
- "dest-filename": "silk.net.vulkan.extensions.ext.2.16.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tools/4.3.0/runtime.any.system.diagnostics.tools.4.3.0.nupkg",
- "sha512": "bd257401e179d4b836a4a2f7236a0e303ae997d2453c946bf272036620a0b14e85e5f42c229332930a954655ab4cae359d191a3e3d9746df09535a651367764c",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.diagnostics.tools.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.private.uri/4.3.0/runtime.unix.system.private.uri.4.3.0.nupkg",
- "sha512": "203ebe272791d79ab0c40afe9d0543852ee91b9fb4ae5bc15524d97728bc8bc9d7e0cbcf65d1fab8cfb0aa7a4ae37e7938933eef127aa5ea46f60e57b6ad2d91",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.private.uri.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.globalization/4.3.0/runtime.any.system.globalization.4.3.0.nupkg",
- "sha512": "3aac1a076212fae7d0ac81d2b5fdf216b064a1d890577307f89c9a4984c239838c3bdfac4dea052027de090704839319231eef49ce542f3e8bb2f85ba23d28dc",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.globalization.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.accesscontrol/4.5.0/system.security.accesscontrol.4.5.0.nupkg",
- "sha512": "e9142d713f93c8380b505b009e699d7d144674b60ac526469123ce774e76b6f605c4e4cc6906fa00d970846a99b4d3b9d8fa2c682a17bbbb9ab459deba303198",
- "dest": "nuget-sources",
- "dest-filename": "system.security.accesscontrol.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.analyzers/3.3.3/microsoft.codeanalysis.analyzers.3.3.3.nupkg",
- "sha512": "0d4896db8aff9d731c5b1c8f73a4b37460c3f08080fbeac0ecf169abf5bdff9c9a994778f453816b888e939d9d0d615245c91a2e4ba31f85d2ea8de222767104",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.codeanalysis.analyzers.3.3.3.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.timer/4.3.0/runtime.any.system.threading.timer.4.3.0.nupkg",
- "sha512": "c0a1fc3661b4e21f329f88a8d2cbf7152698427778add9f850476fc9abe7cdf9b86df79362d6df025f7e15d53f5eb7937d8ac49bdef13fd9eca973a284929fcf",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.threading.timer.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "4981b2d7a106703b185e176ad35bfda149156f3b752778fa71c56b3686407765fd2b6625de352bd563aac1e1e8769d7886cc59a0d5d0bfb41ed60277360beb81",
- "dest": "nuget-sources",
- "dest-filename": "runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.globalization.calendars/4.0.1/system.globalization.calendars.4.0.1.nupkg",
- "sha512": "e6f3f0fc443c52cbe754ccfe6c7752206557db7603187b0f1ab7e21fcb466248ee20844d9ce9f5f114e6daa5944a3293cca47f3c02a2e735a7b494f29f2278c0",
- "dest": "nuget-sources",
- "dest-filename": "system.globalization.calendars.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.net.sockets/4.3.0/runtime.unix.system.net.sockets.4.3.0.nupkg",
- "sha512": "31b62be088315ead04d89f452a6c49a656b88f0668f7dadb2790511675d48705e01c9df24dbed3a0095157875c208ab6e6b5b6afc82bac13e4d6cdd3026f8424",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.net.sockets.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.net.http/4.1.0/system.net.http.4.1.0.nupkg",
- "sha512": "55ef2f727784e744ba069bc0cdd1586ed714cb9239ab724c650629055f4f2e9f88493afd176e833d46d1493974a8e95c805c4ed4d989f095d6def8d39322fd7c",
- "dest": "nuget-sources",
- "dest-filename": "system.net.http.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.abstractions/6.25.1/microsoft.identitymodel.abstractions.6.25.1.nupkg",
- "sha512": "9cb8de51706bc3d992cdf2500714b8242cc6ea15bdbeb34702de1acc501ec16a678ecf61b1ebcfef512d9482bc9311c12269bf803124a6351884d1077f08cbfd",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.identitymodel.abstractions.6.25.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.registry/4.5.0/microsoft.win32.registry.4.5.0.nupkg",
- "sha512": "2ca99fd058a083064184da33d12f72a5c43412151d426c309e2284a5df4b722b2f26dc72616ab6452a24ed81693839b756861d47eea27d60d7db7ff6749ab664",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.win32.registry.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.timer/4.0.1/system.threading.timer.4.0.1.nupkg",
- "sha512": "6aa43dc5b3914050850b8ddafcc2256e60670d51c0f1b38b0d26d80f36e76cf5b40d6053bf92b4abecce5f786de5b13daa70eddf541865509c7a73fe3785de4b",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.timer.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.net.sockets/4.1.0/system.net.sockets.4.1.0.nupkg",
- "sha512": "b231a1ca9d281923ffa1b8dbafa2cc074ce679fc2d473ad7c7192cdc3b51c8ab125c606cbbe0248e02b415e384bfba1bdbc59b28a139589c78aa3687e0236019",
- "dest": "nuget-sources",
- "dest-filename": "system.net.sockets.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.threading.tasks/4.3.0/runtime.any.system.threading.tasks.4.3.0.nupkg",
- "sha512": "5f37a56f5d6c7fc198c7ef76b822b85284f9d7d1c06583c26a698793ade65da1b273d5fb03c20be1eb91a9c835f7122ad2775f4e51dffb2758fabac2a30f8c23",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.threading.tasks.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.diagnostics.tracing/4.3.0/runtime.any.system.diagnostics.tracing.4.3.0.nupkg",
- "sha512": "0b480d21e23c38965222be7fa1e1a0c7e444cebdf400d1db8d3ac609f893b82d78c5d8b271da61808b7b179dd6466a0090bd807fc2d35020f93a00f0213bb436",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.diagnostics.tracing.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.console/4.3.0/runtime.unix.system.console.4.3.0.nupkg",
- "sha512": "7c5cbda7d12315fff6b1e036d55ea27140de8b849f1a9705fd2710a00a2b70f06f534eb0d3e3c8ffb019e1a47d96c559ac61d5fc9d840e48f6e56542fdaccb83",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.console.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/msgpack.cli/1.0.1/msgpack.cli.1.0.1.nupkg",
- "sha512": "8d024b49d44c94b98914f064c5196ae4d497be44f4eb2f54354e9f6c01134a11d14cd08351864720fcd8b398908da4bd62623b379323fa9d88bbe251c9dbc665",
- "dest": "nuget-sources",
- "dest-filename": "msgpack.cli.1.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.osx-x64/7.0.2/microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg",
- "sha512": "bd49fdf797e4754971271224eed97051574872e6bf617704386cef00d2de2c61b579cdc7908c2192230fe3c80048bc0d621ce06e49ffa4481fd923cdc12489dc",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg",
- "sha512": "299c5a96fffdcaf1972e3e3d1c727837d18ac9e88cb79c09914f12ff1de7280dff10c9232a49a1c1d3ba7785a5cf76f28c9dce414f0a2a567688de7fd5331dc8",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system/4.0.0/runtime.native.system.4.0.0.nupkg",
- "sha512": "55ff3eafa406ec3d8e33d8be44d0d06352ce746abffdec1378716b275d634e133fc1bc56fc312bf0d921efc59e8de4ac811022cc34a77fc1f1abc982c931932b",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.jsonwebtokens/6.25.1/microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg",
- "sha512": "7c8a0e5dcc06de6fa5a4700936cbc311e32289138e81150562aab78a0f74482b1782c7c7a60f3a0fd65eae53f27cf8a2695808c45231d426ab6dd564b55f33c7",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/6.0.0/system.collections.immutable.6.0.0.nupkg",
- "sha512": "f8036412e384c5c5af6d28f4eab2543207d2ebbb16c47b70f6c471bc5aa4b9f44404c47d776d295191f20a89caa898abd73a2304dcaf77979174ced2d9160169",
- "dest": "nuget-sources",
- "dest-filename": "system.collections.immutable.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "6de9544b4da49f127680cf5b3b4afea96bfcac3293038a1b0a12eea0ad60be368af31ee1dfd66d48d458b40200738c04aa0c71adcc54ae2dddbea2cd50d6f28d",
- "dest": "nuget-sources",
- "dest-filename": "runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io.compression/4.1.0/system.io.compression.4.1.0.nupkg",
- "sha512": "2402b7ba4f0b43bb916cbfd608f9efdb9f60406d2a19cd9e7a677867806962c30b5666b6270b873ff9748b4fc3f7fd6e0451f2a5214d5478593f57d4d8430979",
- "dest": "nuget-sources",
- "dest-filename": "system.io.compression.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime/4.3.0/runtime.any.system.runtime.4.3.0.nupkg",
- "sha512": "bfee3c68312296860e5459af5e770c2e9fcd4ac134361fd569a9ce1e6574b9ae3978aad403f89639a4b5bac8ee5bb0ee1b8edb819e9a60f13ca5bd1812889bbd",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.runtime.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding.codepages/6.0.0/system.text.encoding.codepages.6.0.0.nupkg",
- "sha512": "ec873a95ec517de2c5a5364ada30974ddd5e0fafef2ad2517609a1900b5059d35757536fd073805001fa68d5b56a3d4647010a96c9eb233b1d172a3b45fbe4a9",
- "dest": "nuget-sources",
- "dest-filename": "system.text.encoding.codepages.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg",
- "sha512": "9f7fdece330a81f3312ea7c804927852413bee2c929f3066b736993803df47cc0692fbca236c222bf19dc8f59b42f54f2a4c00da9a4d624e458da5874d127ce6",
- "dest": "nuget-sources",
- "dest-filename": "system.net.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.net.primitives/4.0.11/system.net.primitives.4.0.11.nupkg",
- "sha512": "50d5a977a4926fbfaf47bc4656111ed6edb8bb6acfff0cc5c2ee9c104628a255c8298a649f33ca2abdf9c7dacf4bfbf15e48ab7f92bd797b7d50ca328fac48b9",
- "dest": "nuget-sources",
- "dest-filename": "system.net.primitives.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.pangosharp/3.24.24.59-ryujinx/ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "61b96fa224cd3411e91aa6690fa764455418a655ac867d1deb4eca5acc174d2115ad68310e4e4c6f9d6db5bf6169a99383617ce2fc4b123071a7e13e9b77369f",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.pangosharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.primitives/4.0.0/system.security.cryptography.primitives.4.0.0.nupkg",
- "sha512": "a11562f4fd90ff39c12af2078aa3743e323d8a70fe98cfe3d7e0ec182a2166d353c1ed8d76dd2a9525a80287d7dea228f04982edef6584b89f32f72647b2822f",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.primitives.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "e65a6a1f1928cfb760c395a399542dc7f9087399c53874376604504ae60abd2da24ed735ebd148d335000a5e35c8108ea55404685e902df392eac2e8d38fb665",
- "dest": "nuget-sources",
- "dest-filename": "runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "4afac5cc1734330a6103880e790d639e825bfb1b34dbd42083762c47db5e5dab6c03efd16049ac03861d7d87746caed09c7534241d51b7341d47ba6af7e8dd31",
- "dest": "nuget-sources",
- "dest-filename": "runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.system.diagnostics.debug/4.3.0/runtime.win.system.diagnostics.debug.4.3.0.nupkg",
- "sha512": "a11bee46985198d0cf9717b99dfb1e92a22875ad5555c175562e53b81797ce4b70fba8ad0620b64b6be9ef9a9584d17bffe6597785010bdddde87e1ea27ce7f4",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.system.diagnostics.debug.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.linux-x64/7.0.2/microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg",
- "sha512": "caaf98ba70b486f85686d40d973849967cef077ec53d1b3b4bd2e25d6c24a83498ea790f37feebe5db71e108df2ddf4f752adf0223382741405c186efa25d688",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.runtime.linux-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.giosharp/3.24.24.59-ryujinx/ryujinx.giosharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "39d109adc3ce6b0ec8c4ad5d33c780d10d03c8632786f0eca0704163580d8f70cdea0e42f8ee7ea933bb0281cb58e5cbbf7ff2ccd2e51da4f23dc2f031bf13ba",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.giosharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/sharpziplib/1.4.1/sharpziplib.1.4.1.nupkg",
- "sha512": "3f051f41f91577291da0d317d210547752251aae07f5060c1f8ff71917477f44ade9674f9862d6ce76d3c2a7a57b700165ee573286054d6dee1ea825f383f59e",
- "dest": "nuget-sources",
- "dest-filename": "sharpziplib.1.4.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.vulkan.dependencies.moltenvk/1.2.0/ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg",
- "sha512": "d1fbf91712fcaadbd9151eb2dfe5cd1a58a0add3737053d5c53caebcb64165db1a542a2ab4d95a180d356abcc028a97491b91992cff5b1e80091758e54ba0c31",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.graphics.vulkan.dependencies.moltenvk.1.2.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.objectmodel/4.0.12/system.objectmodel.4.0.12.nupkg",
- "sha512": "f5191cdb360bd2624abd7454c66862540f97aa19df92ea0854786b9d3cb9549e95c6194cfe8adc01589203c4feb1673a129c4929486bcb5f8db83ea535477c53",
- "dest": "nuget-sources",
- "dest-filename": "system.objectmodel.4.0.12.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io.compression.zipfile/4.0.1/system.io.compression.zipfile.4.0.1.nupkg",
- "sha512": "49322ce411efafb4b55d43b0d7a52bc334990e1e45b321d01f0f394cf1aaba15845603d6f08a12c8f09454a03518e6c0ab7996ba73b1116c5c7f685d768bc62c",
- "dest": "nuget-sources",
- "dest-filename": "system.io.compression.zipfile.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.0.1/system.reflection.primitives.4.0.1.nupkg",
- "sha512": "08ad6f78c5f68af95a47b0854b4ee4360c4bad6e83946c2e45eaa88b48d27d06618c6b7479bd813eb5f30a2db486590d17645e9c0e06a72dbe12ffd37730707e",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.primitives.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg",
- "sha512": "d4b9cc905f5a5cab900206338e889068bf66c18ee863a29d68eff3cde2ccca734112a2a851f2e2e5388a21ec28005fa19317c64d9b23923b05d6344be2e49eaa",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.management/7.0.0/system.management.7.0.0.nupkg",
- "sha512": "d0469d2a5ed07e7345ce759276c92cf30bb9d5680db68e1613917793d698dd1db8301361fb33970bae77ad0f506d1ae7a56f96ea0b5d854d352f58e69bbbda7f",
- "dest": "nuget-sources",
- "dest-filename": "system.management.7.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.text.encoding.extensions/4.3.0/runtime.any.system.text.encoding.extensions.4.3.0.nupkg",
- "sha512": "656aa8bd9d7e19534964ac7b8405615f00359779e322d4cfe1f18c132fec4a4f52c5588bfe61cec9966a9142a73315f5d2b9e5a7c524b418364f0322b20961c3",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.text.encoding.extensions.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.0.1/system.reflection.emit.ilgeneration.4.0.1.nupkg",
- "sha512": "c3819cd3a58f609ff579652536f9f414481caa4d9e7dc277e0d3c8c8fe8e0ff90806fa94f7c6436d4af853c6fccd26d5af57f0a49c5baceef4e0daaa39e26773",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.ilgeneration.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.emit.ilgeneration/4.3.0/system.reflection.emit.ilgeneration.4.3.0.nupkg",
- "sha512": "e9be5f62bf64b1947a49857337306a5d0980686b58d665989e94006ab04aa7e0bbf4d8543d1b57d5bb38079052f275f339b73054a7357e4fa357208a0ac85d69",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.emit.ilgeneration.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.runtime.extensions/4.3.0/runtime.unix.system.runtime.extensions.4.3.0.nupkg",
- "sha512": "54b81784c08e934389c59e6e155af6b1855e4bbc41678b01a702c94e6daba87c6ddfd16fe9e2cb61f3097bfa4950dbc37781454d027ce5ba6c50a393cc91b888",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.runtime.extensions.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/13.0.1/newtonsoft.json.13.0.1.nupkg",
- "sha512": "83731b662eaf05379a23f8446ef47bbc111349dd4358b7bd8b51383fe9cf637e2fe62f78cea52a0d7bdd582dc6fbbb5837d4a7b1d53dcf37a0ae7473e21ee7b1",
- "dest": "nuget-sources",
- "dest-filename": "newtonsoft.json.13.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime/4.3.0/system.runtime.4.3.0.nupkg",
- "sha512": "92ab2249f08073cfafdc4cfbd7db36d651ad871b8d8ba961006982187de374bf4a30af93f15f73b05af343f7a70cbd484b04d646570587636ae72171eb0714fb",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime/4.1.0/system.runtime.4.1.0.nupkg",
- "sha512": "4b05eb68bb485846707c4fe3393f9616d3ffb6c5f62a121d81142ddf7d0241c931fe96d193b7bf02281a9368458e0764466766557cfa9709035dc76d8fdd7706",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.imagesharp.drawing/1.0.0-beta11/sixlabors.imagesharp.drawing.1.0.0-beta11.nupkg",
- "sha512": "15c8f11059ce33331a4a9c7981a5bd91ffc19eaf05f236a1c54d5013ac0fafeb6e065cd2f63d4e9037297cdc9216ac4e67e5d9b73b967da740c174e3318a15f9",
- "dest": "nuget-sources",
- "dest-filename": "sixlabors.imagesharp.drawing.1.0.0-beta11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/gtksharp.dependencies/1.1.1/gtksharp.dependencies.1.1.1.nupkg",
- "sha512": "6373a348b6ce3dfa2ad03c0e0eb74c4de7a4b45847c3d9ff16807eebafe6689c19f1828027abe33757f6453cee847e27a9dd952b1545576d51c63200baf1d28b",
- "dest": "nuget-sources",
- "dest-filename": "gtksharp.dependencies.1.1.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tools/4.0.1/system.diagnostics.tools.4.0.1.nupkg",
- "sha512": "a812ccbbdd0a66eb57075121ea6332a526803ef883ca9f8b06431d6668ad50efd13624fa87dfaf6aed03c652f795c2ffb9fa9d9895a2fafa96eca614cbf86cdb",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.tools.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.openal/4.7.5/opentk.openal.4.7.5.nupkg",
- "sha512": "a8f6b0345b2ca924594449bb9ddb3b02ce083247d1ff127c99d7edbc0c9805467482d610881d78dd9853d8853ee50e1f87706c35bde92f4952d2fe82ede09498",
- "dest": "nuget-sources",
- "dest-filename": "opentk.openal.4.7.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/spb/0.0.4-build28/spb.0.0.4-build28.nupkg",
- "sha512": "b3bbcaa903a7a7da3efee334907bd2b240849fa505d57df1678c6c00f696c3da915068c333cce18504e2577d63801df59f0081c5d97fbf256a19aaa972dd81bb",
- "dest": "nuget-sources",
- "dest-filename": "spb.0.0.4-build28.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.linq.expressions/4.1.0/system.linq.expressions.4.1.0.nupkg",
- "sha512": "04605a091d3aea404bc97cb7ffc154708b3bec886562d9e36aecd4d2ed130afbb45f54cd16a3f714f0ccb3f27c5bc7707e55fbc3e81681a783e9396930058acc",
- "dest": "nuget-sources",
- "dest-filename": "system.linq.expressions.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg",
- "sha512": "1ef033a68688aab9997ec1c0378acb1638b4afb618e533fcaf749d93389737ba94f4a0a94481becdf701c7e988ae2fe390136a8eae225887ee60db45063490fe",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.targets.1.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.targets/1.0.1/microsoft.netcore.targets.1.0.1.nupkg",
- "sha512": "6ed8e75f945a18651066fe9ee31cf6c8257a5974340fe4d262438903c4959a479f4a515a4d1389e6d3d3ab34f09a3c7bc2009aada2e8a7f697b6655a82d3bfc9",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.targets.1.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg",
- "sha512": "81bdb93c1c86c560343df6cc367499fb2a01a9b3016617be416874a23c4355a8d95c7be34f175510f3fdea4872302a87c8efab98a328dfa39422db520c3f291c",
- "dest": "nuget-sources",
- "dest-filename": "runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.globalization.extensions/4.0.1/system.globalization.extensions.4.0.1.nupkg",
- "sha512": "415ab44aa3e46b59ad1d314ceda11f9dc78f85adede3daece96c83c98448e2a0cad7e79045edeeeaca8618115c38517364b00cdd9a0a7228e7da1ebc342b0116",
- "dest": "nuget-sources",
- "dest-filename": "system.globalization.extensions.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.extensions/4.0.1/system.reflection.extensions.4.0.1.nupkg",
- "sha512": "3e2f07c29836735be6247e75f760de90783d5ece64e8cce4e23eceb777da8975a35130804d87ddd26449c13d2ca34180e3f6b844b0fdd2dc594bbec6e7272098",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.extensions.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.encoding/4.0.0/system.security.cryptography.encoding.4.0.0.nupkg",
- "sha512": "f20d60a5f9affcb49995d1bf27a1c09173ad601147241c4ca504e13324d35f7d6618e8a92d04e174d5d3d9821a03e122fd3b0f8fc1d512d105b6afd73b496c5f",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.encoding.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection/4.3.0/system.reflection.4.3.0.nupkg",
- "sha512": "2325b67ed60dce0302807064f25422cbe1b7fb275b539b44fba3c4a8ce4926f21d78529a5c34b31c03d80d110f7bace9af9589d457266beac014220057af8333",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection/4.1.0/system.reflection.4.1.0.nupkg",
- "sha512": "67143ef8f6fb1044830c70c66e9a2b4f1850f50df5dadfaa5177338362ea7b9e9fe4b0ba59cd4eac6e1c8db4e0c285c239e4c2b3ce61391618b411aaff45f7c2",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg",
- "sha512": "9f8833176c139b71a58694ae401c5aec209a63227be07c7ab559bef772082bd1f6cc38ba2949cb1c8e5c5514ad9f4ff51859838dc2f28191f8bb7ae611a50239",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.collections.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg",
- "sha512": "68052086e77d3c7198737a3da163d67740b7c44f93250c39659b3bf21b6547a9abf64cbf40481f5c78f24361af3aaf47d52d188b371554a0928a7f7665c1fc14",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.tasks.extensions.4.5.4.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks.extensions/4.0.0/system.threading.tasks.extensions.4.0.0.nupkg",
- "sha512": "f294f1a4179f53d59f91f01a372cc7896bf8c322e9827299cb1aa3ae2b1f809e98034834f5ccd4cb3fa1c30735082d244fff6584dab6e8870ad409b55e8a4986",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.tasks.extensions.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.linq/4.1.0/system.linq.4.1.0.nupkg",
- "sha512": "53e53220e5fdd6ad44f498e4657503780bca1f73be646009134150f06a76b0873753db3aae97398054bd1e8cc0c1c4cdd2db773f65a26874ab94110edb0cddb1",
- "dest": "nuget-sources",
- "dest-filename": "system.linq.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.5.1/system.buffers.4.5.1.nupkg",
- "sha512": "80da6158e55b9bcf7e0b5e6379b9cf45a632914f037b53c5bf5609576e3cd7821f7861956b73d74470d2d0c2e56dd235a5ef4ca6ffe7e192b820dc2d023aaff2",
- "dest": "nuget-sources",
- "dest-filename": "system.buffers.4.5.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.3.0/system.buffers.4.3.0.nupkg",
- "sha512": "3dcbf66f6edf7e9bb4f698cddcf81b9d059811d84e05c7ac618b2640efed642f089b0ef84c927c5f58feffe43bb96a6bcf4fec422529b82998b18d70e4648cbe",
- "dest": "nuget-sources",
- "dest-filename": "system.buffers.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.buffers/4.0.0/system.buffers.4.0.0.nupkg",
- "sha512": "0663f4639c4e37c9dff12717cdeaebf30e38d91e986d6a99f9f16ba88189873e0399e418659e732a18c674d8875f8f41a1cf60319604173ca8430960759fddf2",
- "dest": "nuget-sources",
- "dest-filename": "system.buffers.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.algorithms/4.2.0/system.security.cryptography.algorithms.4.2.0.nupkg",
- "sha512": "93d1e6394afc506b58bd26a9b3ccd64901bc2d48dbb8825ba1f927c17311cad607e6f8a9794cc41aee83b98eed08a23a7c58390b9b852f894735392342f37a3d",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.algorithms.4.2.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.claims/4.3.0/system.security.claims.4.3.0.nupkg",
- "sha512": "ab72b90801f6c051a2b31645448eebfca74642b3cfa1d51f80e21a0d0d7ad44d3366dea139347e2852781b7f3bae820df16c3eb188a2c96244df05394ed72c86",
- "dest": "nuget-sources",
- "dest-filename": "system.security.claims.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.khr/2.16.0/silk.net.vulkan.extensions.khr.2.16.0.nupkg",
- "sha512": "6b6365aa6246013c62408dcbc6c51818eae841a84c900f30ce4d163201386518b7f01ae10e003ae6a92e97cec9da287ca73c8665ab475666a503dc49f0790778",
- "dest": "nuget-sources",
- "dest-filename": "silk.net.vulkan.extensions.khr.2.16.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.win-x64/7.0.2/microsoft.netcore.app.host.win-x64.7.0.2.nupkg",
- "sha512": "82c4dccfbb1abd11925125eb4ae4ddb168de6b5889a513c9bd14909cc8a4ad8fb115867138c950a1095806bd939132d21dbf67b3412409414f816ed92e2a32e4",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.app.host.win-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.x509certificates/4.1.0/system.security.cryptography.x509certificates.4.1.0.nupkg",
- "sha512": "6171106ffefaea916a72abf17af038e0203b4e779b7bb75f6fe6cec04c6de3316a7ad4eda8fd3ce7dc0bd8375a0f5e45387456499b24ba22224538cf08a0cae6",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.x509certificates.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.gdksharp/3.24.24.59-ryujinx/ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg",
- "sha512": "a79da0931504eea4acaceb4eedc739e844d5e978690c241446f9bc958ea62cad1f2f6df7f0f6b96f86643426a2539c3e5b1bf13bb33eac053d5b9b43e7d53bf7",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.gdksharp.3.24.24.59-ryujinx.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.reflection/4.3.0/runtime.any.system.reflection.4.3.0.nupkg",
- "sha512": "293d3dd8be87e1c5cd76ece4ed64ebb5ae6b50be95a39bee401eeed64355e34641905f8c14392fbc3acf8609f5d6fca731f39ce7607962eb5951f09516480015",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.reflection.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg",
- "sha512": "6c58fe1e3618e7f87684c1cea7efc7d3b19bd7df8d2535f9e27b62c52f441f11b67b21225d6bcd62f409e02c2a16231c4db19be33b8fab5b9b0a5c8660ddab24",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.debug.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.debug/4.0.11/system.diagnostics.debug.4.0.11.nupkg",
- "sha512": "02f4d0bf969eb1a876def21c1ffd75f8ed5f979aed9a1169f409e60a6e07016854e2154da5c0164fabaeaf6527a18d8e67282db1b69327a1b3581e9c0c742f58",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.debug.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.overlapped/4.3.0/system.threading.overlapped.4.3.0.nupkg",
- "sha512": "25612d588a18047ccc9a0b7623fd5ee05146eaf7832f8cb303563b8ae118d86f86c99cabceac7f19094cf7633e77cd43d5c1f6769d8a4616d975079b9fc43e44",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.overlapped.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.xml.readerwriter/4.0.11/system.xml.readerwriter.4.0.11.nupkg",
- "sha512": "d40d6e9d55e57acdf04132bcb8ae8abf1abb3483620cde969c78c6c393a9936abf742c1dcf66288e6e9dffcb399a880ee3c11540ac140cb32e20b41365aaf35e",
- "dest": "nuget-sources",
- "dest-filename": "system.xml.readerwriter.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.nvdec.dependencies/5.0.1-build13/ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg",
- "sha512": "2b3f0627e8a74a80971c50e01eec9b1a97fab47f4ce0a6e6048b08297be99b7a1a95635eabb6989eecd45a53be42111c03a7902d71162a15be3b1219df16e49c",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.3.0/system.security.principal.windows.4.3.0.nupkg",
- "sha512": "66c1d5a9d649b964e1653fa2cd41d8f80515b7cd727fcd7f0890552070da1099ecd1032560f259a108e0d1d6a6da23fa07bc5c922f426a91f33b667f7c004019",
- "dest": "nuget-sources",
- "dest-filename": "system.security.principal.windows.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.principal.windows/4.5.0/system.security.principal.windows.4.5.0.nupkg",
- "sha512": "86cdb3178b4e437578890b6d5672eb9d1fe2f003abac082ed869a9e3f8cd684ffee618995838f6d052bf9bf396dc8b5d8bd5c3bea7f9e56cc7922598b4e49436",
- "dest": "nuget-sources",
- "dest-filename": "system.security.principal.windows.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.private.uri/4.3.0/system.private.uri.4.3.0.nupkg",
- "sha512": "5989a57ef273b689a663e961a0fe09d9b1d88438e5478358efc4b165de3b2674fa9579c301ce12d2d2fa5f33295f2acb42eceea2ebebf70c733da6364ceaf94d",
- "dest": "nuget-sources",
- "dest-filename": "system.private.uri.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.sdl2-cs/2.26.1-build23/ryujinx.sdl2-cs.2.26.1-build23.nupkg",
- "sha512": "8112accffc66185e5dad3648cdf062de1a867c762fbed2a078c87fd2748b7604b777e7bf7a721f87cfa1d32e8970a015d38950ec2aa7d1e05d24a7a776daffd5",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.sdl2-cs.2.26.1-build23.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg",
- "sha512": "6ff7feec7313a7121f795ec7d376e4b8728c17294219fafdfd4ea078f9df1455b4685f0b3962c3810098e95d68594a8392c0b799d36ec8284cd6fcbd4cfe2c67",
- "dest": "nuget-sources",
- "dest-filename": "system.text.encoding.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.encoding/4.0.11/system.text.encoding.4.0.11.nupkg",
- "sha512": "f974335143f36b318abf040ed535887f28089d749b1fa55056345df5243dfbd56d27b74c6e4d87a737fdbb8e699c5291bd25f1e5db4700bb00bf53330c7e3e9a",
- "dest": "nuget-sources",
- "dest-filename": "system.text.encoding.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/4.7.2/system.text.json.4.7.2.nupkg",
- "sha512": "345d15c74a9ac6ddabeeba349b9ba027e48b423972984ff202ea74b5413dd502236817746a82485c840a0cfc818179b94548731db5f361b07a4d11bdda20f50f",
- "dest": "nuget-sources",
- "dest-filename": "system.text.json.4.7.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/6.0.0/system.text.json.6.0.0.nupkg",
- "sha512": "167b4ee8d1277a5d8bd6b4fbe0a3b3a708519235fb005ea98cafdd5b30e17758efeb0a87dcd068af289400d841f4d2cd24550df882d1927c47ec6ff4fb8781ff",
- "dest": "nuget-sources",
- "dest-filename": "system.text.json.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.net.nameresolution/4.3.0/system.net.nameresolution.4.3.0.nupkg",
- "sha512": "40d39e131fe7a392e58e9f58b516b5db88383de91c05b771f5e509acf46cc874271e90623d327ab039003ab8f2714144694390261278de324e1aee228a828ab4",
- "dest": "nuget-sources",
- "dest-filename": "system.net.nameresolution.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.osx-x64/7.0.2/microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg",
- "sha512": "51081d70ca56578a41314b9505a8fb2d0ce7724cf5c052e52b2d32a69d82bf3979f930cfb58701327790f77956c85e5802171c83dbd07bcc9f4f1e61861807bb",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/discordrichpresence/1.1.3.18/discordrichpresence.1.1.3.18.nupkg",
- "sha512": "5fac6c07258c494fdb2f50e1c56ce3d4a4c8a76668be562fcd1858bd49678b581e419bbf4d9391baea9163827f99b32a21baa2bd78cd92a735af21a6add14e63",
- "dest": "nuget-sources",
- "dest-filename": "discordrichpresence.1.1.3.18.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg",
- "sha512": "7d488ff82cb20a3b3cef6380f2dae5ea9f7baa66bf75ad711aade1e3301b25993ccf2694e33c847ea5b9bdb90ff34c46fcd8a6ba7d6f95605ba0c124ed7c5d13",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.tasks.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.threading.tasks/4.0.11/system.threading.tasks.4.0.11.nupkg",
- "sha512": "fb66c496a5b4c88c5cb6e9d7b7d220e10f2fc0aed181420390f12f8d9986a1bd2829e9f1bf080bb6361cd8b8b4ffc9b622288dfa42124859e1be1e981b5cfa7b",
- "dest": "nuget-sources",
- "dest-filename": "system.threading.tasks.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.typeextensions/4.1.0/system.reflection.typeextensions.4.1.0.nupkg",
- "sha512": "5b1875ae86f76f60307fbe261c7471e996d4d4eade0c4783cb35a5aad7fec4f01be01cb1f1f78af22d483ecce12096f6ed431d69c4a66c7bf235008bcac30cb7",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.typeextensions.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.collections/4.3.0/system.collections.4.3.0.nupkg",
- "sha512": "ca7b952d30da1487ca4e43aa522817b5ee26e7e10537062810112fc67a7512766c39d402f394bb0426d1108bbcf9bbb64e9ce1f5af736ef215a51a35e55f051b",
- "dest": "nuget-sources",
- "dest-filename": "system.collections.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.collections/4.0.11/system.collections.4.0.11.nupkg",
- "sha512": "f61b75329ba5d7c0e688aa9d110b2200c8934c3a1888f6b1b5f198baa7ab93f23835e8380853e8c046f257172b5060578ed86df26e5fe0ef34d8c4408a02c33f",
- "dest": "nuget-sources",
- "dest-filename": "system.collections.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.diagnosticsource/4.0.0/system.diagnostics.diagnosticsource.4.0.0.nupkg",
- "sha512": "199e2a85b5cb0ea6c2ce13e12444af61e80da7625c4f7d0dcc97dcc363b21f2bee48c7bcfd85d99d0a23aeb1ea35f94dd7ff8fd22ab50f2481e472a749765471",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.diagnosticsource.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.csp/4.0.0/system.security.cryptography.csp.4.0.0.nupkg",
- "sha512": "6f3fb8256086a16ed7fe339e0f09d42a081c4f783b0f8626bb7eec08261532ecf517f6c7a41bfbb8e2b99b8f1c79ef99ef7c724d8719e287fe7981ebe8b6aa8e",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.csp.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.win.microsoft.win32.primitives/4.3.0/runtime.win.microsoft.win32.primitives.4.3.0.nupkg",
- "sha512": "36576acaafa80dcdf3dad082e37ccfbbd3175cd622992b0dd1c690d1cb575a1f7aef44894dccd2e89d34c6027a26de502843128982adcb7150644f51f1480935",
- "dest": "nuget-sources",
- "dest-filename": "runtime.win.microsoft.win32.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io/4.3.0/system.io.4.3.0.nupkg",
- "sha512": "bfca5a21e3e1986b9765b13dc6fbcd6f8b89e4c1383855d1d7ef256bf1bf2f51889769db5365859dd7606fbf6454add4daeb3bab56994ffb98fd1d03fe8bc1e6",
- "dest": "nuget-sources",
- "dest-filename": "system.io.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io/4.1.0/system.io.4.1.0.nupkg",
- "sha512": "e01b432f3d715f3c88d5d7f3e7cc1ceee78caf99407a11c3306f9103aee78963f818417f14eec52f0096fa247900a31e53bd3226e06f0c0f93870db0b2b78331",
- "dest": "nuget-sources",
- "dest-filename": "system.io.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/2.0.0/microsoft.netcore.platforms.2.0.0.nupkg",
- "sha512": "0827f83639833a88ac7bb1408a3d953ee1c880a2acbbaf7abe44f084e90f5507cbb13981d962c57d0e3278ee5476d93c143eb7e9404cc7a63d7a8bf324a4fbe8",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.platforms.2.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg",
- "sha512": "6bf892c274596fe2c7164e3d8503b24e187f64d0b7bec6d9b05eb95f04086fceb7a85ea6b2685d42dc465c52f6f0e6f636c0b3fddac48f6f0125dfd83e92d106",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.platforms.1.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.platforms/1.0.1/microsoft.netcore.platforms.1.0.1.nupkg",
- "sha512": "5f3622dafd8fe8f3406c7a7ee506a7363c9955b28819ae1f2b067c38eae7ab6e620eb63442929b967c94fc511e47a2b7547ab62b6f1aafe37daa222499c9bb19",
- "dest": "nuget-sources",
- "dest-filename": "microsoft.netcore.platforms.1.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.any.system.runtime.interopservices/4.3.0/runtime.any.system.runtime.interopservices.4.3.0.nupkg",
- "sha512": "70eeb2469726d092bb95568e51ba5cfdd1cc07a9e65077e2b6dd5b7c8b164d4b45c749ef4a52f45928f63a27e8accdb83b861ea73c9ad3d42dc38e6afdbd0e8c",
- "dest": "nuget-sources",
- "dest-filename": "runtime.any.system.runtime.interopservices.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.core/4.7.5/opentk.core.4.7.5.nupkg",
- "sha512": "094eb32380f21aedf38302de221f24d20536aeb15935d0ae819adb3d974c91fbe6874dcfdb6c6f02cba7db2e4b48782597a1dff9811e105958a02b265e5bd145",
- "dest": "nuget-sources",
- "dest-filename": "opentk.core.4.7.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.globalization/4.3.0/system.globalization.4.3.0.nupkg",
- "sha512": "823d2ba308cb073b40a3146ecccd0d9fd7b1615ac3fbefb16f73d873e411fd81c3bdc87df206d3dc7e2f14c9cd53aafca684a3570c25471280aada8de805ece2",
- "dest": "nuget-sources",
- "dest-filename": "system.globalization.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.globalization/4.0.11/system.globalization.4.0.11.nupkg",
- "sha512": "66bc21667f5f839bc711eda3b0463863d70e0ad86770fd5410e0123006d6f031755cf7220187fb7cefed69b3f4a9eab8f0868cae765cb1425c8bf60427f395e6",
- "dest": "nuget-sources",
- "dest-filename": "system.globalization.4.0.11.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.collections.concurrent/4.0.12/system.collections.concurrent.4.0.12.nupkg",
- "sha512": "a46bd40b8cc7afeaea14c80ee6ab99a5ef6d27e9e897cfe842e9ab5ca04b9de8d7192a310225b1040d57d4870921487acf5df993ab81301d49994048e1341e85",
- "dest": "nuget-sources",
- "dest-filename": "system.collections.concurrent.4.0.12.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.native.system.io.compression/4.1.0/runtime.native.system.io.compression.4.1.0.nupkg",
- "sha512": "453e16348b435b0d8bc5c4db85d77c99f6e4a79f62e8168eb91c972d6e788c8f1f965ba6e46c1b42f71dee4618373ac70499024f6a4d1462c040fe4989f68283",
- "dest": "nuget-sources",
- "dest-filename": "runtime.native.system.io.compression.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.io.filesystem/4.0.1/system.io.filesystem.4.0.1.nupkg",
- "sha512": "a6478b17f5d52fc5b9517458e93e1a69b92575c170f44046b3f4e25c7e67c9d4126ab486f5a3c51abcb279d05a057bd53aa8f49a1e51eae69563ae39214b72d3",
- "dest": "nuget-sources",
- "dest-filename": "system.io.filesystem.4.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/opentk.graphics/4.7.5/opentk.graphics.4.7.5.nupkg",
- "sha512": "a8203d7210c3f88ba358d349a275a99b0f18d806444a70a2fe4caecd6fade2984a7eeb64fb8be3160add0d5c3fd6e87685cb25dd24c165fcd6c6c925846d95fa",
- "dest": "nuget-sources",
- "dest-filename": "opentk.graphics.4.7.5.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/sixlabors.fonts/1.0.0-beta0013/sixlabors.fonts.1.0.0-beta0013.nupkg",
- "sha512": "4e51c75fff6601c787ced1d6ac8e955ac4c0fe4a24355099f8925705127c322f8d09a66ea38cce7db7b21b680223ae0b5d80417ad2eafc1291f37f4bab7e31b5",
- "dest": "nuget-sources",
- "dest-filename": "sixlabors.fonts.1.0.0-beta0013.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.5.0/system.security.cryptography.cng.4.5.0.nupkg",
- "sha512": "0ec1d266805e55ed9b0249cfc1dae09c242581df345d1712f15ddebfde76045f191388d48b68bbfad21a16d87a99df67bab7b54892f685f42de08823a4dc9bc5",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.cng.4.5.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.cng/4.2.0/system.security.cryptography.cng.4.2.0.nupkg",
- "sha512": "4ed77501662e6d18733f507077de9d277b61b3d2dacee791e0b3a56c9a604bd2acfb81334c51660ba33bb7a6e24ed46c2da02716f6613a937152ea4806540bf1",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.cng.4.2.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.appcontext/4.1.0/system.appcontext.4.1.0.nupkg",
- "sha512": "f724af13eb14aa57255f82841683a93b427de172b8d31b9fe2c6bc8c21a795e60ecf211b4e49e1c2e285fe1ad498e6bd9c843e109a60a3dc27b49df560106e96",
- "dest": "nuget-sources",
- "dest-filename": "system.appcontext.4.1.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/runtime.unix.system.net.primitives/4.3.0/runtime.unix.system.net.primitives.4.3.0.nupkg",
- "sha512": "c2a0ecf5c72b226b4776eb6281f00267827d6086a0ad758ebf6e6c64a1c148d2056fe99c87ab4207add5fa67f1db73dd1ed3dca81141fc896be6b6e98795c97e",
- "dest": "nuget-sources",
- "dest-filename": "runtime.unix.system.net.primitives.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.text.encodings.web/6.0.0/system.text.encodings.web.6.0.0.nupkg",
- "sha512": "0f26afeeaa709ea1f05ef87058408dd9df640c869d7398b2c9c270268ddf21a9208cd7d2bfa1f7fbd8a5ceab735dd22d470a3689627c9c4fadc0ea5fe76237fa",
- "dest": "nuget-sources",
- "dest-filename": "system.text.encodings.web.6.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.security.cryptography.openssl/4.0.0/system.security.cryptography.openssl.4.0.0.nupkg",
- "sha512": "432629e457c7061a7d207fb60597a5a8a806fab8c62574833e509afa3c4ac8fed529dbc7f21d69e16dc9fdd091aaa575191e9fb552eedcf28aaa8b5954d32e9b",
- "dest": "nuget-sources",
- "dest-filename": "system.security.cryptography.openssl.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan/2.16.0/silk.net.vulkan.2.16.0.nupkg",
- "sha512": "b6f53b3d4d2cd4e8eed14a5d567de5195ff595d2649f441b09920d7bbaec48563a95554cf7289901f8bb394339a92b428a05ae913b4d2a45a7af61ad38e44fc8",
- "dest": "nuget-sources",
- "dest-filename": "silk.net.vulkan.2.16.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.reflection.metadata/5.0.0/system.reflection.metadata.5.0.0.nupkg",
- "sha512": "3b74e3e491eee87a8410f5b9a2e556233d9919267f6a054da7a4c9c34b6916b07c77ea9ef8cceb5b7c3361e7394e502cc3c9a09247c6a06bb58509e82554e527",
- "dest": "nuget-sources",
- "dest-filename": "system.reflection.metadata.5.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.audio.openal.dependencies/1.21.0.1/ryujinx.audio.openal.dependencies.1.21.0.1.nupkg",
- "sha512": "4b6b99d943db72eac80779e2bbae15e9bac11ff1a30365f5363990f49f0c605fff5ce0b57bbb54e33cd73eed6e588e28598cfc0fe5bea7b56c2a3dda2d031194",
- "dest": "nuget-sources",
- "dest-filename": "ryujinx.audio.openal.dependencies.1.21.0.1.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.interopservices.runtimeinformation/4.0.0/system.runtime.interopservices.runtimeinformation.4.0.0.nupkg",
- "sha512": "462d35e66cbdd21dc007f06c6ef129ab57e810fa0f0416bd2fc6fb7eed55138780d4d31e31ee6267a82e2e3a1607e5c642bd6efeb130b57a1baa87e3141b0080",
- "dest": "nuget-sources",
- "dest-filename": "system.runtime.interopservices.runtimeinformation.4.0.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg",
- "sha512": "d0a5d30e261cd45b7dfab02b7ffbd76b64e0c9b892ed826ea61481c983c0208b05b69981cd79e91cd4e5811e1cd4c3cea06a1afce05811ece58be5e4c20169ea",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.tracing.4.3.0.nupkg"
- },
- {
- "type": "file",
- "url": "https://api.nuget.org/v3-flatcontainer/system.diagnostics.tracing/4.1.0/system.diagnostics.tracing.4.1.0.nupkg",
- "sha512": "0c64f255836cb629587b117bd8de5e70bfe7e4c6d7d138bff10b9e85f4883fba250ae07118c21d5e9130ba3cf120a9a2bf581a17577d3a7ec09260933c7b4d47",
- "dest": "nuget-sources",
- "dest-filename": "system.diagnostics.tracing.4.1.0.nupkg"
- }
-]
\ No newline at end of file
diff --git a/rd-submodules/ryujinx/ryujinx-wrapper b/rd-submodules/ryujinx/ryujinx-wrapper
deleted file mode 100644
index e7ea8693..00000000
--- a/rd-submodules/ryujinx/ryujinx-wrapper
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-for i in {0..9}; do
- test -S $XDG_RUNTIME_DIR/discord-ipc-$i || ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
-done
-
-env DOTNET_EnableAlternateStackCheck=1 Ryujinx "$@"
\ No newline at end of file
diff --git a/res/DREAMS.ttf b/res/DREAMS.ttf
new file mode 100755
index 00000000..91e70b71
Binary files /dev/null and b/res/DREAMS.ttf differ
diff --git a/res/binding_icons/RD-Arcade-BLUE.png b/res/binding_icons/RD-Arcade-BLUE.png
new file mode 100755
index 00000000..aac42d98
Binary files /dev/null and b/res/binding_icons/RD-Arcade-BLUE.png differ
diff --git a/res/binding_icons/RD-Arcade-GREEN.png b/res/binding_icons/RD-Arcade-GREEN.png
new file mode 100755
index 00000000..68672af9
Binary files /dev/null and b/res/binding_icons/RD-Arcade-GREEN.png differ
diff --git a/res/binding_icons/RD-Arcade-RED.png b/res/binding_icons/RD-Arcade-RED.png
new file mode 100755
index 00000000..56e6b6a6
Binary files /dev/null and b/res/binding_icons/RD-Arcade-RED.png differ
diff --git a/res/binding_icons/RD-Arcade-YELLOW.png b/res/binding_icons/RD-Arcade-YELLOW.png
new file mode 100755
index 00000000..1a1cf755
Binary files /dev/null and b/res/binding_icons/RD-Arcade-YELLOW.png differ
diff --git a/res/binding_icons/RD-Arrow-01.png b/res/binding_icons/RD-Arrow-01.png
new file mode 100755
index 00000000..5d2d61df
Binary files /dev/null and b/res/binding_icons/RD-Arrow-01.png differ
diff --git a/res/binding_icons/RD-Arrow-02.png b/res/binding_icons/RD-Arrow-02.png
new file mode 100755
index 00000000..7c34235e
Binary files /dev/null and b/res/binding_icons/RD-Arrow-02.png differ
diff --git a/res/binding_icons/RD-Arrow-03.png b/res/binding_icons/RD-Arrow-03.png
new file mode 100755
index 00000000..6c81c6ef
Binary files /dev/null and b/res/binding_icons/RD-Arrow-03.png differ
diff --git a/res/binding_icons/RD-Arrow-04.png b/res/binding_icons/RD-Arrow-04.png
new file mode 100755
index 00000000..da201c93
Binary files /dev/null and b/res/binding_icons/RD-Arrow-04.png differ
diff --git a/res/binding_icons/RD-Arrow-05.png b/res/binding_icons/RD-Arrow-05.png
new file mode 100755
index 00000000..d2bf2041
Binary files /dev/null and b/res/binding_icons/RD-Arrow-05.png differ
diff --git a/res/binding_icons/RD-Arrow-06.png b/res/binding_icons/RD-Arrow-06.png
new file mode 100755
index 00000000..65ce6093
Binary files /dev/null and b/res/binding_icons/RD-Arrow-06.png differ
diff --git a/res/binding_icons/RD-Arrow-07.png b/res/binding_icons/RD-Arrow-07.png
new file mode 100755
index 00000000..0ec313f3
Binary files /dev/null and b/res/binding_icons/RD-Arrow-07.png differ
diff --git a/res/binding_icons/RD-Arrow-08.png b/res/binding_icons/RD-Arrow-08.png
new file mode 100755
index 00000000..68c2f983
Binary files /dev/null and b/res/binding_icons/RD-Arrow-08.png differ
diff --git a/res/binding_icons/RD-Arrow-09.png b/res/binding_icons/RD-Arrow-09.png
new file mode 100755
index 00000000..a5e06052
Binary files /dev/null and b/res/binding_icons/RD-Arrow-09.png differ
diff --git a/res/binding_icons/RD-Arrow-10.png b/res/binding_icons/RD-Arrow-10.png
new file mode 100755
index 00000000..a6576cda
Binary files /dev/null and b/res/binding_icons/RD-Arrow-10.png differ
diff --git a/res/binding_icons/RD-Arrow-11.png b/res/binding_icons/RD-Arrow-11.png
new file mode 100755
index 00000000..3d11d414
Binary files /dev/null and b/res/binding_icons/RD-Arrow-11.png differ
diff --git a/res/binding_icons/RD-Arrow-12.png b/res/binding_icons/RD-Arrow-12.png
new file mode 100755
index 00000000..bcfa0b6f
Binary files /dev/null and b/res/binding_icons/RD-Arrow-12.png differ
diff --git a/res/binding_icons/RD-Arrow-13.png b/res/binding_icons/RD-Arrow-13.png
new file mode 100755
index 00000000..ff370c91
Binary files /dev/null and b/res/binding_icons/RD-Arrow-13.png differ
diff --git a/res/binding_icons/RD-Arrow-14.png b/res/binding_icons/RD-Arrow-14.png
new file mode 100755
index 00000000..8aef5d3a
Binary files /dev/null and b/res/binding_icons/RD-Arrow-14.png differ
diff --git a/res/binding_icons/RD-Arrow-15.png b/res/binding_icons/RD-Arrow-15.png
new file mode 100755
index 00000000..e778831f
Binary files /dev/null and b/res/binding_icons/RD-Arrow-15.png differ
diff --git a/res/binding_icons/RD-Arrow-16.png b/res/binding_icons/RD-Arrow-16.png
new file mode 100755
index 00000000..12a1e506
Binary files /dev/null and b/res/binding_icons/RD-Arrow-16.png differ
diff --git a/res/binding_icons/RD-Arrow-17.png b/res/binding_icons/RD-Arrow-17.png
new file mode 100755
index 00000000..636b43d2
Binary files /dev/null and b/res/binding_icons/RD-Arrow-17.png differ
diff --git a/res/binding_icons/RD-Arrow-18.png b/res/binding_icons/RD-Arrow-18.png
new file mode 100755
index 00000000..ae2584a5
Binary files /dev/null and b/res/binding_icons/RD-Arrow-18.png differ
diff --git a/res/binding_icons/RD-Arrow-19.png b/res/binding_icons/RD-Arrow-19.png
new file mode 100755
index 00000000..1cb8ff0c
Binary files /dev/null and b/res/binding_icons/RD-Arrow-19.png differ
diff --git a/res/binding_icons/RD-Arrow-20.png b/res/binding_icons/RD-Arrow-20.png
new file mode 100755
index 00000000..ec7841f3
Binary files /dev/null and b/res/binding_icons/RD-Arrow-20.png differ
diff --git a/res/binding_icons/RD-Arrow-21.png b/res/binding_icons/RD-Arrow-21.png
new file mode 100755
index 00000000..953dd433
Binary files /dev/null and b/res/binding_icons/RD-Arrow-21.png differ
diff --git a/res/binding_icons/RD-Arrow-22.png b/res/binding_icons/RD-Arrow-22.png
new file mode 100755
index 00000000..84867637
Binary files /dev/null and b/res/binding_icons/RD-Arrow-22.png differ
diff --git a/res/binding_icons/RD-Arrow-23.png b/res/binding_icons/RD-Arrow-23.png
new file mode 100755
index 00000000..03428b31
Binary files /dev/null and b/res/binding_icons/RD-Arrow-23.png differ
diff --git a/res/binding_icons/RD-Arrow-24.png b/res/binding_icons/RD-Arrow-24.png
new file mode 100755
index 00000000..f357241f
Binary files /dev/null and b/res/binding_icons/RD-Arrow-24.png differ
diff --git a/res/binding_icons/RD-Arrow-25.png b/res/binding_icons/RD-Arrow-25.png
new file mode 100755
index 00000000..171466d3
Binary files /dev/null and b/res/binding_icons/RD-Arrow-25.png differ
diff --git a/res/binding_icons/RD-Arrow-26.png b/res/binding_icons/RD-Arrow-26.png
new file mode 100755
index 00000000..0b919ddb
Binary files /dev/null and b/res/binding_icons/RD-Arrow-26.png differ
diff --git a/res/binding_icons/RD-Arrow-27.png b/res/binding_icons/RD-Arrow-27.png
new file mode 100755
index 00000000..2d0b726c
Binary files /dev/null and b/res/binding_icons/RD-Arrow-27.png differ
diff --git a/res/binding_icons/RD-Arrow-28.png b/res/binding_icons/RD-Arrow-28.png
new file mode 100755
index 00000000..94a4dc90
Binary files /dev/null and b/res/binding_icons/RD-Arrow-28.png differ
diff --git a/res/binding_icons/RD-Arrow-29.png b/res/binding_icons/RD-Arrow-29.png
new file mode 100755
index 00000000..48467360
Binary files /dev/null and b/res/binding_icons/RD-Arrow-29.png differ
diff --git a/res/binding_icons/RD-Arrow-30.png b/res/binding_icons/RD-Arrow-30.png
new file mode 100755
index 00000000..d424c374
Binary files /dev/null and b/res/binding_icons/RD-Arrow-30.png differ
diff --git a/res/binding_icons/RD-Arrow-31.png b/res/binding_icons/RD-Arrow-31.png
new file mode 100755
index 00000000..5add6c15
Binary files /dev/null and b/res/binding_icons/RD-Arrow-31.png differ
diff --git a/res/binding_icons/RD-Arrow-32.png b/res/binding_icons/RD-Arrow-32.png
new file mode 100755
index 00000000..1f7694c4
Binary files /dev/null and b/res/binding_icons/RD-Arrow-32.png differ
diff --git a/res/binding_icons/RD-Arrow-33.png b/res/binding_icons/RD-Arrow-33.png
new file mode 100755
index 00000000..09cbaffd
Binary files /dev/null and b/res/binding_icons/RD-Arrow-33.png differ
diff --git a/res/binding_icons/RD-Arrow-34.png b/res/binding_icons/RD-Arrow-34.png
new file mode 100755
index 00000000..44bce1e3
Binary files /dev/null and b/res/binding_icons/RD-Arrow-34.png differ
diff --git a/res/binding_icons/RD-Arrow-35.png b/res/binding_icons/RD-Arrow-35.png
new file mode 100755
index 00000000..5561cb07
Binary files /dev/null and b/res/binding_icons/RD-Arrow-35.png differ
diff --git a/res/binding_icons/RD-Arrow-36.png b/res/binding_icons/RD-Arrow-36.png
new file mode 100755
index 00000000..4866476f
Binary files /dev/null and b/res/binding_icons/RD-Arrow-36.png differ
diff --git a/res/binding_icons/RD-Arrow-37.png b/res/binding_icons/RD-Arrow-37.png
new file mode 100755
index 00000000..af35d422
Binary files /dev/null and b/res/binding_icons/RD-Arrow-37.png differ
diff --git a/res/binding_icons/RD-ESC.png b/res/binding_icons/RD-ESC.png
new file mode 100755
index 00000000..f25834ff
Binary files /dev/null and b/res/binding_icons/RD-ESC.png differ
diff --git a/res/binding_icons/RD-Enter.png b/res/binding_icons/RD-Enter.png
new file mode 100755
index 00000000..22bbb9a8
Binary files /dev/null and b/res/binding_icons/RD-Enter.png differ
diff --git a/res/binding_icons/RD-F1.png b/res/binding_icons/RD-F1.png
new file mode 100755
index 00000000..bc221527
Binary files /dev/null and b/res/binding_icons/RD-F1.png differ
diff --git a/res/binding_icons/RD-F4.png b/res/binding_icons/RD-F4.png
new file mode 100755
index 00000000..c9bafb28
Binary files /dev/null and b/res/binding_icons/RD-F4.png differ
diff --git a/res/binding_icons/RD-Tab.png b/res/binding_icons/RD-Tab.png
new file mode 100755
index 00000000..2bce83e0
Binary files /dev/null and b/res/binding_icons/RD-Tab.png differ
diff --git a/res/binding_icons/RD-applets-screenshooter.png b/res/binding_icons/RD-applets-screenshooter.png
new file mode 100755
index 00000000..23b8e8e5
Binary files /dev/null and b/res/binding_icons/RD-applets-screenshooter.png differ
diff --git a/res/binding_icons/RD-application-x-iso.png b/res/binding_icons/RD-application-x-iso.png
new file mode 100755
index 00000000..cd7cb423
Binary files /dev/null and b/res/binding_icons/RD-application-x-iso.png differ
diff --git a/res/binding_icons/RD-battery-full-charging.png b/res/binding_icons/RD-battery-full-charging.png
new file mode 100755
index 00000000..c0558ae3
Binary files /dev/null and b/res/binding_icons/RD-battery-full-charging.png differ
diff --git a/res/binding_icons/RD-battery-missing.png b/res/binding_icons/RD-battery-missing.png
new file mode 100755
index 00000000..2953acb8
Binary files /dev/null and b/res/binding_icons/RD-battery-missing.png differ
diff --git a/res/binding_icons/RD-camera-photo.png b/res/binding_icons/RD-camera-photo.png
new file mode 100755
index 00000000..64c16ab1
Binary files /dev/null and b/res/binding_icons/RD-camera-photo.png differ
diff --git a/res/binding_icons/RD-cemu.png b/res/binding_icons/RD-cemu.png
new file mode 100755
index 00000000..94763938
Binary files /dev/null and b/res/binding_icons/RD-cemu.png differ
diff --git a/res/binding_icons/RD-citra.png b/res/binding_icons/RD-citra.png
new file mode 100755
index 00000000..2ab3004e
Binary files /dev/null and b/res/binding_icons/RD-citra.png differ
diff --git a/res/binding_icons/RD-distributor-logo-netbsd.png b/res/binding_icons/RD-distributor-logo-netbsd.png
new file mode 100755
index 00000000..815a2445
Binary files /dev/null and b/res/binding_icons/RD-distributor-logo-netbsd.png differ
diff --git a/res/binding_icons/RD-document-save.png b/res/binding_icons/RD-document-save.png
new file mode 100755
index 00000000..b6980cbe
Binary files /dev/null and b/res/binding_icons/RD-document-save.png differ
diff --git a/res/binding_icons/RD-dolphin.png b/res/binding_icons/RD-dolphin.png
new file mode 100755
index 00000000..510d0ef4
Binary files /dev/null and b/res/binding_icons/RD-dolphin.png differ
diff --git a/res/binding_icons/RD-edit-find.png b/res/binding_icons/RD-edit-find.png
new file mode 100755
index 00000000..2583ab21
Binary files /dev/null and b/res/binding_icons/RD-edit-find.png differ
diff --git a/res/binding_icons/RD-edit-undo-red.png b/res/binding_icons/RD-edit-undo-red.png
new file mode 100755
index 00000000..a766a96e
Binary files /dev/null and b/res/binding_icons/RD-edit-undo-red.png differ
diff --git a/res/binding_icons/RD-edit-undo.png b/res/binding_icons/RD-edit-undo.png
new file mode 100755
index 00000000..b37a6529
Binary files /dev/null and b/res/binding_icons/RD-edit-undo.png differ
diff --git a/res/binding_icons/RD-emblem-documents.png b/res/binding_icons/RD-emblem-documents.png
new file mode 100755
index 00000000..2596501a
Binary files /dev/null and b/res/binding_icons/RD-emblem-documents.png differ
diff --git a/res/binding_icons/RD-emblem-downloads.png b/res/binding_icons/RD-emblem-downloads.png
new file mode 100755
index 00000000..dde0658b
Binary files /dev/null and b/res/binding_icons/RD-emblem-downloads.png differ
diff --git a/res/binding_icons/RD-emblem-encrypted-locked.png b/res/binding_icons/RD-emblem-encrypted-locked.png
new file mode 100755
index 00000000..1c1f7b51
Binary files /dev/null and b/res/binding_icons/RD-emblem-encrypted-locked.png differ
diff --git a/res/binding_icons/RD-emblem-encrypted-unlocked.png b/res/binding_icons/RD-emblem-encrypted-unlocked.png
new file mode 100755
index 00000000..20390ea4
Binary files /dev/null and b/res/binding_icons/RD-emblem-encrypted-unlocked.png differ
diff --git a/res/binding_icons/RD-emblem-favorite.png b/res/binding_icons/RD-emblem-favorite.png
new file mode 100755
index 00000000..a850c5b0
Binary files /dev/null and b/res/binding_icons/RD-emblem-favorite.png differ
diff --git a/res/binding_icons/RD-emblem-generic.png b/res/binding_icons/RD-emblem-generic.png
new file mode 100755
index 00000000..475bfcb7
Binary files /dev/null and b/res/binding_icons/RD-emblem-generic.png differ
diff --git a/res/binding_icons/RD-emblem-new.png b/res/binding_icons/RD-emblem-new.png
new file mode 100755
index 00000000..f0d59167
Binary files /dev/null and b/res/binding_icons/RD-emblem-new.png differ
diff --git a/res/binding_icons/RD-emblem-synchronizing.png b/res/binding_icons/RD-emblem-synchronizing.png
new file mode 100755
index 00000000..812ac184
Binary files /dev/null and b/res/binding_icons/RD-emblem-synchronizing.png differ
diff --git a/res/binding_icons/RD-emblem-unlocked.png b/res/binding_icons/RD-emblem-unlocked.png
new file mode 100755
index 00000000..5332ef8b
Binary files /dev/null and b/res/binding_icons/RD-emblem-unlocked.png differ
diff --git a/res/binding_icons/RD-emblem-unreadable.png b/res/binding_icons/RD-emblem-unreadable.png
new file mode 100755
index 00000000..0cd3cdfe
Binary files /dev/null and b/res/binding_icons/RD-emblem-unreadable.png differ
diff --git a/res/binding_icons/RD-folder-applications.png b/res/binding_icons/RD-folder-applications.png
new file mode 100755
index 00000000..0e1215e1
Binary files /dev/null and b/res/binding_icons/RD-folder-applications.png differ
diff --git a/res/binding_icons/RD-folder-blue-backup.png b/res/binding_icons/RD-folder-blue-backup.png
new file mode 100755
index 00000000..f173f08a
Binary files /dev/null and b/res/binding_icons/RD-folder-blue-backup.png differ
diff --git a/res/binding_icons/RD-folder-blue-games.png b/res/binding_icons/RD-folder-blue-games.png
new file mode 100755
index 00000000..67507a69
Binary files /dev/null and b/res/binding_icons/RD-folder-blue-games.png differ
diff --git a/res/binding_icons/RD-go-next.png b/res/binding_icons/RD-go-next.png
new file mode 100755
index 00000000..279b8b2e
Binary files /dev/null and b/res/binding_icons/RD-go-next.png differ
diff --git a/res/binding_icons/RD-go-previous.png b/res/binding_icons/RD-go-previous.png
new file mode 100755
index 00000000..a00cabc0
Binary files /dev/null and b/res/binding_icons/RD-go-previous.png differ
diff --git a/res/binding_icons/RD-godot.png b/res/binding_icons/RD-godot.png
new file mode 100755
index 00000000..d29092b3
Binary files /dev/null and b/res/binding_icons/RD-godot.png differ
diff --git a/res/binding_icons/RD-gzdoom.png b/res/binding_icons/RD-gzdoom.png
new file mode 100755
index 00000000..51fdb052
Binary files /dev/null and b/res/binding_icons/RD-gzdoom.png differ
diff --git a/res/binding_icons/RD-icon_circle_2_180x180.png b/res/binding_icons/RD-icon_circle_2_180x180.png
new file mode 100755
index 00000000..bab446bb
Binary files /dev/null and b/res/binding_icons/RD-icon_circle_2_180x180.png differ
diff --git a/res/binding_icons/RD-io.github.antimicrox.antimicrox.png b/res/binding_icons/RD-io.github.antimicrox.antimicrox.png
new file mode 100755
index 00000000..a961b0b6
Binary files /dev/null and b/res/binding_icons/RD-io.github.antimicrox.antimicrox.png differ
diff --git a/res/binding_icons/RD-list-add.png b/res/binding_icons/RD-list-add.png
new file mode 100755
index 00000000..fa48ad3b
Binary files /dev/null and b/res/binding_icons/RD-list-add.png differ
diff --git a/res/binding_icons/RD-list-remove.png b/res/binding_icons/RD-list-remove.png
new file mode 100755
index 00000000..724e8514
Binary files /dev/null and b/res/binding_icons/RD-list-remove.png differ
diff --git a/res/binding_icons/RD-mame.png b/res/binding_icons/RD-mame.png
new file mode 100755
index 00000000..b6c7d1f0
Binary files /dev/null and b/res/binding_icons/RD-mame.png differ
diff --git a/res/binding_icons/RD-media-playback-pause.png b/res/binding_icons/RD-media-playback-pause.png
new file mode 100755
index 00000000..3480a713
Binary files /dev/null and b/res/binding_icons/RD-media-playback-pause.png differ
diff --git a/res/binding_icons/RD-media-playback-start.png b/res/binding_icons/RD-media-playback-start.png
new file mode 100755
index 00000000..375801a7
Binary files /dev/null and b/res/binding_icons/RD-media-playback-start.png differ
diff --git a/res/binding_icons/RD-melonds.png b/res/binding_icons/RD-melonds.png
new file mode 100755
index 00000000..e351ffb3
Binary files /dev/null and b/res/binding_icons/RD-melonds.png differ
diff --git a/res/binding_icons/RD-notification-network-ethernet-connected.png b/res/binding_icons/RD-notification-network-ethernet-connected.png
new file mode 100755
index 00000000..f61f11d0
Binary files /dev/null and b/res/binding_icons/RD-notification-network-ethernet-connected.png differ
diff --git a/res/binding_icons/RD-notification-network-wireless.png b/res/binding_icons/RD-notification-network-wireless.png
new file mode 100755
index 00000000..7bc8975e
Binary files /dev/null and b/res/binding_icons/RD-notification-network-wireless.png differ
diff --git a/res/binding_icons/RD-octopi.png b/res/binding_icons/RD-octopi.png
new file mode 100755
index 00000000..746c1bb9
Binary files /dev/null and b/res/binding_icons/RD-octopi.png differ
diff --git a/res/binding_icons/RD-org.xfce.session.png b/res/binding_icons/RD-org.xfce.session.png
new file mode 100755
index 00000000..1b5febd8
Binary files /dev/null and b/res/binding_icons/RD-org.xfce.session.png differ
diff --git a/res/binding_icons/RD-pcsx2.png b/res/binding_icons/RD-pcsx2.png
new file mode 100755
index 00000000..7df1c994
Binary files /dev/null and b/res/binding_icons/RD-pcsx2.png differ
diff --git a/res/binding_icons/RD-pcsxr-icon.png b/res/binding_icons/RD-pcsxr-icon.png
new file mode 100755
index 00000000..118e83b4
Binary files /dev/null and b/res/binding_icons/RD-pcsxr-icon.png differ
diff --git a/res/binding_icons/RD-playonlinux.png b/res/binding_icons/RD-playonlinux.png
new file mode 100755
index 00000000..e7b383ab
Binary files /dev/null and b/res/binding_icons/RD-playonlinux.png differ
diff --git a/res/binding_icons/RD-ppsspp.png b/res/binding_icons/RD-ppsspp.png
new file mode 100755
index 00000000..f2bc6cfd
Binary files /dev/null and b/res/binding_icons/RD-ppsspp.png differ
diff --git a/res/binding_icons/RD-preferences-desktop-accessibility.png b/res/binding_icons/RD-preferences-desktop-accessibility.png
new file mode 100755
index 00000000..577cd803
Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-accessibility.png differ
diff --git a/res/binding_icons/RD-preferences-desktop-display.png b/res/binding_icons/RD-preferences-desktop-display.png
new file mode 100755
index 00000000..218908f2
Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-display.png differ
diff --git a/res/binding_icons/RD-preferences-desktop-emoticons.png b/res/binding_icons/RD-preferences-desktop-emoticons.png
new file mode 100755
index 00000000..279d8c1a
Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-emoticons.png differ
diff --git a/res/binding_icons/RD-preferences-desktop-icons.png b/res/binding_icons/RD-preferences-desktop-icons.png
new file mode 100755
index 00000000..c6727a37
Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-icons.png differ
diff --git a/res/binding_icons/RD-preferences-desktop-keyboard.png b/res/binding_icons/RD-preferences-desktop-keyboard.png
new file mode 100755
index 00000000..2403518f
Binary files /dev/null and b/res/binding_icons/RD-preferences-desktop-keyboard.png differ
diff --git a/res/binding_icons/RD-preferences-system-search.png b/res/binding_icons/RD-preferences-system-search.png
new file mode 100755
index 00000000..e7c60acb
Binary files /dev/null and b/res/binding_icons/RD-preferences-system-search.png differ
diff --git a/res/binding_icons/RD-preferences-system-windows-actions.png b/res/binding_icons/RD-preferences-system-windows-actions.png
new file mode 100755
index 00000000..f4dd7342
Binary files /dev/null and b/res/binding_icons/RD-preferences-system-windows-actions.png differ
diff --git a/res/binding_icons/RD-preferences-tweaks-shadows.png b/res/binding_icons/RD-preferences-tweaks-shadows.png
new file mode 100755
index 00000000..9966c413
Binary files /dev/null and b/res/binding_icons/RD-preferences-tweaks-shadows.png differ
diff --git a/res/binding_icons/RD-process-stop.png b/res/binding_icons/RD-process-stop.png
new file mode 100755
index 00000000..d827b134
Binary files /dev/null and b/res/binding_icons/RD-process-stop.png differ
diff --git a/res/binding_icons/RD-pvz.png b/res/binding_icons/RD-pvz.png
new file mode 100755
index 00000000..2c64757d
Binary files /dev/null and b/res/binding_icons/RD-pvz.png differ
diff --git a/res/binding_icons/RD-retroarch.png b/res/binding_icons/RD-retroarch.png
new file mode 100755
index 00000000..684f8f20
Binary files /dev/null and b/res/binding_icons/RD-retroarch.png differ
diff --git a/res/binding_icons/RD-retrodeck-compact.png b/res/binding_icons/RD-retrodeck-compact.png
new file mode 100755
index 00000000..8ad3624d
Binary files /dev/null and b/res/binding_icons/RD-retrodeck-compact.png differ
diff --git a/res/binding_icons/RD-rpcs3.png b/res/binding_icons/RD-rpcs3.png
new file mode 100755
index 00000000..d7580360
Binary files /dev/null and b/res/binding_icons/RD-rpcs3.png differ
diff --git a/res/binding_icons/RD-ryujinx.png b/res/binding_icons/RD-ryujinx.png
new file mode 100755
index 00000000..1e3a15f6
Binary files /dev/null and b/res/binding_icons/RD-ryujinx.png differ
diff --git a/res/binding_icons/RD-security-low.png b/res/binding_icons/RD-security-low.png
new file mode 100755
index 00000000..fd686adb
Binary files /dev/null and b/res/binding_icons/RD-security-low.png differ
diff --git a/res/binding_icons/RD-steam.png b/res/binding_icons/RD-steam.png
new file mode 100755
index 00000000..c0dc9b16
Binary files /dev/null and b/res/binding_icons/RD-steam.png differ
diff --git a/res/binding_icons/RD-supertuxkart.png b/res/binding_icons/RD-supertuxkart.png
new file mode 100755
index 00000000..417e433d
Binary files /dev/null and b/res/binding_icons/RD-supertuxkart.png differ
diff --git a/res/binding_icons/RD-system-reboot.png b/res/binding_icons/RD-system-reboot.png
new file mode 100755
index 00000000..f3d4b35f
Binary files /dev/null and b/res/binding_icons/RD-system-reboot.png differ
diff --git a/res/binding_icons/RD-system-switch-user.png b/res/binding_icons/RD-system-switch-user.png
new file mode 100755
index 00000000..82d0ecac
Binary files /dev/null and b/res/binding_icons/RD-system-switch-user.png differ
diff --git a/res/binding_icons/RD-tesseract.png b/res/binding_icons/RD-tesseract.png
new file mode 100755
index 00000000..72ccbb57
Binary files /dev/null and b/res/binding_icons/RD-tesseract.png differ
diff --git a/res/binding_icons/RD-text-x-generic.png b/res/binding_icons/RD-text-x-generic.png
new file mode 100755
index 00000000..58b0fc31
Binary files /dev/null and b/res/binding_icons/RD-text-x-generic.png differ
diff --git a/res/binding_icons/RD-tools-check-spelling.png b/res/binding_icons/RD-tools-check-spelling.png
new file mode 100755
index 00000000..4d717891
Binary files /dev/null and b/res/binding_icons/RD-tools-check-spelling.png differ
diff --git a/res/binding_icons/RD-urbanterror.png b/res/binding_icons/RD-urbanterror.png
new file mode 100755
index 00000000..4efb05aa
Binary files /dev/null and b/res/binding_icons/RD-urbanterror.png differ
diff --git a/res/binding_icons/RD-user-red-home.png b/res/binding_icons/RD-user-red-home.png
new file mode 100755
index 00000000..bf924158
Binary files /dev/null and b/res/binding_icons/RD-user-red-home.png differ
diff --git a/res/binding_icons/RD-utilities-terminal.png b/res/binding_icons/RD-utilities-terminal.png
new file mode 100755
index 00000000..c19c8d16
Binary files /dev/null and b/res/binding_icons/RD-utilities-terminal.png differ
diff --git a/res/binding_icons/RD-vcmi.png b/res/binding_icons/RD-vcmi.png
new file mode 100755
index 00000000..bbc4cd4f
Binary files /dev/null and b/res/binding_icons/RD-vcmi.png differ
diff --git a/res/binding_icons/RD-video-x-generic.png b/res/binding_icons/RD-video-x-generic.png
new file mode 100755
index 00000000..5b772904
Binary files /dev/null and b/res/binding_icons/RD-video-x-generic.png differ
diff --git a/res/binding_icons/RD-view-refresh.png b/res/binding_icons/RD-view-refresh.png
new file mode 100755
index 00000000..69eaf39c
Binary files /dev/null and b/res/binding_icons/RD-view-refresh.png differ
diff --git a/res/binding_icons/RD-xemu.png b/res/binding_icons/RD-xemu.png
new file mode 100755
index 00000000..fb949e27
Binary files /dev/null and b/res/binding_icons/RD-xemu.png differ
diff --git a/res/binding_icons/RD-zoom-fit-best.png b/res/binding_icons/RD-zoom-fit-best.png
new file mode 100755
index 00000000..f8d1744b
Binary files /dev/null and b/res/binding_icons/RD-zoom-fit-best.png differ
diff --git a/res/binding_icons/RD-zoom-in.png b/res/binding_icons/RD-zoom-in.png
new file mode 100755
index 00000000..6860adeb
Binary files /dev/null and b/res/binding_icons/RD-zoom-in.png differ
diff --git a/res/binding_icons/RD-zoom-original.png b/res/binding_icons/RD-zoom-original.png
new file mode 100755
index 00000000..1be8ca80
Binary files /dev/null and b/res/binding_icons/RD-zoom-original.png differ
diff --git a/res/binding_icons/RD-zoom-out.png b/res/binding_icons/RD-zoom-out.png
new file mode 100755
index 00000000..fe98a7fd
Binary files /dev/null and b/res/binding_icons/RD-zoom-out.png differ
diff --git a/res/extra-splashes/example-splash.svg b/res/extra_splashes/example-splash.svg
similarity index 100%
rename from res/extra-splashes/example-splash.svg
rename to res/extra_splashes/example-splash.svg
diff --git a/res/extra_splashes/japanese-retoro-dekku.svg b/res/extra_splashes/japanese-retoro-dekku.svg
new file mode 100755
index 00000000..af152d5d
--- /dev/null
+++ b/res/extra_splashes/japanese-retoro-dekku.svg
@@ -0,0 +1,216 @@
+
+
diff --git a/res/icon.afphoto b/res/icon.afphoto
new file mode 100644
index 00000000..c47c30a2
Binary files /dev/null and b/res/icon.afphoto differ
diff --git a/res/icon_alt.afphoto b/res/icon_alt.afphoto
new file mode 100644
index 00000000..5f6d7bfb
Binary files /dev/null and b/res/icon_alt.afphoto differ
diff --git a/res/logo_cooker_Final.afphoto b/res/logo_cooker_Final.afphoto
new file mode 100644
index 00000000..55c97ace
Binary files /dev/null and b/res/logo_cooker_Final.afphoto differ
diff --git a/res/logo_stacked_merged.afphoto b/res/logo_stacked_merged.afphoto
new file mode 100644
index 00000000..0f9d928e
Binary files /dev/null and b/res/logo_stacked_merged.afphoto differ
diff --git a/res/logo_stacked_merged.svg b/res/logo_stacked_merged.svg
new file mode 100644
index 00000000..72c87db0
--- /dev/null
+++ b/res/logo_stacked_merged.svg
@@ -0,0 +1,13 @@
+
+
+
diff --git a/res/logo_unstacked.afphoto b/res/logo_unstacked.afphoto
new file mode 100644
index 00000000..98ae1923
Binary files /dev/null and b/res/logo_unstacked.afphoto differ
diff --git a/retrodeck.sh b/retrodeck.sh
index c7447ccb..763229c5 100644
--- a/retrodeck.sh
+++ b/retrodeck.sh
@@ -1,7 +1,6 @@
#!/bin/bash
source /app/libexec/global.sh
-source /app/libexec/post_update.sh
# Arguments section
@@ -49,7 +48,11 @@ https://retrodeck.net
;;
--configurator*)
sh /app/tools/configurator.sh
- exit
+ if [[ $(configurator_generic_question_dialog "RetroDECK Configurator" "Would you like to launch RetroDECK after closing the Configurator?") == "false" ]]; then
+ exit
+ else
+ shift
+ fi
;;
--reset-emulator*)
echo "You are about to reset one or more RetroDECK emulators."
@@ -98,31 +101,40 @@ done
# UPDATE TRIGGERED
# if lockfile exists
-if [ -f "$lockfile" ]
-then
+if [ -f "$lockfile" ]; then
# ...but the version doesn't match with the config file
- if [ "$hard_version" != "$version" ];
- then
+ if [ "$hard_version" != "$version" ]; then
echo "Config file's version is $version but the actual version is $hard_version"
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
+ configurator_generic_dialog "RetroDECK Cooker Warning" "RUNNING COOKER VERSIONS OF RETRODECK CAN BE EXTREMELY DANGEROUS AND ALL OF YOUR RETRODECK DATA\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\nARE AT RISK BY CONTINUING!"
+ set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options"
+ set_setting_value $rd_conf "update_check" "true" retrodeck "options"
+ set_setting_value $rd_conf "developer_options" "true" retrodeck "options"
cooker_base_version=$(echo $hard_version | cut -d'-' -f2)
- update_ignore=$(curl --silent "https://api.github.com/repos/XargonWan/$update_repo/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
- set_setting_value $rd_conf "update_ignore" "$update_ignore" retrodeck "options" # Store the latest online version to ignore for future checks, as internal version and online tag version may not match up.
- choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Fresh Install" \
+ choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Full Wipe and Fresh Install" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Cooker Upgrade" \
- --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK data to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.")
+ --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK folders and data (including ROMs and saves) to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.")
rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked
if [[ $choice == "Don't Upgrade" ]]; then # If user wants to bypass the post_update.sh process this time.
echo "Skipping upgrade process for cooker build, updating stored version in retrodeck.cfg"
set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
- elif [[ $choice == "Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install
- echo "Removing RetroDECK data and starting fresh"
- rm -rf /var
- rm -rf "$HOME/retrodeck"
- source /app/libexec/global.sh
- finit
+ elif [[ $choice == "Full Wipe and Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install
+ if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "This is going to remove all of the data in all locations used by RetroDECK!\n\n(INCLUDING BIOS FILES, BORDERS, DOWNLOADED MEDIA, GAMELISTS, MODS, ROMS, SAVES, STATES, SCREENSHOTS, TEXTURE PACKS AND THEMES)\n\nAre you sure you want to contine?") == "true" ]]; then
+ if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "Are you super sure?\n\nThere is no going back from this process, everything is gonzo.\nDust in the wind.\n\nYesterdays omelette.") == "true" ]]; then
+ if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "But are you super DUPER sure? We REAAAALLLLLYY want to make sure you know what is happening here.\n\nThe ~/retrodeck and ~/.var/app/net.retrodeck.retrodeck folders and ALL of their contents\nare about to be PERMANENTLY removed.\n\nStill sure you want to proceed?") == "true" ]]; then
+ configurator_generic_dialog "RetroDECK Cooker Reset" "Ok, if you're that sure, here we go!"
+ if [[ $(configurator_generic_question_dialog "RetroDECK Cooker Reset" "(Are you actually being serious here? Because we are...\n\nNo backsies.)") == "true" ]]; then
+ echo "Removing RetroDECK data and starting fresh"
+ rm -rf /var
+ rm -rf "$HOME/retrodeck"
+ source /app/libexec/global.sh
+ finit
+ fi
+ fi
+ fi
+ fi
fi
else
echo "Performing normal upgrade process for version" $cooker_base_version
@@ -131,9 +143,12 @@ then
fi
else # If newly-installed version is a normal build.
if grep -qF "cooker" <<< $version; then # If previously installed version was a cooker build
+ cooker_base_version=$(echo $version | cut -d'-' -f2)
+ version=$cooker_base_version # Temporarily assign cooker base version to $version so update script can read it properly.
set_setting_value $rd_conf "update_repo" "RetroDECK" retrodeck "options"
set_setting_value $rd_conf "update_check" "false" retrodeck "options"
set_setting_value $rd_conf "update_ignore" "" retrodeck "options"
+ set_setting_value $rd_conf "developer_options" "false" retrodeck "options"
fi
post_update # Executing post update script
fi
@@ -142,25 +157,23 @@ then
# if the lock file doesn't exist at all means that it's a fresh install or a triggered reset
else
echo "Lockfile not found"
- if [[ $(check_network_connectivity) == "true" ]]; then
- finit # Executing First/Force init
- else
- configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe initial RetroDECK setup requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available."
- exit 1
- fi
+ finit # Executing First/Force init
fi
if [[ $multi_user_mode == "true" ]]; then
multi_user_determine_current_user
fi
-# Check if running in Desktop mode and warn if true, unless desktop_mode_warning=false in retrodeck.cfg
+# Run optional startup checks
desktop_mode_warning
+low_space_warning
# Check if there is a new version of RetroDECK available, if update_check=true in retrodeck.cfg and there is network connectivity available.
-if [[ $(check_network_connectivity) == "true" ]] && [[ $update_check == "true" ]]; then
- check_for_version_update
+if [[ $update_check == "true" ]]; then
+ if [[ $(check_network_connectivity) == "true" ]]; then
+ check_for_version_update
+ fi
fi
# Normal Startup
diff --git a/tools/Lutris/__pycache__/shortcut.cpython-310.pyc b/tools/Lutris/__pycache__/shortcut.cpython-310.pyc
new file mode 100644
index 00000000..0b8cfb8d
Binary files /dev/null and b/tools/Lutris/__pycache__/shortcut.cpython-310.pyc differ
diff --git a/tools/Lutris/shortcut.py b/tools/Lutris/shortcut.py
new file mode 100644
index 00000000..0d488713
--- /dev/null
+++ b/tools/Lutris/shortcut.py
@@ -0,0 +1,434 @@
+"""Sync RetroDECK favorites games with steam shortcuts"""
+import binascii
+import os
+import re
+import shlex
+import shutil
+import glob
+import vdf
+import sys
+
+import xml.etree.ElementTree as ET
+
+command_list_default={
+"3do": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/opera_libretro.so",
+"amiga": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"amiga1200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"amiga600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"amigacd32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"amstradcpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
+"arcade": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"arduboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/arduous_libretro.so",
+"astrocde": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"atari2600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
+"atari5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
+"atari7800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prosystem_libretro.so",
+"atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
+"atarijaguar": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
+"atarijaguarcd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
+"atarilynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
+"atarist": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/hatari_libretro.so",
+"atarixe": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
+"atomiswave": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
+"c64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
+"cavestory": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nxengine_libretro.so",
+"cdimono1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
+"cdtv": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"chailove": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/chailove_libretro.so",
+"channelf": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freechaf_libretro.so",
+"colecovision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"cps": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"cps1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"cps2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"cps3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"doom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
+"dos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
+"dreamcast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
+"easyrpg": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/easyrpg_libretro.so",
+"famicom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
+"fba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
+"fbneo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
+"fds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
+"gameandwatch": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
+"gamegear": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"gb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
+"gba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
+"gbc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
+"genesis": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"gx4000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
+"intellivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freeintv_libretro.so",
+"j2me": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/squirreljme_libretro.so",
+"lcdgames": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
+"lutro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/lutro_libretro.so",
+"mame": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"mastersystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"megacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"megacdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"megadrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"megaduck": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameduck_libretro.so",
+"mess": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mess2015_libretro.so",
+"model2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"moto": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
+"msx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"msx1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"msx2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"msxturbor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"multivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
+"n64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
+"n64dd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
+"naomi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
+"naomigd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
+"nds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
+"neogeo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
+"neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
+"neogeocdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
+"nes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
+"ngp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
+"ngpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
+"odyssey2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
+"palm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mu_libretro.so",
+"pc88": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quasi88_libretro.so",
+"pc98": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
+"pcengine": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
+"pcenginecd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
+"pcfx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pcfx_libretro.so",
+"pokemini": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pokemini_libretro.so",
+"psx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
+"quake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
+"satellaview": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
+"saturnjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
+"scummvm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/scummvm_libretro.so",
+"sega32x": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
+"sega32xjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
+"sega32xna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
+"segacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"sfc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"sg-1000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"sgb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
+"snes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"snesna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"spectravideo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"sufami": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"supergrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
+"supervision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/potator_libretro.so",
+"tg16": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
+"tg-cd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
+"tic80": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tic80_libretro.so",
+"to8": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
+"uzebox": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/uzem_libretro.so",
+"vectrex": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vecx_libretro.so",
+"vic20": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xvic_libretro.so",
+"videopac": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
+"virtualboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_vb_libretro.so",
+"wasm4": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/wasm4_libretro.so",
+"wonderswan": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
+"wonderswancolor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
+"x1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/x1_libretro.so",
+"x68000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/px68k_libretro.so",
+"zx81": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/81_libretro.so",
+"zxspectrum": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fuse_libretro.so",
+"switch": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g",
+"n3ds": "flatpak run --command=citra net.retrodeck.retrodeck",
+"ps2": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
+"wiiu": "flatpak run --command=Cemu-wrapper net.retrodeck.retrodeck -g",
+"gc": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
+"wii": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
+"xbox": "flatpak run --command=xemu net.retrodeck.retrodeck -dvd_path",
+"ps3": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
+"psp": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
+"pico8": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run"
+}
+
+alt_command_list={
+"PUAE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
+"Caprice32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
+"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"Stella": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
+"a5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
+"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
+"Handy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
+"VICE x64sc Accurate": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
+"SAME CDi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
+"blueMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
+"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
+"PrBoom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
+"DOSBox-Pure": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
+"Mesen": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
+"Genesis Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
+"Gamebatte": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
+"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
+"ParaLLEI N64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
+"DeSmuME": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
+"NeoCD": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
+"Beetle NeoPop": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
+"Neko Project II Kai": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
+"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
+"Swanstation": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
+"TyrQuake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
+"Beetle Saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
+"Snes 9x - Current": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
+"Beetle SuperGrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
+"Yuzu (Standalone)": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g",
+"Citra (Standalone)": "flatpak run --command=citra net.retrodeck.retrodeck",
+"PCSX2 (Standalone)": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
+"Dolphin (Standalone)": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
+"RPCS3 Directory (Standalone)": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
+"PPSSPP (Standalone)": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
+"PICO-8 (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run",
+"PUAE 2021": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae2021_libretro.so",
+"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
+"CPCemu (Standalone)": "NYI", #NYI
+"MAME 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2010_libretro.so",
+"MAME 2003-Plus": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2003_plus_libretro.so",
+"MAME 2000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2000_libretro.so",
+"MAME (Standalone)": "NYI", #NYI
+"FinalBurn Neo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
+"FinalBurn Neo (Standalone)": "NYI", #NYI
+"FB Alpha 2012": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
+"Flycast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
+"Flycast (Standalone)": "NYI", #NYI
+"Kronos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/kronos_libretro.so",
+"Supermodel (Standalone)": "NYI", #NYI
+"Supermodel [Fullscreen] (Standalone)": "NYI", #NYI
+"Shortcut or script": "TODO: I have to catch how it works", #TODO
+"Atari800 (Standalone)": "NYI", #NYI
+"Stella 2014": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella2014_libretro.so",
+"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
+"Beetle Lynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_lynx_libretro.so",
+"VICE x64 Fast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64_libretro.so",
+"VICE x64 SuperCPU": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xscpu64_libretro.so",
+"VICE x128": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x128_libretro.so",
+"Frodo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/frodo_libretro.so",
+"CDi 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cdi2015_libretro.so",
+"Gearcoleco": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearcoleco_libretro.so",
+"FB Alpha 2012 CPS-1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps1_libretro.so",
+"FB Alpha 2012 CPS-2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps2_libretro.so",
+"FB Alpha 2012 CPS-3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps3_libretro.so",
+"Boom 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro.so",
+"Boom 3 xp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro_xp.so",
+"DOSBox-Core": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_core_libretro.so",
+"DOSBox-SVN": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_svn_libretro.so",
+"Keep ES-DE running": "TODO: I have to catch how it works", #TODO
+"AppImage (Suspend ES-DE)": "TODO: I have to catch how it works", #TODO
+"AppImage (Keep ES-DE running)": "TODO: I have to catch how it works", #TODO
+"Nestopia UE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nestopia_libretro.so",
+"FCEUmm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fceumm_libretro.so",
+"QuickNES": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quicknes_libretro.so",
+"Genesis Plus GX Wide": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_wide_libretro.so",
+"Gearsystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
+"SMS Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/smsplus_libretro.so",
+"SameBoy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameboy_libretro.so",
+"Gearboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearboy_libretro.so",
+"TGB Dual": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tgbdual_libretro.so",
+"Mesen-S": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
+"VBA-M": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vbam_libretro.so",
+"bsnes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_libretro.so",
+"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
+"VBA Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vba_next_libretro.so",
+"gpSP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gpsp_libretro.so",
+"Dolphin": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dolphin_libretro.so",
+"PrimeHack (Standalone)": "flatpak run --command=primehack-wrapper net.retrodeck.retrodeck -b -e",
+"PicoDrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
+"BlastEm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/blastem_libretro.so",
+"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
+"fMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fmsx_libretro.so",
+"Citra": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra_libretro.so",
+"Citra 2018": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra2018_libretro.so",
+"Mupen64Plus-Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
+"DeSmuME 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume2015_libretro.so",
+"melonDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/melonds_libretro.so",
+"melonDS (Standalone)": "flatpak run --command=melonDS net.retrodeck.retrodeck",
+"FinalBurn Neo neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck --subsystem neocd -L /var/config/retroarch/cores/fbneo_libretro.so",
+"RACE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/race_libretro.so",
+"Neko Project II": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nekop2_libretro.so",
+"Beetle PCE FAST": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_fast_libretro.so",
+"PICO-8 Splore (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -splore",
+"AppImage": "TODO: I have to catch how it works", #TODO
+"LRPS2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
+"PCSX2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
+"RPCS3 Shortcut (Standalone)": "TODO: I have to catch how it works", #TODO
+"PPSSPP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/ppsspp_libretro.so",
+"Beetle PSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_libretro.so",
+"Beetle PSX HW": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_hw_libretro.so",
+"PCSX ReARMed": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx_rearmed_libretro.so",
+"DuckStation (Standalone)": "flatpak run --command=duckstation-qt net.retrodeck.retrodeck -batch",
+"vitaQuake 2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2_libretro.so",
+"vitaQuake 2 [Rogue]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-rogue_libretro.so",
+"vitaQuake 2 [Xatrix]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-xatrix_libretro.so",
+"vitaQuake 2 [Zaero]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-zaero_libretro.so",
+"vitaQuake 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake3_libretro.so",
+"YabaSanshiro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabasanshiro_libretro.so",
+"Yabause": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabause_libretro.so",
+"Snes9x 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x2010_libretro.so",
+"bsnes-hd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_hd_beta_libretro.so",
+"bsnes-mercury Accuracy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_mercury_accuracy_libretro.so",
+"Beetle Supafaust": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supafaust_libretro.so",
+"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so"
+}
+
+STEAM_DATA_DIRS = (
+ "~/.steam/debian-installation",
+ "~/.steam",
+ "~/.local/share/steam",
+ "~/.local/share/Steam",
+ "~/.steam/steam",
+ "~/.var/app/com.valvesoftware.Steam/data/steam",
+ "/usr/share/steam",
+ "/usr/local/share/steam",
+)
+
+def create_shortcut(games, launch_config_name=None):
+ shortcut_path = get_shortcuts_vdf_path()
+ if os.path.exists(shortcut_path):
+ with open(shortcut_path, "rb") as shortcut_file:
+ shortcuts = vdf.binary_loads(shortcut_file.read())['shortcuts'].values()
+ else:
+ shortcuts = []
+
+ old_shortcuts=[]
+ for shortcut in shortcuts:
+ if "net.retrodeck.retrodeck" in shortcut["Exe"]:
+ keep=False
+ for game in games:
+ gameid=generate_shortcut_id(game[0])
+ if gameid==shortcut["appid"]:
+ shortcut["Exe"]=game[1]
+ game[0]="###"
+ keep=True
+ break
+ if keep:
+ old_shortcuts.append(shortcut)
+ else:
+ old_shortcuts.append(shortcut)
+
+ new_shortcuts=[]
+ for game in games:
+ if not game[0]=="###":
+ new_shortcuts=new_shortcuts+[generate_shortcut(game, launch_config_name)]
+
+ shortcuts = list(old_shortcuts) + list(new_shortcuts)
+
+ updated_shortcuts = {
+ 'shortcuts': {
+ str(index): elem for index, elem in enumerate(shortcuts)
+ }
+ }
+ with open(shortcut_path, "wb") as shortcut_file:
+ shortcut_file.write(vdf.binary_dumps(updated_shortcuts))
+
+def get_config_path():
+ config_paths = search_recursive_in_steam_dirs("userdata/**/config/")
+ if not config_paths:
+ return None
+ return config_paths[0]
+
+def get_shortcuts_vdf_path():
+ config_path = get_config_path()
+ if not config_path:
+ return None
+ return os.path.join(config_path, "shortcuts.vdf")
+
+def search_recursive_in_steam_dirs(path_suffix):
+ """Perform a recursive search based on glob and returns a
+ list of hits"""
+ results = []
+ for candidate in STEAM_DATA_DIRS:
+ glob_path = os.path.join(os.path.expanduser(candidate), path_suffix)
+ for path in glob.glob(glob_path):
+ results.append(path)
+ return results
+
+def generate_shortcut(game, launch_config_name):
+ return {
+ 'appid': generate_shortcut_id(game[0]),
+ 'appname': f'{game[0]}',
+ 'Exe': f'{game[1]}',
+ 'StartDir': f'{os.path.expanduser("~")}',
+ 'icon': "",
+ 'LaunchOptions': "",
+ 'IsHidden': 0,
+ 'AllowDesktopConfig': 1,
+ 'AllowOverlay': 1,
+ 'OpenVR': 0,
+ 'Devkit': 0,
+ 'DevkitOverrideAppID': 0,
+ 'LastPlayTime': 0,
+ }
+
+def generate_preliminary_id(name):
+ unique_id = ''.join(["RetroDECK", name])
+ top = binascii.crc32(str.encode(unique_id, 'utf-8')) | 0x80000000
+ return (top << 32) | 0x02000000
+
+def generate_shortcut_id(name):
+ return (generate_preliminary_id(name) >> 32) - 0x100000000
+
+def addToSteam():
+ print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg")))
+
+ fl=open(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"),"r")
+ lines=fl.readlines()
+ for line in lines:
+ if "rdhome" in line:
+ rdhome=line[7:-1]
+ elif "roms_folder" in line:
+ roms_folder=line[12:-1]
+ fl.close()
+ games=[]
+
+ command_list_default["pico8"]=command_list_default["pico8"].replace("{GAMEDIR}",roms_folder+"/pico8")
+ alt_command_list["PICO-8 Splore (Standalone)"]=alt_command_list["PICO-8 Splore (Standalone)"].replace("{GAMEDIR}",roms_folder+"/pico8")
+
+ for system in os.listdir(rdhome+"/gamelists/"):
+ print("Start parsing system: {}".format(system))
+
+ f=open(rdhome+"/gamelists/"+system+"/gamelist.xml","r")
+ f.readline()
+ parser=ET.XMLParser()
+ parser.feed(b'')
+ parser.feed(f.read())
+ parser.feed(b' ')
+ root=parser.close()
+ f.close()
+
+ globalAltEmu=""
+ for subroot in root:
+ if subroot.tag=="alternativeEmulator":
+ for alt in subroot:
+ globalAltEmu=alt.text
+ else:
+ for game in subroot:
+ path=""
+ name=""
+ favorite=""
+ altemulator=globalAltEmu
+ for tag in game:
+ if tag.tag=="path":
+ path=tag.text
+ elif tag.tag=="name":
+ name=tag.text
+ elif tag.tag=="favorite":
+ favorite=tag.text
+ elif tag.tag=="altemulator":
+ altemulator=tag.text
+
+ if favorite=="true" and altemulator=="":
+ print("Find favorite game: {}".format(name))
+ games.append([name,command_list_default[system]+" '"+roms_folder+"/"+system+path[1:]+"'"])
+ elif favorite=="true":
+ print("Find favorite game with alternative emulator: {}, {}".format(name,altemulator))
+ if ("neogeocd" in system) and altemulator=="FinalBurn Neo":
+ games.append([name,alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'"])
+ print(alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'")
+ elif system=="pico8" and altemulator=="PICO-8 Splore (Standalone)":
+ games.append([name,alt_command_list[altemulator]])
+ print(alt_command_list[altemulator])
+ else:
+ games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"])
+ print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'")
+
+ create_shortcut(games)
+
+if __name__=="__main__":
+ addToSteam()
diff --git a/tools/Lutris/vdf/__init__.py b/tools/Lutris/vdf/__init__.py
new file mode 100644
index 00000000..6e7f136b
--- /dev/null
+++ b/tools/Lutris/vdf/__init__.py
@@ -0,0 +1,467 @@
+"""
+Module for deserializing/serializing to and from VDF
+
+https://github.com/ValvePython/vdf
+
+MIT License
+"""
+# pylint: disable=raise-missing-from
+
+__version__ = "3.2"
+__author__ = "Rossen Georgiev"
+
+import re
+import struct
+from binascii import crc32
+from io import StringIO as unicodeIO
+
+string_type = str
+int_type = int
+BOMS = '\ufffe\ufeff'
+
+
+def strip_bom(line):
+ return line.lstrip(BOMS)
+
+
+# string escaping
+_unescape_char_map = {
+ r"\n": "\n",
+ r"\t": "\t",
+ r"\v": "\v",
+ r"\b": "\b",
+ r"\r": "\r",
+ r"\f": "\f",
+ r"\a": "\a",
+ r"\\": "\\",
+ r"\?": "?",
+ r"\"": "\"",
+ r"\'": "\'",
+}
+_escape_char_map = {v: k for k, v in _unescape_char_map.items()}
+
+
+def _re_escape_match(m):
+ return _escape_char_map[m.group()]
+
+
+def _re_unescape_match(m):
+ return _unescape_char_map[m.group()]
+
+
+def _escape(text):
+ return re.sub(r"[\n\t\v\b\r\f\a\\\?\"']", _re_escape_match, text)
+
+
+def _unescape(text):
+ return re.sub(r"(\\n|\\t|\\v|\\b|\\r|\\f|\\a|\\\\|\\\?|\\\"|\\')", _re_unescape_match, text)
+
+# parsing and dumping for KV1
+
+
+def parse(fp, mapper=dict, merge_duplicate_keys=True, escaped=True):
+ """
+ Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a VDF)
+ to a Python object.
+
+ ``mapper`` specifies the Python object used after deserializetion. ``dict` is
+ used by default. Alternatively, ``collections.OrderedDict`` can be used if you
+ wish to preserve key order. Or any object that acts like a ``dict``.
+
+ ``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the
+ same key into one instead of overwriting. You can se this to ``False`` if you are
+ using ``VDFDict`` and need to preserve the duplicates.
+ """
+ if not issubclass(mapper, dict):
+ raise TypeError("Expected mapper to be subclass of dict, got %s" % type(mapper))
+ if not hasattr(fp, 'readline'):
+ raise TypeError("Expected fp to be a file-like object supporting line iteration")
+
+ lineno = 0
+ stack = [mapper()]
+ expect_bracket = False
+
+ re_keyvalue = re.compile(r'^("(?P(?:\\.|[^\\"])+)"|(?P#?[a-z0-9\-\_\\\?]+))'
+ r'([ \t]*('
+ r'"(?P(?:\\.|[^\\"])*)(?P")?'
+ r'|(?P[a-z0-9\-\_\\\?\*\.]+)'
+ r'))?',
+ flags=re.I)
+
+ for lineno, line in enumerate(fp, 1):
+ if lineno == 1:
+ line = strip_bom(line)
+
+ line = line.lstrip()
+
+ # skip empty and comment lines
+ if line == "" or line[0] == '/':
+ continue
+
+ # one level deeper
+ if line[0] == "{":
+ expect_bracket = False
+ continue
+
+ if expect_bracket:
+ raise SyntaxError("vdf.parse: expected openning bracket",
+ (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 1, line))
+
+ # one level back
+ if line[0] == "}":
+ if len(stack) > 1:
+ stack.pop()
+ continue
+
+ raise SyntaxError("vdf.parse: one too many closing parenthasis",
+ (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line))
+
+ # parse keyvalue pairs
+ while True:
+ match = re_keyvalue.match(line)
+
+ if not match:
+ try:
+ line += next(fp)
+ continue
+ except StopIteration:
+ raise SyntaxError("vdf.parse: unexpected EOF (open key quote?)",
+ (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line))
+
+ key = match.group('key') if match.group('qkey') is None else match.group('qkey')
+ val = match.group('val') if match.group('qval') is None else match.group('qval')
+
+ if escaped:
+ key = _unescape(key)
+
+ # we have a key with value in parenthesis, so we make a new dict obj (level deeper)
+ if val is None:
+ if merge_duplicate_keys and key in stack[-1]:
+ _m = stack[-1][key]
+ else:
+ _m = mapper()
+ stack[-1][key] = _m
+
+ stack.append(_m)
+ expect_bracket = True
+
+ # we've matched a simple keyvalue pair, map it to the last dict obj in the stack
+ else:
+ # if the value is line consume one more line and try to match again,
+ # until we get the KeyValue pair
+ if match.group('vq_end') is None and match.group('qval') is not None:
+ try:
+ line += next(fp)
+ continue
+ except StopIteration:
+ raise SyntaxError("vdf.parse: unexpected EOF (open quote for value?)",
+ (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line))
+
+ stack[-1][key] = _unescape(val) if escaped else val
+
+ # exit the loop
+ break
+
+ if len(stack) != 1:
+ raise SyntaxError("vdf.parse: unclosed parenthasis or quotes (EOF)",
+ (getattr(fp, 'name', '<%s>' % fp.__class__.__name__), lineno, 0, line))
+
+ return stack.pop()
+
+
+def loads(s, **kwargs):
+ """
+ Deserialize ``s`` (a ``str`` or ``unicode`` instance containing a JSON
+ document) to a Python object.
+ """
+ if not isinstance(s, string_type):
+ raise TypeError("Expected s to be a str, got %s" % type(s))
+ fp = unicodeIO(s)
+ return parse(fp, **kwargs)
+
+
+def load(fp, **kwargs):
+ """
+ Deserialize ``fp`` (a ``.readline()``-supporting file-like object containing
+ a JSON document) to a Python object.
+ """
+ return parse(fp, **kwargs)
+
+
+def dumps(obj, pretty=False, escaped=True):
+ """
+ Serialize ``obj`` to a VDF formatted ``str``.
+ """
+ if not isinstance(obj, dict):
+ raise TypeError("Expected data to be an instance of``dict``")
+ if not isinstance(pretty, bool):
+ raise TypeError("Expected pretty to be of type bool")
+ if not isinstance(escaped, bool):
+ raise TypeError("Expected escaped to be of type bool")
+
+ return ''.join(_dump_gen(obj, pretty, escaped))
+
+
+def dump(obj, fp, pretty=False, escaped=True):
+ """
+ Serialize ``obj`` as a VDF formatted stream to ``fp`` (a
+ ``.write()``-supporting file-like object).
+ """
+ if not isinstance(obj, dict):
+ raise TypeError("Expected data to be an instance of``dict``")
+ if not hasattr(fp, 'write'):
+ raise TypeError("Expected fp to have write() method")
+ if not isinstance(pretty, bool):
+ raise TypeError("Expected pretty to be of type bool")
+ if not isinstance(escaped, bool):
+ raise TypeError("Expected escaped to be of type bool")
+
+ for chunk in _dump_gen(obj, pretty, escaped):
+ fp.write(chunk)
+
+
+def _dump_gen(data, pretty=False, escaped=True, level=0):
+ indent = "\t"
+ line_indent = ""
+
+ if pretty:
+ line_indent = indent * level
+
+ for key, value in data.items():
+ if escaped and isinstance(key, string_type):
+ key = _escape(key)
+
+ if isinstance(value, dict):
+ yield '%s"%s"\n%s{\n' % (line_indent, key, line_indent)
+ for chunk in _dump_gen(value, pretty, escaped, level + 1):
+ yield chunk
+ yield "%s}\n" % line_indent
+ else:
+ if escaped and isinstance(value, string_type):
+ value = _escape(value)
+
+ yield '%s"%s" "%s"\n' % (line_indent, key, value)
+
+
+# binary VDF
+class BASE_INT(int_type):
+ def __repr__(self):
+ return "%s(%s)" % (self.__class__.__name__, self)
+
+
+class UINT_64(BASE_INT):
+ pass
+
+
+class INT_64(BASE_INT):
+ pass
+
+
+class POINTER(BASE_INT):
+ pass
+
+
+class COLOR(BASE_INT):
+ pass
+
+
+BIN_NONE = b'\x00'
+BIN_STRING = b'\x01'
+BIN_INT32 = b'\x02'
+BIN_FLOAT32 = b'\x03'
+BIN_POINTER = b'\x04'
+BIN_WIDESTRING = b'\x05'
+BIN_COLOR = b'\x06'
+BIN_UINT64 = b'\x07'
+BIN_END = b'\x08'
+BIN_INT64 = b'\x0A'
+BIN_END_ALT = b'\x0B'
+
+
+def binary_loads(s, mapper=dict, merge_duplicate_keys=True, alt_format=False):
+ """
+ Deserialize ``s`` (``bytes`` containing a VDF in "binary form")
+ to a Python object.
+
+ ``mapper`` specifies the Python object used after deserializetion. ``dict` is
+ used by default. Alternatively, ``collections.OrderedDict`` can be used if you
+ wish to preserve key order. Or any object that acts like a ``dict``.
+
+ ``merge_duplicate_keys`` when ``True`` will merge multiple KeyValue lists with the
+ same key into one instead of overwriting. You can se this to ``False`` if you are
+ using ``VDFDict`` and need to preserve the duplicates.
+ """
+ if not isinstance(s, bytes):
+ raise TypeError("Expected s to be bytes, got %s" % type(s))
+ if not issubclass(mapper, dict):
+ raise TypeError("Expected mapper to be subclass of dict, got %s" % type(mapper))
+
+ # helpers
+ int32 = struct.Struct(' idx:
+ t = s[idx:idx + 1]
+ idx += 1
+
+ if t == CURRENT_BIN_END:
+ if len(stack) > 1:
+ stack.pop()
+ continue
+ break
+
+ key, idx = read_string(s, idx)
+
+ if t == BIN_NONE:
+ if merge_duplicate_keys and key in stack[-1]:
+ _m = stack[-1][key]
+ else:
+ _m = mapper()
+ stack[-1][key] = _m
+ stack.append(_m)
+ elif t == BIN_STRING:
+ stack[-1][key], idx = read_string(s, idx)
+ elif t == BIN_WIDESTRING:
+ stack[-1][key], idx = read_string(s, idx, wide=True)
+ elif t in (BIN_INT32, BIN_POINTER, BIN_COLOR):
+ val = int32.unpack_from(s, idx)[0]
+
+ if t == BIN_POINTER:
+ val = POINTER(val)
+ elif t == BIN_COLOR:
+ val = COLOR(val)
+
+ stack[-1][key] = val
+ idx += int32.size
+ elif t == BIN_UINT64:
+ stack[-1][key] = UINT_64(uint64.unpack_from(s, idx)[0])
+ idx += uint64.size
+ elif t == BIN_INT64:
+ stack[-1][key] = INT_64(int64.unpack_from(s, idx)[0])
+ idx += int64.size
+ elif t == BIN_FLOAT32:
+ stack[-1][key] = float32.unpack_from(s, idx)[0]
+ idx += float32.size
+ else:
+ raise SyntaxError("Unknown data type at offset %d: %s" % (idx - 1, repr(t)))
+
+ if len(s) != idx or len(stack) != 1:
+ raise SyntaxError("Binary VDF ended at offset %d, but length is %d" % (idx, len(s)))
+
+ return stack.pop()
+
+
+def binary_dumps(obj, alt_format=False):
+ """
+ Serialize ``obj`` to a binary VDF formatted ``bytes``.
+ """
+ return b''.join(_binary_dump_gen(obj, alt_format=alt_format))
+
+
+def _binary_dump_gen(obj, level=0, alt_format=False):
+ if level == 0 and len(obj) == 0:
+ return
+
+ int32 = struct.Struct(' 0:
+ for idx in _range(start_idx, len(self.__omap)):
+ if self.__omap[idx][1] == skey:
+ oldkey = self.__omap[idx]
+ newkey = (dup_idx, skey)
+ super().__setitem__(newkey, self[oldkey])
+ super().__delitem__(oldkey)
+ self.__omap[idx] = newkey
+
+ dup_idx += 1
+ tail_count -= 1
+ if tail_count == 0:
+ break
+
+ if self.__kcount[skey] == 0:
+ del self.__kcount[skey]
+
+ return result
+
+ def __iter__(self):
+ return iter(self.iterkeys())
+
+ def __contains__(self, key):
+ return super().__contains__(self._normalize_key(key))
+
+ def __eq__(self, other):
+ if isinstance(other, VDFDict):
+ return list(self.items()) == list(other.items())
+ return False
+
+ def __ne__(self, other):
+ return not self.__eq__(other)
+
+ def clear(self):
+ super().clear()
+ self.__kcount.clear()
+ self.__omap = []
+
+ def get(self, key, *args):
+ return super().get(self._normalize_key(key), *args)
+
+ def setdefault(self, key, default=None):
+ if key not in self:
+ self.__setitem__(key, default)
+ return self.__getitem__(key)
+
+ def pop(self, key):
+ key = self._normalize_key(key)
+ value = self.__getitem__(key)
+ self.__delitem__(key)
+ return value
+
+ def popitem(self):
+ if not self.__omap:
+ raise KeyError("VDFDict is empty")
+ key = self.__omap[-1]
+ return key[1], self.pop(key)
+
+ def update(self, data=None, **kwargs):
+ if isinstance(data, dict):
+ data = data.items()
+ elif not isinstance(data, list):
+ raise TypeError("Expected data to be a list or dict, got %s" % type(data))
+
+ for key, value in data:
+ self.__setitem__(key, value)
+
+ def iterkeys(self):
+ return (key[1] for key in self.__omap)
+
+ def keys(self):
+ return _kView(self)
+
+ def itervalues(self):
+ return (self[key] for key in self.__omap)
+
+ def values(self):
+ return _vView(self)
+
+ def iteritems(self):
+ return ((key[1], self[key]) for key in self.__omap)
+
+ def items(self):
+ return _iView(self)
+
+ def get_all_for(self, key):
+ """ Returns all values of the given key """
+ if not isinstance(key, _string_type):
+ raise TypeError("Key needs to be a string.")
+ return [self[(idx, key)] for idx in _range(self.__kcount[key])]
+
+ def remove_all_for(self, key):
+ """ Removes all items with the given key """
+ if not isinstance(key, _string_type):
+ raise TypeError("Key need to be a string.")
+
+ for idx in _range(self.__kcount[key]):
+ super().__delitem__((idx, key))
+
+ self.__omap = list(filter(lambda x: x[1] != key, self.__omap))
+
+ del self.__kcount[key]
+
+ def has_duplicates(self):
+ """
+ Returns ``True`` if the dict contains keys with duplicates.
+ Recurses through any all keys with value that is ``VDFDict``.
+ """
+ for n in getattr(self.__kcount, _iter_values)():
+ if n != 1:
+ return True
+
+ def dict_recurse(obj):
+ for v in getattr(obj, _iter_values)():
+ if isinstance(v, VDFDict) and v.has_duplicates():
+ return True
+ if isinstance(v, dict):
+ return dict_recurse(v)
+ return False
+
+ return dict_recurse(self)
diff --git a/tools/configurator.sh b/tools/configurator.sh
index e5e77be0..52813c3e 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -3,44 +3,68 @@
# VARIABLES SECTION
source /app/libexec/global.sh
-source /app/libexec/functions.sh
# DIALOG SECTION
# Configurator Option Tree
# Welcome
-# - RetroArch Presets
-# - Change Rewind Setting
-# - Enable/Disable Rewind
-# - RetroAchivement Login
-# - Login prompt
-# - Emulator Options (Behind one-time power user warning dialog)
-# - Launch RetroArch
-# - Launch Cemu
-# - Launch Citra
-# - Launch Dolphin
-# - Launch Duckstation
-# - Launch MelonDS
-# - Launch PCSX2
-# - Launch PPSSPP
-# - Launch Primehack
-# - Launch RPCS3
-# - Launch XEMU
-# - Launch Yuzu
-# - Tools and Troubleshooting
-# - Move RetroDECK
-# - Multi-file game check
-# - Basic BIOS file check
-# - Advanced BIOS file check
-# - Compress Games
-# - Manual single-game selection
-# - Multi-file compression (CHD)
-# - Download ES themes
-# - Download PS3 firmware
-# - Backup RetroDECK userdata
-# - Reset
-# - Reset Specific Emulator
+# - Presets & Settings
+# - Global: Presets & Settings
+# - Widescreen: Enable/Disable
+# - Ask-To-Exit: Enable/Disable
+# - RetroAchievements: Login
+# - RetroAchievements: Logout
+# - RetroAchievements: Hardcore Mode
+# - Swap A/B and X/Y Buttons
+# - RetroArch: Presets & Settings
+# - Borders: Enable/Disable
+# - Rewind: Enable/Disable
+# - Wii & GameCube: Presets & Settings
+# - Dolphin Textures: Universal Dynamic Input
+# - Primehack Textures: Universal Dynamic Input
+# - Open Emulator (Behind one-time power user warning dialog)
+# - RetroArch
+# - Cemu
+# - Citra
+# - Dolphin
+# - Duckstation
+# - MelonDS
+# - PCSX2
+# - PPSSPP
+# - Primehack
+# - RPCS3
+# - Ryujinx
+# - XEMU
+# - Yuzu
+# - Tools
+# - Tool: Move Folders
+# - Move all of RetroDECK
+# - Move ROMs folder
+# - Move BIOS folder
+# - Move Downloaded Media folder
+# - Move Saves folder
+# - Move States folder
+# - Move Themes folder
+# - Move Screenshots folder
+# - Move Mods folder
+# - Move Texture Packs folder
+# - Tool: Compress Games
+# - Compress Single Game
+# - Compress Multiple Games - CHD
+# - Compress Multiple Games - ZIP
+# - Compress Multiple Games - RVZ
+# - Compress Multiple Games - All Formats
+# - Compress All Games
+# - Install: RetroDECK SD Controller Profile
+# - Install: PS3 firmware
+# - RetroDECK: Change Update Setting
+# - Troubleshooting
+# - Backup: RetroDECK Userdata
+# - Check & Verify: BIOS
+# - Check & Verify: Multi-file structure
+# - RetroDECK: Reset
+# - Reset Specific Emulator
# - Reset RetroArch
# - Reset Cemu
# - Reset Citra
@@ -51,133 +75,331 @@ source /app/libexec/functions.sh
# - Reset PPSSPP
# - Reset Primehack
# - Reset RPCS3
+# - Reset Ryujinx
# - Reset XEMU
# - Reset Yuzu
-# - Reset All Emulators
-# - Reset RetroDECK
+# - Reset All Emulators
+# - Reset RetroDECK
+# - RetroDECK: About
+# - RetroDECK Version History
+# - Full changelog
+# - Version-specific changelogs
+# - RetroDECK Credits
+# - Add to Steam
+# - Developer Options (Hidden)
+# - Change Multi-user mode
+# - Change Update channel
+# - Browse the wiki
+# - USB Import tool
+# - Install: RetroDECK Starter Pack
# DIALOG TREE FUNCTIONS
-configurator_reset_dialog() {
- choice=$(zenity --list --title="RetroDECK Configurator Utility - Reset Options" --cancel-label="Back" \
+configurator_welcome_dialog() {
+ if [[ $developer_options == "true" ]]; then
+ welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \
+ "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \
+ "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \
+ "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \
+ "RetroDECK: About" "Show additional information about RetroDECK" \
+ "Sync with Steam" "Sync with Steam all the favorites games" \
+ "Developer Options" "Welcome to the DANGER ZONE")
+ else
+ welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \
+ "Open Emulator" "Launch and configure each emulators settings (for advanced users)" \
+ "RetroDECK: Tools" "Compress games, move RetroDECK and install optional features" \
+ "RetroDECK: Troubleshooting" "Backup data, perform BIOS / multi-disc file checks checks and emulator resets" \
+ "RetroDECK: About" "Show additional information about RetroDECK" \
+ "Add to Steam" "Add to Steam all the favorite games, it will not remove added games")
+ fi
+
+ choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
- "Reset Specific Emulator" "Reset only one specific emulator to default settings" \
- "Reset All Emulators" "Reset all emulators to default settings" \
- "Reset RetroDECK" "Reset RetroDECK to default settings" )
+ "${welcome_menu_options[@]}")
case $choice in
- "Reset Specific Emulator" )
- emulator_to_reset=$(zenity --list \
- --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
- --text="Which emulator do you want to reset to default?" \
- --column="Emulator" --column="Action" \
- "RetroArch" "Reset RetroArch to default settings" \
- "Cemu" "Reset Cemu to default settings" \
- "Citra" "Reset Citra to default settings" \
- "Dolphin" "Reset Dolphin to default settings" \
- "Duckstation" "Reset Duckstation to default settings" \
- "MelonDS" "Reset MelonDS to default settings" \
- "PCSX2" "Reset PCSX2 to default settings" \
- "PPSSPP" "Reset PPSSPP to default settings" \
- "Primehack" "Reset Primehack to default settings" \
- "RPCS3" "Reset RPCS3 to default settings" \
- "XEMU" "Reset XEMU to default settings" \
- "Yuzu" "Reset Yuzu to default settings" )
-
- case $emulator_to_reset in
-
- "RetroArch" | "XEMU" ) # Emulators that require network access
- if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
- if [[ $(check_network_connectivity) == "true" ]]; then
- prepare_emulator "reset" "$emulator_to_reset" "configurator"
- configurator_process_complete_dialog "resetting $emulator_to_reset"
- else
- configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe $emulator_to_reset reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available."
- configurator_reset_dialog
- fi
- else
- configurator_generic_dialog "Reset process cancelled."
- configurator_reset_dialog
- fi
- ;;
-
- "Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" )
- if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
- prepare_emulator "reset" "$emulator_to_reset" "configurator"
- configurator_process_complete_dialog "resetting $emulator_to_reset"
- else
- configurator_generic_dialog "Reset process cancelled."
- configurator_reset_dialog
- fi
- ;;
-
- "" ) # No selection made or Back button clicked
- configurator_reset_dialog
- ;;
-
- esac
+ "Presets & Settings" )
+ configurator_presets_and_settings_dialog
;;
-"Reset All Emulators" )
- if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
- if [[ $(check_network_connectivity) == "true" ]]; then
- prepare_emulator "reset" "all"
- configurator_process_complete_dialog "resetting all emulators"
- else
- configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe all-emulator reset process requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available."
- configurator_reset_dialog
- fi
- else
- configurator_generic_dialog "Reset process cancelled."
- configurator_reset_dialog
- fi
-;;
+ "Open Emulator" )
+ configurator_power_user_warning_dialog
+ ;;
-"Reset RetroDECK" )
- if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then
- zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Reset RetroDECK" \
- --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process."
- rm -f "$lockfile"
- rm -f "$rd_conf"
- configurator_process_complete_dialog "resetting RetroDECK"
- else
- configurator_generic_dialog "Reset process cancelled."
- configurator_reset_dialog
- fi
-;;
+ "RetroDECK: Tools" )
+ configurator_retrodeck_tools_dialog
+ ;;
-"" ) # No selection made or Back button clicked
- configurator_welcome_dialog
-;;
+ "RetroDECK: Troubleshooting" )
+ configurator_retrodeck_troubleshooting_dialog
+ ;;
+
+ "RetroDECK: About" )
+ configurator_about_retrodeck_dialog
+ ;;
+
+ "Sync with Steam" )
+ configurator_add_steam
+ ;;
+
+ "Developer Options" )
+ configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!"
+ configurator_developer_dialog
+ ;;
+
+ "" )
+ exit 1
+ ;;
esac
}
-configurator_retroachivement_dialog() {
- login=$(zenity --forms --title="RetroDECK Configurator Utility - RetroArch RetroAchievements Login" --cancel-label="Back" \
+configurator_presets_and_settings_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - Presets & Settings" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
- --text="Enter your RetroAchievements Account details.\n\nBe aware that this tool cannot verify your login details and currently only supports logging in with RetroArch.\nFor registration and more info visit\nhttps://retroachievements.org/\n" \
- --separator="=SEP=" \
- --add-entry="Username" \
- --add-password="Password")
+ --column="Choice" --column="Action" \
+ "Global: Presets & Settings" "Here you find presets and settings that that span over multiple emulators" \
+ "RetroArch: Presets & Settings" "Here you find presets and settings for RetroArch and its cores" \
+ "Wii & GameCube: Presets & Settings" "Here you find presets and settings for Dolphin and Primehack" )
- if [ $? == 0 ]; then # OK button clicked
- arrIN=(${login//=SEP=/ })
- user=${arrIN[0]}
- pass=${arrIN[1]}
+ case $choice in
- set_setting_value $raconf cheevos_enable true retroarch
- set_setting_value $raconf cheevos_username $user retroarch
- set_setting_value $raconf cheevos_password $pass retroarch
+ "Global: Presets & Settings" )
+ configurator_global_presets_and_settings_dialog
+ ;;
- configurator_process_complete_dialog "logging in to RetroArch RetroAchievements"
- else
+ "RetroArch: Presets & Settings" )
+ configurator_retroarch_presets_and_settings_dialog
+ ;;
+
+ "Wii & GameCube: Presets & Settings" )
+ configurator_wii_and_gamecube_presets_and_settings_dialog
+ ;;
+
+ "" ) # No selection made or Back button clicked
configurator_welcome_dialog
+ ;;
+
+ esac
+}
+
+configurator_global_presets_and_settings_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - Global: Presets & Settings" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Action" \
+ "Widescreen: Enable/Disable" "Enable or disable widescreen in supported systems" \
+ "Ask-to-Exit: Enable/Disable" "Enable or disable emulators confirming when quitting in supported systems" \
+ "RetroAchievements: Login" "Log into the RetroAchievements service in supported systems" \
+ "RetroAchievements: Logout" "Disable RetroAchievements service in ALL supported systems" \
+ "RetroAchievements: Hardcore Mode" "Enable RetroAchievements hardcore mode (no cheats, rewind, save states etc.) in supported emulators" \
+ "Swap A/B and X/Y Buttons" "Enable or disable a swapped A/B and X/Y button layout in supported systems" )
+
+ case $choice in
+
+ "Widescreen: Enable/Disable" )
+ change_preset_dialog "widescreen"
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "Ask-to-Exit: Enable/Disable" )
+ change_preset_dialog "ask_to_exit"
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "RetroAchievements: Login" )
+ local cheevos_creds=$(get_cheevos_token_dialog)
+ if [[ ! "$cheevos_creds" == "failed" ]]; then
+ configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login successful, please select systems you would like to enable achievements for in the next dialog."
+ IFS=',' read -r cheevos_username cheevos_token cheevos_login_timestamp < <(printf '%s\n' "$cheevos_creds")
+ change_preset_dialog "cheevos"
+ else
+ configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements login failed, please verify your username and password and try the process again."
+ fi
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "RetroAchievements: Logout" ) # This is a workaround to allow disabling cheevos without having to enter login credentials
+ local cheevos_emulators=$(sed -n '/\[cheevos\]/, /\[/{ /\[cheevos\]/! { /\[/! p } }' $rd_conf | sed '/^$/d')
+ for setting_line in $cheevos_emulators; do
+ emulator=$(get_setting_name "$setting_line" "retrodeck")
+ set_setting_value "$rdconf" "$emulator" "false" "retrodeck" "cheevos"
+ build_preset_config "$emulator" "cheevos"
+ done
+ configurator_generic_dialog "RetroDECK Configurator Utility - RetroAchievements" "RetroAchievements has been disabled in all supported systems."
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "RetroAchievements: Hardcore Mode" )
+ change_preset_dialog "cheevos_hardcore"
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "Swap A/B and X/Y Buttons" )
+ change_preset_dialog "nintendo_button_layout"
+ configurator_global_presets_and_settings_dialog
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_presets_and_settings_dialog
+ ;;
+
+ esac
+}
+
+configurator_retroarch_presets_and_settings_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch: Presets & Settings" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Action" \
+ "Borders: Enable/Disable" "Enable or disable borders in supported systems" \
+ "Rewind: Enable/Disable" "Enable or disable the Rewind function in RetroArch." )
+
+ case $choice in
+
+ "Borders: Enable/Disable" )
+ change_preset_dialog "borders"
+ configurator_retroarch_presets_and_settings_dialog
+ ;;
+
+ "Rewind: Enable/Disable" )
+ configurator_retroarch_rewind_dialog
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_presets_and_settings_dialog
+ ;;
+
+ esac
+}
+
+configurator_retroarch_rewind_dialog() {
+ if [[ $(get_setting_value "$raconf" rewind_enable retroarch) == "true" ]]; then
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - RetroArch Rewind" \
+ --text="Rewind is currently enabled. Do you want to disable it?."
+
+ if [ $? == 0 ]
+ then
+ set_setting_value "$raconf" "rewind_enable" "false" retroarch
+ configurator_process_complete_dialog "disabling Rewind"
+ else
+ configurator_retroarch_presets_and_settings_dialog
+ fi
+ else
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - RetroArch Rewind" \
+ --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems."
+
+ if [ $? == 0 ]
+ then
+ set_setting_value "$raconf" "rewind_enable" "true" retroarch
+ configurator_process_complete_dialog "enabling Rewind"
+ else
+ configurator_retroarch_presets_and_settings_dialog
+ fi
+ fi
+}
+
+configurator_wii_and_gamecube_presets_and_settings_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - Wii & GameCube: Presets & Settings" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Action" \
+ "Dolphin Textures: Universal Dynamic Input" "Enable/Disable Venomalia's Universal Dynamic Input Textures for Dolphin" \
+ "Primehack Textures: Universal Dynamic Input" "Enable/Disable: Venomalia's Universal Dynamic Input Textures for Primehack")
+
+ case $choice in
+
+ "Dolphin Textures: Universal Dynamic Input" )
+ configurator_dolphin_input_textures_dialog
+ ;;
+
+ "Primehack Textures: Universal Dynamic Input" )
+ configurator_primehack_input_textures_dialog
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_presets_and_settings_dialog
+ ;;
+
+ esac
+}
+
+configurator_dolphin_input_textures_dialog() {
+ if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \
+ --text="Custom input textures are currently enabled. Do you want to disable them?."
+
+ if [ $? == 0 ]
+ then
+ # set_setting_value $dolphingfxconf "HiresTextures" "False" dolphin # TODO: Break out a preset for texture packs so this can be enabled and disabled independently.
+ rm -rf "/var/data/dolphin-emu/Load/DynamicInputTextures"
+ configurator_process_complete_dialog "disabling Dolphin custom input textures"
+ else
+ configurator_wii_and_gamecube_presets_and_settings_dialog
+ fi
+ else
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \
+ --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete."
+
+ if [ $? == 0 ]
+ then
+ set_setting_value $dolphingfxconf "HiresTextures" "True" dolphin
+ (
+ mkdir "/var/data/dolphin-emu/Load/DynamicInputTextures"
+ rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/"
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - Dolphin Custom Input Textures Install"
+ configurator_process_complete_dialog "enabling Dolphin custom input textures"
+ else
+ configurator_wii_and_gamecube_presets_and_settings_dialog
+ fi
+ fi
+}
+
+configurator_primehack_input_textures_dialog() {
+ if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - Dolphin Custom Input Textures" \
+ --text="Custom input textures are currently enabled. Do you want to disable them?."
+
+ if [ $? == 0 ]
+ then
+ # set_setting_value $primehackgfxconf "HiresTextures" "False" primehack # TODO: Break out a preset for texture packs so this can be enabled and disabled independently.
+ rm -rf "/var/data/primehack/Load/DynamicInputTextures"
+ configurator_process_complete_dialog "disabling Primehack custom input textures"
+ else
+ configurator_wii_and_gamecube_presets_and_settings_dialog
+ fi
+ else
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - Primehack Custom Input Textures" \
+ --text="Custom input textures are currently disabled. Do you want to enable them?.\n\nThis process may take several minutes to complete."
+
+ if [ $? == 0 ]
+ then
+ set_setting_value $primehackgfxconf "HiresTextures" "True" primehack
+ (
+ mkdir "/var/data/primehack/Load/DynamicInputTextures"
+ rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/"
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - Primehack Custom Input Textures Install"
+ configurator_process_complete_dialog "enabling Primehack custom input textures"
+ else
+ configurator_wii_and_gamecube_presets_and_settings_dialog
+ fi
fi
}
@@ -185,42 +407,42 @@ configurator_power_user_warning_dialog() {
if [[ $power_user_warning == "true" ]]; then
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Desktop Mode Warning" \
- --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?")
+ --title "RetroDECK Power User Warning" \
+ --text="Making manual changes to an emulators configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates or when using presets.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?")
fi
rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "0" ]]; then # If user clicked "Yes"
- configurator_power_user_changes_dialog
+ configurator_open_emulator_dialog
else # If any button other than "Yes" was clicked
if [[ $choice == "No" ]]; then
configurator_welcome_dialog
elif [[ $choice == "Never show this again" ]]; then
- set_setting_value $rd_conf "power_user_warning" "false" retrodeck "options" # Store desktop mode warning variable for future checks
- conf_read
- configurator_power_user_changes_dialog
+ set_setting_value $rd_conf "power_user_warning" "false" retrodeck "options" # Store power user warning variable for future checks
+ configurator_open_emulator_dialog
fi
fi
}
-configurator_power_user_changes_dialog() {
+configurator_open_emulator_dialog() {
emulator=$(zenity --list \
- --title "RetroDECK Configurator Utility - Emulator Options" --cancel-label="Back" \
+ --title "RetroDECK Configurator Utility - Open Emulator" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which emulator do you want to launch?" \
--hide-header \
- --column=emulator \
- "RetroArch" \
- "Cemu" \
- "Citra" \
- "Dolphin" \
- "Duckstation" \
- "MelonDS" \
- "PCSX2" \
- "PPSSPP" \
- "Primehack" \
- "RPCS3" \
- "XEMU" \
- "Yuzu")
+ --column="Emulator" --column="Action" \
+ "RetroArch" "Open the multi-emulator frontend RetroArch" \
+ "Cemu" "Open the Wii U emulator CEMU" \
+ "Citra" "Open the N3DS emulator Citra" \
+ "Dolphin" "Open the Wii & GC emulator Dolphin" \
+ "Duckstation" "Open the PSX emulator Duckstation" \
+ "MelonDS" "Open the NDS emulator MelonDS" \
+ "PCSX2" "Open the PS2 emulator PSXC2" \
+ "PPSSPP" "Open the PSP emulator PPSSPP" \
+ "Primehack" "Open the Metroid Prime emulator Primehack" \
+ "RPCS3" "Open the PS3 emulator RPCS3" \
+ "Ryujinx" "Open the Switch emulator Ryujinx" \
+ "XEMU" "Open the Xbox emulator XEMU" \
+ "Yuzu" "Open the Switch emulator Yuzu")
case $emulator in
@@ -264,6 +486,10 @@ configurator_power_user_changes_dialog() {
rpcs3
;;
+ "Ryujinx" )
+ ryujinx-wrapper
+ ;;
+
"XEMU" )
xemu
;;
@@ -277,53 +503,60 @@ configurator_power_user_changes_dialog() {
;;
esac
+
+ configurator_open_emulator_dialog
}
-configurator_retroarch_rewind_dialog() {
- if [[ $(get_setting_value $raconf rewind_enable retroarch) == "true" ]]; then
- zenity --question \
- --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroArch Rewind" \
- --text="Rewind is currently enabled. Do you want to disable it?."
-
- if [ $? == 0 ]
- then
- set_setting_value $raconf "rewind_enable" "false" retroarch
- configurator_process_complete_dialog "disabling Rewind"
- else
- configurator_retroarch_options_dialog
- fi
- else
- zenity --question \
- --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroArch Rewind" \
- --text="Rewind is currently disabled, do you want to enable it?\n\nNOTE:\nThis may impact performance on some more demanding systems."
-
- if [ $? == 0 ]
- then
- set_setting_value $raconf "rewind_enable" "true" retroarch
- configurator_process_complete_dialog "enabling Rewind"
- else
- configurator_retroarch_options_dialog
- fi
- fi
-}
-
-configurator_retroarch_options_dialog() {
- choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch Options" --cancel-label="Back" \
+configurator_retrodeck_tools_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Tools" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
- "Change Rewind Setting" "Enable or disable the Rewind function in RetroArch." \
- "RetroAchievements Login" "Log into the RetroAchievements service in RetroArch." )
+ "Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location" \
+ "Tool: Compress Games" "Compress games for systems that support it" \
+ "Install: RetroDECK SD Controller Profile" "Install the custom RetroDECK controller layout for the Steam Deck" \
+ "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" \
+ "RetroDECK: Change Update Setting" "Enable or disable online checks for new versions of RetroDECK" )
case $choice in
- "Change Rewind Setting" )
- configurator_retroarch_rewind_dialog
+ "Tool: Move Folders" )
+ configurator_retrodeck_move_tool_dialog
;;
- "RetroAchievements Login" )
- configurator_retroachivement_dialog
+ "Tool: Compress Games" )
+ configurator_generic_dialog "RetroDECK Configurator - Compression Tool" "Depending on your library and compression choices, the process can sometimes take a long time.\nPlease be patient once it is started!"
+ configurator_compression_tool_dialog
+ ;;
+
+ "Install: RetroDECK SD Controller Profile" )
+ configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "We are now offering a new official RetroDECK controller profile!\nIt is an optional component that helps you get the most out of RetroDECK with a new in-game radial menu for unified hotkeys across emulators.\n\nThe files need to be installed outside of the normal ~/retrodeck folder, so we wanted your permission before proceeding.\n\nThe files will be installed at the following shared Steam locations:\n\n$HOME/.steam/steam/tenfoot/resource/images/library/controller/binding_icons/\n$HOME/.steam/steam/controller_base/templates"
+ if [[ $(configurator_generic_question_dialog "Install: RetroDECK Controller Profile" "Would you like to install the official RetroDECK controller profile?") == "true" ]]; then
+ install_retrodeck_controller_profile
+ configurator_generic_dialog "RetroDECK Configurator - Install: RetroDECK Controller Profile" "The RetroDECK controller profile install is complete.\nSee the Wiki for more details on how to use it to its fullest potential!"
+ fi
+ configurator_retrodeck_tools_dialog
+ ;;
+
+ "Install: PS3 Firmware" )
+ if [[ $(check_network_connectivity) == "true" ]]; then
+ configurator_generic_dialog "RetroDECK Configurator - Install: PS3 firmware" "This tool will download firmware required by RPCS3 to emulate PS3 games.\n\nThe process will take several minutes, and the emulator will launch to finish the installation.\nPlease close RPCS3 manually once the installation is complete."
+ (
+ update_rpcs3_firmware
+ ) |
+ zenity --progress --pulsate \
+ --icon-name=net.retrodeck.retrodeck \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title="Downloading PS3 Firmware" \
+ --no-cancel \
+ --auto-close
+ else
+ configurator_generic_dialog "RetroDECK Configurator - Install: PS3 Firmware" "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored."
+ configurator_retrodeck_tools_dialog
+ fi
+ ;;
+
+ "RetroDECK: Change Update Setting" )
+ configurator_online_update_setting_dialog
;;
"" ) # No selection made or Back button clicked
@@ -333,6 +566,112 @@ configurator_retroarch_options_dialog() {
esac
}
+configurator_retrodeck_move_tool_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Move Tool" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Action" \
+ "Move all of RetroDECK" "Move the entire retrodeck folder to a new location" \
+ "Move ROMs folder" "Move only the ROMs folder to a new location" \
+ "Move BIOS folder" "Move only the BIOS folder to a new location" \
+ "Move Downloaded Media folder" "Move only the Downloaded Media folder to a new location" \
+ "Move Saves folder" "Move only the Saves folder to a new location" \
+ "Move States folder" "Move only the States folder to a new location" \
+ "Move Themes folder" "Move only the Themes folder to a new location" \
+ "Move Screenshots folder" "Move only the Screenshots folder to a new location" \
+ "Move Mods folder" "Move only the Mods folder to a new location" \
+ "Move Texture Packs folder" "Move only the Texture Packs folder to a new location" )
+
+ case $choice in
+
+ "Move all of RetroDECK" )
+ configurator_move_folder_dialog "rdhome"
+ ;;
+
+ "Move ROMs folder" )
+ configurator_move_folder_dialog "roms_folder"
+ ;;
+
+ "Move BIOS folder" )
+ configurator_move_folder_dialog "bios_folder"
+ ;;
+
+ "Move Downloaded Media folder" )
+ configurator_move_folder_dialog "media_folder"
+ ;;
+
+ "Move Saves folder" )
+ configurator_move_folder_dialog "saves_folder"
+ ;;
+
+ "Move States folder" )
+ configurator_move_folder_dialog "states_folder"
+ ;;
+
+ "Move Themes folder" )
+ configurator_move_folder_dialog "themes_folder"
+ ;;
+
+ "Move Screenshots folder" )
+ configurator_move_folder_dialog "screenshots_folder"
+ ;;
+
+ "Move Mods folder" )
+ configurator_move_folder_dialog "mods_folder"
+ ;;
+
+ "Move Texture Packs folder" )
+ configurator_move_folder_dialog "texture_packs_folder"
+ ;;
+
+ esac
+
+ configurator_retrodeck_tools_dialog
+}
+
+configurator_compression_tool_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Compression Tool" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Action" \
+ "Compress Single Game" "Compress a single game into a compatible format" \
+ "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" \
+ "Compress Multiple Games - ZIP" "Compress one or more games compatible with the ZIP format" \
+ "Compress Multiple Games - RVZ" "Compress one or more games compatible with the RVZ format" \
+ "Compress Multiple Games - All Formats" "Compress one or more games compatible with any format" \
+ "Compress All Games" "Compress all games into compatible formats" )
+
+ case $choice in
+
+ "Compress Single Game" )
+ configurator_compress_single_game_dialog
+ ;;
+
+ "Compress Multiple Games - CHD" )
+ configurator_compress_multiple_games_dialog "chd"
+ ;;
+
+ "Compress Multiple Games - ZIP" )
+ configurator_compress_multiple_games_dialog "zip"
+ ;;
+
+ "Compress Multiple Games - RVZ" )
+ configurator_compress_multiple_games_dialog "rvz"
+ ;;
+
+ "Compress Multiple Games - All Formats" )
+ configurator_compress_multiple_games_dialog "all"
+ ;;
+
+ "Compress All Games" )
+ configurator_compress_multiple_games_dialog "everything"
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_retrodeck_tools_dialog
+ ;;
+
+ esac
+}
+
configurator_compress_single_game_dialog() {
local file=$(file_browse "Game to compress")
if [[ ! -z "$file" ]]; then
@@ -369,30 +708,30 @@ configurator_compress_single_game_dialog() {
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Compression in Progress"
- configurator_generic_dialog "The compression process is complete!"
- configurator_compress_games_dialog
+ configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!"
+ configurator_compression_tool_dialog
else
- configurator_generic_dialog "The selected file does not have any compatible compressed format."
- configurator_compress_games_dialog
+ configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The selected file does not have any compatible compressed format."
+ configurator_compression_tool_dialog
fi
else
- configurator_generic_dialog "No file selected, returning to main menu"
- configurator_welcome_dialog
+ configurator_compression_tool_dialog
fi
}
-configurator_compress_some_games_dialog() {
+configurator_compress_multiple_games_dialog() {
# This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg
local compressable_games_list=()
local all_compressable_games=()
local games_to_compress=()
+ local target_selection="$1"
- if [[ ! -z "$1" ]]; then
- local compression_format="$1"
- else
+ if [[ "$1" == "everything" ]]; then
local compression_format="all"
+ else
+ local compression_format="$1"
fi
if [[ $compression_format == "all" ]]; then
@@ -433,25 +772,29 @@ configurator_compress_some_games_dialog() {
fi
done < <(printf '%s\n' "$compressable_systems_list")
- choice=$(zenity \
- --list --width=1200 --height=720 \
- --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \
- --separator="," --print-column=3 \
- --text="Choose which games to compress:" \
- --column "Compress?" \
- --column "Game" \
- --column "Game Full Path" \
- "${compressable_games_list[@]}")
+ if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything
+ choice=$(zenity \
+ --list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Compression Tool" \
+ --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \
+ --separator="," --print-column=3 \
+ --text="Choose which games to compress:" \
+ --column "Compress?" \
+ --column "Game" \
+ --column "Game Full Path" \
+ "${compressable_games_list[@]}")
- local rc=$?
- if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected
- IFS="," read -ra games_to_compress <<< "$choice"
- local total_games_to_compress=${#games_to_compress[@]}
- local games_left_to_compress=$total_games_to_compress
- elif [[ ! -z $choice ]]; then # User clicked "Compress All"
+ local rc=$?
+ if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected
+ IFS="," read -ra games_to_compress <<< "$choice"
+ local total_games_to_compress=${#games_to_compress[@]}
+ local games_left_to_compress=$total_games_to_compress
+ elif [[ ! -z $choice ]]; then # User clicked "Compress All"
+ games_to_compress=("${all_compressable_games[@]}")
+ local total_games_to_compress=${#all_compressable_games[@]}
+ local games_left_to_compress=$total_games_to_compress
+ fi
+ else # The user chose to auto-compress everything
games_to_compress=("${all_compressable_games[@]}")
- local total_games_to_compress=${#all_compressable_games[@]}
- local games_left_to_compress=$total_games_to_compress
fi
if [[ ! $(echo "${#games_to_compress[@]}") == "0" ]]; then
@@ -482,74 +825,17 @@ configurator_compress_some_games_dialog() {
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Compression in Progress"
- configurator_generic_dialog "The compression process is complete!"
- configurator_compress_games_dialog
+ configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!"
+ configurator_compression_tool_dialog
else
- configurator_compress_games_dialog
- fi
-}
-
-configurator_compress_all_games_dialog() {
- # This dialog compress all games found in all compatible roms folders into compatible formats
-
- local all_compressable_games=()
- local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d')
-
- while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type
- do
- compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt")
- if [[ ! -z $compression_candidates ]]; then
- while IFS= read -r game
- do
- local compatible_compression_format=$(find_compatible_compression_format "$game")
- if [[ ! $compatible_compression_format == "none" ]]; then
- all_compressable_games=("${all_compressable_games[@]}" "$game")
- fi
- done < <(printf '%s\n' "$compression_candidates")
- fi
- done < <(printf '%s\n' "$compressable_systems_list")
-
- if [[ ! $(echo ${all_compressable_games[@]}) == "0" ]]; then
- local post_compression_cleanup=$(configurator_compression_cleanup_dialog)
- total_games_to_compress=${#all_compressable_games[@]}
- games_left_to_compress=$total_games_to_compress
- (
- for file in "${all_compressable_games[@]}"; do
- local compression_format=$(find_compatible_compression_format "$file")
- echo "# Compressing $(basename "$file") into $compression_format format" # Update Zenity dialog text
- progress=$(( 100 - (( 100 / "$total_games_to_compress" ) * "$games_left_to_compress" )))
- echo $progress
- games_left_to_compress=$((games_left_to_compress-1))
- compress_game "$compression_format" "$file"
- if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
- if [[ "$file" == *".cue" ]]; then
- local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
- local file_path=$(dirname "$(realpath "$file")")
- while IFS= read -r line
- do
- rm -f "$file_path/$line"
- done < <(printf '%s\n' "$cue_bin_files")
- rm -f $(realpath "$file")
- else
- rm -f $(realpath "$file")
- fi
- fi
- done
- ) |
- zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Compression in Progress"
- configurator_generic_dialog "The compression process is complete!"
- configurator_compress_games_dialog
- else
- configurator_generic_dialog "There were no games found that could be compressed."
+ configurator_compression_tool_dialog
fi
}
configurator_compression_cleanup_dialog() {
zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Compression Cleanup" \
+ --title "RetroDECK Configurator - RetroDECK: Compression Tool" \
--text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library."
local rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "0" ]]; then # If user clicked "Yes"
@@ -559,41 +845,72 @@ configurator_compression_cleanup_dialog() {
fi
}
-configurator_compress_games_dialog() {
- choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \
+configurator_online_update_setting_dialog() {
+ if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - RetroDECK Online Update Check" \
+ --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?"
+
+ if [ $? == 0 ] # User clicked "Yes"
+ then
+ set_setting_value $rd_conf "update_check" "false" retrodeck "options"
+ else # User clicked "Cancel"
+ configurator_retrodeck_tools_dialog
+ fi
+ else
+ zenity --question \
+ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator - RetroDECK Online Update Check" \
+ --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?"
+
+ if [ $? == 0 ] # User clicked "Yes"
+ then
+ set_setting_value $rd_conf "update_check" "true" retrodeck "options"
+ else # User clicked "Cancel"
+ configurator_retrodeck_tools_dialog
+ fi
+ fi
+}
+
+configurator_retrodeck_troubleshooting_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Troubleshooting" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
- "Compress Single Game" "Compress a single game into a compatible format" \
- "Compress Multiple Games - CHD" "Compress one or more games compatible with the CHD format" \
- "Compress Multiple Games - ZIP" "Compress one or more games compatible with the ZIP format" \
- "Compress Multiple Games - RVZ" "Compress one or more games compatible with the RVZ format" \
- "Compress Multiple Games - All Formats" "Compress one or more games compatible with any format" \
- "Compress All Games" "Compress all games into compatible formats" )
+ "Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \
+ "Check & Verify: BIOS Files" "Show information about common BIOS files" \
+ "Check & Verify: Multi-file structure" "Verify the proper structure of multi-file or multi-disc games" \
+ "RetroDECK: Reset" "Reset specific parts or all of RetroDECK" )
case $choice in
- "Compress Single Game" )
- configurator_compress_single_game_dialog
+ "Backup: RetroDECK Userdata" )
+ configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "This tool will compress important RetroDECK userdata (basically everything except the ROMs folder) into a zip file.\n\nThis process can take several minutes, and the resulting zip file can be found in the ~/retrodeck/backups folder."
+ (
+ backup_retrodeck_userdata
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - Backup in Progress" \
+ --text="Backing up RetroDECK userdata, please wait..."
+ if [[ -f "$backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip" ]]; then
+ configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process is now complete."
+ else
+ configurator_generic_dialog "RetroDECK Configurator - Backup: RetroDECK Userdata" "The backup process could not be completed,\nplease check the logs folder for more information."
+ fi
+ configurator_retrodeck_troubleshooting_dialog
;;
- "Compress Multiple Games - CHD" )
- configurator_compress_some_games_dialog "chd"
+ "Check & Verify: BIOS Files" )
+ configurator_check_bios_files
;;
- "Compress Multiple Games - ZIP" )
- configurator_compress_some_games_dialog "zip"
+ "Check & Verify: Multi-file structure" )
+ configurator_check_multifile_game_structure
;;
- "Compress Multiple Games - RVZ" )
- configurator_compress_some_games_dialog "rvz"
- ;;
-
- "Compress Multiple Games - All Formats" )
- configurator_compress_some_games_dialog "all"
- ;;
-
- "Compress All Games" )
- configurator_compress_all_games_dialog
+ "RetroDECK: Reset" )
+ configurator_reset_dialog
;;
"" ) # No selection made or Back button clicked
@@ -603,49 +920,8 @@ configurator_compress_games_dialog() {
esac
}
-configurator_check_multifile_game_structure() {
- local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
- if [[ ${#folder_games[@]} -gt 1 ]]; then
- echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
- zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK" \
- --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs"
- else
- configurator_generic_dialog "No incorrect multi-file game folder structures found."
- fi
- configurator_tools_and_troubleshooting_dialog
-}
-
-configurator_check_bios_files_basic() {
- configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order."
- bios_checked_list=()
-
- while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc
- do
- bios_file_found="No"
- bios_hash_matched="No"
- if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then
- bios_file_found="Yes"
- if [[ $bios_hash == "Unknown" ]]; then
- bios_hash_matched="Unknown"
- elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then
- bios_hash_matched="Yes"
- fi
- fi
- if [[ $bios_file_found == "Yes" && ($bios_hash_matched == "Yes" || $bios_hash_matched == "Unknown") && ! " ${bios_checked_list[*]} " =~ " ${bios_system} " ]]; then
- bios_checked_list=("${bios_checked_list[@]}" "$bios_system" )
- fi
- done < $bios_checklist
- systems_with_bios=${bios_checked_list[@]}
-
- configurator_generic_dialog "The following systems have been found to have at least one valid BIOS file.\n\n$systems_with_bios\n\nFor more information on the BIOS files found please use the Advanced check tool."
-
- configurator_tools_and_troubleshooting_dialog
-}
-
-configurator_check_bios_files_advanced() {
- configurator_generic_dialog "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order."
+configurator_check_bios_files() {
+ configurator_generic_dialog "RetroDECK Configurator - Check & Verify: BIOS Files" "This check will look for BIOS files that RetroDECK has identified as working.\n\nNot all BIOS files are required for games to work, please check the BIOS description for more information on its purpose.\n\nThere may be additional BIOS files that will function with the emulators that are not checked.\n\nSome more advanced emulators such as Yuzu will have additional methods for verifiying the BIOS files are in working order."
bios_checked_list=()
while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc
@@ -663,7 +939,7 @@ configurator_check_bios_files_advanced() {
bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc")
done < $bios_checklist
- zenity --list --title="RetroDECK Configurator Utility - Verify BIOS Files" --cancel-label="Back" \
+ zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \
--column "System" \
@@ -672,147 +948,139 @@ configurator_check_bios_files_advanced() {
--column "BIOS File Description" \
"${bios_checked_list[@]}"
- configurator_tools_and_troubleshooting_dialog
+ configurator_retrodeck_troubleshooting_dialog
}
-configurator_online_theme_downloader() {
- local online_themes=()
- local local_themes=()
- readarray -t online_themes < <(curl -s $es_themes_list | jq -r '.themeSets[] | "\(.name)\n\(.url)"')
-
- for (( i=0; i<${#online_themes[@]}; i+=2 )); do
- local name=${online_themes[$i]}
- local url=${online_themes[$i+1]}
-
- if [[ -d "$themes_folder/$(basename "$url" .git)" ]] || [[ -d "$rd_es_themes/$(basename "$url" .git)" ]]; then
- local_themes=("${local_themes[@]}" "true" "$name" "$url")
- else
- local_themes=("${local_themes[@]}" "false" "$name" "$url")
- fi
- done
-
- choice=$(zenity \
- --list --width=1200 --height=720 \
- --checklist --hide-column=3 --ok-label="Download/Update Themes" \
- --separator="," --print-column=3 \
- --text="Choose which themes to download:" \
- --column "Downloaded" \
- --column "Theme" \
- --column "Theme URL" \
- "${local_themes[@]}")
-
- local rc=$?
- if [[ $rc == "0" && ! -z $choice ]]; then
- (
- IFS="," read -ra chosen_themes <<< "$choice"
- for theme in "${chosen_themes[@]}"; do
- if [[ ! -d "$themes_folder/$(basename $theme .git)" ]] && [[ ! -d "$rd_es_themes/$(basename $theme .git)" ]]; then
- echo "# Downloading $(basename "$theme" .git)"
- git clone -q "$theme" "$themes_folder/$(basename $theme .git)"
- elif [[ -d "$themes_folder/$(basename $theme .git)" ]] && [[ ! -d "$rd_es_themes/$(basename $theme .git)" ]]; then
- cd "$themes_folder/$(basename $theme .git)"
- echo "# Checking $(basename $theme .git) for updates"
- git pull -fq
- cd "$rdhome"
- fi
- done
- ) |
- zenity --progress --pulsate \
- --icon-name=net.retrodeck.retrodeck \
+configurator_check_multifile_game_structure() {
+ local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
+ if [[ ${#folder_games[@]} -gt 1 ]]; then
+ echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
+ zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title="Downloading Themes" \
- --no-cancel \
- --auto-close
-
- configurator_generic_dialog "The theme downloads and updates have been completed.\n\nYou may need to exit RetroDECK and start it again for the new themes to be available."
- configurator_tools_and_troubleshooting_dialog
+ --title "RetroDECK Configurator - Check & Verify: Multi-file structure" \
+ --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/.logs"
else
- configurator_tools_and_troubleshooting_dialog
+ configurator_generic_dialog "RetroDECK Configurator - Check & Verify: Multi-file structure" "No incorrect multi-file game folder structures found."
fi
+ configurator_retrodeck_troubleshooting_dialog
}
-configurator_rpcs3_firmware_updater() {
- configurator_generic_dialog "This tool will download firmware required by RPCS3 to emulate PS3 games.\n\nThe process will take several minutes, and the emulator will launch to finish the installation.\nPlease close RPCS3 manually once the installation is complete."
- (
- update_rpcs3_firmware
- ) |
- zenity --progress --pulsate \
- --icon-name=net.retrodeck.retrodeck \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title="Downloading PS3 Firmware" \
- --no-cancel \
- --auto-close
-}
-
-configurator_tools_and_troubleshooting_dialog() {
- choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \
+configurator_reset_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Reset" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \
- "Move RetroDECK" "Move RetroDECK files between internal/SD card or to a custom location" \
- "Multi-file game structure check" "Verify the proper structure of multi-file or multi-disc games" \
- "Basic BIOS file check" "Show a list of systems that BIOS files are found for" \
- "Advanced BIOS file check" "Show advanced information about common BIOS files" \
- "Compress Games" "Compress games to CHD format for systems that support it" \
- "Download/Update Themes" "Download new themes for RetroDECK or update existing ones" \
- "Download PS3 Firmware" "Download PS3 firmware for use with the RPCS3 emulator" \
- "Backup RetroDECK Userdata" "Compress important RetroDECK user data folders" )
+ "Reset Specific Emulator" "Reset only one specific emulator to default settings" \
+ "Reset All Emulators" "Reset all emulators to default settings" \
+ "Reset RetroDECK" "Reset RetroDECK to default settings" )
case $choice in
- "Move RetroDECK" )
- configurator_generic_dialog "This option will move the RetroDECK data folder (ROMs, saves, BIOS etc.) to a new location.\n\nPlease choose where to move the RetroDECK data folder."
- configurator_move_retrodeck_dialog
+ "Reset Specific Emulator" )
+ emulator_to_reset=$(zenity --list \
+ --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --text="Which emulator do you want to reset to default?" \
+ --column="Emulator" --column="Action" \
+ "RetroArch" "Reset the multi-emulator frontend RetroArch to default settings" \
+ "Cemu" "Reset the Wii U emulator Cemu to default settings" \
+ "Citra" "Reset the N3DS emulator Citra to default settings" \
+ "Dolphin" "Reset the Wii/GameCube emulator Dolphin to default settings" \
+ "Duckstation" "Reset the PSX emulator Duckstation to default settings" \
+ "MelonDS" "Reset the NDS emulator MelonDS to default settings" \
+ "PCSX2" "Reset the PS2 emulator PCSX2 to default settings" \
+ "PPSSPP" "Reset the PSP emulator PPSSPP to default settings" \
+ "Primehack" "Reset the Metroid Prime emulator Primehack to default settings" \
+ "RPCS3" "Reset the PS3 emulator RPCS3 to default settings" \
+ "Ryujinx" "Reset the Switch emulator Ryujinx to default settings" \
+ "XEMU" "Reset the XBOX emulator XEMU to default settings" \
+ "Yuzu" "Reset the Switch emulator Yuzu to default settings" )
+
+ case $emulator_to_reset in
+
+ "RetroArch" | "XEMU" ) # Emulators that require network access
+ if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
+ prepare_emulator "reset" "$emulator_to_reset" "configurator"
+ configurator_process_complete_dialog "resetting $emulator_to_reset"
+ else
+ configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+ configurator_reset_dialog
+ fi
+ ;;
+
+ "Cemu" | "Citra" | "Dolphin" | "Duckstation" | "MelonDS" | "PCSX2" | "PPSSPP" | "Primehack" | "RPCS3" | "Ryujinx" | "Yuzu" )
+ if [[ $(configurator_reset_confirmation_dialog "$emulator_to_reset" "Are you sure you want to reset the $emulator_to_reset emulator to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
+ prepare_emulator "reset" "$emulator_to_reset" "configurator"
+ configurator_process_complete_dialog "resetting $emulator_to_reset"
+ else
+ configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+ configurator_reset_dialog
+ fi
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_reset_dialog
+ ;;
+
+ esac
;;
- "Multi-file game structure check" )
- configurator_check_multifile_game_structure
- ;;
-
- "Basic BIOS file check" )
- configurator_check_bios_files_basic
- ;;
-
- "Advanced BIOS file check" )
- configurator_check_bios_files_advanced
- ;;
-
- "Compress Games" )
- configurator_compress_games_dialog
- ;;
-
- "Download/Update Themes" )
- if [[ $(check_network_connectivity) == "true" ]]; then
- configurator_online_theme_downloader
- else
- configurator_generic_dialog "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored."
- configurator_tools_and_troubleshooting_dialog
- fi
- ;;
-
- "Download PS3 Firmware" )
- if [[ $(check_network_connectivity) == "true" ]]; then
- configurator_rpcs3_firmware_updater
- else
- configurator_generic_dialog "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored."
- configurator_tools_and_troubleshooting_dialog
- fi
- ;;
-
- "Backup RetroDECK Userdata" )
- configurator_generic_dialog "This tool will compress important RetroDECK userdata (basically everything except the ROMs folder) into a zip file.\n\nThis process can take several minutes, and the resulting zip file can be found in the ~/retrodeck/backups folder."
+"Reset All Emulators" )
+ if [[ $(configurator_reset_confirmation_dialog "all emulators" "Are you sure you want to reset all emulators to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
(
- backup_retrodeck_userdata
+ prepare_emulator "reset" "all"
) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Backup in Progress" \
- --text="Backing up RetroDECK userdata, please wait..."
- if [[ -f $backups_folder/$(date +"%0m%0d")_retrodeck_userdata.zip ]]; then
- configurator_generic_dialog "The backup process is now complete."
- else
- configurator_generic_dialog "The backup process could not be completed,\nplease check the logs folder for more information."
- fi
- configurator_tools_and_troubleshooting_dialog
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Finishing Initialization" \
+ --text="RetroDECK is finishing the reset process, please wait."
+ configurator_process_complete_dialog "resetting all emulators"
+ else
+ configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+ configurator_reset_dialog
+ fi
+;;
+
+"Reset RetroDECK" )
+ if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then
+ zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - Reset RetroDECK" \
+ --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process."
+ rm -f "$lockfile"
+ rm -f "$rd_conf"
+ configurator_process_complete_dialog "resetting RetroDECK"
+ else
+ configurator_generic_dialog "RetroDeck Configurator - RetroDECK: Reset" "Reset process cancelled."
+ configurator_reset_dialog
+ fi
+;;
+
+"" ) # No selection made or Back button clicked
+ configurator_retrodeck_troubleshooting_dialog
+;;
+
+ esac
+}
+
+configurator_about_retrodeck_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: About" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Description" \
+ "Version History" "View the version changelogs for RetroDECK" \
+ "Credits" "View the contribution credits for RetroDECK" )
+
+ case $choice in
+
+ "Version History" )
+ configurator_version_history_dialog
+ ;;
+
+ "Credits" )
+ zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Credits" \
+ --filename="$emuconfigs/defaults/retrodeck/reference_lists/retrodeck_credits.txt"
+ configurator_about_retrodeck_dialog
;;
"" ) # No selection made or Back button clicked
@@ -822,183 +1090,106 @@ configurator_tools_and_troubleshooting_dialog() {
esac
}
-configurator_move_retrodeck_dialog() {
- if [[ -d $rdhome ]]; then
- destination=$(configurator_destination_choice_dialog "RetroDECK Data" "Please choose a destination for the RetroDECK data folder.")
- case $destination in
-
- "Back" )
- configurator_tools_and_troubleshooting_dialog
- ;;
-
- "Internal Storage" )
- if [[ ! -L "$HOME/retrodeck" && -d "$HOME/retrodeck" ]]; then
- configurator_generic_dialog "The RetroDECK data folder is already at that location, please pick a new one."
- configurator_move_retrodeck_dialog
- else
- configurator_generic_dialog "Moving RetroDECK data folder to $destination"
- unlink $HOME/retrodeck # Remove symlink for $rdhome
- #move $rdhome "$HOME"
- if [[ ! -d $rdhome && -d $HOME/retrodeck ]]; then # If the move succeeded
- rdhome="$HOME/retrodeck"
- roms_folder="$rdhome/roms"
- saves_folder="$rdhome/saves"
- states_folder="$rdhome/states"
- bios_folder="$rdhome/bios"
- media_folder="$rdhome/downloaded_media"
- themes_folder="$rdhome/themes"
- prepare_emulator "all" "postmove"
- conf_write
-
- configurator_process_complete_dialog "moving the RetroDECK data directory to internal storage"
- else
- configurator_generic_dialog "The moving process was not completed, please try again."
- fi
- fi
- ;;
-
- "SD Card" )
- if [[ -L "$HOME/retrodeck" && -d "$sdcard/retrodeck" && "$rdhome" == "$sdcard/retrodeck" ]]; then
- configurator_generic_dialog "The RetroDECK data folder is already configured to that location, please pick a new one."
- configurator_move_retrodeck_dialog
- else
- if [[ ! -w $sdcard ]]; then
- configurator_generic_dialog "The SD card was found but is not writable\nThis can happen with cards formatted on PC or for other reasons.\nPlease format the SD card through the Steam Deck's Game Mode and try the moving process again."
- configurator_welcome_dialog
- else
- if [[ $(verify_space $rdhome $sdcard) == "true" ]]; then
- configurator_generic_dialog "Moving RetroDECK data folder to $destination"
- if [[ -L "$HOME/retrodeck/roms" ]]; then # Check for ROMs symlink user may have created
- unlink "$HOME/retrodeck/roms"
- fi
- unlink $HOME/retrodeck # Remove symlink for $rdhome
-
- (
- dir_prep "$sdcard/retrodeck" "$rdhome"
- ) |
- zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Move in Progress" \
- --text="Moving directory $rdhome to new location of $sdcard/retrodeck, please wait."
-
- if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves
- unlink $rdhome
- fi
-
- if [[ ! -L "$HOME/retrodeck" ]]; then # Always link back to original directory
- ln -svf "$sdcard/retrodeck" "$HOME"
- fi
-
- rdhome="$sdcard/retrodeck"
- roms_folder="$rdhome/roms"
- saves_folder="$rdhome/saves"
- states_folder="$rdhome/states"
- bios_folder="$rdhome/bios"
- media_folder="$rdhome/downloaded_media"
- themes_folder="$rdhome/themes"
- prepare_emulator "all" "postmove"
- conf_write
- configurator_process_complete_dialog "moving the RetroDECK data directory to SD card"
- else
- zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Move Directories" \
- --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space."
- fi
- fi
- fi
- ;;
-
- "Custom Location" )
- configurator_generic_dialog "Select the root folder you would like to store the RetroDECK data folder in.\n\nA new folder \"retrodeck\" will be created in the destination chosen."
- custom_dest=$(directory_browse "RetroDECK directory location")
- if [[ ! -w $custom_dest ]]; then
- configurator_generic_dialog "The destination was found but is not writable\n\nThis can happen if RetroDECK does not have permission to write to this location.\n\nThis can typically be solved through the utility Flatseal, please make the needed changes and try the moving process again."
- configurator_welcome_dialog
- else
- if [[ $(verify_space $rdhome $custom_dest) ]];then
- configurator_generic_dialog "Moving RetroDECK data folder to $custom_dest/retrodeck"
- if [[ -L $rdhome/roms ]]; then # Check for ROMs symlink user may have created
- unlink $rdhome/roms
- fi
-
- unlink $HOME/retrodeck # Remove symlink for $rdhome if the previous location was not internal
-
- (
- dir_prep "$custom_dest/retrodeck" "$rdhome"
- ) |
- zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Move in Progress" \
- --text="Moving directory $rdhome to new location of $custom_dest/retrodeck, please wait."
-
- if [[ ! -L "$HOME/retrodeck" ]]; then
- ln -svf "$custom_dest/retrodeck" "$HOME"
- fi
-
- if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves
- unlink $rdhome
- fi
-
- rdhome="$custom_dest/retrodeck"
- roms_folder="$rdhome/roms"
- saves_folder="$rdhome/saves"
- states_folder="$rdhome/states"
- bios_folder="$rdhome/bios"
- media_folder="$rdhome/downloaded_media"
- themes_folder="$rdhome/themes"
- prepare_emulator "all" "postmove"
- conf_write
- configurator_process_complete_dialog "moving the RetroDECK data directory to SD card"
- else
- zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator Utility - Move Directories" \
- --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space."
- fi
- fi
- ;;
-
- esac
- else
- configurator_generic_dialog "The RetroDECK data folder was not found at the expected location.\n\nThis may have happened if the folder was moved manually.\n\nPlease select the current location of the RetroDECK data folder."
- rdhome=$(directory_browse "RetroDECK directory location")
- roms_folder="$rdhome/roms"
- saves_folder="$rdhome/saves"
- states_folder="$rdhome/states"
- bios_folder="$rdhome/bios"
- media_folder="$rdhome/downloaded_media"
- themes_folder="$rdhome/themes"
- emulator_post_move
- conf_write
- configurator_generic_dialog "RetroDECK data folder now configured at $rdhome. Please start the moving process again."
- configurator_move_retrodeck_dialog
- fi
+configurator_add_steam() {
+ python3 /app/tools/Lutris/shortcut.py
+ configurator_welcome_dialog
}
-configurator_online_update_setting_dialog() {
- if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then
+configurator_version_history_dialog() {
+ local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata))
+ local all_versions_list=()
+
+ for rd_version in ${version_array[*]}; do
+ all_versions_list=("${all_versions_list[@]}" "RetroDECK $rd_version Changelog" "View the changes specific to version $rd_version")
+ done
+
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK Version History" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Description" \
+ "Full RetroDECK Changelog" "View the list of all changes that have ever been made to RetroDECK" \
+ "${all_versions_list[@]}")
+
+ case $choice in
+
+ "Full RetroDECK Changelog" )
+ changelog_dialog "all"
+ ;;
+
+ "RetroDECK"*"Changelog" )
+ local version=$(echo "$choice" | sed 's/^RetroDECK \(.*\) Changelog$/\1/')
+ changelog_dialog "$version"
+ ;;
+
+ esac
+
+ configurator_about_retrodeck_dialog
+}
+
+configurator_developer_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --column="Choice" --column="Description" \
+ "Change Multi-user mode" "Enable or disable multi-user support" \
+ "Change Update Channel" "Change between normal and cooker builds" \
+ "Browse the Wiki" "Browse the RetroDECK wiki online" \
+ "USB Import" "Prepare a USB device for ROMs or import an existing collection" \
+ "Install RetroDECK Starter Pack" "Install the optional RetroDECK starter pack" )
+
+ case $choice in
+
+ "Change Multi-user mode" )
+ configurator_retrodeck_multiuser_dialog
+ ;;
+
+ "Change Update Channel" )
+ configurator_online_update_channel_dialog
+ ;;
+
+ "Browse the Wiki" )
+ xdg-open "https://github.com/XargonWan/RetroDECK/wiki"
+ configurator_developer_dialog
+ ;;
+
+ "USB Import" )
+ configurator_usb_import_dialog
+ ;;
+
+ "Install RetroDECK Starter Pack" )
+ if [[ $(configurator_generic_question_dialog "Install: RetroDECK Starter Pack" "The RetroDECK creators have put together a collection of classic retro games you might enjoy!\n\nWould you like to have them automatically added to your library?") == "true" ]]; then
+ install_retrodeck_starterpack
+ fi
+ configurator_developer_dialog
+ ;;
+
+ "" ) # No selection made or Back button clicked
+ configurator_welcome_dialog
+ ;;
+ esac
+}
+
+configurator_retrodeck_multiuser_dialog() {
+ if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroDECK Online Update Check" \
- --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?"
+ --title "RetroDECK Configurator - RetroDECK Multi-user Support" \
+ --text="Multi-user support is current enabled. Do you want to disable it?\n\nIf there are more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis users files will be moved to the default locations.\n\nOther users files will remain in the mutli-user-data folder.\n"
if [ $? == 0 ] # User clicked "Yes"
then
- set_setting_value $rd_conf "update_check" "false" retrodeck "options"
+ multi_user_disable_multi_user_mode
else # User clicked "Cancel"
configurator_developer_dialog
fi
else
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroDECK Online Update Check" \
- --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?"
+ --title "RetroDECK Configurator - RetroDECK Multi-user support" \
+ --text="Multi-user support is current disabled. Do you want to enable it?\n\nThe current users saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added."
- if [ $? == 0 ] # User clicked "Yes"
+ if [ $? == 0 ]
then
- set_setting_value $rd_conf "update_check" "true" retrodeck "options"
- else # User clicked "Cancel"
+ multi_user_enable_multi_user_mode
+ else
configurator_developer_dialog
fi
fi
@@ -1032,110 +1223,93 @@ configurator_online_update_channel_dialog() {
fi
}
-configurator_retrodeck_multiuser_dialog() {
- if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then
- zenity --question \
- --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroDECK Multi-user Support" \
- --text="Multi-user support is current enabled. Do you want to disable it?\n\nIf there are more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis users files will be moved to the default locations.\n\nOther users files will remain in the mutli-user-data folder.\n"
-
- if [ $? == 0 ] # User clicked "Yes"
- then
- multi_user_disable_multi_user_mode
- else # User clicked "Cancel"
- configurator_developer_dialog
- fi
- else
- zenity --question \
- --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
- --title "RetroDECK Configurator - RetroDECK Multi-user support" \
- --text="Multi-user support is current disabled. Do you want to enable it?\n\nThe current users saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added."
-
- if [ $? == 0 ]
- then
- multi_user_enable_multi_user_mode
- else
- configurator_developer_dialog
- fi
- fi
-}
-
-configurator_developer_dialog() {
- choice=$(zenity --list --title="RetroDECK Configurator Utility - Change Options" --cancel-label="Back" \
+configurator_usb_import_dialog() {
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
- --column="Choice" --column="Action" \
- "Change Multi-user mode" "Enable or disable multi-user support" \
- "Change Update Channel" "Change between normal and cooker builds" \
- "Change Update Check Setting" "Enable or disable online checks for new versions of RetroDECK" \
- "Browse the Wiki" "Browse the RetroDECK wiki online" )
+ --column="Choice" --column="Description" \
+ "Prepare USB device" "Create ROM folders on a selected USB device" \
+ "Import from USB" "Import collection from a previously prepared device" )
case $choice in
- "Change Multi-user mode" )
- configurator_retrodeck_multiuser_dialog
+ "Prepare USB device" )
+ external_devices=()
+
+ while read -r size device_path; do
+ device_name=$(basename "$device_path")
+ external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path")
+ done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}')
+
+ if [[ "${#external_devices[@]}" -gt 0 ]]; then
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --hide-column=3 --print-column=3 \
+ --column "Device Name" \
+ --column "Device Size" \
+ --column "path" \
+ "${external_devices[@]}")
+
+ if [[ ! -z "$choice" ]]; then
+ emulationstation --home "$choice" --create-system-dirs
+ rm -rf "$choice/.emulationstation" # Cleanup unnecessary folder
+ fi
+ else
+ configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found."
+ fi
+ configurator_usb_import_dialog
;;
- "Change Update Channel" )
- configurator_online_update_channel_dialog
- ;;
+ "Import from USB" )
+ external_devices=()
- "Change Update Check Setting" )
- configurator_online_update_setting_dialog
- ;;
+ while read -r size device_path; do
+ if [[ -d "$device_path/ROMs" ]]; then
+ device_name=$(basename "$device_path")
+ external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path")
+ fi
+ done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}')
- "Browse the Wiki" )
- xdg-open "https://github.com/XargonWan/RetroDECK/wiki"
+ if [[ "${#external_devices[@]}" -gt 0 ]]; then
+ choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
+ --hide-column=3 --print-column=3 \
+ --column "Device Name" \
+ --column "Device Size" \
+ --column "path" \
+ "${external_devices[@]}")
+
+ if [[ ! -z "$choice" ]]; then
+ if [[ $(verify_space "$choice/ROMs" "$roms_folder") == "false" ]]; then
+ if [[ $(configurator_generic_question_dialog "RetroDECK Configurator Utility - USB Migration Tool" "You MAY not have enough free space to import this ROM library.\n\nThis utility only imports new additions from the USB device, so if there are a lot of the same ROMs in both locations you are likely going to be fine\nbut we are not able to verify how much data will be transferred before it happens.\n\nIf you are unsure, please verify your available free space before continuing.\n\nDo you want to continue now?") == "true" ]]; then
+ (
+ rsync -a --mkpath "$choice/ROMs/"* "$roms_folder"
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - USB Import In Progress"
+ configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!"
+ fi
+ else
+ (
+ rsync -a --mkpath "$choice/ROMs/"* "$roms_folder"
+ ) |
+ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
+ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+ --title "RetroDECK Configurator Utility - USB Import In Progress"
+ configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!"
+ fi
+ fi
+ else
+ configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found with an importable folder."
+ fi
+ configurator_usb_import_dialog
;;
"" ) # No selection made or Back button clicked
- configurator_welcome_dialog
- ;;
- esac
-}
-
-configurator_welcome_dialog() {
- if [[ $developer_options == "true" ]]; then
- welcome_menu_options=("RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \
- "Emulator Options" "Launch and configure each emulators settings (for advanced users)" \
- "Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \
- "Reset" "Reset specific parts or all of RetroDECK" \
- "Developer Options" "Welcome to the DANGER ZONE")
- else
- welcome_menu_options=("RetroArch Presets" "Change RetroArch presets, log into RetroAchievements etc." \
- "Emulator Options" "Launch and configure each emulators settings (for advanced users)" \
- "Tools and Troubleshooting" "Move RetroDECK to a new location, compress games and perform basic troubleshooting" \
- "Reset" "Reset specific parts or all of RetroDECK" )
- fi
-
- choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \
- --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
- --column="Choice" --column="Action" \
- "${welcome_menu_options[@]}")
-
- case $choice in
-
- "RetroArch Presets" )
- configurator_retroarch_options_dialog
- ;;
-
- "Emulator Options" )
- configurator_power_user_warning_dialog
- ;;
-
- "Tools and Troubleshooting" )
- configurator_tools_and_troubleshooting_dialog
- ;;
-
- "Reset" )
- configurator_reset_dialog
- ;;
-
- "Developer Options" )
- configurator_generic_dialog "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!"
configurator_developer_dialog
;;
-
esac
+
}
# START THE CONFIGURATOR
diff --git a/wiki-rtd/Archive.md b/wiki-rtd/Archive.md
new file mode 100644
index 00000000..6d06b613
--- /dev/null
+++ b/wiki-rtd/Archive.md
@@ -0,0 +1,171 @@
+# Archive
+The Archive have some legacy information from the wiki, for those that would want to read it or run some older version of RetroDECK.
+
+# Legacy included Themes
+
+
+## Alekfull NX (Light)
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-theme-AlekfullNXLight-SystemView](https://user-images.githubusercontent.com/1454947/193457765-e56875cd-a34d-4675-8267-56d04d4d1c32.jpeg) | ![rd-theme-AlekfullNXLight-GamelistView](https://user-images.githubusercontent.com/1454947/193457762-4d997ca3-d77c-4993-81bb-0c1a78f240a1.jpeg) |
+
+**Description:**
+Alekfull NX was inspired by the straightforward and intuitive interface of the Nintendo Switch and offers a similar experience but with a light retro twist.
+
+Source: [Alekfull NX (Light)](https://github.com/anthonycaccese/alekfull-nx-retropie/tree/retro-deck-esde-1.x-light)
+Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)
+Ported from: [Alekfull-NX for Batocera](https://github.com/fagnerpc/Alekfull-NX)
+Original creator: [fagnerpc](https://github.com/fagnerpc)
+
+## Retrofix Revisited
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-theme-RetrofixRevisited-SystemView](https://user-images.githubusercontent.com/1454947/193457596-05dc4316-9f2a-41ae-aa27-9609c680ec5a.jpeg) | ![rd-theme-RetrofixRevisited-GamelistView](https://user-images.githubusercontent.com/1454947/193457594-b803546b-36eb-4e71-9eca-bfee1d81ba36.jpeg) |
+
+**Description:**
+Retrofix Revisited is a theme where the goal is to showcase that the art of video games can be more interesting than the games themselves.
+
+Source: [Retrofix Revisited](https://github.com/anthonycaccese/retrofix-revisited-retropie)
+Ported and remixed by: [anthonycaccese](https://github.com/anthonycaccese)
+Ported from: [ES Theme Retrofix for Batocera](https://github.com/20GotoTen/es-theme-retrofix)
+Original creator: [20GotoTen](https://github.com/20GotoTen)
+
+
+## Slate-DE
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-SlateDE-SystemView](https://user-images.githubusercontent.com/1454947/193464197-14cb8c12-77ea-4b8b-965f-fa51a5d004b9.jpeg) | ![rd-SlateDE-GamelistView](https://user-images.githubusercontent.com/1454947/193464213-b73f18a3-840d-4cab-bac2-268bc51fbc03.jpeg) |
+
+**Description:**
+Slate-DE is based on the community created theme Recalbox-Multi for Recalbox.
+
+Source: [slate-DE](https://gitlab.com/es-de/emulationstation-de/-/tree/master/themes/slate-DE)
+Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)
+Inspired by: [Recalbox-Multi](https://gitlab.com/recalbox/recalbox-themes/-/tree/master/themes/recalbox-multi)
+
+## Modern-DE
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-ModernDE-SystemView](https://user-images.githubusercontent.com/1454947/193464329-938c5b68-6ae9-4ab6-8ac7-e7312e9698c5.jpeg) | ![rd-ModernDE-GamelistView](https://user-images.githubusercontent.com/1454947/193464333-890444ed-dd85-4322-8056-c3be8df6cad2.jpeg) |
+
+**Description:**
+Modern-DE is based on ES-Theme-Switch for RetroPie, a lightweight Switch inspired theme.
+
+Source: [Modern-DE](https://gitlab.com/es-de/emulationstation-de/-/tree/master/themes/modern-DE)
+Created by: [LeonSE from ES-DE](https://gitlab.com/es-de)
+Inspired by: [ES-Theme-Switch](https://github.com/lilbud/es-theme-switch)
+
+
+## NSO Menu Interpreted
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-NSO-SystemView](https://user-images.githubusercontent.com/1454947/222733121-975db30a-098c-4f77-aebd-f252ebe8c4cc.png) | ![rd-NSO-GamelistView](https://user-images.githubusercontent.com/1454947/222733148-42d38a12-34d1-4063-8ecc-13d16c1e44d3.png) |
+
+**Description:**
+NSO Menu Interpreted is a theme that takes inspiration from the menu design of Nintendo Switch Online.
+
+Source: [NSO-Menu-Interpreted](https://github.com/anthonycaccese/nso-menu-interpreted-es-de)
+Created by: [anthonycaccese](https://github.com/anthonycaccese) & [rogs123](https://github.com/rogs123)
+
+# Legacy Steam Deck Inputs Pre: 0.7b
+These are legacy inputs from the old RetroDECK TEST Official Layout profile for the Steam Deck
+
+| Command | Button / Combination |
+| :--- | :---: |
+| RetroArch Menu | `L3+R3` or `SELECT+Y` |
+| Quit Game | `START + SELECT` |
+| Pause Emulation | `Select + B` |
+| Take Screenshot | `Select + A` |
+| Select Save State Slot +| `Select + D-Pad UP` |
+| Select Save State Slot -| `Select + D-Pad Down` |
+| Load State | `Select + L1` |
+| Save State | `Select + R1` |
+| Rewind Emulation* | `Select + L2` |
+| Fast forward Emulation* | `Select + R2` |
+
+`*` Fast forwarding and rewind must be enabled inside RetroDeck firstly inside the Tools menu.
+
+## MelonDS
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Fast forward Emulation* | `R2 or R4` |
+| Swap screen layout | `L3 or R5` |
+| Pause/Resume | `R3 or L4` |
+
+
+## CITRA (SA)
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Load State | `L4` |
+| Save State | `R4` |
+| Citra Main Menu | `R5` |
+| Swap Screens | `L5` |
+
+**NOTE:** in order to quit CITRA just exit from the menu.
+
+## YUZU
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Pause/Resume | `R4 + A` |
+| Load Amiibo | `R4 + X` |
+| Docked/Undocked Mode | `R4 + Y` |
+| Yuzu Main Menu | `R4 + B` |
+| Exit Yuzu | `R4 + Select` |
+| Take Screenshot | `R4` |
+| Home | `L4` |
+
+
+## Ryujinx
+Please note!
+Unfortunately Ryujinx doesn't support the full hotkey customization yet. These are the default hotkeys as of now:
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Vsync Toggle | `F1` |
+| Sound Mute/Unmute | `F2` |
+| Show UI | `F4` |
+| Pause/Resume | `F5` |
+| Screenshot | `F8` |
+| Fulscreen Toggle | `F11` or `Alt+Enter` |
+
+
+## DOLPHIN (SA)
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Take Screenshot | `Select + A` |
+| Load State | `Select + L2` |
+| Save State | `Select + R2` |
+| Fastforward | `Select + R4` |
+| Slowdown | `Select + L4` |
+| Exit Dolphin | `Select + Start` |
+
+
+## PPSSPPSDL (SA)
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Fastforward | `R2` |
+| Rewind | `L2` |
+| Pause/Resume | `R4` |
+| Take Screenshot | `L4` |
+| Load State | `L5` |
+| Save State | `R5` |
+
+
+## Duckstation (SA)
+
+| Command | Button / Combination |
+| :--- | :---: |
+| Fastforward | `R4` |
+| Rewind | `L4` |
+| Load State | `L5` |
+| Save State | `R5` |
\ No newline at end of file
diff --git a/wiki-rtd/Citra-Mods.md b/wiki-rtd/Citra-Mods.md
new file mode 100644
index 00000000..2a12e987
--- /dev/null
+++ b/wiki-rtd/Citra-Mods.md
@@ -0,0 +1,31 @@
+# Citra - 3DS
+The `~/retrodeck/mods/citra/` represents the `/load/mods/` folder in Citra.
+
+**Note:**
+`TITLEID` is different for every game.
+
+
+## How do I add mods?
+
+**Requirements:** Mod files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+There are two ways of adding mods into Citra
+
+
+
+### From Citra
+1. Extract any mod from compressed `.zip` or any other format to folders.
+2. Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`.
+3. Right click on the game you want to add mods into.
+4. Click on `Open Mods Location`.
+5. Paste the mod files inside that directory, each folder is stored by the `TITLLEID` of the game.
+6. Quit Citra
+
+### From the mod folder directly
+
+1. Extract any mod files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/mods/citra/`. The folders are all named by `TITLEID`.
+3. Past the mods into the right `~/retrodeck/mods/yuzu/` folder.
\ No newline at end of file
diff --git a/wiki-rtd/Citra-Texture-Packs.md b/wiki-rtd/Citra-Texture-Packs.md
new file mode 100644
index 00000000..08f44dfa
--- /dev/null
+++ b/wiki-rtd/Citra-Texture-Packs.md
@@ -0,0 +1,43 @@
+# Citra - 3DS
+The `~/retrodeck/texture_packs/citra/` represents the `/load/textures` folder in Citra.
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+**Note:**
+`TITLEID` is different for every game.
+
+## Enable Custom Textures
+* Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`.
+* Press `Emulation` -> `Configure` -> `Graphics` -> `Use Custom Textures` and set it to `On`.
+
+
+## How do I add texture packs?
+
+**Requirements:** Texture pack files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+There are two ways of adding texture packs into Citra
+
+
+### From Citra
+1. Extract any texture files from compressed `.zip` or any other format to folders.
+2. Open up Citra inside `RetroDECK Configurator` by pressing `Open Emulator` - `Citra`.
+3. Right click on the game you want to add textures into.
+4. Click on `Open Custom Textures Location`.
+5. Paste the texture folders inside that directory, each folder is stored by the `TITLLEID` of the game.
+6. Quit Citra
+
+### From the texture folder directly
+
+1. Extract any texture pack files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/texture_packs/citra/`. The folders are all named by `TITLEID`.
+3. Move textures into the right `~/retrodeck/texture_packs/citra/` folder.
+
+Example:
+
+* You have a `.zip` file for a game that contains the `/load/textures/0000001000` folders.
+* All you need to do is take the TITLEID folder: `0000001000` and put it into `~/retrodeck/texture_packs/citra/`
+* So the end result looks like: `~/retrodeck/texture_packs/citra/0000001000`
\ No newline at end of file
diff --git a/wiki-rtd/Development-General-notes.md b/wiki-rtd/Development-General-notes.md
new file mode 100644
index 00000000..9568d331
--- /dev/null
+++ b/wiki-rtd/Development-General-notes.md
@@ -0,0 +1,116 @@
+# Cooker
+Cooker, differently from the main (stable) branch, is what it's boiling in the pot now: the bleeding edge of the software development.
+Every time a commit or a PR is done, a GitHub action automatically compiles the snapshot with the latest changes and publish them on the [cooker repository](https://github.com/XargonWan/RetroDECK-cooker).
+This can be publicly tested and if it's stable will be merged in the main branch creating a new release.
+
+Useless to say that this channel is not suggested for the end user but it's developer / alpha tester oriented.
+Expect major bugs and data loss: be warned.
+
+# Build instructions
+
+If you want to build the RetroDECK flatpak on your machine for developing or just testing purposes:
+```
+cd ~
+git clone --recursive https://github.com/XargonWan/RetroDECK.git
+cd RetroDECK
+git submodule init
+git submodule update
+```
+
+install `flatpak flatpak-builder p7zip-full` with your distro's package manager, then:
+
+```
+flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
+flatpak install --user -y org.kde.Sdk//5.15-21.08 org.kde.Platform//5.15-21.08 io.qt.qtwebengine.BaseApp/x86_64/5.15-21.08 org.freedesktop.Sdk.Extension.llvm13 org.freedesktop.Platform.ffmpeg-full/x86_64/21.08
+```
+
+To build the stable release:
+```
+flatpak-builder --user --install --install-deps-from=flathub --install-deps-from=flathub-beta --force-clean --repo=local ~/RetroDECK/retrodeck-main ~/RetroDECK/net.retrodeck.retrodeck.yml
+flatpak build-bundle local ~/RetroDECK.flatpak net.retrodeck.retrodeck
+```
+
+Or alternatively, to build the cooker (experimental) release:
+```
+git checkout cooker
+flatpak-builder --user --install --force-clean --repo=local ~/RetroDECK/retrodeck-cooker ~/RetroDECK/net.retrodeck.retrodeck.yml
+flatpak build-bundle local ~/RetroDECK.flatpak net.retrodeck.retrodeck
+```
+
+# Debug Mode
+It's possible to enter in a sort of debug mode, it's actually the flatpak shell.
+
+Enter in the flatpak shell:
+```
+flatpak run --command=bash net.retrodeck.retrodeck
+```
+
+Launch ES-DE in debug mode:
+```
+emulationstation --debug --home /var/config/emulationstation
+```
+
+Launch an emulator in debug mode:
+```
+ls /app/bin
+```
+To get the list of the available binaries to launch, then just write the command, such as `yuzu` or `retroarch`
+
+This is useful when for example a game is not starting and you want the output printed in the terminal.
+
+# Manual installation instructions
+This method is usually for the beta/cooker testers:
+- Download the RetroDECK.flatpak from the [release page](https://github.com/XargonWan/RetroDECK/releases) or from the [cooker release page](https://github.com/XargonWan/RetroDECK-cooker/releases) (be sure to download the correct version, check the date as they're not ordered unfortunately).
+- `cd` where the downloded file is located
+- `flatpak install RetroDECK.flatpak` or whatever the filename is
+
+If this doesn´t work:
+- cd into your download location
+- `flatpak install RetroDECK.flatpak`
+- Run it from the start menu or, alternatively, from the terminal by typing `flatpak run net.retrodeck.retrodeck`
+- Then the first setup will guide you in the first steps, **please read all the messages carefully** as the rom directory must not be edited in EmulationStation
+
+## Updating instructions
+- uninstall the previous version with `flatpak uninstall net.retrodeck.retrodeck`
+- follow installation instructions
+- [OPTIONAL] In case of issues it's suggested to remove `~/.var/app/net.retrodeck.retrodeck` and run `flatpak run net.retrodeck.retrodeck --reset`, but this will reset the application configs, please backup your data.
+NOTE: this will not be needed after v`0.4.0b`.
+
+# Managing RetroDECK flatpak file
+
+Install RetroDECK from flatpak file:
+```
+flatpak install RetroDECK.flatpak
+```
+
+Run RetroDECK:
+```
+flatpak run net.retrodeck.retrodeck
+```
+
+Uninstall RetroDECK:
+```
+flatpak uninstall net.retrodeck.retrodeck
+```
+
+# CLI - (Command Line interface)
+There are some functions that can be called via CLI, for a comprehensive list type:
+`flatpak run net.retrodeck.retrodeck --help` or `flatpak run net.retrodeck.retrodeck -h`
+
+Some useful ones:
+Resets the whole RetroDECK at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset
+```
+Resets RetroArch configs at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset-ra
+```
+Resets all the standalone emulators configs at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset-sa
+```
+
+# Making your own ES-DE theme
+Please check the following link link over ES-DE (this is still in development)
+[Theme Development ](https://gitlab.com/es-de/emulationstation-de/-/blob/master/THEMES-DEV.md)
diff --git a/wiki-rtd/Dolphin-and-Primehack-Mods.md b/wiki-rtd/Dolphin-and-Primehack-Mods.md
new file mode 100644
index 00000000..24f34554
--- /dev/null
+++ b/wiki-rtd/Dolphin-and-Primehack-Mods.md
@@ -0,0 +1,36 @@
+# Dolphin / Primehack - GC & Wii
+Primehack is based on Dolphin so the method is the same.
+
+The `~/retrodeck/mods/dolphin/` & `~/retrodeck/mods/primehack/` that represents the `/load/GraphicMods` folder.
+
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+**Note:**
+`GAME_ID` is different for every game.
+
+## Enable Custom Textures
+* Open up Dolphin or Primehack inside `RetroDECK Configurator` by pressing `Open Emulator` - `Dolphin` or `Primehack`.
+* Press `Options` -> `Graphic Settings`
+
+`Enable Graphics Mods` and set it to `On`.
+
+## How do I add mods?
+
+**Requirements:** Mod files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+### Directly into the mods folder
+
+1. Extract any mod files from compressed `.zip` or any other format into folders.
+
+2. Go into mods folders, they contain folders that are all named by `GAME_ID`.
+**Dolphin:**`~/retrodeck/mods/dolphin/`
+**Primehack:**`~/retrodeck/mods/primehack/`.
+
+3. Move the mods into the right folder:
+**Dolphin:** `~/retrodeck/mods/dolphin/`
+**Primehack:** `~/retrodeck/mods/primehack/`
diff --git a/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md b/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md
new file mode 100644
index 00000000..ebf940fb
--- /dev/null
+++ b/wiki-rtd/Dolphin-and-Primehack-Texture-Packs.md
@@ -0,0 +1,39 @@
+# Dolphin / Primehack - GC & Wii
+Primehack is based on Dolphin so the method is the same.
+
+The `~/retrodeck/texture_packs/dolphin/` & `~/retrodeck/texture_packs/primehack/` represents the `/load/Textures` folder.
+
+
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+**Note:**
+`GAME_ID` is different for every game.
+
+## Enable Custom Textures
+* Open up Dolphin or Primehack inside `RetroDECK Configurator` by pressing `Open Emulator` - `Dolphin` or `Primehack`.
+* Press `Options` -> `Graphic Settings`
+
+`Load Custom Textures` and set it to `On`.
+
+`Prefetch Custom Textures` and set it to `On`.
+
+## How do I add texture packs?
+
+**Requirements:** Texture pack files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+### Directly in the folder
+
+1. Extract any texture pack files from compressed `.zip` or any other format into folders.
+
+2. Go into texture pack folders, they contain folders that are all named by `GAME_ID`.
+**Dolphin:**`~/retrodeck/texture_packs/dolphin/`
+**Primehack:**`~/retrodeck/texture_packs/primehack/`.
+
+3. Move the textures into the right folder:
+**Dolphin:** `~/retrodeck/texture_packs/dolphin/`
+**Primehack:** `~/retrodeck/texture_packs/primehack/`
diff --git a/wiki-rtd/Duckstation-Texture-Packs.md b/wiki-rtd/Duckstation-Texture-Packs.md
new file mode 100644
index 00000000..86be8d82
--- /dev/null
+++ b/wiki-rtd/Duckstation-Texture-Packs.md
@@ -0,0 +1,30 @@
+# Duckstation - PSX
+The `~/retrodeck/texture_packs/duckstaiton/` represents the `/duckstation/textures/` folder in Duckstation.
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+**Note:**
+`TITLEID` is different for every game.
+
+## Enable Custom Textures
+* Open up Duckstation inside `RetroDECK Configurator` by pressing `Open Emulator` - `Duckstation`.
+* Go to `Settings` -> `Advanced` -> `Tweaks/Hacks`
+
+`Enable VRAM Write Texture Replacement` and set it to `On`.
+
+`Preload Texture Replacements` and set it to `On`.
+
+
+## How do I add texture packs?
+
+**Requirements:** Texture pack files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+### Texture folder directly
+
+1. Extract any texture pack files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/texture_packs/duckstation/`. The folders are all named by `TITLEID`.
+3. Move textures into the right `~/retrodeck/texture_packs/duckstation/` folder.
\ No newline at end of file
diff --git a/wiki-rtd/EmulationStation-DE-Themes.md b/wiki-rtd/EmulationStation-DE-Themes.md
new file mode 100644
index 00000000..2aee3876
--- /dev/null
+++ b/wiki-rtd/EmulationStation-DE-Themes.md
@@ -0,0 +1,38 @@
+# Themes general information
+
+## How to switch between themes?
+Go into `Main Menu` - `UI Settings` - `Theme Set` to select the theme you want to use.
+
+## ES-DE Theme List
+Look over at the [Theme List](https://gitlab.com/es-de/themes/themes-list) and find themes you like.
+
+## How do I add additional themes?
+
+RetroDECK uses [ES-DE](https://www.es-de.org) for its interface so any theme that is compatible with ES-DE can also be used with RetroDECK
+
+### From the Theme Downloader
+
+Go into `Main Menu` - `UI Settings` - `Theme Downloader` from there you can download a wide array of themes.
+
+### From the Internet
+If you find a theme you would like to use that is not in the `Theme Downloader` please download it and place it in `~/retrodeck/themes` (make sure the theme has its own folder in that directory).
+
+## FAQs: Frequently asked questions on Themes
+
+["Why does the theme I am using not work?" or "Why does the layout look broken?" (black screen with blue text)](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#why-does-the-theme-i-am-using-not-work-or-why-does-the-layout-look-broken-black-screen-with-blue-text)
+
+[Why does the theme layout look squished?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#why-does-the-theme-layout-look-squished)
+
+# RetroDECK: Included Theme
+
+## Art Book Next
+
+| System View | Gamelist View |
+|----|----|
+| ![rd-theme-ArtBookNext-SystemView](https://user-images.githubusercontent.com/1454947/193457029-9a7a1207-fe05-4cd1-8b18-eb4112e903e9.jpeg)| ![rd-theme-ArtBookNext-GamelistView](https://user-images.githubusercontent.com/1454947/193457123-505ccd23-6477-43d8-baaa-1360ed3c250e.jpeg) |
+
+**Description:**
+Art Book Next is a theme that tries to emulate the feeling of flipping trough your game library as if they where pages of a coffee table book.
+
+Source: [Art Book Next on Github](https://github.com/anthonycaccese/art-book-next-retropie)
+Created by: [anthonycaccese](https://github.com/anthonycaccese)
diff --git a/wiki-rtd/EmulationStation-DE-User-Guide.md b/wiki-rtd/EmulationStation-DE-User-Guide.md
new file mode 100644
index 00000000..1176aaf8
--- /dev/null
+++ b/wiki-rtd/EmulationStation-DE-User-Guide.md
@@ -0,0 +1,97 @@
+# The User Guide
+
+RetroDECK uses EmulationStation Desktop Edition (ES-DE) as its bundled interface.
+
+The official EmulationStation Desktop Edition user guide is over at their gitlab.
+[EmulationStation Desktop Edition user guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md)
+
+Note that the guide is written in a general way for the application and not how RetroDECK handles certain configurations. Also note that RetroDECK is currently not shipped with all the emulators ES-DE supports in the user guide.
+
+_EmulationStation Desktop Edition (ES-DE) and it's guide is written by [Leon Styhre](https://gitlab.com/leonstyhre)
+ Published under the MIT-Licence._
+
+# Recommended sections in the user guide:
+
+
+## General Interface
+
+### General UI Settings
+Various settings that affect the user interface.
+[UI Settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#ui-settings)
+
+### Other UI settings
+These are mostly technical settings.
+[Other UI settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings)
+
+### General navigation
+These are the buttons mappings automatically applied by ES-DE.
+[General navigation](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#general-navigation)
+If you are using the Steam Deck look at RetroDECKs hotkeys:
+[Steam Deck: Hotkeys ](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Hotkeys)
+
+### Sound Settings
+Various sound settings.
+[Sound settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#sound-settings)
+
+## Game settings and filters
+
+### Game options menu
+Various navigation for the game options menu.
+[Game options menu](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#game-options-menu)
+
+### Game collections
+ES-DE provides two types of collections, Automatic collections and Custom collections, the latter being defined by the user. Collections are as the name implies only collections of games already present in your actual game systems, so they're basically grouping of games into convenient views.
+[Game collections](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#game-collections)
+
+### Set alternative emulator.
+ES-DE allows you to change emulators for systems that has many different emulators.
+[Set alternative emulator](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings-1)
+
+## Scraping and editing roms: metadata, images etc...
+
+### Scraper
+Contains the various options for the scraper, which is used to download metadata, images and videos for your games.
+[Scraper guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#scraping)
+
+### Scraper account settings
+Setup of ScreenScraper account.
+[Scraper account settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#account-settings)
+
+### Content Settings
+Describes the content types to include in the scraping.
+[Content settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#content-settings)
+
+### How to: Manually copy custom media files (images, videos etc..)
+How to add custom media files to the ES-DE interface. For example you want other images then those on screenscraper or the game you add don't exists.
+[How to: Manually copy custom media files](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#manually-copying-game-media-files)
+
+### Miximage settings
+These are the settings for the miximage generator, which can either be run from the scraper (single-game scraper or multi-scraper) or from the offline generator. The miximage combines the screenshot, marquee, box/cover and physical media images to make a composite picture that is displayed in the gamelist view. There are various settings for the generator.
+
+[Miximage settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#miximage-settings)
+
+### Metadata editor
+In the metadata editor, you can modify the metadata, scrape for game info and media files, clear the entry which will delete all metadata and game media files, or delete the entire game which also removes its file on the filesystem.
+[Metadata editor](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#metadata-editor)
+
+### Various other scraping settings.
+[Other scraper settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#other-settings)
+
+
+## Media, video, themes and slideshow settings
+
+### Video screensaver settings
+Options specific to the video screensaver.
+[Video screensaver settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#video-screensaver-settings)
+
+### Media viewer settings
+Settings for the media viewer that is accessible from the gamelist views.
+[Media viewer settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#media-viewer-settings)
+
+### Slideshow screensaver settings
+Options specific to the slideshow screensaver.
+[Slideshow screensaver settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#slideshow-screensaver-settings)
+
+### Theme settings
+Tells you how to use themes.
+[Theme settings](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes)
diff --git a/wiki-rtd/Emulators-BIOS-and-Firmware.md b/wiki-rtd/Emulators-BIOS-and-Firmware.md
new file mode 100644
index 00000000..a219ffe4
--- /dev/null
+++ b/wiki-rtd/Emulators-BIOS-and-Firmware.md
@@ -0,0 +1,132 @@
+A BIOS or firmware is like the brain of a computer or electronic device. It helps the device start up and makes sure all its parts work together smoothly. In emulation, having the correct BIOS/firmware is important because it allows the software to pretend to be the real device and work properly.
+That's why some emulators require BIOS and Firmware files to work correctly or at all.
+Generally the bios files should be put in `~/retrodeck/bios`.
+
+## RetroArch (Libretro)
+Some cores may need some BIOS files to work or run correctly.
+Here are the most common systems, if you find more we can add them to this wiki.
+However the extended information can be found on the [official libretro documentation](https://docs.libretro.com/guides/bios/), just search for your core.
+More info by clicking on the system name down here.
+
+[Sony Playstation](https://docs.libretro.com/library/beetle_psx/#bios)
+```
+scph5500.bin PS1 JP BIOS - Required for JP games 8dd7d5296a650fac7319bce665a6a53c
+scph5501.bin PS1 US BIOS - Required for US games 490f666e1afb15b7362b406ed1cea246
+scph5502.bin PS1 EU BIOS - Required for EU games 32736f17079d0b2b7024407c39bd3050
+```
+
+[SegaCD](https://docs.libretro.com/library/genesis_plus_gx/#bios)
+```
+bios_CD_E.bin | MegaCD EU BIOS - Required for MegaCD EU games | e66fa1dc5820d254611fdcdba0662372
+bios_CD_U.bin | SegaCD US BIOS - Required for SegaCD US games | 854b9150240a198070150e4566ae1290
+bios_CD_J.bin | MegaCD JP BIOS - Required for MegaCD JP games | 278a9397d192149e84e820ac621a8edd
+```
+
+[Sega Saturn](https://docs.libretro.com/library/beetle_saturn/#bios)
+```
+sega_101.bin | Saturn JP BIOS - Required for JP games | 85ec9ca47d8f6807718151cbcca8b964
+mpr-17933.bin | Saturn US.mdEU BIOS - Required for US/EU games | 3240872c70984b6cbfda1586cab68dbe
+mpr-18811-mx.ic1 | The King of Fighters '95 ROM Cartridge - Required for this game | 255113ba943c92a54facd25a10fd780c
+mpr-19367-mx.ic1 | Ultraman: Hikari no Kyojin Densetsu ROM Cartridge - Required for this game | 1cd19988d1d72a3e7caa0b73234c96b4
+
+```
+*only required for a specific game
+
+[PPSSPP](https://docs.libretro.com/library/ppsspp/)
+Starting everything should be included.
+But if you want the original PSP fonts you can place them in `system/PPSSPP/flash0/font`
+
+
+[MSX / SVI / ColecoVision / SG-1000](https://docs.libretro.com/library/bluemsx/#bios)
+Content of [blueMSXv282full.zip](http://bluemsx.msxblue.com/download.html).
+Not the zip itself, its contents must be extracted in `~/retrodeck/bios` folder, more info [here](https://docs.libretro.com/library/bluemsx/#bios).
+Starting from v0.5.0b this is automatically provided.
+
+## Yuzu
+Yuzu needs the key files `prod.keys`, `title.keys` and the firmware files in the following directories:
+
+**Yuzu keys:** `~/retrodeck/bios/switch/keys`
+
+**Yuzu firmware:** `~/retrodeck/bios/switch/registered`
+
+The directory tree should look like this example:
+```
+~/retrodeck/bios/switch
+├── keys
+│ ├── prod.keys
+│ └── title.keys
+└── registered
+ ├── 02259fd41066eddbc64e0fdd217d9d2f.nca
+ ├── 02582a2cd46cc226ce72c8a52504cd97.nca
+ ├── 02b1dd519a6df4de1b11871851d328a1.nca
+ ├── other 217 files...
+ └── fd0d23003ea5602c24ac4e41101c16fd.nca
+```
+
+You can find a complete guide in the [Yuzu official wiki](https://yuzu-emu.org/help/quickstart/#downloading-and-installing-yuzu) on how to extract the BIOS from your Switch.
+
+## XEMU (Xbox)
+
+These files must be placed with the correct name in the given folders:
+```
+~/retrodeck/bios/mcpx_1.0.bin'
+~/retrodeck/bios/Complex.bin'
+~/retrodeck/saves/xbox-eeprom.bin'
+[OPTIONAL] ~/retrodeck/bios/xbox_hdd.qcow2'
+```
+The hard disk is optional as RetroDECK already provides a pre-built 8G Xbox HDD image, free of any copyrighted content, and only containing a dummy dashboard.
+So if you want to the complete experience you have to provide your own.
+
+Usually those files are dumped/found as:
+```
+mcpx_1.0.bin
+Complex.bin -> Complex_4627v1.03.bin or Complex_4627.bin
+xbox-eeprom.bin -> eeprom.bin
+xbox_hdd.qcow2 -> xbox_harddisk-D4920.qcow2
+```
+So don't forget to rename them for the RetroDECK standards.
+
+## PICO-8
+
+Pico-8 it's not freeware hence it cannot be included with RetroDECK, however it's supported by using these steps:
+
+1. Download PICO-8 for `Linux 64-bit` from the [official website](https://www.lexaloffle.com/games.php?page=updates) or where you bought it.
+2. Extract the zipfile somewhere on your desktop
+3. Copy the content of the extracted pico-8 folder into `~/retrodeck/bios/pico-8/`
+
+## MelonDS (Standalone), (NDS)
+
+MelonDS by default needs those files:
+- `~/retrodeck/bios/bios9.bin`
+- `~/retrodeck/bios/bios7.bin`
+- `~/retrodeck/bios/firmware.bin`
+
+However there is a setting to disable the need of these files by going to: `Tools` -> `Start MelonDS` -> `Yes` -> `Config` -> `Emu settings` -> `DS-mode` and removing the check on `Use external BIOS/firmware files`.
+Please be advised that this operation may prevent the games from running correctly.
+
+## PCSX2 (PS2)
+
+There a multitude of PS2 bios for a complete list with the hashes check
+[Gametechwiki](https://emulation.gametechwiki.com/index.php/File_hashes#Known_BIOS_Hashes)
+
+The PS2 bios could be named in the following ways
+
+By bios version: `ps2-0200a-20040614.bin`
+
+By system name:`SCPH-70012.bin`
+
+Put the bios inside the bios folder: `~/retrodeck/bios/SCPH-70012.bin`
+
+Here is a list of common used bios with `bios versions/system names/hashes`.
+
+```
+ps2-0200a-20040614 - SCPH-70001/SCPH-70011/SCPH-70012 - d333558cc14561c1fdc334c75d5f37b7 -PS2 US BIOS
+ps2-0200e-20040614 - SCPH-70002/SCPH-70003/SCPH-70004/SCPH-70008 - dc752f160044f2ed5fc1f4964db2a095 - PS2 EU BIOS
+ps2-0200j-20040614 - SCPH-70000 - 0eee5d1c779aa50e94edd168b4ebf42e - PS2 JP BIOS
+```
+
+## RPCS3 (PS3)
+- Download the [latest PlayStation 3 firmware](https://www.playstation.com/en-us/support/hardware/ps3/system-software/).
+- `Tools` -> `RetroDECK Configurator` -> `Change settings` -> `RPCS3` -> `File` -> `Install Firmware`.
+
+For more information on how to load the games check the [official quickstart guide](https://rpcs3.net/quickstart).
\ No newline at end of file
diff --git a/wiki-rtd/Emulators-Diffrent-controller-layouts.md b/wiki-rtd/Emulators-Diffrent-controller-layouts.md
new file mode 100644
index 00000000..6bce1f64
--- /dev/null
+++ b/wiki-rtd/Emulators-Diffrent-controller-layouts.md
@@ -0,0 +1,60 @@
+# Different controller layouts in games
+
+## Configurator Switch Y-X and A-B
+You can enable a mode that switches the Y-X and A-B buttons for supported Emulators inside the `RetroDECK Configurator`.
+
+## XBOX layout
+Many devices like the `Steam Deck` uses the XBOX layout
+
+**XBOX button layout:**
+
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `Y` |
+| Left | `X` |
+| Right | `B` |
+| Bottom | `A` |
+
+
+**Example:**
+So if you are emulating a Xbox game that calls for the button `B` to be pressed it corresponds to the right button.
+
+### Nintendo Layout
+
+**Nintendo - button layout:**
+
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `X` |
+| Left | `Y` |
+| Right | `A` |
+| Bottom | `B` |
+
+
+**Example:**
+So if you are emulating a Nintendo game that calls for the button `A` to be pressed it corresponds to the right button.
+
+
+
+## Sony PlayStation Layout
+The Sony PlayStation uses it's icon glyphs to represent it's buttons.
+
+**Sony PlayStation - button layout:**
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `Triangle` |
+| Left | `Square` |
+| Right | `Circle` |
+| Bottom | `X` |
+
+**Example:**
+
+So if you are emulating a PlayStation game that calls for the button `Square` to be pressed it corresponds to the right button.
+
+**Regional differences:**
+
+Depending on the region of your Playstation game, the buttons `Circle` and `X` switches the meaning for confirm and cancel (they are still at the same physical location). But it is good to keep in mind if you are used to exiting out of menus with a certain button and wondering why it works in some games while others not.
+
+**Example:**
+
+In the EU/US `X` is confirm while in Japan `X` is cancel.
\ No newline at end of file
diff --git a/wiki-rtd/Emulators-Supported-folders-and-files.md b/wiki-rtd/Emulators-Supported-folders-and-files.md
new file mode 100644
index 00000000..60fd794f
--- /dev/null
+++ b/wiki-rtd/Emulators-Supported-folders-and-files.md
@@ -0,0 +1,734 @@
+# General information
+
+**Disclaimer: This list is a work in progress and might contain errors**
+
+What follows is a list of each systems supported file extensions and the path to the folder where to put the roms.
+
+**NOTE: Steam Deck**
+For the Steam Deck the `roms` folder location depends on where you choose to install the roms folder during the RetroDECK installation process.
+It's either on the internal storage: `~/retrodeck/roms` or the SDCard: `/retrodeck/roms`
+
+
+[What does ~ mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean)
+
+# 3DO
+- **Roms path:**
~/retrodeck/roms/3do
+- **Supported file extensions:**
.iso .ISO .bin .BIN .chd .CHD .cue .CUE .7z .7Z .zip .ZIP
+
+
+# AdvanceMAME
+- **Roms path:**
~/retrodeck/roms/mame-advmame
+- **Supported file extensions:**
.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP
+
+
+# Adventure Game Studio Game Engine
+- **Roms path:**
~/retrodeck/roms/ags
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+# Amstrad
+
+
+## Amstrad CPC
+- **Roms path:**
~/retrodeck/roms/amstradcpc
+- **Supported file extensions:**
.cdt .CDT .cpr .CPR .dsk .DSK .kcr .KCR .m3u .M3U .sna .SNA .tap .TAR .voc .VOC .7z .7Z .zip .ZIP
+
+
+## Amstrad GX4000
+- **Roms path:**
~/retrodeck/roms/gx4000
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Android (Google)
+- **Roms path:**
~/retrodeck/roms/android
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+# Apple
+
+## Apple II
+- **Roms path:**
~/retrodeck/roms/apple2
+- **Supported file extensions:**
.nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP
+
+
+## Apple IIGS
+- **Roms path:**
~/retrodeck/roms/apple2gs
+- **Supported file extensions:**
.nib .NIB .do .DO .po .PO .dsk .DSK .7z .7Z .zip .ZIP
+
+
+# Arcade
+- **Roms path:**
~/retrodeck/roms/arcade
+- **Supported file extensions:**
.cmd .CMD .7z .7Z .zip .ZIP
+
+# Atari
+
+## Atari 2600
+- **Roms path:**
~/retrodeck/roms/atari2600
+- **Supported file extensions:**
.a26 .A26 .bin .BIN .7z .7Z .zip .ZIP
+
+
+## Atari 5200
+- **Roms path:**
~/retrodeck/roms/atari5200
+- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .7z .7Z .zip .ZIP
+
+
+## Atari 7800 ProSystem
+- **Roms path:**
~/retrodeck/roms/atari7800
+- **Supported file extensions:**
.a78 .A78 .bin .BIN .7z .7Z .zip .ZIP
+
+
+## Atari 800
+- **Roms path:**
~/retrodeck/roms/atari800
+- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .rom .ROM .7z .7Z .zip .ZIP
+
+
+## Atari Jaguar
+- **Roms path:**
~/retrodeck/roms/atarijaguar
+- **Supported file extensions:**
.j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP
+
+
+## Atari Jaguar CD
+- **Roms path:**
~/retrodeck/roms/atarijaguarcd
+- **Supported file extensions:**
.j64 .J64 .jag .JAG .rom .ROM .abs .ABS .cof .COF .bin .BIN .prg .PRG .7z .7Z .zip .ZIP
+
+
+## Atari Lynx
+- **Roms path:**
~/retrodeck/roms/atarilynx
+- **Supported file extensions:**
.lnx .LNX .o .O .7z .7Z .zip .ZIP
+
+
+## Atari ST
+- **Roms path:**
~/retrodeck/roms/atarist
+- **Supported file extensions:**
.st .ST .msa .MSA .stx .STX .dim .DIM .ipf .IPF .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Atari XE
+- **Roms path:**
~/retrodeck/roms/atarixe
+- **Supported file extensions:**
.xfd .XFD .atr .ATR .atx .ATX .cdm .CDM .cas .CAS .bin .BIN .a52 .A52 .xex .XEX .7z .7Z .zip .ZIP
+
+
+# Atomiswave
+- **Roms path:**
~/retrodeck/roms/atomiswave
+- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP
+
+
+# Bandai
+
+
+## Bandai SuFami Turbo
+- **Roms path:**
~/retrodeck/roms/sufami
+- **Supported file extensions:**
.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .st .ST .7z .7Z .zip .ZIP
+
+
+## Bandai WonderSwan
+- **Roms path:**
~/retrodeck/roms/wonderswan
+- **Supported file extensions:**
.ws .WS .pc2 .PC2 .7z .7Z .zip .ZIP
+
+
+## Bandai WonderSwan Color
+- **Roms path:**
~/retrodeck/roms/wonderswancolor
+- **Supported file extensions:**
.ws .WS .wsc .WSC .pc2 .PC2 .7z .7Z .zip .ZIP
+
+
+# Bally Astrocade
+- **Roms path:**
~/retrodeck/roms/astrocde
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# BBC Micro
+- **Roms path:**
~/retrodeck/roms/bbcmicro
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Commodore
+
+
+## Commodore Amiga
+- **Roms path:**
~/retrodeck/roms/amiga
+- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP
+
+## Commodore Amiga 600
+- **Roms path:**
~/retrodeck/roms/amiga600
+- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Commodore Amiga 1200
+- **Roms path:**
~/retrodeck/roms/amiga1200
+- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Commodore Amiga CD32
+- **Roms path:**
~/retrodeck/roms/amigacd32
+- **Supported file extensions:**
.adf .ADF .adz .ADZ .dms .DMS .fdi .FDI .ipf .IPF .hdf .HDF .hdz .HDZ .lha .LHA .cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .uae .UAE .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Commodore 64
+- **Roms path:**
~/retrodeck/roms/c64
+- **Supported file extensions:**
.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP
+
+
+## Commodore CDTV
+- **Roms path:**
~/retrodeck/roms/cdtv
+- **Supported file extensions:**
.cue .CUE .ccd .CCD .nrg .NRG .mds .MDS .iso .ISO .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Commodore VIC-20
+- **Roms path:**
~/retrodeck/roms/vic20
+- **Supported file extensions:**
.bin .BIN .cmd .CMD .crt .CRT .d2m .D2M .d4m .D4M .d64 .D64 .d6z .D6Z .d71 .D71 .d7z .D7Z .d80 .D80 .d81 .D81 .d82 .D82 .d8z .D8Z .g41 .G41 .g4z .G4Z .g64 .G64 .g6z .G6Z .gz .GZ .lnx .LNX .m3u .M3U .nbz .NBZ .nib .NIB .p00 .P00 .prg .PRG .t64 .T64 .tap .TAP .vfl .VFL .vsf .VSF .x64 .X64 .x6z .X6Z .7z .7Z .zip .ZIP
+
+
+# Cave Story (NXEngine)
+- **Roms path:**
~/retrodeck/roms/cavestory
+- **Supported file extensions:**
.exe .EXE .7z .7Z .zip .ZIP
+
+
+# ChaiLove Game Engine
+- **Roms path:**
~/retrodeck/roms/chailove
+- **Supported file extensions:**
.chai .CHAI .chailove .CHAILOVE .7z .7Z .zip .ZIP
+
+
+# ColecoVision
+- **Roms path:**
~/retrodeck/roms/coleco
+- **Supported file extensions:**
.bin .BIN .cas .CAS .col .COL .cv .CV .dsk .DSK .m3u .M3U .mx1 .MX1 .mx2 .MX2 .ri .RI .rom .ROM .sc .SC .sg .SG .7z .7Z .zip .ZIP
+
+
+# Capcom Play System
+- **Roms path:**
~/retrodeck/roms/cps
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Daphne Arcade LaserDisc Emulator
+- **Roms path:**
~/retrodeck/roms/daphne
+- **Supported file extensions:**
.daphne .singe
+
+
+# Doom
+- **Roms path:**
~/retrodeck/roms/doom
+- **Supported file extensions:**
.wad .WAD .iwad .IWAD .pwad .PWAD
+
+
+# DOS (PC)
+- **Roms path:**
~/retrodeck/roms/dos
+- **Supported file extensions:**
.bat .BAT .com .COM .conf .CONF .cue .CUE .dosz .DOSZ .exe .EXE .iso .ISO .7z .7Z
+
+
+# Dragon 32
+- **Roms path:**
~/retrodeck/roms/dragon32
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Fairchild Channel F
+- **Roms path:**
~/retrodeck/roms/channelf
+- **Supported file extensions:**
.bin .BIN .chf .CHF .7z .7Z .zip .ZIP
+
+
+# FinalBurn
+
+## FinalBurn Alpha
+- **Roms path:**
~/retrodeck/roms/fba
+- **Supported file extensions:**
.iso .ISO .7z .7Z .zip .ZIP
+
+
+## FinalBurn Neo
+- **Roms path:**
~/retrodeck/roms/fbneo
+- **Supported file extensions:**
.ccd .CCD .cue .CUE .7z .7Z .zip .ZIP
+
+
+# Intellivision - Mattel Electronics
+- **Roms path:**
~/retrodeck/roms/intellivision
+- **Supported file extensions:**
.int .INT .bin .BIN .rom .ROM .7z .7Z .zip .ZIP
+
+
+# Infocom Z-machine
+- **Roms path:**
~/retrodeck/roms/zmachine
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Java 2 Micro Edition (J2ME)
+- **Roms path:**
~/retrodeck/roms/j2me
+- **Supported file extensions:**
.jar .JAR .7z .7Z .zip .ZIP
+
+
+# Lutro Game Engine
+- **Roms path:**
~/retrodeck/roms/lutro
+- **Supported file extensions:**
.lua .LUA .lutro .LUTRO .7z .7Z .zip .ZIP
+
+
+# Multiple Arcade Machine Emulator (MAME)
+- **Roms path:**
~/retrodeck/roms/mame
+- **Supported file extensions:**
.cmd .CMD .7z .7Z .zip .ZIP
+
+
+# MAME4ALL
+- **Roms path:**
~/retrodeck/roms/mame-mame4all
+- **Supported file extensions:**
.chd .cue .CUE .CHD .cmd .CMD .fba .FBA .iso .ISO .7z .7Z .zip .ZIP
+
+
+# Multi Emulator Super System (MESS)
+- **Roms path:**
~/retrodeck/roms/mess
+- **Supported file extensions:**
.chd .CHD .7z .7Z .zip .ZIP
+
+
+# Moonlight Game Streaming
+- **Roms path:**
~/retrodeck/roms/moonlight
+- **Supported file extensions:**
.moonlight .MOONLIGHT .7z .7Z .zip .ZIP
+
+
+# MSX
+
+## MSX
+- **Roms path:**
~/retrodeck/roms/msx
+- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## MSX1
+- **Roms path:**
~/retrodeck/roms/msx1
+- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## MSX2
+- **Roms path:**
~/retrodeck/roms/msx2
+- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## MSX Turbo R
+- **Roms path:**
~/retrodeck/roms/msxturbor
+- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP
+
+# Microsoft Xbox
+
+## Microsoft Xbox
+- **Roms path:**
~/retrodeck/roms/xbox
+- **Supported file extensions:**
.iso .ISO
+
+
+## Microsoft Xbox 360
+- **Roms path:**
~/retrodeck/roms/xbox360
+- **Supported file extensions:**
.iso .ISO .xex .XEX
+
+
+# Othello Multivision
+- **Roms path:**
~/retrodeck/roms/multivision
+- **Supported file extensions:**
.bin .BIN .gg .GG .rom .ROM .sg .SG .sms .SMS .7z .7Z .zip .ZIP
+
+
+# Nintendo
+
+
+## Nintendo 64
+- **Roms path:**
~/retrodeck/roms/n64
+- **Supported file extensions:**
.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP
+
+
+## Nintendo 64DD
+- **Roms path:**
~/retrodeck/roms/64dd
+- **Supported file extensions:**
.n64 .N64 .v64 .V64 .z64 .Z64 .bin .BIN .u1 .U1 .7z .7Z .zip .ZIP
+
+
+## Nintendo 3DS
+- **Roms path:**
~/retrodeck/roms/n3ds
+- **Supported file extensions:**
.3ds .3DS .3dsx .3DSX .app .APP .axf .AXF .cci .CCI .cxi .CXI .elf .ELF .7z .7Z .zip .ZIP
+
+
+## Nintendo DS
+- **Roms path:**
~/retrodeck/roms/nds
+- **Supported file extensions:**
.bin .BIN .nds .NDS .7z .7Z .zip .ZIP
+
+
+## Nintendo Entertainment System (NES)
+- **Roms path:**
~/retrodeck/roms/nes
+- **Supported file extensions:**
.nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP
+
+
+## Nintendo Family Computer (Famicom)
+- **Roms path:**
~/retrodeck/roms/famicom
+- **Supported file extensions:**
.nes .NES .unf .UNF .unif .UNIF .7z .7Z .zip .ZIP
+
+
+## Nintendo Famicom Disk System
+- **Roms path:**
~/retrodeck/roms/fds
+- **Supported file extensions:**
.nes .NES .fds .FDS .unf .UNF .UNIF .UNIF .7z .7Z .zip .ZIP
+
+
+## Nintendo Game and Watch
+- **Roms path:**
~/retrodeck/roms/gameandwatch
+- **Supported file extensions:**
.mgw .MGW .7z .7Z .zip .ZIP
+
+
+## Nintendo Game Boy
+- **Roms path:**
~/retrodeck/roms/gb
+- **Supported file extensions:**
.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP
+
+
+## Nintendo Game Boy Advance
+- **Roms path:**
~/retrodeck/roms/gba
+- **Supported file extensions:**
.agb .AGB .bin .BIN .cgb .CGB .dmg .DMG .gb .GB .gba .GBA .gbc .GBC .sgb .SGB .7z .7Z .zip .ZIP
+
+
+## Nintendo Game Boy Color
+- **Roms path:**
~/retrodeck/roms/gbc
+- **Supported file extensions:**
.bs .BS .cgb .CGB .dmg .DMG .gb .GB .gbc .GBC .sgb .SGB .sfc .SFC .smc .SMC .7z .7Z .zip .ZIP
+
+
+## Nintendo GameCube
+- **Roms path:**
~/retrodeck/roms/gc
+- **Supported file extensions:**
.gcm .GCM .iso .ISO .wbfs .WBFS .wia .WIA .ciso .CISO .gcz .GCZ .elf .ELF .dol .DOL .dff .DFF .rvz .RVZ .tgc .TGC .wad .WAD .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Nintendo SFC (Super Famicom)
+- **Roms path:**
~/retrodeck/roms/sfc
+- **Supported file extensions:**
.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
+
+
+## Nintendo Virtual Boy
+- **Roms path:**
~/retrodeck/roms/virtualboy
+- **Supported file extensions:**
.vb .VB .vboy .VBOY .bin .BIN .7z .7Z .zip .ZIP
+
+
+## Nintendo SNES (Super Nintendo)
+- **Roms path:**
~/retrodeck/roms/snes
+- **Supported file extensions:**
.bin .BIN .bml .BML .bs .BS .bsx .BSX .dx2 .DX2 .fig .FIG .gd3 .GD3 .gd7 .GD7 .mgd .MGD .sfc .SFC .smc .SMC .st .ST .swc .SWC .7z .7Z .zip .ZIP
+
+
+## Nintendo Switch
+- **Roms path:**
~/retrodeck/roms/switch
+- **Supported file extensions:**
.nca .NCA .nro .NRO .nso .NSO .nsp .NSP .xci .XCI .7z .7Z .zip .ZIP
+
+
+## Nintendo Satellaview
+- **Roms path:**
~/retrodeck/roms/satellaview
+- **Supported file extensions:**
.bml .BML .bs .BS .fig .FIG .sfc .SFC .smc .SMC .swc .SWC .st .ST .7z .7Z .zip .ZIP
+
+
+## Nintendo Pokémon Mini
+- **Roms path:**
~/retrodeck/roms/pokemini
+- **Supported file extensions:**
.min .MIN .7z .7Z .zip .ZIP
+
+
+## Nintendo Wii
+- **Roms path:**
~/retrodeck/roms/wii
+- **Supported file extensions:**
.gcm .GCM .iso .ISO .wbfs .WBFS .wia .WIA .ciso .CISO .gcz .GCZ .elf .ELF .dol .DOL .dff .DFF .rvz .RVZ .tgc .TGC .wad .WAD .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Nintendo Wii U
+- **Roms path:**
~/retrodeck/roms/wiiu
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+# SNK
+
+## SNK Neo Geo
+- **Roms path:**
~/retrodeck/roms/neogeo
+- **Supported file extensions:**
.chd .CHD .cue .CUE .iso .ISO .7z .7Z .zip .ZIP
+
+
+## SNK Neo Geo CD
+- **Roms path:**
~/retrodeck/roms/neogeocd
+- **Supported file extensions:**
.chd .CHD .cue .CUE .7z .7Z .zip .ZIP
+
+
+## SNK Neo Geo CD
+- **Roms path:**
~/retrodeck/roms/neogeocdjp
+- **Supported file extensions:**
.chd .CHD .cue .CUE .7z .7Z .zip .ZIP
+
+
+## SNK Neo Geo Pocket
+- **Roms path:**
~/retrodeck/roms/ngp
+- **Supported file extensions:**
.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP
+
+
+## SNK Neo Geo Pocket Color
+- **Roms path:**
~/retrodeck/roms/ngpc
+- **Supported file extensions:**
.ngp .NGP .ngc .NGC .ngpc .NGPC .npc .NPC .7z .7Z .zip .ZIP
+
+
+# Magnavox Odyssey2
+- **Roms path:**
~/retrodeck/roms/odyssey2
+- **Supported file extensions:**
.bin .BIN .7z .7Z .zip .ZIP
+
+
+# OpenBOR Game Engine
+- **Roms path:**
~/retrodeck/roms/openbor
+- **Supported file extensions:**
.AppImage
+
+# Tandy
+
+## Tandy Color Computer
+- **Roms path:**
~/retrodeck/roms/coco
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+## Tandy TRS-80
+- **Roms path:**
~/retrodeck/roms/trs-80
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+
+# Tangerine Computer Systems Oric
+- **Roms path:**
~/retrodeck/roms/oric
+- **Supported file extensions:**
.dsk .DSK .ort .ORT .tap .TAP .wav .WAV
+
+
+# Palm OS
+- **Roms path:**
~/retrodeck/roms/palm
+- **Supported file extensions:**
.prc .PRC .pqa .PQA .img .IMG .7z .7Z .zip .ZIP
+
+# NEC
+
+## NEC PC-8800 Series
+- **Roms path:**
~/retrodeck/roms/pc88
+- **Supported file extensions:**
.d88 .D88 .u88 .U88 .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## NEC PC-9800 Series
+- **Roms path:**
~/retrodeck/roms/pc98
+- **Supported file extensions:**
.2hd .2HD .88d .88D .98d .98D .d88 .D88 .d98 .D98 .cmd .CMD .dup .DUP .fdd .FDD .fdi .FDI .hdd .HDD .hdi .HDI .hdm .HDM .hdn .HDN .nhd .NHD .tfd .TFD .thd .THD . xdf .XDF .7z .7Z .zip .ZIP
+
+
+## NEC PC Engine
+- **Roms path:**
~/retrodeck/roms/pcengine
+- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP
+
+
+## NEC PC Engine CD
+- **Roms path:**
~/retrodeck/roms/pcenginecd
+- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP
+
+
+## NEC SuperGrafx
+- **Roms path:**
~/retrodeck/roms/supergrafx
+- **Supported file extensions:**
.pce .PCE .sgx .SGX .cue .CUE .ccd .CCD .chd .CHD .7z .7Z .zip .ZIP
+
+
+## NEC TurboGrafx-16
+- **Roms path:**
~/retrodeck/roms/tg16
+- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP
+
+
+## NEC TurboGrafx-CD
+- **Roms path:**
~/retrodeck/roms/tg-cd
+- **Supported file extensions:**
.ccd .CCD .chd .CHD .cue .CUE .img .IMG .iso .ISO .m3u .M3U .pce .PCE .sgx .SGX .toc .TOC .7z .7Z .zip .ZIP
+
+
+## NEC PC-FX
+- **Roms path:**
~/retrodeck/roms/pcfx
+- **Supported file extensions:**
.cue CUE .ccd .CCD .toc .TOC .chd .CHD .7z .7Z .zip .ZIP
+
+
+# Philips
+
+## Philips CD-i
+- **Roms path:**
~/retrodeck/roms/cdimono1
+- **Supported file extensions:**
.chd .CHD .cue .CUE .iso .ISO
+
+## Philips Videopac G7000
+- **Roms path:**
~/retrodeck/roms/videopac
+- **Supported file extensions:**
.bin .BIN .7z .7Z .zip .ZIP
+
+
+# PICO-8
+- **Roms path:**
~/retrodeck/roms/pico8
+- **Supported file extensions:**
.p8 .P8 .png .PNG
+
+
+# Ports
+- **Roms path:**
~/retrodeck/roms/ports
+- **Supported file extensions:**
.sh
+
+
+# Sony Playstation
+
+
+## Sony PlayStation (PSX)
+- **Roms path:**
~/retrodeck/roms/psx
+- **Supported file extensions:**
.bin .BIN .cbn .CBN .ccd .CCD .chd .CHD .cue .CUE .ecm .ECM .exe .EXE .img .IMG .iso .ISO .m3u .M3U .mdf .MDF .mds .MDS .pbp .PBP .psexe .PSEXE .psf .PSF .toc .TOC .z .Z .znx .ZNX .7z .7Z .zip .ZIP
+
+
+## Sony PlayStation 2
+- **Roms path:**
~/retrodeck/roms/ps2
+- **Supported file extensions:**
.bin .BIN .chd .CHD .ciso .CISO .cso .CSO .dump .DUMP .elf .ELF .gz .GZ .m3u .M3U .mdf .MDF .img .IMG .iso .ISO .isz .ISZ .ngr .NRG
+
+
+## Sony PlayStation 3
+- **Roms path:**
~/retrodeck/roms/ps3
+- **Supported file extensions:**
.ps3 .PS3 .ps3dir .PS3DIR
+
+
+## Sony PlayStation Portable (PSP)
+- **Roms path:**
~/retrodeck/roms/psp
+- **Supported file extensions:**
.elf .ELF .iso .ISO .cso .CSO .prx .PRX .pbp .PBP .7z .7Z .zip .ZIP
+
+
+## Sony PlayStation Vita
+- **Roms path:**
~/retrodeck/roms/psvita
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# SAM Coupé
+- **Roms path:**
~/retrodeck/roms/samcoupe
+- **Supported file extensions:**
.dsk .DSK .mgt .MGT .sbt .SBT .sad .SAD .7z .7Z .zip .ZIP
+
+
+# ScummVM Game Engine
+- **Roms path:**
~/retrodeck/roms/scummvm
+- **Supported file extensions:**
.scummvm .SCUMMVM .svm .SVM
+
+# Sega
+
+## Sega Game Gear
+- **Roms path:**
~/retrodeck/roms/gamegear
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega Dreamcast
+- **Roms path:**
~/retrodeck/roms/dreamcast
+- **Supported file extensions:**
.chd .CHD .cdi .CDI .iso .ISO .elf .ELF .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Sega Genesis (Mega Drive)
+- **Roms path:**
~/retrodeck/roms/genesis
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega Master System
+- **Roms path:**
~/retrodeck/roms/mastersystem
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .col .COL .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega Mega-CD
+- **Roms path:**
~/retrodeck/roms/megacd
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega Mega Drive
+- **Roms path:**
~/retrodeck/roms/megadrive
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega Model 2
+- **Roms path:**
~/retrodeck/roms/model2
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+## Sega Model 3
+- **Roms path:**
~/retrodeck/roms/model3
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+
+## Sega NAOMI
+- **Roms path:**
~/retrodeck/roms/naomi
+- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Sega NAOMI GD-ROM
+- **Roms path:**
~/retrodeck/roms/naomigd
+- **Supported file extensions:**
.cdi .CDI .iso .ISO .elf .ELF .bin .BIN .cue .CUE .gdi .GDI .lst .LST .dat .DAT .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Sega Saturn
+- **Roms path:**
~/retrodeck/roms/saturn
+- **Supported file extensions:**
.bin .BIN .ccd .CCD .chd .CHD .cue .CUE .iso .ISO .mds .MDS .toc .TOC .m3u .M3U .7z .7Z .zip .ZIP
+
+
+## Sega Mega Drive 32X
+- **Roms path:**
~/retrodeck/roms/sega32x
+- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP
+
+
+## Sega Super 32X
+- **Roms path:**
~/retrodeck/roms/sega32xjp
+- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP
+
+
+## Sega Genesis 32X
+- **Roms path:**
~/retrodeck/roms/sega32xna
+- **Supported file extensions:**
.bin .BIN .gen .GEN .smd .SMD .md .MD .32x .32X .cue .CUE .iso .ISO .sms .SMS .68k .68K .7z .7Z .zip .ZIP
+
+
+## Sega SG-1000
+- **Roms path:**
~/retrodeck/roms/sg-1000
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .ri .RI .rom .ROM .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+## Sega CD
+- **Roms path:**
~/retrodeck/roms/segacd
+- **Supported file extensions:**
.68k .68K .bin .BIN .bms .BMS .chd .CHD .cue .CUE .gen .GEN .gg .GG .iso .ISO .m3u .M3U .md .MD .mdx .MDX .sg .SG .sgd .SGD .smd .SMD .sms .SMS .7z .7Z .zip .ZIP
+
+
+# Sharp
+
+## Sharp X1
+- **Roms path:**
~/retrodeck/roms/x1
+- **Supported file extensions:**
.dx1 .DX1 .2d .2D .2hd .2HD .tfd .TFD .d88 .D88 .88d .88D .hdm .HDM .xdf .XDF .dup .DUP .tap .TAP .cmd .CMD .7z .7Z .zip .ZIP
+
+
+## Sharp X68000
+- **Roms path:**
~/retrodeck/roms/x68000
+- **Supported file extensions:**
.dim .DIM .img .IMG .d88 .D88 .88d .88D .hdm .HDM .dup .DUP .2hd .2HD .xdf .XDF .hdf .HDF .cmd .CMD .m3u .M3U .7z .7Z .zip .ZIP
+
+
+# Sinclair
+
+## Sinclair ZX81
+- **Roms path:**
~/retrodeck/roms/zx81
+- **Supported file extensions:**
.tzx .TZX .p .P .7z .7Z .zip .ZIP
+
+
+## Sinclair ZX Spectrum
+- **Roms path:**
~/retrodeck/roms/zxspectrum
+- **Supported file extensions:**
.tzx .TZX .tap .TAP .z80 .Z80 .rzx .RZX .scl .SCL .trd .TRD .sh .SH .sna .SNA .szx .SZX .udi .UDI .mgt .MGT .img .IMG .dsk .DSK .gz .GZ .7z .7Z .zip .ZIP
+
+
+# Solarus Game Engine
+- **Roms path:**
~/retrodeck/roms/solarus
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Spectravideo
+- **Roms path:**
~/retrodeck/roms/spectravideo
+- **Supported file extensions:**
.rom .ROM .ri .RI .mx1 .MX1 .mx2 .MX2 .col .COL .dsk .DSK .cas .CAS .sg .SG .sc .SC .m3u .M3U .7z .7Z .zip .ZIP
+
+
+# Stratagus Game Engine
+- **Roms path:**
~/retrodeck/roms/stratagus
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Symbian
+- **Roms path:**
~/retrodeck/roms/symbian
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Tano Dragon
+- **Roms path:**
~/retrodeck/roms/tanodragon
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+
+# Texas Instruments TI-99
+- **Roms path:**
~/retrodeck/roms/ti99
+- **Supported file extensions:**
.rpk .RPK .7z .7Z .zip .ZIP
+
+
+
+# TIC-80 Game Engine
+- **Roms path:**
~/retrodeck/roms/tic80
+- **Supported file extensions:**
.7z .7Z .zip .ZIP
+
+# Thomson
+
+## Thomson TO8
+- **Roms path:**
~/retrodeck/roms/to8
+- **Supported file extensions:**
.fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP
+
+
+## Thomson MO/TO Series
+- **Roms path:**
~/retrodeck/roms/moto
+- **Supported file extensions:**
.fd .FD .sap .SAP .k7 .K7 .m7 .M7 .m5 .M5 .rom .ROM .7z .7Z .zip .ZIP
+
+
+# Uzebox
+- **Roms path:**
~/retrodeck/roms/uzebox
+- **Supported file extensions:**
.uze .UZE .7z .7Z .zip .ZIP
+
+
+# Vectrex
+- **Roms path:**
~/retrodeck/roms/vectrex
+- **Supported file extensions:**
.bin .BIN .vec .VEC .gam .GAM .vc .VC .7z .7Z .zip .ZIP
diff --git a/wiki-rtd/Emulators-What's-included.md b/wiki-rtd/Emulators-What's-included.md
new file mode 100644
index 00000000..c8bb4b49
--- /dev/null
+++ b/wiki-rtd/Emulators-What's-included.md
@@ -0,0 +1,23 @@
+# General information
+The goal is to add more emulators and functions over course of the development cycle.
+
+What follows is a list of all the emulators currently included in RetroDECK:
+
+# RetroArch
+RetroDECK ships will all cores under the stable branch of RetroArch.
+
+# Standalone Emulators
+The following standalone emulators are included
+
+## Yuzu (Switch)
+## Citra (3DS)
+## PCSX2 (PS2)
+## Cemu (WiiU)
+As of 0.7b
+## Dolphin (GameCube/Wii)
+## Primehack (Metroid Prime - Dolphin Fork)
+As of 0.6b
+## Xemu (XBOX)
+## MelondDS (DS)
+## RPCS3 (PS3)
+## PPSSPP (PSP)
\ No newline at end of file
diff --git a/wiki-rtd/FAQs-Frequently-asked-questions.md b/wiki-rtd/FAQs-Frequently-asked-questions.md
new file mode 100644
index 00000000..16028587
--- /dev/null
+++ b/wiki-rtd/FAQs-Frequently-asked-questions.md
@@ -0,0 +1,503 @@
+# General questions:
+
+## What is the scope of this project?
+Click here to see the answer
+
+Read the "Whats the long term vision and goals" on the Home page of this wiki.
+
+
+
+## Do you include any games, firmware or BIOS?
+Click here to see the answer
+No, this can never be done for legal reasons.
+
+
+
+### Can you at least point me towards where I can get them?
+Click here to see the answer
+Again...no, this can never be done for legal reasons.
+
+
+
+## Why are games call ROMs?
+Click here to see the answer
+
+ROM stands for "Read Only Memory" and was a common method to store games.
+The games where later dumped from their ROM chips into digitalized files that can be played with an emulator.
+Read more on [wikipedia](https://en.wikipedia.org/wiki/Read-only_memory)
+
+
+
+## What is sudo?
+Click here to see the answer
+The command stands for "superuser do" and in the windows world it is called "run as administrator".
+Su in "sudo" refers to the "superuser" or in the windows called the "administrator".
+
+
+
+## Retrodeck is a flatpak, what is it?
+
+Click here to see the answer
+
+A flatpak is generated from a manifest, our manifest is this: https://github.com/XargonWan/RetroDECK/blob/main/net.retrodeck.retrodeck.yml
+There is a software named flatpak-builder that is reading that manifest and downloads and builds everything that is needed.
+
+This is creating the RetroDECK.flatpak file that can be distributed as a file or be included in the official Flathub repository accessible from Discovery.
+
+[Flaptak](https://docs.flatpak.org/en/latest/introduction.html) is like a sandbox, with its own read only filesystem that is different from your computer's filesystem, that's why flatpak is safer than installing something directly in your filesystem, moreover it persists after any SteamOS update.
+
+
+
+## What is RetroDECK cooker?
+Click here to see the answer
+
+ Cooker is a bleeding edge snapshot of the current commits, the action of uploading code to GitHub is called commit.
+As you can understand, the code may not be always reviewed and so the cooker it's unstable by its nature, it's just suggested to testers or developer to try bleeding edge function or to contribute.
+
+More info on the pinned post in #💙-i-want-to-help on our [Discord Server](discord.gg/Dz3szYsP8g).
+I don't support the cooker user side.
+
+
+
+### Why the name cooker? 🍲
+Click here to see the answer
+
+That's what cooking in the pot at this moment and not yet ready to be served (released).
This name was also used by Linux Mandrake and Mandriva for the bleeding edge channel.
+
+
+
+# Updates, feature requests and more devices/OS questions:
+
+## Will you support the general Linux desktop and not only the Steam Deck?
+Click here to see the answer
+
+Technically it is working, but the user experience might not be that great it could contain desktop specific bugs and other issues.
+You will also need to manually configure the input to match your desktop and might need to tweak more settings. If you want to try it make sure that your distribution has native flatpak support else, you might need to install it.
+We will start to tackle desktop bugs and have a bigger desktop focus after the beta period is over.
+
+
+
+## Will you support other SteamOS or Linux handheld gaming devices with flatpak support?
+Click here to see the answer
+
+
+We do plan to support other SteamOS based devices in the future. But during the BETA we are focusing on the Steam Deck.
+You can get it to run on other Linux based devices it is not just as seamless as we want it to be and does not live up to our higher standards.
+You will need to manually configure the input to match your device and might need to tweak more settings if you try it on a none Steam Deck device. There might also be some hardware specific bugs.
+
+
+
+## Will you support Windows or Windows based devices like the ROG Ally?
+Click here to see the answer
+No, RetroDECK doesn't support Windows, but the project is fully open source so you can port it if you wish.
+As an alternative you could try https://www.retrobat.ovh/ that offers similar functionality.
+
+
+## Will you support MacOS?
+Click here to see the answer
+Not supported and not planned.
+
+
+## Will you support Android/IOS?
+Click here to see the answer
+Not supported and not planned.
+
+
+
+## Will you implement X/Y/Z emulator?
+Click here to see the answer
+
+Our goal is to implement and configure a selection of the best emulators for each system. If your favorite system is not integrated you can request its integration by opening an issue on this github page.
+
+
+
+## Will you implement none emulator software inside of RetroDECK like Batocera?
+Click here to see the answer
+
+Nothing in the short term but maybe in the future. It also need to fit inside the scope of project for example: GZDoom would be ok. But another project like a multimedia center solution like Kodi would not fit.
+
+
+
+## When does the next version of RetroDECK come out?
+Click here to see the answer
+> When it's ready.
+
+
+
+### When does the version after the upcoming version come out?
+Click here to see the answer
+
+After the upcoming version.
+
+### When does the version 1.0 of RetroDECK come out?
+Click here to see the answer
+
+Some time in the future.
+
+
+
+# Documentation questions
+
+## I see ~ refereed in documentation and examples, what does it mean?
+Click here to see the answer
+
+The tilde character ~ is the a short way of saying the logged in users home directory in the UNIX world.
+
+So for example the Steam Deck
+
+`~ = /home/deck`
+
+Read more on [Wikipedia](https://en.wikipedia.org/wiki/Home_directory)
+
+## I see SA refereed in documentation about emulators what does it mean?
+Click here to see the answer
+
+SA means Standalone and the emulator is not inside RetroArch/LibRetro but a separate program launched within RetroDECK.
+
+## I see CLI refereed in documentation what does it mean?
+Click here to see the answer
+CLI stands for command-line interface and is often refereed commands you can run in the the Linux Terminal
+
+
+
+# Other Emulation Solutions questions:
+
+## Are you related to EmuDeck?
+Click here to see the answer
+
+No, the two projects are not related.
+
+
+
+### So what's the difference between RetroDECK and EmuDeck?
+Click here to see the answer
+
+Apart of that from the user point of view EmuDeck and RetroDECK may sound similar but technically they're completely different.
+
+EmuDeck is a shell script that you run in the Steam Decks desktop mode that downloads and configures all the separate emulators & plugins for you from various sources using a built in electron based gui.
+
+RetroDECK is an all-in-one application contained in a sandboxed environment called "flatpak", that is downloaded from Discover (Flathub). This is Valves and other Linux desktops recommended way of distributing applications on the Steam Deck and Linux desktop in a safe way. It grantees for example even if Valve makes major changes to the file system in a SteamOS update, RetroDECK and it’s configurations will not be touched and will be safe.
+
+RetroDECK only writes in these two folders: `~/retrodeck` for roms/configurations/bios etc.. And an hidden flatpak folder located in `~/.var/net.retrodeck.retrodeck`.
+
+As everything is contained within those two folders it will not have conflict if you decide to install an emulator from another source like Yuzu or RetroArch with your RetroDECK setup. Even if you uninstall RetroDECK all your roms/bios/saves/etc.. are safe until you remove the `~/retrodeck` folder. So if you for some reason don't like the application after playing for a while you can easily move out your important files after an uninstall (or you can just reinstall RetroDECK again and start where you left off).
+
+This approach of everything is in a all-in-one package will also allow RetroDECK to do tighter integrations with each bundled emulator in the future and expose all those settings when you are inside RetroDECK, so you do not need to go into Steam Decks desktop mode to do changes and tweaks. All things should be, in the long term, inside the application itself and you can already see a part of that inside the RetroDECK Configurator in the Tools menu.
+
+
+
+### Can I install RetroDECK if I have EmuDeck already?
+Click here to see the answer
+
+Yes, as RetroDECK is completely standalone.
+
+
+
+## Are you related anyway to Batocera?
+Click here to see the answer
+No, but RetroDECK had some dialog before the project started with some of the Batocera crew if there where any plans to start a Batocera non-OS application (there where no plans at that moment and their focus is to make the best retro gaming operative system). RetroDECK and Batocera also have good dialog together with representatives of each projects inside the internal development channels.
+
+
+
+
+## Batocera or EmuDeck or RetroDECK I still don't get it?
+Click here to see the answer
+
+- Batocera is a retro emulation operative system that you need to boot into separately (like from an SDCard) or replace your current OS.
For the Steam Deck you lose access to the SteamOS features and your emulation gaming is separate from your SteamOS gamemode gaming. That said; Batocera has many years of development time, is a great mature OS with a lot of features.
+
+- EmuDeck is a shell script that you download and run. The script downloads & configures all the separate emulators & plugins for you from various sources for various operative systems.
+
+- RetroDECK is an all-in-one application that already provides everything you need without to many extra steps for the user.It is on flathub and thus allows the users to update the application via standard safe operative system update methods.
+You can see RetroDECK as the in between of EmuDeck and Batocera. We hope that one day we can offer a complete Batocera-like experience right inside your operative system.
+
+
+
+## What is your relationship with EmulationStation Desktop Edition (ES-DE)?
+Click here to see the answer
+
+ES-DE and RetroDECK are separate projects, but we collaborate to give the best possible user experience.
+We have a unique partnership where inside the ES-DE code is a section just for RetroDECK specific features.
+[Read more on ES-DE FAQs](https://gitlab.com/es-de/emulationstation-de/-/blob/master/FAQ.md#what-is-the-relationship-between-es-de-and-retrodeck)
+
+
+
+# RetroDECK usage questions:
+
+## Can I launch RetroDECK from inside of the Steam Decks gamemode?
+Click here to see the answer
+Yes, RetroDECK currently only supports Steam Deck's gamemode as it relies on Steam Controller configs.
+To add it into Steam please check the second step of [[Steam Deck: Installation and updates]].
+
+
+
+
+## Do I have to partition or format my disk/sdcard to install RetroDECK?
+
+Click here to see the answer
+
+No, partitioning or formatting is not needed at all. RetroDECK (differently from AmberELEC, Batocera and others) comes as a flatpak. Just install it as any other application and launch it from your desktop and/or Steam library.
+
+
+
+## Can I move the ROMs folder to another place?
+Click here to see the answer
+
+Yes, you can do so inside the configurator and the `Move RetroDECK` option.
+
+
+
+## Is there a way to reset RetroDECK?
+Click here to see the answer
+
+Yes, you can reset various parts of the software using the RetroDECK configurator under the option reset
+
+Or you can use CLI arguments in the terminal.
+
+Resets the whole RetroDECK at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset-all
+```
+Resets RetroArch configs at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset-ra
+```
+Resets all the standalone emulators configs at factory defaults:
+```bash
+flatpak run net.retrodeck.retrodeck --reset-sa
+```
+
+
+
+## How do I uninstall RetroDECK?
+Click here to see the answer
+
+**On the Steam Deck:**
+
+Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`
+
+* Go into Discover
+* Press the `Installed` tab and find RetroDECK
+* Press the `Uninstall` button
+* Manually backup then remove the ~\RetroDECK folder. Warning! Make a backup your data roms/bios/saves etc if you want to save them else they will be gone.
+
+
+
+
+## Does uninstalling RetroDECK remove my roms, bios and saves?
+Click here to see the answer
+No, as long as you don't manually don't delete the ~\RetroDECK folder and it's content your data is safe. You could uninstall RetroDECK and install it again and keep going.
+
+
+
+
+## Where can I find the logfiles?
+Click here to see the answer
+> In `~/retrodeck/logs/retrodeck.log`
+
+
+
+## Can I add a single game to my Steam Library or with Steam Rom Manager?
+Click here to see the answer
+
+Not yet but might be in the future, it is technical possible but quite complicated and needs to be done via launch script. We hope we can simplify this in the future via an API call or inside the Configurator.
+
+Example of a launch script to launch to launch a Wii game called Baloon World:
+
+`flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -e "/run/media/mmcblk0p1/retrodeck/roms/wii/Baloon World.rvz" -b `
+
+
+
+## If I installed RetroDECK from outside of discover, do I need to uninstall the application to update?
+Click here to see the answer
+If you previously installed from outside of Discover, you can find the instructions here to
+
+[install from discover](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Installation-and-updates)
+
+or here
+
+[to install .flatpak file](https://github.com/XargonWan/RetroDECK/wiki/Developer-notes#managing-retrodeck-flatpak-file).
+
+## After installing RetroDECK manually, Discover is not opening or giving me some errors?
+Click here to see the answer
+
+This bug is appearing only when installing RetroDECK manually and not from Discover. The discover release is suggested for all the users.
+However you can run this to fix it: `flatpak remote-delete retrodeck-origin`
+
+
+
+
+# General emulation & games questions:
+
+## What emulators and software is included in RetroDECK?
+Click here to see the answer
+
+You can check this wiki what emulators are currently bundled. We plan to have support for most of the emulators ES-DE support in the long term.
+
+
+
+## How can I set another default emulator?
+
+Click here to see the answer
+
+The ES-DE interface allows you to change emulators for systems that has many different emulators. In the main menu go to `Other Settings` - `Alternative Emulators` to set other defaults.
+
+
+
+## Game X/Y/Z is not working or showing black screen
+Click here to see the answer
+
+Some emulators needs BIOS and/or firmware files, first you can check if you got the [needed ones](https://github.com/XargonWan/RetroDECK/wiki/BIOS-&-Firmware).
+
+Then you can check if your got a bad dump by comparing your hash with the ones of the official lists on the internet, such as [no-intro](https://datomatic.no-intro.org/index.php?page=search&s=64) or even [RetroAchievements](https://retroachievements.org) if your game is supported.
+Moreover please mind that some emulator require very specific roms, please [read here](https://github.com/XargonWan/RetroDECK/wiki/How-to-Manage-your-games#special-roms-formats).
+If it still not working you are welcome to ask for support on our [Discord Server](discord.gg/Dz3szYsP8g).
+
+
+
+## PS2 games are not working or buggy in the RetroArch Core.
+Click here to see the answer
+
+It's a known issue with if you are using the libretro core but you can use the the standalone pcsx2 emulator to solve this issue.
+Be sure to check that the bios files are in the correct folder. Read more on the [Emulators: BIOS and Firmware](https://github.com/XargonWan/RetroDECK/wiki/Emulators%3A-BIOS-and-Firmware)# page on this wiki.
+
+
+
+## I configured RetroArch but the configuration was not saved.
+Click here to see the answer
+
+Configuring RetroArch can be dangerous for an inexperienced user, so RetroDECK is set to don't save the RetroArch configuration upon exiting.
+The configuration must be saved willingly by going to: `Main Menu` -> `Configuration File` -> `Save Current Configuration`.
+If you find some better configurations however, you may contribute by sharing it on the #💙-i-want-to-help channel on our [Discord Server](discord.gg/Dz3szYsP8g) that may be included in the next version.
+
+
+
+## Will you support Lightguns (Sinden, Gun4IR, Samco etc...)?
+Click here to see the answer
+
+The long term answer is yes, but there are several issues that need to be addressed from various dependencies that are beyond the scope of what RetroDECK can do by it self. We are talking to several projects and hope to have those issues addressed in the future. Right now the best way to use lightgun hardware is to use Batocera as they have developed native support in their OS.
+
+
+
+# Steam Deck emulation questions:
+
+## XBOX games are slow on the Steam Deck
+Click here to see the answer
+
+Unfortunately on thanks to missing optimizations focusing on the Steam Deck and the hardware is limited in scope makes performance not great. Like most emulators they will get improvements over time and we will follow the XBOX emulators progress with great interest.
+
+
+
+## The games are stuck at 30FPS on the Steam Deck!
+Click here to see the answer
+
+Press the [...] button on the Steam Deck, go into the Power menu and see if the Framerate Limit is set to 30FPS and set it to 60FPS or off.
+
+
+
+## Fast forwarding is slow on the Steam Deck!
+Click here to see the answer
+
+Same as above: Check the Power menu Framerate Limit.
+
+
+
+
+# Theme questions:
+
+## How can I add more themes?
+Click here to see the answer
+In the future we wish to include a themes browser and downloader, but for the moment you can put your own themes here:
+~/retrodeck/themes
+
+
+
+## How do you switch between themes inside of RetroDECK?
+Click here to see the answer
+
+**On the Steam Deck:**
+you can switch between them by pressing the `☰` button to open the menu and then navigate to `UI Settings > Theme Set` to select the theme you want to use.
+
+
+
+## "Why does the theme I am using not work?" or "Why does the layout look broken?" (black screen with blue text)?
+Click here to see the answer
+
+* Please make sure you are specifically using a theme that is compatible with [ES-DE](https://www.es-de.org).
+
+* If you are trying to use a theme that was built for Batocera it will likely not be compatible.
+
+* ES-DE uses a unique theme engine so themes are not directly portable from Batocera.
+
+* Please see ES-DE's [User Guide](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#themes) for more details.
+
+
+
+
+## Why does the theme layout look squished?
+Click here to see the answer
+
+* The Steam Deck has a screen aspect ratio of `16:10` and most themes that you will find are built for an aspect ratio of `16:9`. Depending on the theme's design this may cause the layout to appear squished when using it on the Steam Deck's display.
+
+* All of the included themes are built for 16:10 aspect ratio so you should not see this issue with any of them; however if you are downloading a theme from another source there is a chance this can occur for you.
+
+* There are 2 ways to fix this if it does occur: (1) see if a specific version was built for `16:10` aspect ratio and use that instead or (2) edit the theme to make it compatible with that aspect ratio.
+
+
+
+# Scraping questions
+
+## Can I manually add custom game images/videos/media for games that I can not scrape?
+Click here to see the answer
+Yes, check the file structure over at Emulationstation DE's user guide on gitlab.
+
+## [Manually copying game media files](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#manually-copying-game-media-files)
+
+
+
+## Where is my scraped data?
+Click here to see the answer
+In `~/retrodeck/downloaded_media`
+
+
+
+
+## I got some weird error message about quota after scraping!
+Click here to see the answer
+
+The error message mentions something about quota. You have a quota limit on how much you can scrape each day from [Screenscraper.fr ](https://www.screenscraper.fr/) where each item you scrape counts as 1 quota of the daily total.
+You can pay them to get a bit more daily quota and show your support or just wait 24 hours.
+
+
+## I got some weird error message about about server or service!
+Click here to see the answer
+
+The website is down, check [Screenscraper.fr](https://www.screenscraper.fr/) when they get back up.
+
+
+
+## The scraping is too slow!
+Click here to see the answer
+
+[Screenscraper.fr](https://www.screenscraper.fr/) offers different types of donations that can increase your speed with extra threads.
+
+
+
+## My systems storage ran out after scraping!
+Click here to see the answer
+
+Images and videos takes a lot of space, you can clean some out under `~/retrodeck/downloaded_media`
+
+
+
+### But I still want them!
+Click here to see the answer
+
+Delete something else or buy more storage.
+
+
+## Can I move the downloaded_media folder?
+Click here to see the answer
+
+You can move it with the the move RetroDECK option inside the configurator.
+
+
diff --git a/wiki-rtd/How-can-I-help-with-testing.md b/wiki-rtd/How-can-I-help-with-testing.md
new file mode 100644
index 00000000..5127d9e5
--- /dev/null
+++ b/wiki-rtd/How-can-I-help-with-testing.md
@@ -0,0 +1,73 @@
+# About testing
+
+There are two ways help us to test features in RetroDECK.
+The first one is our bleeding edge `RetroDECK Cooker` channel.
+The second one is the `Experimental Features` inside the stable version inside the `Developer Options Menu`.
+
+## 🛑 Warning! Backup before testing! 🛑
+These builds and features can make you loose all data including `ROMS`, `BIOS` and `Scraped Data` etc..
+We **recommend** that you don't run any experimental features or cooker builds on your main gaming machine.
+
+## 🛑 Warning! Expect bugs and issues! 🛑
+These builds and experimental features can contain several bugs and be unstable.
+
+## How do I take a backup?
+
+Backup your `/retrodeck/` and it's content and `/.var/app/net.retrodeck.retrodeck/`.
+You could copy the entire folders to a secure location or for a quick test you could just rename both of the folders into something else.
+Then RetroDECK will think it's a fresh install.
+
+Example of renaming:
+`OLDnet.retrodeck.retrodeck/`
+`OLDretrodeck/`
+
+## Can I help you with testing?
+Yes, do the backups above and tell in Discord channel `i-want-to-help` that you are interested in testing out `RetroDECK Cooker` builds or want to give feedback on `Experimental Features`.
+You will get some instructions from one of the mods and be promoted to a `BetaTester` role.
+
+# What is RetroDECK Cooker?
+[RetroDECK Cooker](https://github.com/XargonWan/RetroDECK-cooker) are the bleeding edge development builds of [RetroDECK](https://github.com/XargonWan/RetroDECK). These builds are only for development and testing purposes.
+
+## How do I install cooker builds
+You can download the latest `.flatpak` releases from the above link and install them via CLI or from the desktop.
+
+**NOTE:**
+* You need to have set up a sudo password if you want to test on a Steam Deck.
+* If you have `RetroDECK` the stable release on your system `RetroDECK-Cooker` will be installed separately since it is a different branch. We do not recommend running cooker on a system where you have a running `RetroDECK` stable.
+
+### Desktop:
+
+You should just be able to double click on the .`flatpak` file and what ever application manager/installer (like Discover) you have installed should be able to install it. If that does not work use the CLI method.
+
+### CLI:
+
+Run the following command from where you have downloaded the `.flatpak` file.
+`flatpak install RetroDECK.flatpak`
+
+
+## How do I uninstall RetroDECK Cooker?
+
+### Desktop:
+Just go into your application manager/installer (like Discover), find RetroDECK and press uninstall.
+
+
+### CLI:
+
+Run the following command:
+`flatpak remove RetroDECK`
+
+
+### Why does the cooker release have strange names?
+The names are randomly generated to make it easy to see what build you are running.
+
+# What are RetroDECK experimental features?
+Experimental features are a showcase of what proof-of-concepts we are trying out or working on that you can try out even on stable releases and we would like feedback on them. All these features are just conceptual and we hope them release ready in an later major update or scrap them if the don't work out.
+Standard backup procedures apply as written above.
+
+## How do I enable them?
+
+From CLI run:
+
+`flatpak run net.retrodeck.retrodeck uuddlrlrstart`
+
+The `Developer Options Menu` should show up inside the Configurator.
diff --git a/wiki-rtd/How-to-Getting-started.md b/wiki-rtd/How-to-Getting-started.md
new file mode 100644
index 00000000..12eea100
--- /dev/null
+++ b/wiki-rtd/How-to-Getting-started.md
@@ -0,0 +1,104 @@
+# Getting started
+
+This is a guide on how to get started with RetroDECK
+
+# Step 0: Prerequisites
+
+## What do I need?
+You need to meet the following prerequisites before you start following this guide:
+
+* You need to have a device to install RetroDECK on (we currently only support the Steam Deck).
+* Read up on the FAQs pages:
+[Do you include any games, firmware or BIOS?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#do-you-include-any-games-firmware-or-bios)
+[Where can I get them?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#can-you-at-least-point-me-towards-where-i-can-get-them)
+[What does ~ mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean)
+* Have related BIOS & Firmware ready
+* Have backup rom files of the games you want to play ready
+
+# Step 1: Installation & Configuration
+Only install RetroDECK from the official channels via flathub!
+
+## Steam Deck - Installation
+Read and follow the:
+
+* [Installation guide for the Steam Deck](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck-Installation-and-updates)
+
+## Linux Desktop - Installation
+
+(more information later)
+
+
+## Other SteamOS devices - Installation
+
+(more information later)
+
+# Step 2: BIOS & Firmware
+
+**NOTE:** On the Steam Deck this step needs to be done in Desktop Mode
+
+## Information
+Read up on [BIOS & Firmware](https://github.com/XargonWan/RetroDECK/wiki/BIOS-and-Firmware)
+
+* The BIOS & Firmware files go into the `~/retrodeck/bios/` directory
+
+
+**Example:**
+You have a BIOS for the PSX called `exampleBIOSPSX.bin`, you just put that file into the `~/retrodeck/bios/` folder.
+
+# Step 3: ROMs
+
+**NOTE:** On the Steam Deck this step needs to be done in Desktop Mode
+
+## On ROMs
+
+Rom files needs to be put in their corresponding system directory inside the `roms` folder.
+Note that the `roms` folder location can be different depending on where you choose to put it during the installation process. The following options are available during the installation:
+
+### **Choice: Internal**
+If during the installation of RetroDECK you choose the Internal option for the roms folder:
+The roms folder is:`~/retrodeck/roms/`
+
+### **Choice: SDCard**
+If during the installation of RetroDECK you choose the SDCard option for the roms folder:
+The roms folder is: `/retrodeck/roms/`
+
+(Please note that the `` is an example and not called so inside your Linux/SteamOS system but rather your unique per SDCard ID number).
+
+
+## Let's get started on ROMs:
+
+Read up on [Emulators: Folders & File extensions](https://github.com/XargonWan/RetroDECK/wiki/Emulators-Folders-&-File-extensions) to see what folder each system has.
+* Put the corresponding roms inside the corresponding system folder
+
+**Example:**
+You have an example NES game called `ExampleNESGame.nes`
+You have to put that game into the `/retrodeck/roms/nes` folder.
+
+# Step 4: Playing the ROMs
+
+## Steam Deck - Gamemode
+Return to gamemode on the Steam Deck and start up RetroDECK. Now the systems you put rom files for should be shown and be able to be played.
+
+**Example:**
+The NES column should now be shown with our `ExampleNESGame.nes` from `Step 3`
+
+# Step 5: Making the games "pretty" with videos, images and art.
+
+Do the following:
+1. Make an account on https://www.screenscraper.fr/
+2. Read up on scraping on the [ES-DE Guide](https://github.com/XargonWan/RetroDECK/wiki/EmulationStation-DE-User-Guide#scraping-and-editing-roms-metadata-images-etc)
+3. Login to your screenscraper account inside RetroDECK and start scraping.
+4. Look at your nice pretty games.
+
+Also read:
+* [I got some weird error message about quota after scraping in a foreign language from screenscraper.fr](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-got-some-weird-error-message-about-quota-after-scraping-in-a-foreign-language-from-screenscraperfr)
+* [My system storage ran out after scraping!](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#my-system-storage-ran-out-after-scraping)
+
+# Step 6: Themes
+RetroDECK comes with several themes built in for the ES-DE interface.
+
+## How to switch between themes?
+* On the Steam Deck: you can switch between them by pressing the `☰` button to open the menu and then navigate to `UI Settings > Theme Set` to select the theme you want to use.
+
+## How to add more themes?
+[More information on themes and how to add more](https://github.com/XargonWan/RetroDECK/wiki/EmulationStation-DE-Themes)
diff --git a/wiki-rtd/How-to-Manage-your-games.md b/wiki-rtd/How-to-Manage-your-games.md
new file mode 100644
index 00000000..48158266
--- /dev/null
+++ b/wiki-rtd/How-to-Manage-your-games.md
@@ -0,0 +1,84 @@
+# Supported extensions
+In order to check which file extensions are supported check the page [Emulators: Folders & File extensions](https://github.com/XargonWan/RetroDECK/wiki/Emulators-Folders-&-File-extensions)
+
+## Special ROMs formats
+Some emulators are working only with specific rips, here is what I gather.
+
+**XEMU**: you must use iso files called xiso (the extensions are usually `.xiso.iso` or `.iso` only)
+
+**NDS**: needs a decrypted dump
+
+**3DS**: needs a decrypted dump
+
+**PS3**: are folders that need to be with the `.ps3` file extension in the end.
+Example: `Gran Turismo 5.ps3`
+
+# RetroAchievements
+Until we don't implement a proper menu, the RetroAchievements must be enabled from RetroArch:
+`Tools` -> `Start RetroArch` -> `Settings` -> `Achievements`
+Here you have to insert your username and password that you used to register to [RetroAchievements](https://retroachievements.org), then [save your RetroArch config](https://github.com/XargonWan/RetroDECK/wiki/FAQs---Frequently-asked-questions#i-configured-retroarch-but-the-configuration-was-not-saved).
+**NOTE:** not all the games are supported; your game [hash](https://docs.retroachievements.org/FAQ/#what-is-an-ra-hash) must be checked on [RetroAchievements website](https://retroachievements.org).
+
+# Multidisk/file games: Directory interpreted as files
+You can put all the game files inside a sub-folder in order to keep you game list clean, these folder will be seen as the game itself from RetroDECK and not as an actual folder, more info [here](https://gitlab.com/es-de/emulationstation-de/-/blob/master/USERGUIDE.md#directories-interpreted-as-files) on the official ES-DE Documentation. The folder needs to have the corresponding .m3u file and the folder needs to be renamed to the exact filename of the .m3u
+
+Example on how a structure could be:
+```
+─── Dragon Fantasy VII.m3u
+ ├── Dragon Fantasy VII - Disk1.chd
+ ├── Dragon Fantasy VII - Disk2.chd
+ ├── Dragon Fantasy VII - Disk3.chd
+ └── Dragon Fantasy VII.m3u
+```
+In this case the folder will be viewed as a single game and it will launch `Dragon Fantasy VII.m3u` so you can easly swap the disks from RetroArch menu.
+
+## How do I create a Multidisk Directory?
+
+Let's use the Dragon Fantasy VII example as written above.
+
+### Step 1: Make a .m3u sub-folder
+Make a new sub-folder inside the PSX roms directory where you move and store the Dragon Fantasy VII files with a .m3u file extension in the end.
+The name of the folder will be Dragon Fantasy VII.m3u and the full file path will be:
+
+`~/retrodeck/roms/psx/Dragon Fantasy VII.m3u`
+
+
+### Step 2: Make a .m3u file inside the folder.m3u
+Following the example above, make an empty file inside the Dragon Fantasy VII.m3u folder called the exact same thing as the folder name in this case: `Dragon Fantasy VII.m3u`. Now the full file path to the newly created .m3u file should be like this:
+
+`~/retrodeck/roms/psx/Dragon Fantasy VII.m3u/Dragon Fantasy VII.m3u`
+
+### Step 3: Populate the .m3u file
+
+Open the `Dragon Fantasy VII.m3u` file with an text editor and write the filenames of all files contained in the folder, one per line.
+When you are done, the structure of the file should look something like this:
+
+`Dragon Fantasy VII - Disk1.chd`
+`Dragon Fantasy VII - Disk2.chd`
+`Dragon Fantasy VII - Disk3.chd`
+
+Note this also works with other files types like `.bin` `.iso` `.cue` `.bin` etc.. You just need to make sure that all the files in the folders are written inside the .m3u file.
+
+### Step 4: Launch RetroDECK
+The ES-DE interface that RetroDECK uses should now pick up on the game as one file and you can change disks inside RetroArch.
+
+# Emulators compatibility lists
+Here is a collection of games that were tested on Steam Deck, not on RetroDECK specifically.
+If you find some inconsistences please report them on our `#support` channel on Discord.
+* [Xemu](https://xemu.app/#compatibility)
+* [Citra](https://citra-emu.org/game/)
+* [Dolphin](https://dolphin-emu.org/compat/?nocr=true)
+* [Yuzu](https://yuzu-emu.org/game/)
+* [PCSX2](https://pcsx2.net/compat/)
+* [RPCS3](https://docs.google.com/spreadsheets/d/1EzTcNoKiBaMS4orZrGEOKwMpFOZEFKVSOZjLRJqzEkA/)
+
+# Scraping
+
+[Check out FAQ on Scraping on the wiki](https://github.com/XargonWan/RetroDECK/wiki/FAQs%3A-Frequently-asked-questions#scraping-questions)
+
+## Quick tips
+* Register an account on https://www.screenscraper.fr/ (support them on Patreon for faster downloads, more scrapes per day and priority scraping).
+* Login to your Screenscraper.fr account inside of the ES-DE interface in RetroDECK
+* Choose what content you want to scrape (remember that each content you choose could take up several mb of data per game).
+* Do an initial scrape of all the games you want to scrape.
+* If some games are missed do a more narrow scraping by enabling `Scraper -> Other Settings -> Interactive Mode -> On`& Scraper -> `Other Settings -> Auto-Accept Single Game Matches -> On` and choose to scrape by games missing metadata. This will allow you to select each game from a list and also tweak the searches of the missing games. In some cases you need to remove certain aspects of the name like if a rom comes both with a Japanese name and English name, you could try to remove one of the names to find a better result.
diff --git a/wiki-rtd/Known-Issues.md b/wiki-rtd/Known-Issues.md
new file mode 100644
index 00000000..d0076c7a
--- /dev/null
+++ b/wiki-rtd/Known-Issues.md
@@ -0,0 +1,17 @@
+# Not yet officially implemented in RetroDECK
+Some of these features can be configured by the users manually but work is being done to implement across the board over time.
+
+**Missing features:**
+
+* Cloud saves
+* Netplay
+* External controller support *
+* External display resolution support
+* Not all Emulators supported by ES-DE are included as of this moment (more will be added all the time).
+* A configurator that is controller usable
+* Better art
+
+( * External controller support "semi works" in some emulators if you have docked the Steam Deck and pair a Bluetooth controller inside the Steam Gamemode GUI. Not all hotkey combinations will work how ever!)
+
+# Issues, bugs and suggestions
+For a list of reported issues please check here on github: [RetroDECK issues](https://github.com/XargonWan/RetroDECK/issues)
\ No newline at end of file
diff --git a/wiki-rtd/Licences.md b/wiki-rtd/Licences.md
new file mode 100644
index 00000000..64910a3b
--- /dev/null
+++ b/wiki-rtd/Licences.md
@@ -0,0 +1,93 @@
+# RetroDECK
+
+https://github.com/XargonWan/RetroDECK/blob/main/LICENSE
+
+# Features, front-end and assets
+
+## ES-DE
+
+https://gitlab.com/es-de/emulationstation-de/-/blob/master/LICENSE
+
+https://gitlab.com/es-de/emulationstation-de/-/tree/master/licenses
+
+## Pixelitos
+
+https://github.com/ItzSelenux/pixelitos-icon-theme/blob/main/LICENSE
+
+## Kenny.nl
+CC0 & CC1 (Various assets)
+https://www.kenney.nl/assets
+
+# Emulators & Software
+
+## RetroArch & LibreRetro
+
+https://docs.libretro.com/development/licenses/
+
+## Duckstation
+
+https://github.com/stenzek/duckstation/blob/master/LICENSE
+
+## RPCS3
+
+https://github.com/RPCS3/rpcs3/blob/master/LICENSE
+
+## Dolphin & Primehack
+
+https://github.com/dolphin-emu/dolphin/blob/master/LICENSE
+
+https://github.com/Kekun/primehack/blob/master/LICENSE
+
+## MAME
+https://github.com/mamedev/mame/blob/master/COPYING
+
+## Yuzu
+
+https://github.com/yuzu-emu/yuzu/blob/master/LICENSE.txt
+
+
+## Ryujinx
+
+https://github.com/Ryujinx/Ryujinx/blob/master/LICENSE.txt
+
+
+## Citra
+
+https://github.com/citra-emu/citra/blob/master/license.txt
+
+## Xenia
+
+https://github.com/xenia-project/xenia/blob/master/LICENSE
+
+## Cemu
+
+https://github.com/cemu-project/Cemu/blob/main/LICENSE.txt
+
+## Xemu
+
+https://github.com/xemu-project/xemu
+
+## PPSSPP
+
+https://github.com/hrydgard/ppsspp/blob/master/LICENSE.TXT
+
+## MelonDS
+
+https://github.com/melonDS-emu/melonDS/blob/master/LICENSE
+
+## PCXS2
+https://github.com/PCSX2/pcsx2/blob/master/COPYING.GPLv3
+
+## Vita3K
+https://github.com/Vita3K/Vita3K/blob/master/COPYING.txt
+
+## ZDoom / GZDoom
+
+https://github.com/ZDoom/gzdoom/blob/master/LICENSE
+
+## ScummVM
+https://github.com/scummvm/scummvm/blob/master/COPYING
+
+## Capsimg
+https://github.com/rsn8887/capsimg/blob/master/LICENCE.txt
+
diff --git a/wiki-rtd/Linux-Desktop-Software-recommendations.md b/wiki-rtd/Linux-Desktop-Software-recommendations.md
new file mode 100644
index 00000000..43447fae
--- /dev/null
+++ b/wiki-rtd/Linux-Desktop-Software-recommendations.md
@@ -0,0 +1,38 @@
+# Any other recommended software?
+
+The following software works great with the Linux Desktop and might enhance your RetroDECK experience (these are entirely optional to install).
+
+## Flips
+Flips is a software that let you patch romhacks IPS & BPS files onto the rom files.
+It's already on flathub.
+
+_Made by Alcaro_
+
+[Flips](https://flathub.org/apps/details/com.github.Alcaro.Flips)
+
+## BoilR
+
+BoilR will show games from other games platforms in your Steam library. It uses the Steam 3rd party shortcuts feature and does not require you to set up anything. You can also use BoilR to manually and automatically download custom art from SteamGridDB. It's already in flathub.
+
+_Made by Philipk_
+
+[BoilR](https://flathub.org/apps/details/io.github.philipk.boilr)
+
+## JRomManager
+A Mame and Retrogaming Rom Manager.
+This more complex application allows you to manage and verify your roms via .dat files. It's already in on flathub and downloadable in Discover.
+
+_Made by optyfr_
+
+[JRomManager](https://flathub.org/apps/details/com.github.optyfr.JRomManager)
+
+## RomM
+RomM is a game library roms manager focused in retro gaming. Manage and organize all of your games from a web browser.
+Inspired by [Jellyfin](https://jellyfin.org/), allows you to manage all your games from a modern interface while enriching them with IGDB metadata.
+
+_Made by zurdi15_
+
+[RomM](https://github.com/zurdi15/romm)
+
+
+
diff --git a/wiki-rtd/PCXS2-Texture-Packs.md b/wiki-rtd/PCXS2-Texture-Packs.md
new file mode 100644
index 00000000..8911a704
--- /dev/null
+++ b/wiki-rtd/PCXS2-Texture-Packs.md
@@ -0,0 +1,30 @@
+# PCXS2 - Playstation 2
+The `~/retrodeck/texture_packs/PCSX2/` represents the `/PCSX2/textures/` folder in PCSX2.
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+**Note:**
+`TITLEID` is different for every game.
+
+## Enable Custom Textures
+* Open up PCSX2 inside `RetroDECK Configurator` by pressing `Open Emulator` - `PCSX2`.
+* Press `Settings` -> `Graphics`
+
+`Load Textures` and set it to `On`.
+
+`Async Texture Loading` and set it to `On`.
+
+
+## How do I add texture packs?
+
+**Requirements:** Texture pack files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+### Texture folder directly
+
+1. Extract any texture pack files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/texture_packs/PCSX2/`. The folders are all named by `TITLEID`.
+3. Move textures into the right `~/retrodeck/texture_packs/PCSX2/` folder.
\ No newline at end of file
diff --git a/wiki-rtd/PPSSPP-Texture-Packs.md b/wiki-rtd/PPSSPP-Texture-Packs.md
new file mode 100644
index 00000000..6eff6f8e
--- /dev/null
+++ b/wiki-rtd/PPSSPP-Texture-Packs.md
@@ -0,0 +1,26 @@
+# PPSSPP - PSP
+The `~/retrodeck/texture_packs/ppsspp/` represents the `/PSP/TEXTURES/` folder in PPSSPP.
+
+**Note:**
+Some texture packs could made for a specific version or region of the game. Make sure you have the right rom and textures for it.
+
+**Note:**
+`TITLEID` is different for every game.
+
+
+## Enable Custom Textures
+1. Open up PPSSPP inside `RetroDECK Configurator` by pressing `Open Emulator` - `PPSSPP`.
+2. Press `Settings` -> `Tools` -> `Developer Tools` -> `Replace Textures` and set it to `On`.
+
+## How do I add texture packs?
+
+**Requirements:** Texture pack files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+
+### How to add textures
+
+1. Extract any texture pack files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/texture_packs/ppsspp/`. The folders are all named by `TITLEID`.
+3. Paste the textures into right folder `~/retrodeck/texture_packs/ppsspp/`
diff --git a/wiki-rtd/Playstation-3-RPCS3.md b/wiki-rtd/Playstation-3-RPCS3.md
new file mode 100644
index 00000000..4a622ea9
--- /dev/null
+++ b/wiki-rtd/Playstation-3-RPCS3.md
@@ -0,0 +1,87 @@
+# Where to put the games?
+PS3 games comes either as a Blu-ray rip directory (folder) with a bunch of different files or a digital PSN title that needs to be installed (see guide on this page).
+
+PS3 games should be put under the `retrodeck/roms/ps3/` directory.
+
+# How to: Install the PS3UPDAT.PUP firmware
+
+There are two ways to install the firmware:
+
+## Install PS3 firmware from RetroDECK Configurator
+
+1. Open RPCS3 `RetroDECK Configurator` - `RetroDECK: Tools` - `Install: PS3 Firmware`.
+2. Press `OK` and this will download the PS3 Firmware and open RPCS3.
+3. You will get a prompt asking if you want to install the firmware from the /tmp/ folder, say `Yes`
+4. Wait for the installation to finish
+5. Exit RPCS3 from the GUI under `File -> Exit`
+
+## Manual Download
+1. Download the latest PS3 firmware `PS3UPDAT.PUP` from Sony [here](https://www.playstation.com/en-us/support/hardware/ps3/system-software/)
+2. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`.
+3. In the RPCS3 interface navigate to `File -> Install Firmware`.
+4. In the file browser navigate and select the file `PS3UPDAT.PUP` file.
+5. The firmware should now be installed.
+
+# How to: Get games to show up inside the ES-DE interface
+To get the games to show up you need to rename the directory to end with a `.ps3` file extension.
+
+_Example:_
+
+You have directory dump of the a game Blu-ray PlayStation 3 game called Hockey World, the directory is called `Hockey World`.
+
+To get the it to show up you need to rename and add `.ps3` in the end of the directory name.
+
+The directory `Hockey World` becomes `Hockey World.ps3` and the game will show up.
+
+
+# How to: Install DLC or patches on disc based games
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. If you want to do it in `Game Mode` you need to press the `Steam` button and switch between windows using the window switcher.
+
+If you want to install some DLC or patch you can do that trough RPCS3 itself.
+
+1. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`.
+2. In the RPCS3 interface navigate to `File -> Install Packages/Raps/Edats`.
+3. In the file browser navigate and select the file you want to install.
+4. The file will be installed inside the a new game directory on the RPCS3 hard drive under
+ `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` where `GAMEID` is unique for each game [PS3GAMEID-List](https://www.gametdb.com/PS3/List).
+5. The patches or dlc should now be installed and in the GAMEID directory.
+6. Move the content of the GAMEID directory into the games directory inside the `retrodeck/roms/ps3/GAMENAME.ps3` directory and overwrite & replace the files.
+8. You can now remove the `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` directory as the files have been moved.
+9. The game can be launched inside the ES-DE interface with patches and DLC installed.
+
+_Example:_
+
+The game `Hockey World.ps3` inside the `retrodeck/roms/ps3/` has some DLC & and a patch you want to install.
+
+You follow the above guide and install the files.
+
+The installation made a newly created directory called `BCA111111` under `retrodeck/bios/rpcs3/dev_hdd0/game/`.
+
+You open up the directory `retrodeck/bios/rpcs3/dev_hdd0/game/BCA111111` and copy all of it's content and paste it into `retrodeck/roms/ps3/Hockey World.ps3` directory and replace/overwrite the files.
+
+You can then remove the `BCA111111` directory in `retrodeck/bios/rpcs3/dev_hdd0/game/`
+
+# How to: Install digital PSN titles
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`. If you want to do it in `Game Mode` you need to press the `Steam` button and switch between windows using the window switcher.
+
+If you want to install some PSN tiltes you can do that trough RPCS3 itself.
+
+1. Open RPCS3 `RetroDECK Configurator -> Open Emulator -> RPCS3`.
+2. In the RPCS3 interface navigate to `File -> Install Packages/Raps/Edats`.
+3. In the file browser navigate and select the file you want to install.
+4. The file will be installed inside the games directory on the RPCS3 hard drive under
+ `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` where `GAMEID` is unique for each game [PS3GAMEID-List](https://www.gametdb.com/PS3/List).
+5. Install any patches or DLC for the game by repeating step .2 and .3 for each file.
+6. After the game is ready move the digital games directory from `retrodeck/bios/rpcs3/dev_hdd0/game/GAMEID` to `retrodeck/roms/ps3`
+7. Rename the directory to the name of the game and add the .ps3 file extension to the end of the directory (see guide on top).
+8. The game should now show up and be playable inside the ES-DE interface.
+
+
+_Example:_
+
+You installed a file that contained the digital game Hockey World 2, it created a directory called `BCA123456` under `retrodeck/bios/rpcs3/dev_hdd0/game/`
+
+After that you moved `BCA123456` from `retrodeck/bios/rpcs3/dev_hdd0/game/` to `retrodeck/roms/ps3`.
+The directory `BCA123456` is renamed to `Hockey World 2.ps3`.
diff --git a/wiki-rtd/RetroArch-Mesen-Texture-Packs.md b/wiki-rtd/RetroArch-Mesen-Texture-Packs.md
new file mode 100644
index 00000000..1703070a
--- /dev/null
+++ b/wiki-rtd/RetroArch-Mesen-Texture-Packs.md
@@ -0,0 +1,30 @@
+# RetroArch - NES - Mesen
+The `texture_packs/RetroArch-Mesen/` represents `/retroarch/system/HdPacks/` folder.
+
+**Note:**
+Some texture packs could made for a specific version or region of a game. Make sure you have the right game and textures for it.
+
+## Enable Texture Packs in the Mesen core for certain games
+From the `RetroArch Quick Menu`
+
+* Go to `Core Options` -> `Enable HD Packs` set to `On`
+
+* Then save the current configuration for that game under `Core Options` -> `Manage Core Options` -> `Save Game Options`
+
+## How do I add texture packs that can be used by the Mesen Core?
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+* All texture packs go into the `texture_packs/RetroArch-Mesen/` folder.
+* The texture pack have to be extracted from .zip or other compressed format into a folder.
+* The name of the folder must be the same name as that of the rom file the texture pack is for.
+
+**Example:**
+
+You want apply a texture pack to a game called `ScaryCastle USA.nes` and you have downloaded the `ScaryCastle TexturePACK HD.zip`.
+
+1. Extract the `ScaryCastle TexturePACK HD.zip`
+2. Move the extracted `ScaryCastle TexturePACK HD` folder into `texture_packs/RetroArch-Mesen/`
+3. Rename the `ScaryCastle TexturePACK HD` folder so it has the same name as the rom `ScaryCastle USA` without the `.nes` file extension.
+9. Start up RetroDECK and select the ScaryCastle nes games.
+**NOTE:** On the Steam Deck go into GameMode first, then launch RetroDECK.
\ No newline at end of file
diff --git a/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md b/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md
new file mode 100644
index 00000000..f01f921e
--- /dev/null
+++ b/wiki-rtd/RetroArch-Mupen64Plus-Next-Texture-Packs.md
@@ -0,0 +1,42 @@
+# RetroArch - N64 - Mupen64Plus-Next
+
+The `texture_packs/RetroArch-Mupen64Plus/` represents `/retroarch/system/Mupen64plus/` folder.
+
+**Note:**
+Some texture packs could made for a specific version or region of the game. Make sure you have the right rom and textures for it.
+
+## Enable Texture Packs in the Mupen64Plus-Next core for certain games
+
+From the `RetroArch Quick Menu`
+
+* Go to `Core Options` -> `GLideN64` ->
+
+`Use High-Res Textures` set to `On`
+
+`Cache Textures` set to `On`
+
+`Use High-Res Full Alpha Channel` set to `On`
+
+`Use Hi-Res Storage` set to `On`
+
+Then save the current configuration for that game under `Core Options` -> `Manage Core Options` -> `Save Game Options`
+
+**Optional:**
+
+`Use High-Res Texture Cache Compression` set to `On` - compresses uncompressed HD Textures into .hts files.
+
+
+
+
+## How do I add texture packs that can be used by the Mupen64Plus-Next Core?
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+* All texture packs go into the `texture_packs//RetroArch-Mupen64Plus/hires_texture/` or `texture_packs/RetroArch-Mupen64Plus/cache/` folder.
+* The texture pack have to be extracted from .zip or other compressed format into a folder.
+
+## Compressed textures in .hts files
+Compressed textures that are stored in `.hts` files goes into the `texture_packs/RetroArch-Mupen64Plus/cache/` folder.
+
+## Uncompressed textures in loose folders or files
+Uncompressed textures that are stored in in loose folders or files goes into the `texture_packs/RetroArch-Mupen64Plus/hires_texture/` folder.
diff --git a/wiki-rtd/RetroDECK-CLI.md b/wiki-rtd/RetroDECK-CLI.md
new file mode 100644
index 00000000..637fb3d2
--- /dev/null
+++ b/wiki-rtd/RetroDECK-CLI.md
@@ -0,0 +1,79 @@
+# How do I run RetroDECK CLI commands?
+
+Open a Linux terminal on your desktop (on the Steam Deck you need to be in desktop mode). Depending on what terminal application you have installed the naming of the application can be different.
+
+In Linux distributions that uses KDE desktop environment as well as the Steam Deck; the default application is called _Konsole_.
+
+The default command to run retrodeck options and arguments is:
+
+`flatpak run [FLATPAK-RUN-OPTION] net.retrodeck.retrodeck [ARGUMENTS]`
+
+Where `[FLATPAK-RUN-OPTION]` is replaced by a flatpak run option (if there is one) and `[ARGUMENTS]` is replaced by arguments.
+
+**Example:**
+
+This syntax runs the `--reset-all` argument that resets the application to default settings.
+
+`flatpak run net.retrodeck-retrodeck --reset-all`
+
+Where the argument `--reset-all` replaced `[ARGUMENTS]` and `[FLATPAK-RUN-OPTION]`was not needed to it was removed.
+
+# CLI argument list
+
+`-h` or `--help` - Prints all the available arguments.
+
+`-v` or `--version` - Prints the installed RetroDECK version
+
+`--info-msg` - Prints all the folder paths and various config information.
+
+`--configurator` - Starts the RetroDECK configurator
+
+`--compress` - Compresses a specific file to .chd format. It supports .cue .iso and .gdi formats. You need to add the filepath to the file for it to work.
+
+`--reset-emulator` - Opens a new input where you can input an argument to reset a specific emulator or all emulators to the default settings. Inside the prompt you can type one of the following options to reset it;
+
+`all-emulators`
+`retroarch`
+`citra`
+`dolphin`
+`duckstation`
+`melonds`
+`pcsx2`
+`ppsspp`
+`primehack`
+`rpcs3`
+`xemu`
+`yuzu`
+
+`--reset-retrodeck` - Resets the entirety of RetroDECK to default settings!
+
+⚠️ WARNING! BACK UP YOUR DATA BEFORE RUNNING THIS ARGUMENT! ⚠️
+
+# General flatpak commands
+
+If you want to check RetroDECK's flathub page [click here](https://flathub.org/apps/details/net.retrodeck.retrodeck)
+Here follows some general flatpak commands that could be useful:
+
+
+## Install RetroDECK from CLI
+
+If you want to install RetroDECK from CLI type:
+`flatpak install flathub net.retrodeck.retrodeck`
+
+NOTE! This will work on the Steam Deck out of the box.
+But on the Linux desktop you need to check your distribution if it ships with both Flatpak and Flathub integration installed, if not you may need to install it. Check your distributions or flathubs documentation on how to install it on your desktop.
+
+## Update all flatpaks from CLI
+
+If you want to update all installed flatpaks from CLI type:
+`flatpak update`
+
+Then answer `y` on the input prompt.
+
+## Update only RetroDECK from CLI
+
+If you just want to update RetroDECK type:
+
+`flatpak update net.retrodeck.retrodeck`
+
+Then answer `y` on the input prompt.
\ No newline at end of file
diff --git a/wiki-rtd/RetroDECK-Configurator.md b/wiki-rtd/RetroDECK-Configurator.md
new file mode 100644
index 00000000..8490b387
--- /dev/null
+++ b/wiki-rtd/RetroDECK-Configurator.md
@@ -0,0 +1,154 @@
+# The RetroDECK Configurator
+
+The `RetroDECK Configurator` is a unique multi-use toolbox that exists within RetroDECK to manage/configure/change/reset/edit many aspect of the application and built around the `RetroDECK Framework`.
+
+The`RetroDECK Configurator` can be found:
+
+* In the main menu inside the ES-DE interface
+
+* From CLI
+
+* From the `.desktop` desktop shortcut.
+
+What follows are the commands you can use inside the Configurator (more commands will be added during development).
+
+# Presets & Settings
+
+In this menu you can set various presets.
+
+## Global: Presets & Settings
+In this menu you will find presets and settings that span over multiple emulators.
+
+### RetroAchivements: Login
+Login to RetroAchievements in all supported emulators and cores.
+
+### RetroAchivements: Logut
+Logut from RetroAchievements in all supported emulators and cores.
+
+### RetroAchivements: Hardcore Mode
+Enables `Hardcore Mode` from RetroAchievements in all supported emulators and cores.
+
+### Widescreen: Enable/Disable
+Enables or disable Widescreen in all supported emulators and cores.
+
+### Swap A/B and X/Y: Enable/Disable
+Swaps `A/B` `X/Y` in all supported emulators and cores.
+
+### Ask to Exit prompt: Enable/Disable
+Enables or disables ask to exit prompts in all supported emulators and cores.
+Note: If you disable this, the emulators will directly exit.
+
+## RetroArch: Presets & Settings
+In this menu you will find presets and settings for RetroArch.
+
+### Borders: Enable/Disable
+
+Enable / Disable borders across the RetroArch cores you choose.
+
+### Rewind: Enable/Disable
+
+Enable / Disable rewind across all of RetroArch (this may impact performance on some more demanding systems).
+
+## Wii & Gamecube: Presets & Settings
+In this menu you will find presets and settings for Dolphin and Primehack.
+
+### Dolphin Textures: Universal Dynamic Input
+Enable / Disable Venomalias's Universal Dynamic Input Texture for Dolphin.
+
+### Primehack Textures: Universal Dynamic Input
+Enable / Disable Venomalias's Universal Dynamic Input Texture for Primehack.
+
+# Open Emulator
+Here you launch and configure each emulators settings, the option you choose will open that emulators GUI. For documentation on how to change the settings of each emulators settings please check the website of each emulator.
+
+(Please note that several emulators where not designed with controller input in mind for handling the applications GUI, just the games. So you might need to use other inputs like the Steam Decks touchscreen or a mouse and key board to navigate properly).
+
+The options are the following:
+
+## RetroArch
+Opens RetroArch
+
+## Citra
+Opens Citra
+
+## Dolphin
+Opens Dolphin
+
+## Duckstation
+Opens Duckstation
+
+## MelonDS
+Opens MelonDS
+
+## PCSX2
+Opens PCSX2
+
+## PPSSPP
+Opens PPSSPP
+
+## RPCS3
+Opens RPCS3
+
+## XEMU
+Opens XEMU
+
+## Yuzu
+Opens Yuzu
+
+# RetroDECK: Tools
+
+## Tool: Move files
+
+This option lets you choose the installation path of the RetroDECK folder that handles ROMS,Saves, BIOS etc... to a new location.
+You get the following three options.
+
+`Internal Storage` - Moves the folder to the internal storage.
+`SD CARD` - Moves the folder to the SD CARD
+`Custom Location` - Choose where you want the RetroDECK folder to be.
+
+## Tool: Compress games
+This option enables you to compress disc based game image files `.gdi` `.iso` `.bin` `.cue` to the less space demanding `.chd` format.
+You can choose either a single game or many.
+
+## Install: RetroDECK SD Controller Profile
+This option installs the Steam Deck controller profile to RetroDECK it also resets all emulators configurations to input the correct bindings.
+
+## Install: PS3 Firmware
+This option downloads and installs the latest PS3 firmware. You will have to press OK to install it.
+
+## RetroDECK: Change update settings
+This option lets you turn on or off automatic updates on launch.
+
+# RetroDECK: Troubleshooting
+
+## Backup: RetroDECK Userdata
+Creates backups of the user data folders
+
+## Check & Verify: Multi-file structure
+Verifies to the structure of multi disc/file games that uses `.m3u` files.
+
+## Check & Verify: BIOS
+Shows a detailed BIOS list of missing and current BIOS.
+
+## RetroDECK: Reset
+The reset menu resets various features
+
+### Reset Specific Emulator
+Opens up a menu where you can reset a specific emulator
+
+### Reset All Emulators
+Resets all the emulators at once
+
+### Reset RetroDECK
+Resets the entirety of RetroDECK.
+
+⚠️ WARNING! BACK UP YOUR DATA BEFORE RUNNING THIS! ⚠️
+
+# RetroDECK: About
+This menu contains information about RetroDECK
+
+## Version history
+Displays the changelogs
+
+## Credits
+Displays the credits
\ No newline at end of file
diff --git a/wiki-rtd/RetroDECK-Credits-and-The-Team.md b/wiki-rtd/RetroDECK-Credits-and-The-Team.md
new file mode 100644
index 00000000..40835378
--- /dev/null
+++ b/wiki-rtd/RetroDECK-Credits-and-The-Team.md
@@ -0,0 +1,99 @@
+# Credits & The Team
+
+This is the page where we try to introduce the team and thank everyone who have contributed to the project so far.
+If you feel you have contributed to the project but lacks mention, please contact us on discord!
+
+# The Team
+
+## Community Management
+
+### [Lazorne](https://github.com/Lazorne)
+Community management/outreach, testing, documentation, feature suggestions and some design.
+
+.
+Internal meme lord and leader of the "Nordic Pizza Heresy Cult". Instigator of the internal pizza war and "Banana Warlock".
+
+
+## Developers
+
+### [XargonWan](https://github.com/XargonWan)
+RetroDECK project founder and also one of the founding members of [AmberELEC](https://amberelec.org/).
+
+.
+General of the "Italian Pizza Legion" in the internal pizza war.
+
+
+### [IceNine451](https://github.com/icenine451)
+Creator of the `RetroDECK configurator`, the `RetroDECK Framework` and various cool things.
+
+.
+Freedom loving leader of the "Murican Cheese Crust Patriots" in the internal pizza war.
+
+
+### [Lx32](https://github.com/Lx32)
+Develops various new features, functions and tools.
+
+
+.
+1st Commander of the "Italian Pizza Legion" in the internal pizza war.
+
+
+## Testers
+
+### [dottormac](https://github.com/redeemer666)
+Does bleeding edge cooker testing (lives in the danger zone), some feature suggestions and design.
+
+.
+2nd Commander of the "Italian Pizza Legion" in the internal pizza war (might be a spy for the Nordic Cult or Muricans).
+
+
+# Collaborators
+
+### [Niroku / Atari](https://github.com/Hew-ux)
+Helps with community management, is also part of [Batocera](https://batocera.org/)
+
+### [Leon Styhre](https://gitlab.com/leonstyhre)
+Maker of EmulationStation Desktop Edition
+
+### [anthonycaccese](https://github.com/anthonycaccese/)
+Theme creator for ES-DE and [AmberELEC](https://amberelec.org/)
+
+### [Zurdi](https://github.com/zurdi15)
+Creator of RomM and other projects.
+
+# Additional credits
+
+### [RavenKilit](https://github.com/RavenKilit)
+Did some code and testning, contributed to [AmberELEC](https://amberelec.org/)
+
+### MorGuux
+Made the RetroDECK steamdb graphics for the old logo
+
+### Pixelguin
+Made the new logo and steamdb graphics
+
+### teotwaki
+Generous cloud hosting sponsor
+
+### [Gabeboii](https://github.com/gabeeeboii)
+Webmaster
+
+### Draco
+Server Administration
+
+### [ItzSelenux](https://github.com/ItzSelenux)
+Maker of [pixelitos](https://github.com/ItzSelenux/pixelitos-icon-theme)
+
+### [Kenny.nl](https://twitter.com/KenneyNL)
+[The Kenny.nl project](https://www.kenney.nl/) provides several free game assets under open licenses.
+
+# Special Thanks
+ We want give special thanks to:
+* Our [Patreons](https://www.patreon.com/RetroDECK) that keeps the build servers running and provide feedback.
+* All related emulation projects.
+* All people that have put both time and money into emulation projects.
+* All the users who help others with support, guidance and good spirit.
+* All the users who help with testing and reporting issues.
+* All the community creators who creates various art and assets for the community.
+
+You are the ones that makes this project possible.
\ No newline at end of file
diff --git a/wiki-rtd/RetroDECK-Folders-and-filepaths.md b/wiki-rtd/RetroDECK-Folders-and-filepaths.md
new file mode 100644
index 00000000..45b61192
--- /dev/null
+++ b/wiki-rtd/RetroDECK-Folders-and-filepaths.md
@@ -0,0 +1,71 @@
+# What are the various folders and filepaths in RetroDECK?
+
+RetroDECK is a Flatpak a sandboxed bundle of different applications and configurations. One part of the files are none writable while others are.
+
+### `~/retrodeck`
+It's the home folder of RetroDECK itself, it contains:
+- `bios`, the bios folder, the actual `retroarch/system` folder is poiting here `~/.var/app/net.retrodeck.retrodeck/config/emulationstation/.emulationstation/downloaded_media` is pointing here
+- `.downloaded_media`, this is where you scraped data is saved (images, videos, logos..),
+- `.lock`, this file tells RetroDECK that the settings are done and to not reset them, if this file is missing it will trigger a first boot showing the setup. Here is written the software version that is compared to the actual version to check if an update is needed.
+- `.logs`, logs folder
+- `roms`, if internal is chosen the roms folder is here, otherwise it's in `/retrodeck/roms`
+- `saves`, emulators saves file location
+- `screenshots`, emulators screenshots location
+- `states`, emulators save states location
+- `gamelists`, RetroDECK's gamelist location
+- `texture_packs`, emulators texture packs location
+- `mods`, emulators mods location
+- `.themes`, additional themes folder, `~/.var/app/net.retrodeck.retrodeck/config/emulationstation/.emulationstation/themes` is poiting here
+
+### `~/.var/app/net.retrodeck.retrodeck`
+This folder is the only flatpak folder that is editable user side, it's mapped as `/var` in the flatpak itself, from now on we will use the flatpak paths unless differently specified.
+
+### `/var`
+- `config`, contains all the various software configs such as RetroDECK, retroarch folder and standalones emulator configs
+-- `retroarch`, the retroarch folder (see below)
+-- `emulationstation`, emulationstation home folder (see below)
+-- `retrodeck`, to not be confued with `~/retrodeck/`, this folder contains the retrodeck configs, see below.
+-- various standalone emulators config folders such as `yuzu`, `pcsx2`, `melonDS`, `dolphin-emu` and so on.
+
+### `/var/config/retroarch`
+- `system`, retroarch bios (system) folder, this points to `~/retrodeck/bios`
+- `core`, retroarch cores folder, this is populated by `/app/share/libretro/cores` at the first startup (or with `--reset`, `--reset-ra`)
+- `retroarch.cfg`, the retroarch config, the original one is located in `/app/retrodeck/emu-configs/retroarch.cfg`, and similarly to above it's generated at the first startup
+
+### `/var/config/emulationstation`
+- `ROMs`, this is linked to the roms folder in `~/retroeck/roms`or `/roms`
+- `.emulationstation`, ES-DE main folder
+-- `custom_systems`, where the customs systems are kept (example the tools file), check the official ES-DE docs for more info.
+-- `downloaded_media`, this points to `~/retrodeck/.downloaded_media`
+-- `themes`, this points to `~/retrodeck/.themes`
+-- `es_log.txt`, ES-DE log file
+-- `es_settings.xml`, ES-DE settings file
+### `/var/config/retrodeck`
+- `tools`
+- `version`, this file carries the RetroDECK version number and it ś generated during the flatpak build.
+
+### `/var/data`
+Some emulators, like yuzu, needs this path, here for example is even symlinked the yuzu keys and firmware folder.
+
+### `/var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files`
+This is mapped as the `/app` folder in flatpak, this folder is inside the read only file system and so all this tree is immutable (actually can be edited by root for develop purposes).
+FYI: you can edit the with KWrite, it justs ask you for the root password when saving.
+
+### `/app/bin`
+All the binary files, like `retrodeck.sh`, the main program (wrapper).
+All these programs can be launched in developer mode just invoking them in the terminal.
+
+### `/app/retrodeck`
+This folder contains the default configuration that is restored with the various `--reset` commands.
+- `emu-configs`
+- `steam`
+- `tools`
+- `es_settings.xml`
+- `tools-gamelist.xml`
+
+### `/var/lib/flatpak/app/net.retrodeck.retrodeck/current/active/files`
+Non-flatpak path: this folders contain file such as the .desktop, icons, etc.
+
+
+
+
diff --git a/wiki-rtd/RetroDECK-Social-media-rules.md b/wiki-rtd/RetroDECK-Social-media-rules.md
new file mode 100644
index 00000000..860dfff2
--- /dev/null
+++ b/wiki-rtd/RetroDECK-Social-media-rules.md
@@ -0,0 +1,80 @@
+# Discord
+
+## Rules: DO NOT
+
+1. DO NOT: Discuss any type of piracy whatsoever.
+
+2. DO NOT: Ask for roms, bios, games and where/how to find them and don't PM the RetroDECK team members about it either.
+
+3. DO NOT: Post NSFW & NSFL content.
+
+4. DO NOT: Try to sell or promote your products and/or services, this is not a store or a marketplace (discussing experiences, asking for advice and reviews of products related to gaming and retro gaming is fine).
+
+5. DO NOT: Post hateful comments.
+
+6. DO NOT: Discuss your political or religious viewpoints here.
+
+7. DO NOT: Attack server members in the channels or private in PMs on: political viewpoints, religious/non religious believes, gender, race, sexual orientation, age or any other way (if you have been attacked please message a mod in a PM).
+
+8. DO NOT: Spam or flood the channels.
+
+9. DO NOT: Share information or pictures about leaked games.
+
+10. DO NOT: spoil any new or old game or media. If you want to write about it, use the ||spoiler tag|| to prevent to ruin other user's fruition.
+
+Rule 42
+
+DO NOT : Break the space time continuum with time travel and/or para dimensional travelling.
+
+
+
+## Rules: DO
+
+11. DO: Try to keep memes, light spam and funny posts in the 🐸-random-memes channel (however flooding is always prohibited and all server rules must till be respected even in this channel).
+
+12. DO: Be patient, be polite, don’t swear and be respectful to each other.
+
+13. DO: Try your best to keep the topic in the correct channel.
+
+14. DO: Try your best to help each other.
+
+15. DO: Be mindful that the RetroDECK team is working on this project out of passion and spending their own free time to make it happen. You can't expect 24/7 hours support and help. When you do feel the need to ask for help or advice from the RetroDECK team respect rule 11.
+
+
+
+# Lemmy / Reddit
+
+### 1. DO NOT: Post links/discussion of illegal, copyrighted, pirated or leaked content.
+
+* Post links directly to pirated games, ROMs, BIOSes or shader caches.
+* Partake in discussion or encouragement to in piracy.
+* Ask for technical support for pirated games/software.
+* Post links or discussions to leaked content of any kind.
+* Censoring or obfuscating parts of an link to any part of the content above to bypass filters.
+
+### 2. DO NOT: Post NSFW & NSFL content.
+
+### 3. DO NOT: Make posts about: buying, selling, trading, begging, giveaways, self or crowd-funding without asking.
+
+* You can’t promote crowd-funding, begging, affiliate links or other form of raising funds without asking.
+* Discussing experiences, giving advice or reviews of products related to gaming and retro gaming is always OK!
+* All promotions or marketing must be vetted and approved by the RetroDECK team on Discord.
+
+### 4. DO NOT: Make posts about anything other then RetroDECK, Emulation or community relevant content.
+
+### 5. DO NOT: Post hateful comments or posts.
+
+* Don’t attack any community member on: political viewpoints, religious/non religious believes, gender, race, sexual orientation, age or any other way (if you have been attacked please message the a mod here or on discord).
+* Be patient, be polite, be kind, don’t swear and be respectful to each other.
+
+### 6. DO NOT: Discuss your political or religious viewpoints here.
+
+### 7. DO NOT: Spread misinformation
+
+* Spread intentional misinformation.
+* Impersonate another: entity, company or person.
+
+
+
+# Vivi e lascia vivere
+// RetroDECK Team
\ No newline at end of file
diff --git a/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md b/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md
new file mode 100644
index 00000000..3e19af99
--- /dev/null
+++ b/wiki-rtd/RetroDECK-The-story-of-RetroDECK.md
@@ -0,0 +1,14 @@
+# How RetroDECK was born?
+Let's take a step back.
+
+RetroDECK was born on March 4th 2022 in Kyoto, Japan, with the name of [351EDECK](https://imgur.com/a/tGC9ZGO) because I am also one of the founding members of 351ELEC, now [AmberELEC](https://amberelec.org/).
+What I wanted to do was to "port" 351ELEC to the Steam Deck, but instead of doing a custom firmware to flash, doing it as an application that could be launched from Steam.
+Eventually, after talking to the other team members, we decided that we didn't want to support another platform such as Steam Deck, so I decided to continue the project on my own, renaming it to RetroDECK.
+
+Back then I had many options on how to create 351EDECK, such as a bash script, appimage and flatpak.
+In the beginning I opted for a simple shell script, in fact RetroDECK/351EDECK v0.1a existed as a mere shell script.
+However I had bad feedbacks from the community because someone was feeling unsafe to give my script the root privileges so evaluating the Steam Deck use case I felt like it was not the right direction to take, the people was not feeling comfortable to give the sudo to a random script downloaded from the internet, so they asked to packetize it in some way.
+
+Valve suggests the flatpak technology to port the applications on Steam Deck so, I decided to follow their guidelines, and I created the RetroDECK that you know today, starting from a Manjaro virtual machine as a development environment because I didn't have a Steam Deck yet.
+
+-Xargon
\ No newline at end of file
diff --git a/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md b/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md
new file mode 100644
index 00000000..752809a7
--- /dev/null
+++ b/wiki-rtd/Steam-Deck-Hotkeys-and-controls.md
@@ -0,0 +1,330 @@
+# General information
+
+[I see SA refereed in documentation about emulators what does it mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs%3A-Frequently-asked-questions#i-see-sa-refereed-in-documentation-about-emulators-what-does-it-mean)
+## Different controller layouts in games
+
+### Xbox layout - Steam Deck
+The Steam Deck uses the Xbox button layout as it's physical buttons.
+
+**Steam Deck/Xbox button layout:**
+
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `Y` |
+| Left | `X` |
+| Right | `B` |
+| Bottom | `A` |
+
+### Nintendo Layout
+Nintendo systems uses the Nintendo layout in game where both the Y-X and A-B buttons have switched places with each other from the Steam Decks physical button layout. You can enable a mode that switches the Y-X and A-B buttons for supported Emulators inside the `RetroDECK Configurator`.
+
+
+
+**Nintendo - button layout:**
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `X` |
+| Left | `Y` |
+| Right | `A` |
+| Bottom | `B` |
+
+
+**Example:**
+So if you are emulating a Nintendo game that calls for the button A to be pressed it corresponds to the right button on the Steam Deck so button B.
+
+
+### Sony PlayStation Layout
+The Sony PlayStation uses it's icon glyphs to represent it's buttons.
+
+**Sony PlayStation - button layout:**
+| Button Placement | Button |
+| :--- | :---: |
+| Top | `Triangle` |
+| Left | `Square` |
+| Right | `Circle` |
+| Bottom | `X` |
+
+**Example:**
+So if you are emulating a PlayStation game that calls for the button Triangle to be pressed it corresponds to the top button on the Steam Deck so button Y.
+
+**Regional differences:**
+
+Depending on the region of your Playstation game, the buttons `Circle` and `X` switches the meaning for confirm and cancel (they are still at the same physical location). But it is good to keep in mind if you are used to exiting out of menus with a certain button and wondering why it works in some games while others not.
+
+**Example:**
+
+In the EU/US `X` is confirm while in Japan `X` is cancel.
+
+# Steam Deck Controller Guide - A Visual Introduction
+If you are looking for a general guide on how to use the Steam Deck controls beyond RetroDECK please check this steam community guide:
+[Steam Deck Controller Guide - A Visual Introduction](https://steamcommunity.com/sharedfiles/filedetails/?id=2804823261)
+
+
+
+# RetroDECK Official Controller Layout: Hotkeys:
+
+### Current version of the layout
+0.7.1b that is written on this wiki
+
+## Information
+Be sure to have the `RetroDECK: Official Controller Layout` activated from the `Templates`.
+- Add the Official Layout under `Controller Settings` -> `Controller Layouts` -> `Templates` in the Steam Deck called `RetroDECK: Official Layout` with a version number and apply
+
+Read more on
[[Steam Deck: Installation and updates]]
+
+## Everything is customizable
+You are free to rebind the keys as you see fit in the RetroDECK: Official Layout profile and make your own to better suit your needs.
+But if you rebind the keys inside RetroDECK there can be a risk that an upcoming update will revert your changes if the emulators made changes to the keybindings for the hotkeys.
+Also note that if you break your controller profile with your tinkering please revert the RetroDECK's official profile.
+
+## 🚧 Please READ: 🚧
+
+**Not all Emulators has hotkey support; some have partial support, some has none and some has a majority implemented**
+
+The plan is to map as much as we can into the RetroDECK Hotkey System below. We are also patching in Emulator Hotkeys with the `RetroDECK Framework` (if possible) to be compatible with the system. If a emulators later versions adds better hotkey support we plan to map it towards the same functions bellow for a unified experience across as many emulators as possible.
+
+### Known issues
+* `PPSSPP` has a bug in with multi-input hotkeys in their flatpak version, so we did a workaround and bound ESC is Open Menu. This allows you to access all of the emulator features and can quit.
+* `RPCS3` hotkeys/shortcuts do not work and they are a new experimental feature. To exit you have to shut down RPCS3 from the `Switch Window` inside the Steam Deck interface.
+* `CEMU` has almost no hotkey support.
+* `XEMU` has no hotkey support.
+* `Citra` is the only dual-screen emulator that allows a hotkey for changing the screen layout, others: `MelonDS`, `RetroArch`, `Cemu` has no hotkey for it.
+
+## Global Hotkeys: Button Combos
+
+### The hotkey button
+The `HK` or `hotkey button` on the Steam Deck is `L4` or `R4` or `Select` depending on what is closest for the button combo you are trying to press, all trigger the same functions.
+
+**Example:**
+
+You want to do the command `Pause / Resume`.
+You press and hold either `L4` or `R4` or `Select` and press `A` to trigger the command.
+
+### Button combo list
+The global hotkeys are activated by pressing the hotkey button and holding it while pressing the corresponding other button input.
+What follows is a list of hotkeys:
+
+`Command` Shows what the hotkey does.
+`Button / Combination` Shows the input you need to make to trigger the command.
+`Keyboard Command` Shows what is being sent to the emulator.
+`Emulator Support` Shows what emulators support the command.
+`Comment` Just extra comments.
+
+
+
+| Command | Button / Combination| Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: | :---: |
+| Pause / Resume | `HK + A` | `CTRL + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Take Screenshot | `HK + B` | `CTRL + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | |
+| Fullscreen Toggle | `HK + X` | `CTRL + ENTER` | `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Previous State Slot | `HK + D-Pad Left` | `CTRL + J` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2`| | |
+| Next State Slot | `HK + D-Pad Right` | `CTRL + K` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2`|
+| Increase Emulation Speed | `HK + D-Pad Up` | `CTRL + 1` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2`| | |
+| Decrease Emulation Speed | `HK + D-Pad Down` | `CTRL + 2` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2`| | |
+| Load State | `HK + L1` | `CTRL + A` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Save State | `HK + R1` | `CTRL + S` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Rewind | `HK + L2` | `CTRL + -` | `RetroArch` `Duckstation` | |
+| Fast forward | `HK + R2` | `CTRL + +` | `RetroArch` `Duckstation` `MelonDS` `PCSX2` | |
+| Swap Screens | `HK + L3` | `CTRL + TAB` | `Citra` `MelonDS` `Cemu` | |
+| Open Menu | `HK + Y` | `CTRL + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | |
+| Exit Emulator | `HK + Start` | `CTRL + Q` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | |
+| Escape | `HK + R3` | `ESC` | `PPSSPP` | |
+
+
+
+
+### RetroArch: Additional Hotkeys
+
+These hotkeys also work for RetroArch and are built in.
+
+| Command | Button / Combination | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Open Menu | `L3 + R3` | `RetroArch` | |
+
+### Arcade Systems: Additional Hotkeys
+
+This hotkey work for RetroArch, MAME, FBNEO and other arcade systems.
+
+| Command | Button / Combination | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Insert Credit | `Select` | `RetroArch` | |
+
+
+# Steam Deck - Radial Menu System
+
+What follows is a breakdown of the Radial System that you access on the `Left Touchpad`.
+
+### Is there a quick way to go back to the top of the radial menu system?
+Yes, just press on the `HK` trigger buttons: `L4` or `R4` or `Select`
+
+## Radial Menu System
+`Radial Button` Shows what the hotkey does.
+`Keyboard Command` Shows what is being sent to the emulator.
+`Emulator Support` Shows what emulators support the command.
+`Comment` Just extra comments.
+
+**NOTE:**
+
+Like everything in RetroDECK we plan to make revisions and updates of the menus. We hope with time be able to add more emulators and even better art.
+
+## Main Menu
+The `Main Menu` gives you access to all the menus bellow.
+
+## Quick
+The `Quick Menu` or `Quick Access Menu` Menu is the most populated menu. It features "best of" options from other menus.
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Exit Emulator | `Ctrl + Q` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | |
+| Open Menu | `Ctrl + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | |
+| Swap Screens | `Ctrl + Tab` | `Citra` `MelonDS` `Cemu` | |
+| Take Screenshot | `Ctrl + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | |
+| Save State | `Ctrl + S` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Load State | `Ctrl + A` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Pause / Resume | `Ctrl + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Fullscreen Toggle | `Ctrl + Enter` |`Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Restart / Reset | `CTRL + R` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Escape | `ESC` | `PPSSPP` | |
+
+## State
+The `State Menu` is the menu where you handle anything to do with saving and loading states.
+
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Previous State | `Ctrl + J` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Next State | `Ctrl + K` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Save State | `Ctrl + S` |`RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Load State | `Ctrl + A` | `RetroArch` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Undo Load State | `Ctrl + 8` | `Dolphin/Primehack` | |
+| Undo Save State | `Ctrl + 9` | `Dolphin/Primehack` `Duckstation` | |
+
+
+## Speed / Frames
+The `Speed / Frames Menu` is where you find anything related to: emulation speed, frame limits, fast forwarding and rewinding.
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Fastforward | `Ctrl + +` | `RetroArch` `Duckstation` `MelonDS` `PCSX2` | |
+| Rewind | `CTRL + -` | `RetroArch` `Duckstation` | |
+| Increase Emulation Speed| `CTRL + 1` | `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Decrease Emulation Speed| `CTRL + 2` |`Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Reset Emulation Speed | `CTRL + 3` | `Duckstation` | |
+| Disable Emulation Speed Limit | `CTRL + 0` |`Dolphin/Primehack` | |
+| Frame limit On/Off | `CTRL + Z` | `PCSX2` `Yuzu` | |
+
+
+## Display / Graphics
+The `Display / Graphics Menu` is where you find anything related to: up-scaling/resolution scaling, widescreen or change aspect ratio, fullscreen, swap or change dual screen layout.
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Fullscreen Toggle | `Ctrl + Enter` | `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Increase Resolution / Upscale | `Ctrl + U` | `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Decrease Resolution / Upscale | `Ctrl + Y` | `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Change Widescreen / Aspect Ratio | `Ctrl + W` | `Dolphin/Primehack` `Duckstation` `PCSX2` | |
+| Swap Screens | `Ctrl + Tab` |`Citra` `MelonDS` `Cemu` | |
+| Change Dual Screens Layout | `Ctrl + L` | `Citra`| | |
+
+## General
+The `General Menu` or `General Emulation Menu` is where you find various global generic emulation hotkeys: Quit/Exit, Restart, Take Screenshot, Change CD, Pause, Turbo Input, Cheats and Video Recording.
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Exit Emulator | `Ctrl + Q` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `PCSX2` `Yuzu` | |
+| Open Menu | `Ctrl + M` | `RetroArch` `Duckstation` `PCSX2` `Yuzu` | |
+| Take Screenshot | `Ctrl + X` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Restart / Reset | `CTRL + R` |`RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Change Disc / Next Disc | `CTRL + D` | `RetroArch` `Dolphin/Primehack` `Duckstation` | |
+| Cheats On/Off | `CTRL + C` | `RetroArch` `Duckstation` | |
+| Pause / Resume | `Ctrl + P` | `RetroArch` `Citra` `Dolphin/Primehack` `Duckstation` `MelonDS` `PCSX2` `Yuzu` | |
+| Turbo On/Off | `Ctrl + T` | `Duckstation` | |
+| Video Recording On/Off | `Ctrl + V` |`RetroArch` `Dolphin/Primehack` `PCSX2` | |
+
+## Steam Deck
+The `Steam Deck Menu` is where you find Steam Deck specific functions and general computer hotkeys: Steam Screenshot, Show Steam Deck Keyboard, Escape, Alt + F4, Tab, Enter and F1. Some of these could also be useful inside the various PC emulation emulators.
+
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Escape | `ESC` | `PPSSPP` | |
+| Tab | `Tab` | | |
+| Alt + F4 | `Alt + F4` | | |
+| F1 | `F1` | | |
+| Enter | `Enter` | | |
+| Take Steam Screenshot | `none` | | |
+| Show Steam Deck Keyboard| `none` | | |
+
+
+## Specific
+
+The `Specific Menu` or `Specific Emulator Hotkeys Menu` opens up several system/emulator specific sub-menus. Here you will find hotkeys not so commonly used but could be good to have easy access to:
+
+### Switch
+The `Switch Menu` here you find hotkeys related to Switch emulation: Change GPU Accuracy, Change Docked/Undocked Mode, Add/Remove Amiibo
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Change GPU Accuracy | `Alt + G` | `Yuzu` | |
+| Load / Remove Amiibo | `Alt + M` | `Yuzu` | |
+| Docked / Undocked Mode | `Alt + D` | `Yuzu` | |
+
+### MAME
+The `MAME Menu` here find hotkeys related to the MAME standalone emulator: Servicemode and buttons 1-4, Insert None Bills (not credits that is Select) and tilt.
+
+**MAME SUPPORT IS NOT IN YET WILL BE IN A LATER UPDATE**
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Service Mode | `Alt + 0` | `MAME` | |
+| Service Button 1 | `Alt + 1` | `MAME` | |
+| Service Button 2 | `Alt + 2` | `MAME` | |
+| Service Button 3 | `Alt + 3` | `MAME` | |
+| Service Button 4 | `Alt + 4` | `MAME` | |
+| Insert Bill / Note | `Alt + 5` | `MAME` | |
+| Tilt | `Alt + 6` | `MAME` | |
+
+### RetroArch
+The `RetroArch Menu` here you find hotkeys related to the RetroArch emulator: RetroArch Cheat Mangement, AI Service and Netplay Host.
+
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Next Cheat | `Ctrl + G` | `RetroArch` | |
+| Previous Cheat | `Ctrl + F` | `RetroArch` | |
+| Cheats On/Off | `Ctrl + C` | `RetroArch` | |
+| AI Service On/Off | `Ctrl + I` | `RetroArch` | |
+| Netplay Host On/Off | `Ctrl + H` | `RetroArch` | |
+
+### Gamecube / Wii
+The `Gamecube / Wii Menu` here you find hotkeys related to the Dolphin standalone emulator: Golf Mode, Freelook Mode On/Off/Reset, Wii Sync Button and Wii Mote Sideways / Upright.
+
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Golf Mode On/Off | `Alt + H` | `Dolphin/Primehack` | |
+| Freelook Mode On/Off | `Alt + F` |`Dolphin/Primehack` | |
+| Freelook Mode Reset | `Alt + R` | `Dolphin/Primehack` | |
+| Wii Sync Button | `Alt + W` | `Dolphin/Primehack` | |
+| Wiimote Upright | `Alt + Z` | `Dolphin/Primehack` | |
+| Wiimote Sideways | `Alt + X` | `Dolphin/Primehack` | |
+
+
+### NDS
+The `NDS Menu` here you find hotkeys related to the MelonDS standalone emulator: Send Close/Open Lid, Send Play Microphone and Sunlight + / -.
+
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Sunlight + | `Alt + +` |`MelonDS` | |
+| Sunlight - | `Alt + -` | `MelonDS` | |
+| Play Microphone | `Alt + P` |`MelonDS` | |
+| Close/Open Lid | `Alt + L` | `MelonDS` | |
+
+### 3DS
+The `3DS Menu` here you find hotkeys related to the Citra standalone emulator: Load and Remove Amiibo
+
+| Radial Button | Keyboard Command | Emulator Support | Comment |
+| :--- | :---: | :---: | :---: |
+| Load Amiibo | `Alt + M` |`Citra` | |
+| Remove Amiibo | `Alt + N` |`Citra` | |
\ No newline at end of file
diff --git a/wiki-rtd/Steam-Deck-Installation-and-updates.md b/wiki-rtd/Steam-Deck-Installation-and-updates.md
new file mode 100644
index 00000000..99d9ed53
--- /dev/null
+++ b/wiki-rtd/Steam-Deck-Installation-and-updates.md
@@ -0,0 +1,69 @@
+# How do I install RetroDECK on the Steam Deck?
+
+## Quick start guide
+
+- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`
+- Install RetroDECK from Discover
+- Start RetroDECK first time in Desktop Mode
+- Choose where RetroDECK should create the `roms` folders `Internal` or `SDCard`.
+- Put the BIOS inside `~/retrodeck/bios/` for more information read: [[Emulators: BIOS and Firmware]]
+- Put the ROMS inside `~/retrodeck/roms/` or `/retrodeck/roms/` depending on your choice
+- In Steam desktop go to the tab `Games` press `Add non Steam game to My library` and select RetroDECK to add it into your library. If that is not working you can `Right Click` on the RetroDECK desktop icon and press `Add to Steam` in the menu.
+- **Optional way:** Get RetroDECK Steam Grid art and add it to your Steam library with BoilR. Or add the art manually from [SteamgridDB](https://www.steamgriddb.com/search/grids?term=RetroDeck) for the Steam Grid.
+- Switch over to game mode and go to RetroDECK on the Steam Grid under `Library > Non-Steam`
+- Add the Official Layout under `Controller Settings` -> `Controller Layouts` -> `Templates` in the Steam Deck called `RetroDECK: Official Layout` with a version number and apply
+- Launch RetroDECK and enjoy
+
+### Other quick tips:
+- Read up on the [[Steam Deck: Hotkeys and controls]] to ease your navigation.
+- Read up on the [[EmulationStation DE: User Guide]]
+- Check out our other software recommendations [[Steam Deck: Software recommendations]].
+- Check various optional optimizations that can make some emulators run even better [[Steam Deck: Optimizations]].
+
+
+## Full step by step guide:
+
+### Step 1: Go to Desktop Mode
+- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`
+
+### Step 2: Install from Discover
+
+- Open the Discover application.
+- **NOTE:** Depending on what language you have set in Desktop mode your Discover application can be named differently.
+- Inside Discover search for RetroDECK and press the install button.
+- After the installation is finished, launch RetroDECK from Discover or in the program menu under `Games > RetroDECK`.
+- Follow the first time setup instructions and choose where RetroDECK should create the `roms` folders `Internal` or `SDCard`.
+- Open Steam while still in desktop mode.
+- Inside Steam go to the tab `Games` press `Add non Steam game to My library` and select RetroDECK to add it into your library.
+- After this is done you can now see RetroDECK in Steam Deck's gamemode after you return to it from desktop mode.
+
+### Step 3: Configure the official controller layout
+- Go back into gamemode by pressing the return to gamemode icon on the desktop.
+- Go to RetroDECK on the Steam Grid under `Library > Non-Steam`
+- Press the `Controller Icon`
+- Go into `Controller Layouts` and press `Templates`
+- Add the layout for RetroDECK called `RetroDECK: Official Layout` with a version number.
+- You can now use RetroDECK and it's ready to populate with ROMS.
+- If you are unsure on how to add ROMS and BIOS to RetroDECK follow the [Getting Started Guide ](https://github.com/XargonWan/RetroDECK/wiki/How-to-Getting-started) from Step 2 and onward on how to add them.
+
+
+### Step 4 (Optional): Extras
+- Get RetroDECK Steam Grid art with BoilR or add it manually from [SteamgridDB](https://www.steamgriddb.com/search/grids?term=RetroDeck) for the Steam Grid.
+- Check various optional optimizations that can make some emulators run even better [[Steam Deck: Optimizations]].
+- Read up on the [[Steam Deck: Hotkeys and controls]] to ease your navigation.
+- Read up on the [[EmulationStation DE: User Guide]]
+- Check out our other software recommendations [[Steam Deck: Software recommendations]].
+
+
+# How do I update RetroDECK on the Steam Deck?
+
+## Automatic Updates
+RetroDECK features Automatic Updates and should download the latest version when you start the application.
+This feature can be turned off inside the `RetroDECK Configurator`.
+
+## Manually from Desktop Mode:
+- Put the Steam Deck into Desktop Mode `Steam button` > `Power` > `Switch to Desktop`
+- Open the Discover application.
+- Click on the updates tab.
+- If there are any updates available it will be shown here.
+- Click on the `Update` or `Update all` buttons.
\ No newline at end of file
diff --git a/wiki-rtd/Steam-Deck-Optimizations.md b/wiki-rtd/Steam-Deck-Optimizations.md
new file mode 100644
index 00000000..8b7cee2c
--- /dev/null
+++ b/wiki-rtd/Steam-Deck-Optimizations.md
@@ -0,0 +1,65 @@
+# What are some optimizations for the Steam Deck to make emulation even better?
+These optimizations are entirely optional and but they can give you better performance on some more demanding emulators.
+
+
+## Increase the VRAM to 4GB
+This increases the VRAM to 4GB in the BIOS, this can give you improvements in certain emulators.
+
+* Power off your Steam Deck completely
+* Hold the `Power Button` and `Volume Up Button` until you hear a chime/beep and release the buttons.
+* Click on `Setup Utility`
+* Click on `Advanced`
+* Change`UMA Frame buffer Size` to 4GB
+* Save and Exit
+
+## Setup a sudo password
+[What is sudo?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#what-is-sudo)
+
+This is a requirement for many optimizations and solutions, it also makes your Deck safer.
+It enables you to run commands/applications heighten sudo privileges.
+
+* Go to `Desktop Mode`
+* Open `Konsole` or another `Terminal`
+* Type `passwd`
+* You will now set your new sudo password
+* After you are done you can close the terminal
+
+## Install CryoUtilities
+This requires that you have set up a sudo password.
+
+This will create a 16GB SWAP file that can improve the performance for some emulators. Note that it will take up that extra space on your Steam Deck.
+
+There is a official video [here](https://www.youtube.com/watch?v=C9EjXYZUqUs&t=17s)
+
+* Go to `Desktop Mode`
+* Open a web browser and go to the [CryoUtilities](https://github.com/CryoByte33/steam-deck-utilities) github page
+* Click on releases
+* Download the latewst `cryo_utilities` version and save to the Desktop or Home folder
+* Double click on the file and it will begin the installation
+* After installation is complete you will find a new desktop icon `CryoUtilities`
+* Click on `CryoUtilities`
+* Click on `Recommended Settings`
+* It should now be done
+
+## Install Decky Loader
+Decky Loader is a [homebrew plugin store](https://beta.deckbrew.xyz/) for the Steam Deck and it also enables `CEF Remote Debugging` during installation.
+This requires that you have set up a sudo password.
+
+* Go to `Desktop Mode`
+* Open `Konsole` or another `Terminal`
+* Type `curl -L https://github.com/SteamDeckHomebrew/decky-installer/releases/latest/download/install_release.sh | sh`
+* Decky Loader should now be installed and you can go back into `Game Mode`.
+* To access Decky Loader you only need to press the `Menu Button - (•••)`
+
+### Decky Loader: Install Power Tools
+Power Tools allows you to tweak various performance settings of the Steam Deck.
+What the best setting is differs per emulator or even per game.
+Decky Loader is a requirement.
+
+In Game Mode:
+* `Menu Button - (•••)`
+* Go into Decky Loader
+* From the Store install Power Tools
+* This will add a 🔌 icon to the `Menu Button - (•••)` where you can access Power Tools.
+
+
diff --git a/wiki-rtd/Steam-Deck-Software-recommendations.md b/wiki-rtd/Steam-Deck-Software-recommendations.md
new file mode 100644
index 00000000..bf037102
--- /dev/null
+++ b/wiki-rtd/Steam-Deck-Software-recommendations.md
@@ -0,0 +1,38 @@
+# Any other recommended software?
+
+The following software works great with the Steam Deck and might enhance your RetroDECK experience (these are entirely optional to install).
+
+There is a guide on how to install several of them under [Steam Deck: Optimizations](https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck%3A-Optimizations).
+
+# Steam Deck specific recommendations
+
+For general Linux Desktop recommendations go to [Linux Desktop: Software recommendations](https://github.com/XargonWan/RetroDECK/wiki/Linux-Desktop-Software-recommendations) as many of them also work on the Steam Deck.
+
+## CryoUtilities
+Scripts and utilities to improve performance and manage storage on the Steam Deck.
+
+_Made by CryoByte33_
+
+[CryoUtilities](https://github.com/CryoByte33/steam-deck-utilities)
+
+## Decky Loader
+Is a great piece of software that allows custom plugins inside Steam Deck's gamemode. It can open up more advanced features then the standard Steam Deck experience offers. But it's a bit more technical to install, please follow the guide on their github.
+
+_Made by Steam Deck Homebrew Team_
+
+[Decky Loader](https://github.com/SteamDeckHomebrew/decky-loader)
+
+## PowerTools
+If you install the Decky Plugin Loader above you can download the PowerTools application from the plugin store that let's you do advanced tweaking of the Steam Decks hardware. This can greatly improve performance on certain games in the PS2,GC and above generations. But it requires you to find the knowledge of what setting works best for each game and/or emulator.
+
+_Made by NGnius_
+
+[PowerTools](https://github.com/NGnius/PowerTools)
+
+## Discover Overlay
+If you use Discord this is a program that adds Discord integration into the Steam Deck's gamemode UI.
+It's already in on flathub and downloadable in Discover. Note that you need to install and login to Discord as well.
+
+_Made by trigg_
+
+[Discover Overlay](https://trigg.github.io/Discover/)
diff --git a/wiki-rtd/Switch-Yuzu.md b/wiki-rtd/Switch-Yuzu.md
new file mode 100644
index 00000000..f195a229
--- /dev/null
+++ b/wiki-rtd/Switch-Yuzu.md
@@ -0,0 +1,62 @@
+# Yuzu
+
+## Where to put the games?
+Switch games should be put into the `retrodeck/roms/switch/` directory.
+The games can come in many different formats: `XCI` `NSP` `NCA` `NSO` `NRO`.
+
+
+## Where do I put the BIOS files?
+Yuzu needs the key files `prod.keys`, `title.keys` and the firmware files in the following directories:
+
+**Yuzu keys:** `~/retrodeck/bios/switch/keys`
+
+**Yuzu firmware:** `~/retrodeck/bios/switch/registered`
+
+The directory tree should look like this example:
+```
+~/retrodeck/bios/switch
+├── keys
+│ ├── prod.keys
+│ └── title.keys
+└── registered
+ ├── 02259fd41066eddbc64e0fdd217d9d2f.nca
+ ├── 02582a2cd46cc226ce72c8a52504cd97.nca
+ ├── 02b1dd519a6df4de1b11871851d328a1.nca
+ ├── other 217 files...
+ └── fd0d23003ea5602c24ac4e41101c16fd.nca
+```
+
+You can find a complete guide in the [Yuzu official wiki](https://yuzu-emu.org/help/quickstart/#downloading-and-installing-yuzu) on how to extract the BIOS from your Switch.
+
+## How do I install DLC and Updates?
+
+**Requirements:** Patch or DLC files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+1. Extract any patch or dlc files from compressed `.zip` or any other format to the true files.
+2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`.
+3. Press `File` - `Install Files to NAND`
+4. Find a DLC or Patch file from the file browser and press `Open`
+5. This will install the DLC or Patch file into the games NAND folder inside of Yuzu.
+6. Repeat step 2 to 3 for every file you need to install.
+7. Quit Yuzu
+8. Start up RetroDECK and select the game you want to play.
+
+## How do I add shader caches?
+
+**Requirements:** Shader cache files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+1. Extract any shader cache files from compressed `.zip` or any other format to folders.
+2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`.
+3. Right click on the game you want to add mods into.
+4. Click on `Open Transferable Pipeline Cache`.
+5. Paste the files inside that directory.
+6. Start up RetroDECK and select the game.
+
+## How do I add mods?
+Check the Mods: Yuzu section on this wiki
+[[Yuzu: Mods]]
+
\ No newline at end of file
diff --git a/wiki-rtd/Version-history-Patch-Notes.md b/wiki-rtd/Version-history-Patch-Notes.md
new file mode 100644
index 00000000..6bcbf8fa
--- /dev/null
+++ b/wiki-rtd/Version-history-Patch-Notes.md
@@ -0,0 +1,554 @@
+# RetroDECK 0.7.1b
+
+### Release Date: 2023-08-22
+
+## Information:
+- Steam Deck users update RetroDECK from `Discover` in Desktop Mode.
+- Don't forget to reapply the latest controller layout: Go into the `Templates` tab and reapply the new profile ending with 0.7.1b (there is no need to reinstall the entire layout from the Configurator).
+
+
+## Bugfixes & other changes:
+- Fixed an issue to make sure the RD controller layout file at update with each RD update.
+- Fixed an issue with PPSSPP that made `L` and `R` incorrectly bound.
+- Fixed an issue in the Configurator that prevented the Yuzu preset for swapping A/B X/Y from working.
+- Fixed an notification issues on the latest SteamOS Beta releases.
+- Fixed an rsync permissions issue in the RetroDECK Framework.
+- Updated Yuzu presets to handle new config syntax in the RetroDECK Framework.
+- Changed auto-update to notification only, until permissions error can be worked out.
+- Added some new pixelart icons by ItzSelenux (pixelitos-icon-theme)
+
+
+## Updates
+- All Emulators and ES-DE have been updated
+
+## Steam Deck - Global Controller Layout:
+We have done some changes based on community feedback
+
+**Layout Changes:**
+- `Select` is now a hotkey trigger while pressing it down, `L4` and `R4` are still triggers as well.
+- The RetroArch combo of `Select` + `Start` = `Quit` now works on many SA-Emulators.
+- `Open Menu` is removed from `Select`.
+- `R5` = `A` button (this allows for great Wii controls on the right touchpad and pressing down the R5 for A).
+- `L5` = `B` button.
+
+**Global hotkey changes:**
+- `Open Menu` is on `Y`.
+- `Increase Emulation Speed` is on `Dpad-UP`.
+- `Decrease Emulation Speed` is on `Dpad-Down`.
+- `Fullscreen OFF` command is removed (as emulators have migrated to toggle).
+
+## Known issues
+- The built in auto-updater is not working (we are working on it). Discover is ok.
+- Some emulators don't have hotkey support or have bugs affecting their hotkeys.
+
+
+# RetroDECK v0.7.0b - Amazing Aozora
+
+### Release Date: 2023-06-16
+
+## Read First – Important Changes!
+
+* `PCSX2-SA` latest updates are not compatible with old save states. Please make sure you do an in-game save to your virtual memory card before upgrading.
+
+* The following emulators have changed the defaults and now run the stand-alone version: `Dolphin`, `Citra`, `PPSSPP`.
+If you have saves states or just want to go back to the RetroArch version, you can always switch back by pressing: `Other Settings` – `Alternative Emulators` and set them back to the core versions.
+
+* If you decide to install the new `RetroDECK Controller Layout` for the Steam Deck (highly recommended), it will wipe your custom configurations and emulator settings. That’s because all the configs needs to be updated and changed to be compatible.
+The choice is yours (you can always install it later via the Configurator if you change your mind).
+
+
+## New Emulators
+
+- Wii U powered by CEMU
+
+- We had hopes to add MAME standalone as well but we had to push it towards a future update because of various issues. That's why there is a MAME submenu in the new radial menus.
+
+
+
+## New General Features
+
+### New - Steam Deck Controller Layout
+
+Please read up on: https://github.com/XargonWan/RetroDECK/wiki/Steam-Deck%3A-Hotkeys-and-controls
+- All hotkeys for all emulators have been unified where possible.
+
+This Steam Deck Controller Layout features both
+
+- Radial input menus on the left touchpad.
+- Button bound hotkeys you can access by either holding R4 or L4.
+
+**Installation of the layout:**
+
+**From an upgrade:**
+
+A upgrade from a older version to 0.7b you will get a prompt during the upgrade process that asks you if you want to install the layout. If you choose to do this (highly recommended), it will reset your emulators custom configurations if you had them.
+
+**For everyone (upgrade or fresh install):**
+
+After installation need to manually enable the config as under (you also need to do this for a new RetroDECK install):
+`Controller Settings` -> `Controller Layouts` -> `Templates` `RetroDECK: Official Layout` with a version number.
+
+**NOTE:**
+
+Not all Emulators has hotkey support; some have partial support, some has none and some has a majority implemented.
+
+**Known issues:**
+
+PPSSPP has an issue with flatpak hotkeys currently on their github so we have mapped ESC `HK + R3` ( press the `Escape` key from the radial menu) to `Open PPSSPP Menu`. In this way you can shutdown, save and access PPSSPP functions from there.
+As soon as the issue is solved we will remap everything to the correct hotkeys.
+
+### New - RetroDECK system folders
+
+Handling modpacks and texture packs has never been easier! You can read more on the wiki!
+
+https://github.com/XargonWan/RetroDECK/wiki
+
+**New folder: Mods**
+
+`retrodeck/mods/` Inside you will find easy to access mod folders for the following systems: Citra ,Dolphin, Primehack, Yuzu
+
+
+**New folder: Texture Packs**
+
+`retrodeck/texture_packs/` inside you will find easy to access texture pack folders for the following systems: Citra, Dolphin, Duckstation, PCSX2, PPSSPP, Primehack, RetroArch-Mesen, RetroArch-Mupen64Plus
+
+
+**New folder: Gamelists**
+
+`retrodeck/gamelists` gamelists are now moved into by default for ease of access and added security.
+
+
+## New - System features
+
+- The Configurator has a new home inside the ES-DE main menu and thus the tools menu has been removed.
+- The Configurator also has a .deskop icon for ease of access for both Steam Deck desktop mode and Linux Desktop users.
+- Added RetroDECK auto updates on launch, this can be disabled from the Configurator this works in Game Mode for the Steam Deck.
+
+## New RetroDECK Configurator features:
+
+- The Configurator has a new structure, with more menus and options.
+- The compression tool has been updated to allow for even more formats such as .zip in addition to the standard disc-based formats for certain systems.
+- The compression tool has been updated to have an even stronger verification before a compression job starts.
+- Added a global preset to swap A/B and X/Y in all supported emulators (aka N layout).
+- Added a global preset to enable/disable Widescreen in all supported emulators, globally or per core/emulator.
+- Added a global preset to enable/disable Ask-to-Exit prompts in all supported emulators.
+- Added a preset to enable/disable Pegasus and NyNy77 Borders for RetroArch, globally or per core.
+- Added an option to install Venomalia's Universial Dynamic Input Textures for Dolphin https://github.com/Venomalia/UniversalDynamicInput
+- Added an RetroDECK: About section
+- Added an option to install the RetroDECK Steam Deck controller profile
+- Added an “RetroDECK: Auto Updates” function that enables or disables auto updates on RetroDECK launch.
+- Added a Semi-automated RPCS3 firmware installer.
+- The Move Folder tool has been greatly expanded
+ - You can now move the entire folder or different folders as you choose. (WARNING! Please do not try to move the data to more exotic locations).
+- The basic BIOS checker has been removed.
+- The BIOS checker has been updated to look for over 120+ BIOS.
+- RetroAchivements Login: Now logs into all supported emulators/cores at once.
+- RetroAchivements Logout: Now logs out of all supported emulators/cores at once.
+- Added RetroAchivements: Hardcore Mode, that lets you toggle hardcore mode for supported emulators/cores with a logged in RetroAchivements account.
+
+## Updates
+
+- Updated ES-DE to the latest version.
+- Updated RetroArch and the cores to latest versions.
+- Updated all standalone emulators and to their latest versions.
+
+
+## Bugfixes & other changes:
+
+- Dolphin/Primehack Wii Mote controls have been redesigned for the Steam Deck to allow both for touch input or right radial as pointer and `R2` emulates the Wii Remote Shake needed for certain games.
+- Updated the RPCS3 to run better and with a better configuration. Read more on the wiki on how to install DLC and patches.
+- RPCS3 and Duckstations save files where in the wrong directory. They have been moved to fit the overall inside the RetroDECK Framework. If you have any issues, contact us on discord or add them on github.
+- We made a unique PICO-8 wrapper that makes it runs better in a flatpak environment.
+- Fixed an avcodec issue that caused some roms for certain emulators to break.
+- Changed the ES-DE progress bar color
+- Changed how Yuzu builds are handled and should allow for better Yuzu updates.
+- Added a low space warning on launch.
+- Various backend improvements and fixes.
+- Added the foss Capsimg BIOS for the Amiga RetroArch core.
+- Implemented ES-DE's experimental theme downloader. For fresh new installs we only now ship one theme: ArtBookNext (as all other themes can be downloaded from the interface).
+
+## Experimental features:
+You can enable the RetroDECK: Multi-user system and other things from CLI for testing purposes.
+Read more here on how to help us with testing:
+
+https://github.com/XargonWan/RetroDECK/wiki/How-can-I-help-with-testing%3F
+
+There is also a Q&A on the latest blog post:
+
+https://www.reddit.com/r/RetroDeck/comments/13x8dva/retrodeck_status_update_202306/
+
+# RetroDECK v0.6.6b
+
+### Release Date: 2023-04-26
+
+### Information:
+This patch is a quick hotfix for ES-DE.
+
+
+## Bug fixes and other changes:
+- ES-DE had the wrong buildflag and pushed the update notification.
+- Reverted to the Swanstation Core for RetroArch
+
+# RetroDECK v0.6.5b
+
+### Release Date: 2023-04-07
+
+### Information:
+Just a quick hotfix for Yuzu (since some games where not working in 0.6.4b).
+So we had to roll back to the latest working version.
+Newer versions will be shipped with v0.7b
+
+## Bug fixes and other changes:
+- Rolled back to latest working Yuzu as some games had issues with the latest update.
+- Slightly improved Yuzu performance by tweaking GPU options
+- Fixed an issue where the default theme was not loaded
+- Removed unavailable emulators entries
+
+# RetroDECK v0.6.4b
+
+### Release Date: 2023-04-04
+
+## New features - General:
+- Updated to ES-DE 2.0
+- Added the NSO Menu Interpreted theme
+- Updated all included themes
+- Updated the Emulators/RetroArch + cores
+
+## Bug fixes and other changes:
+
+- Fixed an audio issue in the Primehack configuration
+- Various backend fixes
+
+# RetroDECK v0.6.3b
+
+### Release Date: 2023-03-24
+
+## New features - General:
+- Added support support for multiple file compression via CLI.
+
+## RetroDECK Configurator:
+- Added support support for multiple file compression in the Configurator.
+- Added safety y/n prompts to the reset functions.
+- Fixed some missing layout changes.
+- Renamed "Reset All" to "Reset RetroDECK".
+- Moved the configurator into the RO partition for futher enhancements.
+
+## Bug fixes and other changes:
+- Fixed a bug in the compression tool with certain filenames with spaces.
+- Fixed a bug where some folders were recursively symlinked.
+- Fixed a bug where some emulator configs were not correctly deployed.
+- Fixed a manifest bug that caused a conflict between Dolphin and Primehack in certain scenarios.
+- Fixed the Configurator BIOS tool looking in the wrong location (Thanks sofauxboho for the report!)
+- Implemented new configurations for Yuzu and Citra thanks to the big config file changes in the latest emulator updates in both emulators.
+- Removed some leftover files from Legacy PCSX2.
+- Removed the legacy "Reset Tools" command from Configurator and CLI.
+
+# RetroDECK v0.6.2b
+
+### Release Date: 2023-03-15
+
+## New features - General:
+- Persistent configurations when updating RetroDECK
(This means your custom configurations should be saved across future versions. We also laid groundwork for dynamic persistent configurations, more on that in a future update. This is the reason why it has taken quite long to fix this).
+- Added Primehack controller profiles for both Xbox and Nintendo button layouts
+- Added a warning when running RetroDECK in desktop mode that not all control inputs will work properly. It also comes with a "Never show again" button.
+- Added CLI for CHD compression (chdman) of single games
+- Reworked CLI commands and added safety "y/n" confirmations for the reset arguments.
+
+## New features - RetroDECK Configurator:
+- The RetroDECK Configurator "toolbox" has a new structure for more easy access to various tools
+- The power user prompt has a "Never show again" button
+- Added tool to do CHD compression (chdman) of single games (multi-game batch compression coming in a future update)
+- Added tool to check for common BIOS files
+- Added tool to check for common multi-file game structure issues
+
+## Bug fixes and other changes:
+- Fixed Primehack initial configuration as it was broken (will automatically reset the emulator just this once)
+- Fixed Duckstation initial configuration as it was broken (will require user-performed reset just this once)
+- Fixed Pico-8 initial configuration as it was broken.
+- Fixed Pico-8 dual bios folders. The program files `pico8_dyn`,`pico8.dat` and `pico8` have to be manually moved to the correct location`~/retrodeck/bios/pico-8/`. The old `~/retrodeck/bios/pico8/` is renamed `~/retrodeck/bios/pico8_olddata/` to avoid confusion on where to put files. After the files have moved the `pico8_olddata `folder can be deleted.
+- Fixed a bug that made the Dolphin RetroArch core not working properly (the standalone version of Dolphin always worked and is the default)
+- Various backend fixes
+
+## Updates:
+- Updated all Emulators, RetroArch and libreretro cores.
(PLEASE NOTE! ES-DE was not updated to version 2.0, this will be done in the next major version of RetroDECK as we need more time to work on the new theme format).
+
+# RetroDECK v0.6.1b
+
+### Release Date: 2023-02-21
+
+## New features:
+* Added CLI option to run Configurator directly
+* Added "--configure" option to RetroDECK CLI
+
+## Updates:
+* Yuzu updated to mainline-1301
+
+## Fixes & adjustments:
+* Adjusted Configuration window sizes
+* Temporarily removed Ryjuinx as it was broken and had too many issues (will be added back in a future patch).
+* Removed deprecated emulators from Configurator (eg. Legacy PCSX2)
+* Made improvements to file-moving code
+* Fixed Primehack preconfiguration and Configurator entry
+* Fixed a bug where the hidden files were not moved during the directory preparation
+* Fixed a bug where the symlinks were recursively placed inside the prepeared paths
+* Fixed issue with missing symlink after RetroDECK base directory was moved somewhere else
+* Fixed Duckstation preconfiguration
+
+# RetroDECK v0.6.0b
+
+### Release Date: 2022-12-27
+
+## New Emulators
+* Primehack
+* Ryjuinx (Disabled in 0.6.2b)
+
+## New Features
+* Merged all tools into single Configurator
+* The Configurator can now move the whole retrodeck folder eslewhere (not just the ROMs one)
+* The Configurator can now reset a single emulator, all RetroArch or all Standaloned configs (so there is no need to di it via CLI anymore
+* The first install is now asking where to place the whole retrodeck folder instead of requesting the location of the ROMs folder only.
+
+## RetroArch
+* Updated RetroArch to version [v1.14.0](https://www.libretro.com/index.php/retroarch-1-14-0-release/)
+* Updated Cores
+* Updated Cheat_db
+
+## Updated standalone emulators
+These emulators are updated to the latest version available on 31/10/2022.
+* Updated PPSSPP
+* Updated Yuzu
+* Updated Citra
+* Updated PCSX2-QT
+* Updated Dolphin
+* Updated Xemu
+* Updated RPCS3
+* Updated Duckstation
+
+## Fixes
+* PCSX2-QT is now looking for saves in the correct directory `~/retrodeck/saves/ps2/memcards` and not in `~/retrodeck/saves/ps2/pcsx2/memcards`
+
+# RetroDECK v0.5.3b
+
+### Release Date: 2022-10-28
+
+## Bug fixes in v0.5.3b
+
+* Fixed inaccessible RetroArch shaders folder
+* Fixed PSP saving issue when using RetroArch core
+* Fixed ROM visibility for Dolphin when running standalone, which should address ability to use AR/Gecko codes
+* Changed default RPCS3 launch method to fix games not starting properly
+* Fixed PCSX2 (legacy) autosave loading issue
+* (Hopefully) Fixed RetroAchievements login on PCSX2-QT
+
+## Changes in 0.5.3b
+* Made Citra standalone the default 3DS emulator
+
+## Additions in 0.5.3b
+* Added Citra SA sysdata folder to RetroDECK BIOS folder
+* Added Yuzu save folders to RetroDECK saves folder
+* A progress window during emulator initialization where it can look like RetroDECK has crashed
+
+# RetroDECK v0.5.2b
+
+### Release Date: 2022-10-14
+
+## Bug fixes in 0.5.2b
+
+* Fixed a bug where the Citra save folder was duplicated
+* Fixed a bug where scraped videos would not be played correctly for certain systems
+* Fixed the Rewind Tool
+
+# RetroDECK v0.5.1b
+
+### Release Date: 2022-10-13
+
+## Bug fixes in 0.5.1b
+
+* Fixed an issue with Yuzu not being compiled correctly in 0.5.0b
+
+# RetroDECK v0.5.0b
+
+### Release Date: 2022-10-12
+
+## Important: New save folder structure and migration in 0.5.0b
+
+### General information
+
+
+[I see ~ refereed in documentation and examples, what does it mean?](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#i-see--refereed-in-documentation-and-examples-what-does-it-mean)
+
+**Saves = game saves and save states**
+The word "saves" is used to reference both save files and save state files in this wiki article. Both files are treated in the same manner, the only difference is that saves are located at.
+
+**PLEASE BE PATIENT:**
+The migration of the saves only needs to be done once.
+Depending on how large roms library you have, this migration can take several minutes.
+If you have an extremely large roms library (+5.000 roms) this process can take over an hour.
+
+### Why are you changing the save folder structure?
+
+In the long run, it is about the safety of your saves and we feel it's better to tackle this now during the beta period then later.
+
+By default, RetroArch (which handles emulation of most older systems) puts all your saves together in one folder.
+This is normally not an issue, but what you if you want to play the same game but different versions of it across multiple systems?
+RetroArch has no way of telling the difference between a save for `Mortal Kombat 3` on the Sega Genesis and on the Super Nintendo when the saves are all bundled together. RetroDECK is moving to a save storage structure where every save file is in a per system sub-folder inside of the `~/retrodeck/saves/` for game saves or `~/retrodeck/states/` for save states.
+
+### How saves are stored in RetroDECK pre 0.5.0b:
+
+_Example: Structure of the `~/retrodeck/saves/` folder_
+
+ ~/retrodeck/saves/Final Fantasy 3.save
+
+ ~/retrodeck/saves/Sonic the Hedgehog.save
+
+_Example: Structure of the `~/retrodeck/states/` folder_
+
+ ~/retrodeck/saves/Final Fantasy VI.savestate
+
+ ~/retrodeck/saves/Sonic the Hedgehog 2.savestate
+
+
+### How saves are stored in RetroDECK post 0.5.0b:
+
+_Example: Structure of the `~/retrodeck/saves/` folder and with new sub-folders_
+
+ ~/retrodeck/saves/nes/Super Mario Bros. 3.save
+
+ ~/retrodeck/saves/genesis/Sonic the Hedgehog.save
+
+_Example: Structure of the `~/retrodeck/states/` folder_
+
+ ~/retrodeck/states/snes/Final Fantasy VI.savestate
+
+ ~/retrodeck/states/genesis/Sonic the Hedgehog 2.savestate
+
+Since RetroArch will be looking for your saves in new locations, RetroDECK will do its best to sort your saves into the new structure automatically, so you likely won't need to do anything except enjoy knowing your saves are safer than ever.
+
+### How will it work?
+
+* The fist time you run RetroDECK after upgrading from a previews version to 0.5.0b a new dialog prompt will appear letting you that the migration process will start after pressing `OK`.
+
+* The migration process matches up all of your saves with all of your ROMs.
+
+* Once a match is found, the save is moved to where the sub-folder it needs to be in.
+
+* At the end of the process RetroDECK will let you know if any saves could not be sorted automatically.
+
+* **NOTE:** Only saves created by RetroArch need to be sorted, standalone emulators such as Yuzu and Citra already use their own folder structure and don't need to go through this process.
+
+* **NOTE:** If a match can't be found (for instance if you have a save for Mortal Kombat 3 and have both the SNES and Genesis editions in your ROM library) the save will be left alone and will need to be sorted manually, since only you will know for sure what system you were playing that game on.
+
+### Where will my saves be moved to?
+
+The saves will still be in the `~/retrodeck/saves` folder, but will also be moved into a new folder that matches what system the associated game is on.
+
+ _Example: Game save - The Legend of Zelda on the NES_
+
+`~/retrodeck/saves/The Legend of Zelda.save`
+
+ will be moved to
+
+ `~/retrodeck/saves/nes/The Legend of Zelda.save`
+
+ _Example 2: Save state - Super Mario Bros 3 on the NES_
+
+`~/retrodeck/states/Super Mario Bros 3.savestate`
+
+ will be moved to
+
+ `~/retrodeck/states/nes/Super Mario Bros 3.savestate`
+
+### Why could not all saves be moved automatically?
+
+If you have a large ROM library, it is likely you will have multiple versions of the same game across multiple systems.
+
+RetroArch creates save files that have the same name as the original ROM file. If there are multiple ROM files with the same name as a save, there is no way to tell which system the save belongs to.
+
+In the interest of ultimate safety for your saves, we only sort files we can be sure of. It is unfortunate that some saves may need to be sorted manually for some users, but this is a one time process that will keep your saves safer in the long run.
+
+### How do I move them manually?
+
+The saves can be moved like any other file, using the Dolphin file manager included in the Steam Deck desktop mode to the corresponding sub-folder inside `/retrodeck/saves/(system sub-folder)`.
+
+### Where can I find saves that could not be moved?
+
+If you see a message after the migration process saying some of your saves could not be sorted automatically, they will be found where they have always been, in `~/retrodeck/saves` or `~/retrodeck/states`.
+
+In the `~/retrodeck` folder there will also be a file called `manual_sort_needed.log` listing every save that could not be sorted automatically with a reason it was not moved. In order to be used again, these files will need to be moved into the folder matching the name of the system that the game the save belongs to runs on.
+
+For example, this save file could not be sorted automatically, because there are multiple ROMs in the library with the same name.
+
+**Example: Game saves**
+* New theme 1: [Alekfull-NX-Light](https://github.com/anthonycaccese/alekfull-nx-retropie/tree/retro-deck-esde-1.x-light) for ES-DE
+![rd-theme-RetrofixRevisited-GamelistView](https://user-images.githubusercontent.com/1454947/193457594-b803546b-36eb-4e71-9eca-bfee1d81ba36.jpeg)
+![rd-theme-RetrofixRevisited-SystemView](https://user-images.githubusercontent.com/1454947/193457596-05dc4316-9f2a-41ae-aa27-9609c680ec5a.jpeg)
+
+## Updates & minor additions in 0.5.0b
+
+* New variables system: now some variables such as game folder location are saved in /var/config/retrodeck/retrodeck.cfg.
+* Rewritten build and publication workflows
+* Updated ES-DE from 1.2.4 to 1.2.6
(Please note that not all the supported emulators in ES-DE are included in RetroDECK at this moment)
+For the full ES-DE patch notes follow these links:
+[1.2.5 Patch Notes](https://gitlab.com/es-de/emulationstation-de/-/blob/master/CHANGELOG.md#version-125)
+[1.2.6 Patch Notes](https://gitlab.com/es-de/emulationstation-de/-/blob/master/CHANGELOG.md#version-126)
+* Updated RetroArch, updated all cores and added new cores from 1.10.2 to 1.11.1
+[1.10.3 Patch Notes](https://www.libretro.com/index.php/retroarch-1-10-3-release/)
+[1.11.1 Patch Notes](https://www.libretro.com/index.php/retroarch-1-11-0-release/)
+* Updated all the standalone emulators to their latest releases
+* Updated all included themes to their latest version.
+
+## Bug fixes in 0.5.0b
+
+* Removed the unavailable emulators from the ES-DE interface to avoid confusion.
+* Solved an issue where Dolphin (Standalone) was not saving in the intended directories.
+* Various smaller bug fixes, for a more detailed list check the [issues list](https://github.com/XargonWan/RetroDECK/issues?q=is%3Aissue+milestone%3A0.5.0b+)
\ No newline at end of file
diff --git a/wiki-rtd/Yuzu-Mods.md b/wiki-rtd/Yuzu-Mods.md
new file mode 100644
index 00000000..9000da34
--- /dev/null
+++ b/wiki-rtd/Yuzu-Mods.md
@@ -0,0 +1,33 @@
+# Yuzu
+
+**Note:**
+`TITLEID` is different for every game.
+
+## How do I add mods?
+
+**Requirements:** Mod files
+
+**NOTE:** On the Steam Deck this could be easier to do in `Desktop Mode`.
+
+There are two ways of adding mods into Yuzu
+
+### From Yuzu directly
+1. Extract any mod files from compressed `.zip` or any other format to folders.
+2. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`.
+3. Right click on the game you want to add mods into.
+4. Click on `Open Mod Data Destination`.
+5. Paste the mod folders inside that directory.
+6. Right clicking on the game and selecting `Properties`.
+7. Enable the mods you want to enable by pressing the checkboxes in the `Add-Ons` tab and press OK.
+8. Quit Yuzu
+
+### From the mods/yuzu folder
+
+
+1. Extract any mod files from compressed `.zip` or any other format into folders.
+2. Go into `~/retrodeck/mods/yuzu/` and file the right folder for the game you want to add mods to. The folders are all named by `TITLEID`.
+3. Move those folders into `~/retrodeck/mods/yuzu/`
+4. Open up Yuzu inside `RetroDECK Configurator` by pressing `Open Emulator` - `Yuzu`.
+5. Right clicking on the game and selecting `Properties`.
+6. Enable the mods you want to enable by pressing the checkboxes in the `Add-Ons` tab and press OK.
+7. Quit Yuzu
diff --git a/wiki-rtd/_Sidebar.md b/wiki-rtd/_Sidebar.md
new file mode 100644
index 00000000..92752fef
--- /dev/null
+++ b/wiki-rtd/_Sidebar.md
@@ -0,0 +1,65 @@
+# Wiki startpage
+[Home[(/XargonWan/RetroDECK/wiki)]
+
+## RetroDECK: Getting started
+- [How to: Getting started[(How-to-Getting-started.md)]
+- [FAQs: Frequently asked questions[(FAQs-Frequently-asked-questions.md)]
+- [EmulationStation DE: User Guide[(EmulationStation-DE-User-Guide.md)]
+
+## RetroDECK: General information
+- [How to: Manage your games[(How-to-Manage-your-games.md)]
+- [Emulators: What's included?[(Emulators-What's-included.md)]
+- [Emulators: BIOS and Firmware[(Emulators-BIOS-and-Firmware.md)]
+- [Emulators: Different controller layouts[(Emulators-Diffrent-controller-layouts.md)]
+- [Emulators: Supported folders and files[(Emulators-Supported-folders-and-files.md)]
+- [EmulationStation DE: Themes[é(EmulationStation-DE-Themes.md)]
+
+## RetroDECK: Configuration
+- [RetroDECK: Configurator[(RetroDECK-Configurator.md)]
+- [RetroDECK: CLI[(RetroDECK-CLI.md)]
+- [RetroDECK: Folders and filepaths[(RetroDECK-Folders-and-filepaths.md)]
+
+## RetroDECK: Development
+- [Development: General notes[(Development-General-notes.md)]
+- [Known Issues[(Known-Issues.md)]
+- [Version history: Patch Notes[(Version-history-Patch-Notes.md)]
+- [How can I help with testing?[(How-can-I-help-with-testing.md)]
+
+
+## Emulator Guides:
+- [Playstation 3: RPCS3[(Playstation-3-RPCS3.md)]
+- [Switch: Yuzu[(Switch-Yuzu.md)]
+
+## Mod Guides:
+- [Yuzu: Mods[(Yuzu-Mods.md)]
+- [Citra: Mods[(Citra-Mods.md)]
+- [Dolphin and Primehack: Mods[(Dolphin-and-Primehack-Mods.md)]
+
+## Texture Packs Guides:
+
+- [Citra: Texture Packs[(Citra-Texture-Packs.md)]
+- [Dolphin and Primehack: Texture Packs[(Dolphin-and-Primehack-Texture-Packs.md)]
+- [Duckstation: Texture Packs[(Duckstation-Texture-Packs.md)]
+- [RetroArch Mesen: Texture Packs[(RetroArch-Mesen-Texture-Packs.md)]
+- [RetroArch Mupen64Plus Next: Texture Packs[(RetroArch-Mupen64Plus-Next-Texture-Packs.md)]
+- [PPSSPP: Texture Packs[(PPSSPP-Texture-Packs.md)]
+- [PCXS2: Texture Packs[(PCXS2-Texture-Packs.md)]
+
+## Steam Deck
+- [Steam Deck: Installation and updates[(Steam-Deck-Installation-and-updates.md)]
+- [Steam Deck: Hotkeys and controls[(Steam-Deck-Hotkeys-and-controls.md)]
+- [Steam Deck: Optimizations[(Steam-Deck-Optimizations.md)]
+- [Steam Deck: Software recommendations[(Steam-Deck-Software-recommendations.md)]
+
+## Linux Desktop
+- [Linux Desktop: Software recommendations[(Linux-Desktop-Software-recommendations.md)]
+
+## Other Devices
+- (More information later)
+
+## Credits & Other
+- [RetroDECK: Credits and The Team[(RetroDECK-Credits-and-The-Team.md)]
+- [RetroDECK: The story of RetroDECK[(RetroDECK-The-story-of-RetroDECK.md)]
+- [RetroDECK: Social media rules[(RetroDECK-Social-media-rules.md)]
+- [Licences[(Licences.md)]
+- [Archive[(Archive.md)]
\ No newline at end of file
diff --git a/wiki-rtd/conf.py b/wiki-rtd/conf.py
new file mode 100644
index 00000000..be805dcb
--- /dev/null
+++ b/wiki-rtd/conf.py
@@ -0,0 +1,28 @@
+project = 'RetroDECK'
+author = 'RetroDECK Team'
+
+extensions = [
+ 'sphinx.ext.autodoc',
+ 'sphinx.ext.doctest',
+ 'sphinx.ext.intersphinx',
+ 'sphinx.ext.todo',
+ 'sphinx.ext.coverage',
+ 'sphinx.ext.mathjax',
+ 'sphinx.ext.ifconfig',
+ 'sphinx.ext.viewcode',
+ 'sphinx_rtd_theme',
+ 'myst_parser',
+]
+
+language = 'English'
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
+html_theme = "sphinx_rtd_theme"
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+#
+source_suffix = [".md"]
+# source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = "index"
\ No newline at end of file
diff --git a/wiki-rtd/index.md b/wiki-rtd/index.md
new file mode 100644
index 00000000..03c5c421
--- /dev/null
+++ b/wiki-rtd/index.md
@@ -0,0 +1,151 @@
+### RetroDECK Wiki
+
+
+
+
+![Flathub](https://img.shields.io/flathub/downloads/net.retrodeck.retrodeck)
+![Flathub](https://img.shields.io/flathub/v/net.retrodeck.retrodeck)
+![Discord](https://img.shields.io/discord/951662718102962256?label=discord)
+![GitHub](https://img.shields.io/github/license/XargonWan/RetroDECK)
+
+Welcome to the **RetroDECK wiki**!
+
+### 🏗️ This wiki is currently under construction 🏗️
+
+# What is RetroDECK?
+RetroDECK is a [EmulationStation Desktop Edition](https://es-de.org) powered application that builds in a variety of emulators and other software that allows you to play your favorite retro (and even not-so-retro) games in a tidy contained flatpak sandbox environment. It's inspired by embedded emulation systems like AmberELEC, EmuELEC, CoreELEC, Lakka, and Batocera.
+
+You can also check out our: [Flathub Page](https://flathub.org/apps/net.retrodeck.retrodeck)
+
+## What devices/systems does RetroDECK support:
+
+### Steam Deck
+
+Supported from the start and RetroDECK is tailored to the Steam Deck during the beta period. The goal is that all the configurations are ready out-of-the-box and optimized towards the Steam Deck.
+
+### Linux Desktop
+Technically it is working, but the user experience might not be that great it could contain desktop specific bugs and other issues.
+You will also need to manually configure the input to match your desktop and might need to tweak more settings. If you want to try it make sure that your distribution has flatpak support (else you will need to install it).
+We will start to have a bigger desktop focus after the beta period is over.
+
+
+### Other SteamOS or Linux handheld gaming devices with flatpak support
+We do plan to support other SteamOS based devices in the future. But during the BETA we are focusing on the Steam Deck.
+You can get it to run on other Linux based devices it is not just as seamless as we want it to be and does not live up to our higher standards.
+You will need to manually configure the input to match your device and might need to tweak more settings if you try it on a none Steam Deck device. There might also be some hardware specific bugs.
+
+## Do you have any plans for other systems?
+RetroDECK does not have plans to support Windows, macOS, Android, or iOS.
For similar functionality on Windows you could explore [Retrobat](https://www.retrobat.org/) as an alternative.
+
+
+## How do I start using RetroDECK?
+
+Please read the [How to: Getting started](https://github.com/XargonWan/RetroDECK/wiki/How-to-Getting-started)
+
+## RetroDECK is currently in in BETA and is not a full release.
+
+- What does "currently in beta" mean?, It means that the software is still under heavy development and big updates can be made that change, add, or remove features.
+
+- RetroDECK is missing some minor and major; emulators, features and configurations. The goal is to have them added over time.
+ Please check the [Known Issues](https://github.com/XargonWan/RetroDECK/wiki/Known-Issues) page and the [Issue tracker](https://github.com/XargonWan/RetroDECK/issues) for more information.
+
+- RetroDECK during the BETA period only supports the Steam Deck, but for the full release we should have full Linux Desktop support read more at [FAQs: General questions](https://github.com/XargonWan/RetroDECK/wiki/FAQs-Frequently-asked-questions#general-questions).
+- The "b" in the versioning stands for BETA but RetroDECK is perfectly fine for daily use even during the beta phase, albeit some features are missing. To see what features are missing check the: [Known Issues page](https://github.com/XargonWan/RetroDECK/wiki/Known-Issues).
+
+## The RetroDECK community:
+
+[Website](https://retrodeck.net)
+[Discord](https://discord.gg/Dz3szYsP8g)
+[Lemmy](https://lemmy.zip/c/retrodeck)
+[Subreddit](https://www.reddit.com/r/retrodeck)
+
+# Whats the long term vision and goals?
+The long term vision and goals of the project is an all-in-one application to manage your entire retro games library that is:
+
+- Already configured and should just work with your games.
+
+- Has disaster recovery and multi device support: with cloud saves and syncs.
+
+- Easy to install with one click installation.
+
+- Easy to use and provide a "Console-like / Batocera-like" featured user experience.
+
+- Easy to manage your collections of roms, mods and romhacks.
+
+- As much as possible should be configurable from inside RetroDECK itself without needing to exiting the application.
+
+- Make tighter integrations with bundled emulators and expose more features and ways to handle them to the end users.
+
+- Should be secure, safe, and stable.
+
+- Should have an easy way to mange external controllers and other inputs.
+
+- Should support a majority of all supported Emulators in ES-DE
+
+- Should in the long run support applications outside of the scope of ES-DE
+
+- Should be plug and play and fill the need for a portable retro gaming solution that you can bring on the go to a friend’s/family/others house. Just dock into the TV and get going!
+
+- Should fully support Steam Deck, SteamOS based devices and the Linux Desktop.
+
+- AND MORE
+
+# Can I contribute to the project?
+Yes! Everybody is welcome to contribute in any way possible if it is personal time or funds.
+
+- Do you know how to code and want to contribute? Please join the development team!
+
+- Maybe you know graphics, art or UI & UX design? Join the discussion!
+
+- You can just help by helping others in the support or guide people on various social media and communication platforms.
+
+- You can also help by just finding and testing the best configurations for the emulators and the roms.
+
+- Or just help us by doing bug reports on all the issues you find (please check old issues first before submitting a new one).
+
+- By joining the ✨-new-helpers-start-here channel on [Discord](discord.gg/Dz3szYsP8g) and keeping an eye on the [issues](https://github.com/XargonWan/RetroDECK/issues) tab as well as the [Roadmap](https://github.com/XargonWan/RetroDECK/milestones) tab, you can be up to speed on the latest developments on RetroDECK.
+
+- We have a [Patreon](https://www.patreon.com/RetroDECK) page if you want to help us keep our build servers running or just buy us a beverage.
+
+## Any specific examples of what you need help with?
+
+### Artist/Creators:
+- Create new pixel art for the Radial menus.
+
+- Create easter egg art for various holidays and functions.
+
+- Create menu art for a new Configurator.
+
+- Create input art that can be shown when you start a game.
+
+- Create input art guides for the wiki for the Steam Deck and later various controllers.
+
+- Create patch note and hype videos.
+
+- Create instruction videos.
+
+- Help us make RetroDECK better.
+
+### Developers:
+- Help us put in and make new features.
+
+- Help us make the Configurator a godot application with full controller support.
+
+- Help us get releases out faster.
+
+- Help us make RetroDECK better.
+
+### Testers:
+- Help us test cooker builds and submit bugs and feedback.
+
+- Help us make RetroDECK better.
+
+### Everyone:
+
+- Be kind and follow the rules.
+
+- Spread the word of RetroDECK if you like it, if you don't like it or have suggestions put them on github into issues or discuss them on discord.
+
+- Engage with the rest of the community.
+
+- Help us make RetroDECK better.
diff --git a/wiki-rtd/requirements.txt b/wiki-rtd/requirements.txt
new file mode 100644
index 00000000..06e83580
--- /dev/null
+++ b/wiki-rtd/requirements.txt
@@ -0,0 +1,2 @@
+sphinx_rtd_theme
+myst-parser
\ No newline at end of file