diff --git a/emu-configs/defaults/duckstation/settings.ini b/emu-configs/defaults/duckstation/settings.ini
index 50d2654f..43f1ef6e 100644
--- a/emu-configs/defaults/duckstation/settings.ini
+++ b/emu-configs/defaults/duckstation/settings.ini
@@ -7,25 +7,23 @@ SyncToHostRefreshRate = false
 IncreaseTimerResolution = true
 InhibitScreensaver = true
 StartPaused = false
-StartFullscreen = false
+StartFullscreen = true
 PauseOnFocusLoss = false
 PauseOnMenu = true
 SaveStateOnExit = true
-CreateSaveStateBackups = true
-CompressSaveStates = true
-ConfirmPowerOff = true
+ConfirmPowerOff = false
 LoadDevicesFromSaveStates = false
-ApplyCompatibilitySettings = true
 ApplyGameSettings = true
 AutoLoadCheats = true
 DisableAllEnhancements = false
 RewindEnable = false
 RewindFrequency = 10.000000
 RewindSaveSlots = 10
-RunaheadFrameCount = 0
+RunaheadFrameCount = 0.000000
 ControllerBackend = SDL
 ControllerEnhancedMode = false
 EnableDiscordPresence = false
+RenderToMainWindow = true
 
 
 [Console]
@@ -35,19 +33,17 @@ Enable8MBRAM = false
 
 [CPU]
 ExecutionMode = Recompiler
-OverclockEnable = false
 OverclockNumerator = 1
 OverclockDenominator = 1
 OverclockEnable = false
 RecompilerMemoryExceptions = false
 RecompilerBlockLinking = true
-RecompilerICache = false
-FastmemMode = MMap
+ICache = false
+FastmemMode = true
 
 
 [GPU]
 Renderer = OpenGL
-Adapter =
 ResolutionScale = 1
 Multisamples = 1
 UseDebugDevice = false
@@ -55,8 +51,7 @@ UseSoftwareRendererForReadbacks = false
 PerSampleShading = false
 UseThread = true
 ThreadedPresentation = true
-UseSoftwareRendererForReadbacks = false
-TrueColor = true
+TrueColor = false
 ScaledDithering = true
 TextureFilter = Nearest
 DownsampleMode = Disabled
@@ -67,13 +62,12 @@ ChromaSmoothing24Bit = false
 PGXPEnable = false
 PGXPCulling = true
 PGXPTextureCorrection = true
-PGXPColorCorrection = false
 PGXPVertexCache = false
 PGXPCPU = false
 PGXPPreserveProjFP = false
 PGXPTolerance = -1.000000
 PGXPDepthBuffer = false
-PGXPDepthClearThreshold = 1228800.000000
+PGXPDepthClearThreshold = 300.000000
 
 
 [Display]
@@ -82,10 +76,9 @@ ActiveStartOffset = 0
 ActiveEndOffset = 0
 LineStartOffset = 0
 LineEndOffset = 0
-Force4_3For24Bit = false
 AspectRatio = Auto (Game Native)
-Alignment = Center
-CustomAspectRatioNumerator = 0
+CustomAspectRatioNumerator = 4
+Force4_3For24Bit = false
 LinearFiltering = true
 IntegerScaling = false
 Stretch = false
@@ -95,10 +88,7 @@ ShowFPS = false
 ShowVPS = false
 ShowSpeed = false
 ShowResolution = false
-ShowCPU = false
-ShowGPU = false
 ShowStatusIndicators = true
-ShowInputs = false
 ShowEnhancements = false
 Fullscreen = false
 VSync = false
@@ -106,16 +96,12 @@ DisplayAllFrames = false
 PostProcessChain =
 MaxFPS = 0.000000
 InternalResolutionScreenshots = false
-VSync = false
-MaxFPS = 0.000000
-OSDScale = 100.000000
 
 
 [CDROM]
 ReadaheadSectors = 8
 RegionCheck = false
 LoadImageToRAM = false
-LoadImagePatches = false
 MuteCDAudio = false
 ReadSpeedup = 1
 SeekSpeedup = 1
@@ -123,57 +109,84 @@ SeekSpeedup = 1
 
 [Audio]
 Backend = Cubeb
-Driver =
-StretchMode = TimeStretch
-BufferMS = 50
-OutputLatencyMS = 20
 OutputVolume = 100
 FastForwardVolume = 100
-OutputMuted = false
+BufferSize = 2048
+Resampling = true
+OutputMuted = 0
+Sync = true
 DumpOnBoot = false
 
 
-[Hacks]
-DMAMaxSliceTicks = 1000
-DMAHaltTicks = 100
-GPUFIFOSize = 16
-GPUMaxRunAhead = 128
-
-
 [BIOS]
-PatchTTYEnable = false
-PatchFastBoot = false
-SearchDirectory = bios
+SearchDirectory = /home/deck/retrodeck/bios
 PathNTSCU =
 PathNTSCJ =
 PathPAL =
+PatchTTYEnable = false
+PatchFastBoot = false
+
+
+[Controller1]
+Type = AnalogController
+ButtonUp = Controller0/Button11
+ButtonDown = Controller0/Button12
+ButtonLeft = Controller0/Button13
+ButtonRight = Controller0/Button14
+ButtonSelect = Controller0/Button4
+ButtonStart = Controller0/Button6
+ButtonTriangle = Controller0/Button3
+ButtonCross = Controller0/Button0
+ButtonSquare = Controller0/Button2
+ButtonCircle = Controller0/Button1
+ButtonL1 = Controller0/Button9
+ButtonL2 = Controller0/+Axis4
+ButtonR1 = Controller0/Button10
+ButtonR2 = Controller0/+Axis5
+ButtonL3 = Controller0/Button7
+ButtonR3 = Controller0/Button8
+AxisLeftX = Controller0/Axis0
+AxisLeftY = Controller0/Axis1
+AxisRightX = Controller0/Axis2
+AxisRightY = Controller0/Axis3
+
+
+[Controller2]
+Type = None
+
+
+[Controller3]
+Type = None
+
+
+[Controller4]
+Type = None
+
+
+[Controller5]
+Type = None
+
+
+[Controller6]
+Type = None
+
+
+[Controller7]
+Type = None
+
+
+[Controller8]
+Type = None
 
 
 [MemoryCards]
 Card1Type = PerGameTitle
 Card2Type = None
 UsePlaylistTitle = true
-Directory = memcards
 
 
 [ControllerPorts]
 MultitapMode = Disabled
-PointerXScale = 8.000000
-PointerYScale = 8.000000
-PointerXInvert = false
-PointerYInvert = false
-
-
-[Cheevos]
-Enabled = false
-TestMode = false
-UnofficialTestMode = false
-UseFirstDiscFromPlaylist = true
-RichPresence = true
-ChallengeMode = false
-Leaderboards = true
-SoundEffects = true
-PrimedIndicators = true
 
 
 [Logging]
@@ -197,103 +210,32 @@ ShowMDECState = false
 ShowDMAState = false
 
 
-[TextureReplacements]
-EnableVRAMWriteReplacements = false
-PreloadTextures = false
-DumpVRAMWrites = false
-DumpVRAMWriteForceAlphaChannel = true
-DumpVRAMWriteWidthThreshold = 128
-DumpVRAMWriteHeightThreshold = 128
-
-
-[Folders]
-Cache = cache
-Cheats = cheats
-Covers = covers
-Dumps = dump
-GameSettings = gamesettings
-InputProfiles = inputprofiles
-SaveStates = savestates
-Screenshots = screenshots
-Shaders = shaders
-Textures = textures
-
-
-[UI]
-MainWindowGeometry = AdnQywADAAAAAAGWAAAAeQAABLUAAAM0AAABlgAAAHkAAAS1AAADNAAAAAAAAAAABk0AAAGWAAAAeQAABLUAAAM0
-
-
-[InputSources]
-SDL = true
-SDLControllerEnhancedMode = false
-Evdev = false
-XInput = false
-RawInput = false
-
-
-[Pad1]
-Type = AnalogController
-Up = Keyboard/Up
-Right = Keyboard/Right
-Down = Keyboard/Down
-Left = Keyboard/Left
-Triangle = Keyboard/I
-Circle = Keyboard/L
-Cross = Keyboard/K
-Square = Keyboard/J
-Select = Keyboard/Backspace
-Start = Keyboard/Return
-L1 = Keyboard/Q
-R1 = Keyboard/E
-L2 = Keyboard/1
-R2 = Keyboard/3
-L3 = Keyboard/2
-R3 = Keyboard/4
-LLeft = Keyboard/A
-LRight = Keyboard/D
-LDown = Keyboard/S
-LUp = Keyboard/W
-RLeft = Keyboard/F
-RRight = Keyboard/H
-RDown = Keyboard/G
-RUp = Keyboard/T
-
-
-[Pad2]
-Type = None
-
-
-[Pad3]
-Type = None
-
-
-[Pad4]
-Type = None
-
-
-[Pad5]
-Type = None
-
-
-[Pad6]
-Type = None
-
-
-[Pad7]
-Type = None
-
-
-[Pad8]
-Type = None
+[Hacks]
+DMAMaxSliceTicks = 1000
+DMAHaltTicks = 100
+GPUFIFOSize = 16
+GPUMaxRunAhead = 128
 
 
 [Hotkeys]
 FastForward = Keyboard/Tab
 TogglePause = Keyboard/Space
+ToggleFullscreen = Keyboard/Alt+Return
 Screenshot = Keyboard/F10
-ToggleFullscreen = Keyboard/F11
-OpenPauseMenu = Keyboard/Escape
+PowerOff = Keyboard/Escape
 LoadSelectedSaveState = Keyboard/F1
 SaveSelectedSaveState = Keyboard/F2
 SelectPreviousSaveStateSlot = Keyboard/F3
-SelectNextSaveStateSlot = Keyboard/F4
\ No newline at end of file
+SelectNextSaveStateSlot = Keyboard/F4
+
+
+[Cheevos]
+Enabled = false
+TestMode = false
+UnofficialTestMode = false
+UseFirstDiscFromPlaylist = true
+
+
+[UI]
+MainWindowGeometry = AdnQywADAAAAAAAAAAAAAAAAAx8AAAK7AAAAAAAAAAAAAAMfAAACuwAAAAAAAAAABQAAAAAAAAAAAAAAAx8AAAK7
+MainWindowState = AAAA/wAAAAD9AAAAAAAAAyAAAAJQAAAABAAAAAQAAAAIAAAACPwAAAABAAAAAgAAAAEAAAAOAHQAbwBvAGwAQgBhAHIBAAAAAP////8AAAAAAAAAAA==
\ No newline at end of file
diff --git a/emu-configs/defaults/primehack/Dolphin.ini b/emu-configs/defaults/primehack/Dolphin.ini
new file mode 100644
index 00000000..8983fa34
--- /dev/null
+++ b/emu-configs/defaults/primehack/Dolphin.ini
@@ -0,0 +1,68 @@
+[Analytics]
+ID = 0d7f9276eb4e2200f7454c1bf3d780e0
+Enabled = False
+[Core]
+InitialPrimeHackRun = True
+SIDevice0 = 7
+SIDevice1 = 0
+SIDevice2 = 0
+SIDevice3 = 0
+AutoDiscChange = False
+CPUThread = True
+EnableCheats = False
+OverrideRegionSettings = False
+EnablePrimeHack = True
+EmulationSpeed = 1.0
+FallbackRegion = 1
+AudioStretch = False
+AudioStretchMaxLatency = 80
+CPUCore = 1
+DPL2Decoder = False
+DPL2Quality = 2
+DSPHLE = True
+EnableCustomRTC = False
+MMU = False
+OverclockEnable = False
+RAMOverrideEnable = False
+SelectedLanguage = 0
+SerialPort1 = 255
+SkipIPL = True
+SlotA = 8
+SlotB = 255
+WiiKeyboard = False
+WiiSDCard = True
+WiiSDCardAllowWrites = True
+WiiSDCardEnableFolderSync = False
+[NetPlay]
+TraversalChoice = direct
+[General]
+UseDiscordPresence = True
+HotkeysRequireFocus = True
+UseGameCovers = False
+RecursiveISOPaths = False
+[Display]
+DisableScreenSaver = True
+KeepWindowOnTop = False
+[Interface]
+ConfirmStop = True
+LanguageCode =
+OnScreenDisplayMessages = True
+PauseOnFocusLost = False
+ShowActiveTitle = True
+UseBuiltinTitleDatabase = True
+UsePanicHandlers = False
+ThemeName = Clean
+DebugModeEnabled = False
+CursorVisibility = 2
+[DSP]
+Backend = No Audio Output
+EnableJIT = False
+[GBA]
+BIOS =
+Rom1 =
+Rom2 =
+Rom3 =
+Rom4 =
+SavesInRomPath = False
+SavesPath =
+Threads = True
diff --git a/emu-configs/defaults/primehack/FreeLookController.ini b/emu-configs/defaults/primehack/FreeLookController.ini
new file mode 100644
index 00000000..0a03c416
--- /dev/null
+++ b/emu-configs/defaults/primehack/FreeLookController.ini
@@ -0,0 +1,22 @@
+[FreeLook1]
+Device = XInput2/0/Virtual core pointer
+Move/Up = @(Shift+E)
+Move/Down = @(Shift+Q)
+Move/Left = @(Shift+A)
+Move/Right = @(Shift+D)
+Move/Forward = @(Shift+W)
+Move/Backward = @(Shift+S)
+Speed/Decrease = @(Shift+`1`)
+Speed/Increase = @(Shift+`2`)
+Speed/Reset = @(Shift+F)
+Other/Reset View = @(Shift+R)
+Field of View/Increase X = @(Shift+`Axis Z+`)
+Field of View/Decrease X = @(Shift+`Axis Z-`)
+Field of View/Increase Y = @(Shift+`Axis Z+`)
+Field of View/Decrease Y = @(Shift+`Axis Z-`)
+Incremental Rotation/Pitch Up = if(`Click 3`,`RelativeMouse Y-` * 0.10, 0)
+Incremental Rotation/Pitch Down = if(`Click 3`,`RelativeMouse Y+` * 0.10, 0)
+Incremental Rotation/Roll Left = if(`Click 2`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Roll Right = if(`Click 2`,`RelativeMouse X+` * 0.10, 0)
+Incremental Rotation/Yaw Left = if(`Click 3`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Yaw Right = if(`Click 3`,`RelativeMouse X+` * 0.10, 0)
diff --git a/emu-configs/defaults/primehack/GBA.ini b/emu-configs/defaults/primehack/GBA.ini
new file mode 100644
index 00000000..3afa86fc
--- /dev/null
+++ b/emu-configs/defaults/primehack/GBA.ini
@@ -0,0 +1,18 @@
+[GBA1]
+Device = XInput2/0/Virtual core pointer
+Buttons/B = `Z`
+Buttons/A = `X`
+Buttons/L = `Q`
+Buttons/R = `W`
+Buttons/SELECT = `Backspace`
+Buttons/START = `Return`
+D-Pad/Up = `T`
+D-Pad/Down = `G`
+D-Pad/Left = `F`
+D-Pad/Right = `H`
+[GBA2]
+Device = XInput2/0/Virtual core pointer
+[GBA3]
+Device = XInput2/0/Virtual core pointer
+[GBA4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/defaults/primehack/GCKeyNew.ini b/emu-configs/defaults/primehack/GCKeyNew.ini
new file mode 100644
index 00000000..dcdb8ce3
--- /dev/null
+++ b/emu-configs/defaults/primehack/GCKeyNew.ini
@@ -0,0 +1,93 @@
+[GCKeyboard1]
+Device = XInput2/0/Virtual core pointer
+Keys/HOME = Home
+Keys/END = End
+Keys/PGUP = Prior
+Keys/PGDN = Next
+Keys/SCR LK = Scroll_Lock
+Keys/A = A
+Keys/B = B
+Keys/C = C
+Keys/D = D
+Keys/E = E
+Keys/F = F
+Keys/G = G
+Keys/H = H
+Keys/I = I
+Keys/J = J
+Keys/K = K
+Keys/L = L
+Keys/M = M
+Keys/N = N
+Keys/O = O
+Keys/P = P
+Keys/Q = Q
+Keys/R = R
+Keys/S = S
+Keys/T = T
+Keys/U = U
+Keys/V = V
+Keys/W = W
+Keys/X = X
+Keys/Y = Y
+Keys/Z = Z
+Keys/1 = `1`
+Keys/2 = `2`
+Keys/3 = `3`
+Keys/4 = `4`
+Keys/5 = `5`
+Keys/6 = `6`
+Keys/7 = `7`
+Keys/8 = `8`
+Keys/9 = `9`
+Keys/0 = `0`
+Keys/- = minus
+Keys/` = grave
+Keys/PRT SC = Print
+Keys/' = apostrophe
+Keys/[ = bracketleft
+Keys/EQUALS = equal
+Keys/* = KP_Multiply
+Keys/] = bracketright
+Keys/, = comma
+Keys/. = period
+Keys// = slash
+Keys/\ = backslash
+Keys/F1 = F1
+Keys/F2 = F2
+Keys/F3 = F3
+Keys/F4 = F4
+Keys/F5 = F5
+Keys/F6 = F6
+Keys/F7 = F7
+Keys/F8 = F8
+Keys/F9 = F9
+Keys/F10 = F10
+Keys/F11 = F11
+Keys/F12 = F12
+Keys/ESC = Escape
+Keys/INSERT = Insert
+Keys/DELETE = Delete
+Keys/; = semicolon
+Keys/BACKSPACE = BackSpace
+Keys/TAB = Tab
+Keys/CAPS LOCK = Caps_Lock
+Keys/L SHIFT = Shift_L
+Keys/R SHIFT = Shift_R
+Keys/L CTRL = Control_L
+Keys/R ALT = Alt_R
+Keys/L WIN = Super_L
+Keys/SPACE = space
+Keys/R WIN = Super_R
+Keys/MENU = Menu
+Keys/LEFT = Left
+Keys/DOWN = Down
+Keys/UP = Up
+Keys/RIGHT = Right
+Keys/ENTER = Return
+[GCKeyboard2]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard3]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/defaults/primehack/GCPadNew.ini b/emu-configs/defaults/primehack/GCPadNew.ini
new file mode 100644
index 00000000..edb3b23b
--- /dev/null
+++ b/emu-configs/defaults/primehack/GCPadNew.ini
@@ -0,0 +1,41 @@
+[GCPad1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/X = Ctrl
+Buttons/Y = F
+Buttons/Z = Tab
+Buttons/Start = grave
+Main Stick/Up = W | Up
+Main Stick/Down = S | Down
+Main Stick/Left = A | Left
+Main Stick/Right = D | Right
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = !E & `1`
+C-Stick/Down = !E & `3`
+C-Stick/Left = !E & `4`
+C-Stick/Right = !E & `2`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Click 3`
+D-Pad/Up = E & `1`
+D-Pad/Down = E & `3`
+D-Pad/Left = E & `2`
+D-Pad/Right = E & `4`
+Camera Control/Modifier/Range = 50.0
+[GCPad2]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad3]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad4]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/defaults/primehack/Logger.ini b/emu-configs/defaults/primehack/Logger.ini
new file mode 100644
index 00000000..9021eeae
--- /dev/null
+++ b/emu-configs/defaults/primehack/Logger.ini
@@ -0,0 +1,58 @@
+[Logs]
+ActionReplay = False
+AI = False
+Audio = False
+BOOT = False
+CI = False
+COMMON = False
+CONSOLE = False
+CORE = False
+CP = False
+DIO = False
+DSP = False
+DSPHLE = False
+DSPLLE = False
+DSPMails = False
+DVD = False
+EXI = False
+FileMon = False
+FRAMEDUMP = False
+GDB_STUB = False
+GP = False
+HLE = False
+Host GPU = False
+HSP = False
+IOS = False
+IOS_DI = False
+IOS_ES = False
+IOS_FS = False
+IOS_NET = False
+IOS_SD = False
+IOS_SSL = False
+IOS_STM = False
+IOS_USB = False
+IOS_WC24 = False
+IOS_WFS = False
+IOS_WIIMOTE = False
+JIT = False
+MASTER = False
+MemCard Manager = False
+MI = False
+NETPLAY = False
+OSREPORT = False
+OSREPORT_HLE = False
+PE = False
+PI = False
+PowerPC = False
+SI = False
+SP1 = False
+SYMBOLS = False
+VI = False
+Video = False
+WII_IPC = False
+Wiimote = False
+[Options]
+Verbosity = 1
+WriteToConsole = True
+WriteToFile = False
+WriteToWindow = True
diff --git a/emu-configs/defaults/primehack/Qt.ini b/emu-configs/defaults/primehack/Qt.ini
new file mode 100644
index 00000000..4b5f0311
--- /dev/null
+++ b/emu-configs/defaults/primehack/Qt.ini
@@ -0,0 +1,90 @@
+[breakpointwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[cheatsmanager]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[codewidget]
+boxsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x4\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+codesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\x8b\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3)
+
+[debugger]
+showcode=true
+
+[gamelist]
+autorefresh=true
+
+[gridview]
+scale=@Variant(\0\0\0\x87?\x80\0\0)
+
+[jitwidget]
+asmsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+tablesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+
+[logconfigwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[logging]
+font=0
+wraplines=false
+
+[logwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[mainwindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\xf0\0\0\0\\\0\0\x4\xf\0\0\x3l\0\0\0\xf0\0\0\0y\0\0\x4\xf\0\0\x3l\0\0\0\0\0\0\0\0\x5\0\0\0\0\xf0\0\0\0y\0\0\x4\xf\0\0\x3l)
+state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\x8f\0\0\x2\x80\xfc\x2\0\0\0\x1\xfc\0\0\0t\0\0\x2\x80\0\0\0\0\0\xff\xff\xff\xfa\xff\xff\xff\xff\x2\0\0\0\n\xfb\0\0\0\x6\0l\0o\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xb1\x1\0\0\x3\xfb\0\0\0\x12\0l\0o\0g\0\x63\0o\0n\0\x66\0i\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x1b\x1\0\0\x3\xfb\0\0\0\b\0\x63\0o\0\x64\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x80\x1\0\0\x3\xfb\0\0\0\x12\0r\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0}\x1\0\0\x3\xfb\0\0\0\xe\0t\0h\0r\0\x65\0\x61\0\x64\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x91\x1\0\0\x3\xfb\0\0\0\n\0w\0\x61\0t\0\x63\0h\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xab\x1\0\0\x3\xfb\0\0\0\x16\0\x62\0r\0\x65\0\x61\0k\0p\0o\0i\0n\0t\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xab\x1\0\0\x3\xfb\0\0\0\f\0m\0\x65\0m\0o\0r\0y\0\0\0\0\0\xff\xff\xff\xff\0\0\0}\x1\0\0\x3\xfb\0\0\0\xe\0n\0\x65\0t\0w\0o\0r\0k\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x92\x1\0\0\x3\xfb\0\0\0\x12\0j\0i\0t\0w\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\x1\x1\0\0\x3\0\0\x3 \0\0\x2\x80\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
+
+[memorywidget]
+addrspace_auxiliary=false
+addrspace_effective=true
+addrspace_physical=false
+bplog=true
+bpread=false
+bpreadwrite=true
+bpwrite=false
+display_type=1
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+inputcombo=1
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\xff\xff\xff\xff\xff\xff\xff\xff\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[netplaydialog]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3)
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xa5\0\0\0\xd7\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[networkwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[registerwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[renderwidget]
+geometry=@ByteArray()
+
+[tableheader]
+state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x2\x1\0\0\0\0\0\0\0\0\0\0\0\xe(?\0\0\0\b\0\0\0\n\0\0\0\x64\0\0\0\x5\0\0\0\x46\0\0\0\x3\0\0\0\x64\0\0\0\r\0\0\0\x64\0\0\0\f\0\0\0\x64\0\0\0\t\0\0\0\x64\0\0\0\b\0\0\0\x64\0\0\0\v\0\0\0\x64\0\0\x3\v\0\0\0\xe\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\0\0\0&\0\0\0\x84\0\0\0\0\0\0\0\xe\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0\x66\0\0\0\x1\0\0\0\x2\0\0\x1\x2\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x1\x2\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0U\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\0)
+
+[threadwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[toolbar]
+visible=true
+
+[userstyle]
+enabled=false
+name=
+
+[watchwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
diff --git a/emu-configs/defaults/primehack/WiimoteNew.ini b/emu-configs/defaults/primehack/WiimoteNew.ini
new file mode 100644
index 00000000..af2be94b
--- /dev/null
+++ b/emu-configs/defaults/primehack/WiimoteNew.ini
@@ -0,0 +1,101 @@
+[Wiimote1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/1 = Tab
+Buttons/2 = `grave`
+Buttons/- = E
+Buttons/+ = R
+Tilt/Modifier/Range = 50.0
+IMUIR/Enabled = False
+Extension = Nunchuk
+Nunchuk/Buttons/C = Ctrl
+Nunchuk/Buttons/Z = `Click 3`
+Nunchuk/Stick/Up = W | UP
+Nunchuk/Stick/Down = S | DOWN
+Nunchuk/Stick/Left = A | LEFT
+Nunchuk/Stick/Right = D | RIGHT
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Nunchuk/Tilt/Modifier/Range = 50.0
+Nunchuk/Shake/Y = LSHIFT & (`Axis Y-` | `Axis Y+` | `Axis X-` | `Axis X+`)
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+D-Pad/Down = F
+PrimeHack/Beam 1 = `1` & !E
+PrimeHack/Beam 2 = `2` & !E
+PrimeHack/Beam 3 = `3` & !E
+PrimeHack/Beam 4 = `4` & !E
+PrimeHack/Next Beam = !E & `Axis Z+`
+PrimeHack/Previous Beam = !E & `Axis Z-`
+PrimeHack/Visor 1 = E & (!`1` & !`2` & !`3`)
+PrimeHack/Visor 2 = E & `1`
+PrimeHack/Visor 3 = E & `2`
+PrimeHack/Visor 4 = E & `3`
+PrimeHack/Next Visor = E & `Axis Z+`
+PrimeHack/Previous Visor = E & `Axis Z-`
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+PrimeHack/Spring Ball = Alt
+PrimeHack/Grapple Lasso = Shift
+[Wiimote2]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote3]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote4]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[BalanceBoard]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Dolphin.ini b/emu-configs/primehack/Dolphin.ini
new file mode 100644
index 00000000..8b4df327
--- /dev/null
+++ b/emu-configs/primehack/Dolphin.ini
@@ -0,0 +1,70 @@
+[Analytics]
+ID = 0d7f9276eb4e2200f7454c1bf3d780e0
+Enabled = False
+[Core]
+InitialPrimeHackRun = True
+SIDevice0 = 7
+SIDevice1 = 0
+SIDevice2 = 0
+SIDevice3 = 0
+AutoDiscChange = False
+CPUThread = True
+EnableCheats = False
+OverrideRegionSettings = False
+EnablePrimeHack = True
+EmulationSpeed = 1.0
+FallbackRegion = 1
+AudioStretch = False
+AudioStretchMaxLatency = 80
+CPUCore = 1
+DPL2Decoder = False
+DPL2Quality = 2
+DSPHLE = True
+EnableCustomRTC = False
+MMU = False
+OverclockEnable = False
+RAMOverrideEnable = False
+SelectedLanguage = 0
+SerialPort1 = 255
+SkipIPL = True
+SlotA = 8
+SlotB = 255
+WiiKeyboard = False
+WiiSDCard = True
+WiiSDCardAllowWrites = True
+WiiSDCardEnableFolderSync = False
+[NetPlay]
+TraversalChoice = direct
+[General]
+UseDiscordPresence = True
+HotkeysRequireFocus = True
+UseGameCovers = False
+RecursiveISOPaths = False
+ISOPath0 = /home/deck/retrodeck/roms/gc
+ISOPaths = 1
+[Display]
+DisableScreenSaver = True
+KeepWindowOnTop = False
+[Interface]
+ConfirmStop = True
+LanguageCode =
+OnScreenDisplayMessages = True
+PauseOnFocusLost = False
+ShowActiveTitle = True
+UseBuiltinTitleDatabase = True
+UsePanicHandlers = False
+ThemeName = Clean
+DebugModeEnabled = False
+CursorVisibility = 2
+[DSP]
+Backend = No Audio Output
+EnableJIT = False
+[GBA]
+BIOS = /var/data/primehack/GBA/gba_bios.bin
+Rom1 =
+Rom2 =
+Rom3 =
+Rom4 =
+SavesInRomPath = False
+SavesPath = /var/data/primehack/GBA/Saves/
+Threads = True
diff --git a/emu-configs/primehack/FreeLookController.ini b/emu-configs/primehack/FreeLookController.ini
new file mode 100644
index 00000000..0a03c416
--- /dev/null
+++ b/emu-configs/primehack/FreeLookController.ini
@@ -0,0 +1,22 @@
+[FreeLook1]
+Device = XInput2/0/Virtual core pointer
+Move/Up = @(Shift+E)
+Move/Down = @(Shift+Q)
+Move/Left = @(Shift+A)
+Move/Right = @(Shift+D)
+Move/Forward = @(Shift+W)
+Move/Backward = @(Shift+S)
+Speed/Decrease = @(Shift+`1`)
+Speed/Increase = @(Shift+`2`)
+Speed/Reset = @(Shift+F)
+Other/Reset View = @(Shift+R)
+Field of View/Increase X = @(Shift+`Axis Z+`)
+Field of View/Decrease X = @(Shift+`Axis Z-`)
+Field of View/Increase Y = @(Shift+`Axis Z+`)
+Field of View/Decrease Y = @(Shift+`Axis Z-`)
+Incremental Rotation/Pitch Up = if(`Click 3`,`RelativeMouse Y-` * 0.10, 0)
+Incremental Rotation/Pitch Down = if(`Click 3`,`RelativeMouse Y+` * 0.10, 0)
+Incremental Rotation/Roll Left = if(`Click 2`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Roll Right = if(`Click 2`,`RelativeMouse X+` * 0.10, 0)
+Incremental Rotation/Yaw Left = if(`Click 3`,`RelativeMouse X-` * 0.10, 0)
+Incremental Rotation/Yaw Right = if(`Click 3`,`RelativeMouse X+` * 0.10, 0)
diff --git a/emu-configs/primehack/GBA.ini b/emu-configs/primehack/GBA.ini
new file mode 100644
index 00000000..3afa86fc
--- /dev/null
+++ b/emu-configs/primehack/GBA.ini
@@ -0,0 +1,18 @@
+[GBA1]
+Device = XInput2/0/Virtual core pointer
+Buttons/B = `Z`
+Buttons/A = `X`
+Buttons/L = `Q`
+Buttons/R = `W`
+Buttons/SELECT = `Backspace`
+Buttons/START = `Return`
+D-Pad/Up = `T`
+D-Pad/Down = `G`
+D-Pad/Left = `F`
+D-Pad/Right = `H`
+[GBA2]
+Device = XInput2/0/Virtual core pointer
+[GBA3]
+Device = XInput2/0/Virtual core pointer
+[GBA4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/primehack/GCKeyNew.ini b/emu-configs/primehack/GCKeyNew.ini
new file mode 100644
index 00000000..dcdb8ce3
--- /dev/null
+++ b/emu-configs/primehack/GCKeyNew.ini
@@ -0,0 +1,93 @@
+[GCKeyboard1]
+Device = XInput2/0/Virtual core pointer
+Keys/HOME = Home
+Keys/END = End
+Keys/PGUP = Prior
+Keys/PGDN = Next
+Keys/SCR LK = Scroll_Lock
+Keys/A = A
+Keys/B = B
+Keys/C = C
+Keys/D = D
+Keys/E = E
+Keys/F = F
+Keys/G = G
+Keys/H = H
+Keys/I = I
+Keys/J = J
+Keys/K = K
+Keys/L = L
+Keys/M = M
+Keys/N = N
+Keys/O = O
+Keys/P = P
+Keys/Q = Q
+Keys/R = R
+Keys/S = S
+Keys/T = T
+Keys/U = U
+Keys/V = V
+Keys/W = W
+Keys/X = X
+Keys/Y = Y
+Keys/Z = Z
+Keys/1 = `1`
+Keys/2 = `2`
+Keys/3 = `3`
+Keys/4 = `4`
+Keys/5 = `5`
+Keys/6 = `6`
+Keys/7 = `7`
+Keys/8 = `8`
+Keys/9 = `9`
+Keys/0 = `0`
+Keys/- = minus
+Keys/` = grave
+Keys/PRT SC = Print
+Keys/' = apostrophe
+Keys/[ = bracketleft
+Keys/EQUALS = equal
+Keys/* = KP_Multiply
+Keys/] = bracketright
+Keys/, = comma
+Keys/. = period
+Keys// = slash
+Keys/\ = backslash
+Keys/F1 = F1
+Keys/F2 = F2
+Keys/F3 = F3
+Keys/F4 = F4
+Keys/F5 = F5
+Keys/F6 = F6
+Keys/F7 = F7
+Keys/F8 = F8
+Keys/F9 = F9
+Keys/F10 = F10
+Keys/F11 = F11
+Keys/F12 = F12
+Keys/ESC = Escape
+Keys/INSERT = Insert
+Keys/DELETE = Delete
+Keys/; = semicolon
+Keys/BACKSPACE = BackSpace
+Keys/TAB = Tab
+Keys/CAPS LOCK = Caps_Lock
+Keys/L SHIFT = Shift_L
+Keys/R SHIFT = Shift_R
+Keys/L CTRL = Control_L
+Keys/R ALT = Alt_R
+Keys/L WIN = Super_L
+Keys/SPACE = space
+Keys/R WIN = Super_R
+Keys/MENU = Menu
+Keys/LEFT = Left
+Keys/DOWN = Down
+Keys/UP = Up
+Keys/RIGHT = Right
+Keys/ENTER = Return
+[GCKeyboard2]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard3]
+Device = XInput2/0/Virtual core pointer
+[GCKeyboard4]
+Device = XInput2/0/Virtual core pointer
diff --git a/emu-configs/primehack/GCPadNew.ini b/emu-configs/primehack/GCPadNew.ini
new file mode 100644
index 00000000..9579f8ef
--- /dev/null
+++ b/emu-configs/primehack/GCPadNew.ini
@@ -0,0 +1,44 @@
+[GCPad1]
+Device = SDL/0/Microsoft X-Box 360 pad 0
+Buttons/A = `Button 0`
+Buttons/B = `Button 1`
+Buttons/X = `Button 2`
+Buttons/Y = `Button 3`
+Buttons/Z = `Button 6`
+Buttons/Start = `Button 7`
+Main Stick/Up = `Axis 4-`
+Main Stick/Down = `Axis 4+`
+Main Stick/Left = `Axis 3-`
+Main Stick/Right = `Axis 3+`
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = `Axis 1-`
+C-Stick/Down = `Axis 1+`
+C-Stick/Left = `Axis 0-`
+C-Stick/Right = `Axis 0+`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Button 4`
+D-Pad/Up = `Hat 0 N`
+D-Pad/Down = `Hat 0 S`
+D-Pad/Left = `Hat 0 W`
+D-Pad/Right = `Hat 0 E`
+Camera Control/Modifier/Range = 50.0
+Triggers/L-Analog = `Full Axis 2+`
+Triggers/R-Analog = `Full Axis 5+`
+Triggers/R = `Button 5`
+[GCPad2]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad3]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
+[GCPad4]
+Device = XInput2/0/Virtual core pointer
+Main Stick/Modifier/Range = 50.0
+C-Stick/Modifier/Range = 50.0
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Logger.ini b/emu-configs/primehack/Logger.ini
new file mode 100644
index 00000000..9021eeae
--- /dev/null
+++ b/emu-configs/primehack/Logger.ini
@@ -0,0 +1,58 @@
+[Logs]
+ActionReplay = False
+AI = False
+Audio = False
+BOOT = False
+CI = False
+COMMON = False
+CONSOLE = False
+CORE = False
+CP = False
+DIO = False
+DSP = False
+DSPHLE = False
+DSPLLE = False
+DSPMails = False
+DVD = False
+EXI = False
+FileMon = False
+FRAMEDUMP = False
+GDB_STUB = False
+GP = False
+HLE = False
+Host GPU = False
+HSP = False
+IOS = False
+IOS_DI = False
+IOS_ES = False
+IOS_FS = False
+IOS_NET = False
+IOS_SD = False
+IOS_SSL = False
+IOS_STM = False
+IOS_USB = False
+IOS_WC24 = False
+IOS_WFS = False
+IOS_WIIMOTE = False
+JIT = False
+MASTER = False
+MemCard Manager = False
+MI = False
+NETPLAY = False
+OSREPORT = False
+OSREPORT_HLE = False
+PE = False
+PI = False
+PowerPC = False
+SI = False
+SP1 = False
+SYMBOLS = False
+VI = False
+Video = False
+WII_IPC = False
+Wiimote = False
+[Options]
+Verbosity = 1
+WriteToConsole = True
+WriteToFile = False
+WriteToWindow = True
diff --git a/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini b/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini
new file mode 100644
index 00000000..7320c1f6
--- /dev/null
+++ b/emu-configs/primehack/Profiles/GCPad/Steam Virtual Controller.ini	
@@ -0,0 +1,29 @@
+[Profile]
+Device = SDL/0/Microsoft X-Box 360 pad 0
+Buttons/A = `Button 0`
+Buttons/B = `Button 1`
+Buttons/X = `Button 2`
+Buttons/Y = `Button 3`
+Buttons/Z = `Button 6`
+Buttons/Start = `Button 7`
+Main Stick/Up = `Axis 4-`
+Main Stick/Down = `Axis 4+`
+Main Stick/Left = `Axis 3-`
+Main Stick/Right = `Axis 3+`
+Main Stick/Modifier/Range = 50.0
+Main Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+C-Stick/Up = `Axis 1-`
+C-Stick/Down = `Axis 1+`
+C-Stick/Left = `Axis 0-`
+C-Stick/Right = `Axis 0+`
+C-Stick/Modifier/Range = 50.0
+C-Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Triggers/L = `Button 4`
+Triggers/R = `Button 5`
+Triggers/L-Analog = `Full Axis 2+`
+Triggers/R-Analog = `Full Axis 5+`
+D-Pad/Up = `Hat 0 N`
+D-Pad/Down = `Hat 0 S`
+D-Pad/Left = `Hat 0 W`
+D-Pad/Right = `Hat 0 E`
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/primehack/Qt.ini b/emu-configs/primehack/Qt.ini
new file mode 100644
index 00000000..c9114c35
--- /dev/null
+++ b/emu-configs/primehack/Qt.ini
@@ -0,0 +1,90 @@
+[breakpointwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[cheatsmanager]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[codewidget]
+boxsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x4\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\0\0\0\x8d\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+codesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\x8b\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0t\0\0\x1\x8e\0\0\x2\xf3)
+
+[debugger]
+showcode=true
+
+[gamelist]
+autorefresh=true
+
+[gridview]
+scale=@Variant(\0\0\0\x87?\x80\0\0)
+
+[jitwidget]
+asmsplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+tablesplitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0W\0\0\0W\x1\xff\xff\xff\xff\x1\0\0\0\x2\0)
+
+[logconfigwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[logging]
+font=0
+wraplines=false
+
+[logwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[mainwindow]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\0\0\0\x3\x1f\0\0\x2\xcc)
+state=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\0\0\0\x1\x8f\0\0\x2\x80\xfc\x2\0\0\0\x1\xfc\0\0\0t\0\0\x2\x80\0\0\0\0\0\xff\xff\xff\xfa\xff\xff\xff\xff\x2\0\0\0\n\xfb\0\0\0\x6\0l\0o\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x88\0\xff\xff\xff\xfb\0\0\0\x12\0l\0o\0g\0\x63\0o\0n\0\x66\0i\0g\0\0\0\0\0\xff\xff\xff\xff\0\0\x1\xc3\0\xff\xff\xff\xfb\0\0\0\b\0\x63\0o\0\x64\0\x65\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x2\0\xff\xff\xff\xfb\0\0\0\x12\0r\0\x65\0g\0i\0s\0t\0\x65\0r\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0]\0\xff\xff\xff\xfb\0\0\0\xe\0t\0h\0r\0\x65\0\x61\0\x64\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x14\0\xff\xff\xff\xfb\0\0\0\n\0w\0\x61\0t\0\x63\0h\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x84\0\xff\xff\xff\xfb\0\0\0\x16\0\x62\0r\0\x65\0\x61\0k\0p\0o\0i\0n\0t\0s\0\0\0\0\0\xff\xff\xff\xff\0\0\0\x84\0\xff\xff\xff\xfb\0\0\0\f\0m\0\x65\0m\0o\0r\0y\0\0\0\0\0\xff\xff\xff\xff\0\0\0]\0\xff\xff\xff\xfb\0\0\0\xe\0n\0\x65\0t\0w\0o\0r\0k\0\0\0\0\0\xff\xff\xff\xff\0\0\x2\x1d\0\xff\xff\xff\xfb\0\0\0\x12\0j\0i\0t\0w\0i\0\x64\0g\0\x65\0t\0\0\0\0\0\xff\xff\xff\xff\0\0\0\xc4\0\xff\xff\xff\0\0\x3 \0\0\x2w\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x1\0\0\0\x2\0\0\0\x1\0\0\0\xe\0t\0o\0o\0l\0\x62\0\x61\0r\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
+
+[memorywidget]
+addrspace_auxiliary=false
+addrspace_effective=true
+addrspace_physical=false
+bplog=true
+bpread=false
+bpreadwrite=true
+bpwrite=false
+display_type=1
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+inputcombo=1
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\xff\xff\xff\xff\xff\xff\xff\xff\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[netplaydialog]
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\x2\x7f\0\0\x1\xf3)
+splitter=@ByteArray(\0\0\0\xff\0\0\0\x1\0\0\0\x2\0\0\0\xa5\0\0\0\xd7\x1\xff\xff\xff\xff\x1\0\0\0\x1\0)
+
+[networkwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[registerwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[renderwidget]
+geometry=@ByteArray()
+
+[tableheader]
+state=@ByteArray(\0\0\0\xff\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\x2\x1\0\0\0\0\0\0\0\0\0\0\0\xe(?\0\0\0\b\0\0\0\t\0\0\0\x64\0\0\0\b\0\0\0\x64\0\0\0\v\0\0\0\x64\0\0\0\n\0\0\0\x64\0\0\0\r\0\0\0\x64\0\0\0\f\0\0\0\x64\0\0\0\x3\0\0\0\x64\0\0\0\x5\0\0\0\x46\0\0\x3\x13\0\0\0\xe\x1\x1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x64\0\0\0&\0\0\0\x84\0\0\0\0\0\0\0\xe\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0\x66\0\0\0\x1\0\0\0\x2\0\0\x1\x6\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x1\x6\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0&\0\0\0\x1\0\0\0\x2\0\0\0U\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\x2\0\0\0\0\0\0\0\x1\0\0\0\0\0\0\x3\xe8\0\0\0\0\0)
+
+[threadwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
+
+[toolbar]
+visible=true
+
+[userstyle]
+enabled=false
+name=
+
+[watchwidget]
+floating=false
+geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31\0\0\0\0\0\0\0\0\x5\0\0\0\0\0\0\0\0\x14\0\0\0\x63\0\0\0\x31)
diff --git a/emu-configs/primehack/WiimoteNew.ini b/emu-configs/primehack/WiimoteNew.ini
new file mode 100644
index 00000000..af2be94b
--- /dev/null
+++ b/emu-configs/primehack/WiimoteNew.ini
@@ -0,0 +1,101 @@
+[Wiimote1]
+Device = XInput2/0/Virtual core pointer
+Buttons/A = `Click 1` | RETURN
+Buttons/B = space
+Buttons/1 = Tab
+Buttons/2 = `grave`
+Buttons/- = E
+Buttons/+ = R
+Tilt/Modifier/Range = 50.0
+IMUIR/Enabled = False
+Extension = Nunchuk
+Nunchuk/Buttons/C = Ctrl
+Nunchuk/Buttons/Z = `Click 3`
+Nunchuk/Stick/Up = W | UP
+Nunchuk/Stick/Down = S | DOWN
+Nunchuk/Stick/Left = A | LEFT
+Nunchuk/Stick/Right = D | RIGHT
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Stick/Calibration = 100.00 141.42 100.00 141.42 100.00 141.42 100.00 141.42
+Nunchuk/Tilt/Modifier/Range = 50.0
+Nunchuk/Shake/Y = LSHIFT & (`Axis Y-` | `Axis Y+` | `Axis X-` | `Axis X+`)
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+D-Pad/Down = F
+PrimeHack/Beam 1 = `1` & !E
+PrimeHack/Beam 2 = `2` & !E
+PrimeHack/Beam 3 = `3` & !E
+PrimeHack/Beam 4 = `4` & !E
+PrimeHack/Next Beam = !E & `Axis Z+`
+PrimeHack/Previous Beam = !E & `Axis Z-`
+PrimeHack/Visor 1 = E & (!`1` & !`2` & !`3`)
+PrimeHack/Visor 2 = E & `1`
+PrimeHack/Visor 3 = E & `2`
+PrimeHack/Visor 4 = E & `3`
+PrimeHack/Next Visor = E & `Axis Z+`
+PrimeHack/Previous Visor = E & `Axis Z-`
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+PrimeHack/Spring Ball = Alt
+PrimeHack/Grapple Lasso = Shift
+[Wiimote2]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote3]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[Wiimote4]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
+[BalanceBoard]
+Device = XInput2/0/Virtual core pointer
+Tilt/Modifier/Range = 50.0
+Nunchuk/Stick/Modifier/Range = 50.0
+Nunchuk/Tilt/Modifier/Range = 50.0
+Classic/Left Stick/Modifier/Range = 50.0
+Classic/Right Stick/Modifier/Range = 50.0
+Guitar/Stick/Modifier/Range = 50.0
+Drums/Stick/Modifier/Range = 50.0
+Turntable/Stick/Modifier/Range = 50.0
+uDraw/Stylus/Modifier/Range = 50.0
+Drawsome/Stylus/Modifier/Range = 50.0
+PrimeHack/AltProfile = Disabled
+Camera Control/Modifier/Range = 50.0
diff --git a/emu-configs/yuzu/qt-config.ini b/emu-configs/yuzu/qt-config.ini
index 166892cc..28d4ca15 100644
--- a/emu-configs/yuzu/qt-config.ini
+++ b/emu-configs/yuzu/qt-config.ini
@@ -86,59 +86,59 @@ player_0_body_color_left=4278893030
 player_0_body_color_left\default=false
 player_0_body_color_right=4294917160
 player_0_body_color_right\default=false
-player_0_button_a="toggle:0,code:67,engine:keyboard"
-player_0_button_a\default=true
-player_0_button_b="toggle:0,code:88,engine:keyboard"
-player_0_button_b\default=true
+player_0_button_a="button:1,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_a\default=false
+player_0_button_b="button:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_b\default=false
 player_0_button_color_left=4278197790
 player_0_button_color_left\default=false
 player_0_button_color_right=4280158730
 player_0_button_color_right\default=false
-player_0_button_ddown="toggle:0,code:16777237,engine:keyboard"
-player_0_button_ddown\default=true
-player_0_button_dleft="toggle:0,code:16777234,engine:keyboard"
-player_0_button_dleft\default=true
-player_0_button_dright="toggle:0,code:16777236,engine:keyboard"
-player_0_button_dright\default=true
-player_0_button_dup="toggle:0,code:16777235,engine:keyboard"
-player_0_button_dup\default=true
-player_0_button_home="engine:keyboard,port:0,pad:0,code:82"
+player_0_button_ddown="hat:0,direction:down,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_ddown\default=false
+player_0_button_dleft="hat:0,direction:left,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dleft\default=false
+player_0_button_dright="hat:0,direction:right,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dright\default=false
+player_0_button_dup="hat:0,direction:up,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_dup\default=false
+player_0_button_home="button:8,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_button_home\default=false
-player_0_button_l="toggle:0,code:81,engine:keyboard"
-player_0_button_l\default=true
-player_0_button_lstick="toggle:0,code:70,engine:keyboard"
-player_0_button_lstick\default=true
-player_0_button_minus="toggle:0,code:78,engine:keyboard"
-player_0_button_minus\default=true
-player_0_button_plus="toggle:0,code:77,engine:keyboard"
-player_0_button_plus\default=true
-player_0_button_r="toggle:0,code:69,engine:keyboard"
-player_0_button_r\default=true
-player_0_button_rstick="toggle:0,code:71,engine:keyboard"
-player_0_button_rstick\default=true
-player_0_button_screenshot="toggle:0,code:0,engine:keyboard"
-player_0_button_screenshot\default=true
-player_0_button_sl="toggle:0,code:81,engine:keyboard"
-player_0_button_sl\default=true
-player_0_button_sr="toggle:0,code:69,engine:keyboard"
-player_0_button_sr\default=true
-player_0_button_x="toggle:0,code:86,engine:keyboard"
-player_0_button_x\default=true
-player_0_button_y="toggle:0,code:90,engine:keyboard"
-player_0_button_y\default=true
-player_0_button_zl="toggle:0,code:82,engine:keyboard"
-player_0_button_zl\default=true
-player_0_button_zr="toggle:0,code:84,engine:keyboard"
-player_0_button_zr\default=true
+player_0_button_l="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_l\default=false
+player_0_button_lstick="button:9,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_lstick\default=false
+player_0_button_minus="button:6,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_minus\default=false
+player_0_button_plus="button:7,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_plus\default=false
+player_0_button_r="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_r\default=false
+player_0_button_rstick="button:10,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_rstick\default=false
+player_0_button_screenshot=[empty]
+player_0_button_screenshot\default=false
+player_0_button_sl="button:4,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_sl\default=false
+player_0_button_sr="button:5,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_sr\default=false
+player_0_button_x="button:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_x\default=false
+player_0_button_y="button:2,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
+player_0_button_y\default=false
+player_0_button_zl="threshold:0.500000,axis:2,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl"
+player_0_button_zl\default=false
+player_0_button_zr="threshold:0.500000,axis:5,guid:03000000de280000ff11000001000000,port:0,invert:+,engine:sdl"
+player_0_button_zr\default=false
 player_0_connected=true
 player_0_connected\default=true
-player_0_lstick="modifier_scale:0.500000,engine:analog_from_button,up:engine$0keyboard$1code$087$1toggle$00,down:engine$0keyboard$1code$083$1toggle$00,left:engine$0keyboard$1code$065$1toggle$00,right:engine$0keyboard$1code$068$1toggle$00,modifier:toggle$00$1code$016777248$1engine$0keyboard"
+player_0_lstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:0.000000,axis_y:1,offset_x:-0.000000,axis_x:0,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_lstick\default=false
-player_0_motionleft="toggle:0,code:55,engine:keyboard"
-player_0_motionleft\default=true
-player_0_motionright="toggle:0,code:56,engine:keyboard"
-player_0_motionright\default=true
-player_0_rstick="modifier_scale:0.500000,engine:analog_from_button,up:engine$0keyboard$1code$073$1toggle$00,down:engine$0keyboard$1code$075$1toggle$00,left:engine$0keyboard$1code$074$1toggle$00,right:engine$0keyboard$1code$076$1toggle$00,modifier:toggle$00$1code$00$1engine$0keyboard"
+player_0_motionleft=[empty]
+player_0_motionleft\default=false
+player_0_motionright=[empty]
+player_0_motionright\default=false
+player_0_rstick="deadzone:0.150000,invert_y:+,invert_x:+,offset_y:-0.063723,axis_y:4,offset_x:-0.024476,axis_x:3,guid:03000000de280000ff11000001000000,port:0,engine:sdl"
 player_0_rstick\default=false
 player_0_type=0
 player_0_type\default=true
diff --git a/functions.sh b/functions.sh
index 8fe5ae7e..d9f760f0 100644
--- a/functions.sh
+++ b/functions.sh
@@ -171,7 +171,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name=).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name=).*"
     fi
   ;;
 
@@ -179,7 +179,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name = \").*(?=\")" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = \").*(?=\")"
     fi
   ;;
 
@@ -187,7 +187,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=^$current_setting_name = ).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=^$current_setting_name = ).*"
     fi
   ;;
 
@@ -195,7 +195,7 @@ get_setting_value() {
     if [[ -z $current_section_name ]]; then
       echo $(grep -o -P "(?<=$current_setting_name: ).*" $1)
     else
-      sed -n '\^\['"$section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*"
+      sed -n '\^\['"$current_section_name"'\]^,\^'"$current_setting_name"'^{ \^\['"$current_section_name"'\]^! { \^'"$current_setting_name"'^ p } }' $1 | grep -o -P "(?<=$current_setting_name: ).*"
     fi
   ;;
 
@@ -219,7 +219,7 @@ add_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i '$ a '"$current_setting_line"'' $1
     else
-      sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section"':$/a '"$current_setting_line"'' $1
+      sed -i '/^\s*?\['"$current_section_name"'\]|\b'"$current_section_name"':$/a '"$current_setting_line"'' $1
     fi
     ;;
 
@@ -239,7 +239,7 @@ disable_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i -E 's^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
     else
-      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
+      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?'"$current_setting_line"'^s^(\s*?)'"$current_setting_line"'^\1#'"$current_setting_line"'^' $1
     fi
   ;;
 
@@ -259,7 +259,7 @@ enable_setting() {
     if [[ -z $current_section_name ]]; then
       sed -i -E 's^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
     else
-      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
+      sed -i -E '\^\['"$current_section_name"'\]|\b'"$current_section_name"':$^,\^\s*?#'"$current_setting_line"'^s^(\s*?)#'"$current_setting_line"'^\1'"$current_setting_line"'^' $1
     fi
   ;;
 
@@ -502,6 +502,12 @@ dir_prep() {
     mv -f "$symlink" "$symlink.old"
   fi
 
+  # if the real dir is already a symlink, unlink it first
+  if [ -L "$real" ];
+  then
+    unlink "$real"
+  fi
+
   # if the real dir doesn't exist we create it
   if [ ! -d "$real" ];
   then
@@ -518,7 +524,7 @@ dir_prep() {
   if [ -d "$symlink.old" ];
   then
     echo "Moving the data from $symlink.old to $real" #DEBUG
-    mv -f "$symlink".old/* $real
+    mv -f "$symlink.old"/{.[!.],}* $real
     echo "Removing $symlink.old" #DEBUG
     rm -rf "$symlink.old"
   fi
@@ -665,9 +671,9 @@ duckstation_init() {
   echo "------------------------"
   echo "Initializing DUCKSTATION"
   echo "------------------------"
-  mkdir -p /var/config/duckstation/
-  cp -fv $emuconfigs/duckstation/* /var/config/duckstation
-  sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/config/duckstation/settings.ini
+  mkdir -p /var/data/duckstation/
+  cp -fv $emuconfigs/duckstation/* /var/data/duckstation
+  sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/data/duckstation/settings.ini
 }
 
 ryujinx_init() {
@@ -699,6 +705,63 @@ standalones_init() {
   yuzu_init
 }
 
+ra_init() {
+  dir_prep "$rdhome/bios" "/var/config/retroarch/system"
+  dir_prep "$rdhome/.logs/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"
+  mkdir -pv /var/config/retroarch/cores/
+  cp -f /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/
+  mkdir -pv /var/config/retroarch/config/
+  cp -rf $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config
+  #rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created
+  sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
+
+  # PPSSPP
+  echo "--------------------------------"
+  echo "Initializing PPSSPP_LIBRETRO"
+  echo "--------------------------------"
+  if [ -d $rdhome/bios/PPSSPP/flash0/font ]
+  then
+    mv -fv $rdhome/bios/PPSSPP/flash0/font $rdhome/bios/PPSSPP/flash0/font.bak
+  fi
+  mkdir -p $rdhome/bios/PPSSPP
+  #if [ ! -f "$rdhome/bios/PPSSPP/ppge_atlas.zim" ]
+  #then
+    wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $rdhome/bios/PPSSPP
+    unzip -q "$rdhome/bios/PPSSPP/master.zip" -d $rdhome/bios/PPSSPP/
+    mv -f "$rdhome/bios/PPSSPP/ppsspp-master/assets/"* "$rdhome/bios/PPSSPP/"
+    rm -rfv "$rdhome/bios/PPSSPP/master.zip"
+    rm -rfv "$rdhome/bios/PPSSPP/ppsspp-master"
+  #fi
+  if [ -d $rdhome/bios/PPSSPP/flash0/font.bak ]
+  then
+    mv -fv $rdhome/bios/PPSSPP/flash0/font.bak $rdhome/bios/PPSSPP/flash0/font
+  fi
+
+  # MSX / SVI / ColecoVision / SG-1000
+  echo "-----------------------------------------------------------"
+  echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO"
+  echo "-----------------------------------------------------------"
+  wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $rdhome/bios/MSX
+  unzip -q "$rdhome/bios/MSX/blueMSXv282full.zip" -d $rdhome/bios/MSX
+  mv -f $rdhome/bios/MSX/Databases $rdhome/bios/Databases
+  mv -f $rdhome/bios/MSX/Machines $rdhome/bios/Machines
+  rm -rfv $rdhome/bios/MSX
+}
+
+tools_init() {
+  rm -rfv /var/config/retrodeck/tools/
+  mkdir -pv /var/config/retrodeck/tools/
+  cp -rfv /app/retrodeck/tools/* /var/config/retrodeck/tools/
+  mkdir -pv /var/config/emulationstation/.emulationstation/custom_systems/tools/
+  rm -rfv /var/config/retrodeck/tools/gamelist.xml
+  cp -fv /app/retrodeck/tools-gamelist.xml /var/config/retrodeck/tools/gamelist.xml
+}
+
 emulators_post_move() {
   # This script will redo the symlinks for all emulators after moving the $rdhome location without resetting other options
   # FUTURE WORK: The sed commands here should be replaced with set_setting_value and dir_prep should be replaced with changing paths in config files directly where possible
@@ -761,123 +824,13 @@ emulators_post_move() {
   sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/ppsspp/PSP/SYSTEM/ppsspp.ini
 
   # Duckstation section
-  sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/config/duckstation/settings.ini
+  sed -i 's#/home/deck/retrodeck/bios#'$rdhome/bios'#g' /var/data/duckstation/settings.ini
 
   # Ryujinx section
   sed -i 's#/home/deck/retrodeck#'$rdhome'#g' /var/config/Ryujinx/Config.json
   dir_prep "$rdhome/bios/switch/keys" "/var/config/Ryujinx/system"
 }
 
-#=========================
-# REUSABLE DIALOGS SECTION
-#=========================
-
-debug_dialog() {
-  # This function is for displaying commands run by the Configurator without actually running them
-  # USAGE: debug_dialog "command"
-
-  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 - Debug Dialog" \
-  --text="$1"
-}
-
-configurator_process_complete_dialog() {
-  # This dialog shows when a process is complete.
-  # USAGE: configurator_process_complete_dialog "process text"
-  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --title "RetroDECK Configurator Utility - Process Complete" \
-  --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK."
-
-  if [ ! $? == 0 ] # OK button clicked
-  then
-      configurator_welcome_dialog
-  fi
-}
-
-configurator_generic_dialog() {
-  # This dialog is for showing temporary messages before another process happens.
-  # USAGE: configurator_generid_dialog "info text"
-  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" \
-  --text="$1"
-}
-
-configurator_destination_choice_dialog() {
-  # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations.
-  # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text")
-  # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location"
-  choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \
-  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
-  --text="$2")
-
-  echo $choice
-}
-
-#=========================
-# LEGACY FUNCTIONS SECTION
-#=========================
-
-# These functions were pulled from retrodeck.sh or global.sh and should be consolidated eventually
-
-tools_init() {
-  rm -rfv /var/config/retrodeck/tools/
-  mkdir -pv /var/config/retrodeck/tools/
-  cp -rfv /app/retrodeck/tools/* /var/config/retrodeck/tools/
-  mkdir -pv /var/config/emulationstation/.emulationstation/custom_systems/tools/
-  rm -rfv /var/config/retrodeck/tools/gamelist.xml
-  cp -fv /app/retrodeck/tools-gamelist.xml /var/config/retrodeck/tools/gamelist.xml
-}
-
-ra_init() {
-  dir_prep "$rdhome/bios" "/var/config/retroarch/system"
-  dir_prep "$rdhome/.logs/retroarch" "/var/config/retroarch/logs"
-  mkdir -pv /var/config/retroarch/shaders/
-  cp -rfv /app/share/libretro/shaders /var/config/retroarch/
-  dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders"
-  mkdir -pv /var/config/retroarch/cores/
-  cp -f /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/
-  cp -rfv $emuconfigs/retroarch/core-overrides/* /var/config/retroarch/config
-  #rm -rf $rdhome/bios/bios # in some situations a double bios symlink is created
-  sed -i 's#~/retrodeck#'$rdhome'#g' /var/config/retroarch/retroarch.cfg
-
-  # PPSSPP
-  echo "--------------------------------"
-  echo "Initializing PPSSPP_LIBRETRO"
-  echo "--------------------------------"
-  if [ -d $rdhome/bios/PPSSPP/flash0/font ]
-  then
-    mv -fv $rdhome/bios/PPSSPP/flash0/font $rdhome/bios/PPSSPP/flash0/font.bak
-  fi
-  mkdir -p $rdhome/bios/PPSSPP
-  #if [ ! -f "$rdhome/bios/PPSSPP/ppge_atlas.zim" ]
-  #then
-    wget "https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip" -P $rdhome/bios/PPSSPP
-    unzip -q "$rdhome/bios/PPSSPP/master.zip" -d $rdhome/bios/PPSSPP/
-    mv -f "$rdhome/bios/PPSSPP/ppsspp-master/assets/"* "$rdhome/bios/PPSSPP/"
-    rm -rfv "$rdhome/bios/PPSSPP/master.zip"
-    rm -rfv "$rdhome/bios/PPSSPP/ppsspp-master"
-  #fi
-  if [ -d $rdhome/bios/PPSSPP/flash0/font.bak ]
-  then
-    mv -fv $rdhome/bios/PPSSPP/flash0/font.bak $rdhome/bios/PPSSPP/flash0/font
-  fi
-
-  # MSX / SVI / ColecoVision / SG-1000
-  echo "-----------------------------------------------------------"
-  echo "Initializing MSX / SVI / ColecoVision / SG-1000 LIBRETRO"
-  echo "-----------------------------------------------------------"
-  wget "http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip" -P $rdhome/bios/MSX
-  unzip -q "$rdhome/bios/MSX/blueMSXv282full.zip" -d $rdhome/bios/MSX
-  mv -f $rdhome/bios/MSX/Databases $rdhome/bios/Databases
-  mv -f $rdhome/bios/MSX/Machines $rdhome/bios/Machines
-  rm -rfv $rdhome/bios/MSX
-}
-
 create_lock() {
   # creating RetroDECK's lock file and writing the version in the config file
   version=$hard_version
@@ -1077,4 +1030,52 @@ finit() {
   --title "RetroDECK" \
   --text="Installation completed.\nPlease put your roms in:\n\n$roms_folder\n\nand your bioses in\n\n$bios_folder\n\nThen start the program again.\nIf you wish to change the roms location, you may use the tool located the tools section of RetroDECK.\n\nIMPORTANT NOTES:\n- RetroDECK must be manually added and launched from your Steam Library in order to work correctly.\n- It's recommended to use the 'RetroDECK Offical Controller Config' from Steam (under community layouts).\n- It's suggested to use BoilR to automatically add the SteamGridDB images to Steam (this will be automated soon).\nhttps://github.com/PhilipK/BoilR"
   # TODO: Replace the stuff above with BoilR code when ready
+}
+
+#=========================
+# REUSABLE DIALOGS SECTION
+#=========================
+
+debug_dialog() {
+  # This function is for displaying commands run by the Configurator without actually running them
+  # USAGE: debug_dialog "command"
+
+  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 - Debug Dialog" \
+  --text="$1"
+}
+
+configurator_process_complete_dialog() {
+  # This dialog shows when a process is complete.
+  # USAGE: configurator_process_complete_dialog "process text"
+  zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --title "RetroDECK Configurator Utility - Process Complete" \
+  --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to return to RetroDECK."
+
+  if [ ! $? == 0 ] # OK button clicked
+  then
+      configurator_welcome_dialog
+  fi
+}
+
+configurator_generic_dialog() {
+  # This dialog is for showing temporary messages before another process happens.
+  # USAGE: configurator_generid_dialog "info text"
+  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" \
+  --text="$1"
+}
+
+configurator_destination_choice_dialog() {
+  # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations.
+  # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text")
+  # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location"
+  choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \
+  --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
+  --text="$2")
+
+  echo $choice
 }
\ No newline at end of file
diff --git a/global.sh b/global.sh
index ef2b7dd8..4c33839a 100755
--- a/global.sh
+++ b/global.sh
@@ -14,6 +14,7 @@ hard_version="$(cat '/app/retrodeck/version')"             # hardcoded version (
 # Config files for emulators with single config files
 
 citraconf="/var/config/citra-emu/qt-config.ini"
+duckstationconf="/var/data/duckstation/settings.ini"
 melondsconf="/var/config/melonDS/melonDS.ini"
 rpcs3conf="/var/config/rpcs3/config.yml"
 yuzuconf="/var/config/yuzu/qt-config.ini"
diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml
index 16ea75da..4ae8bc3f 100644
--- a/net.retrodeck.retrodeck.appdata.xml
+++ b/net.retrodeck.retrodeck.appdata.xml
@@ -76,8 +76,11 @@
           <li>Removed Ryjuinx as it was broken (sorry)</li>
           <li>Yuzu updated to mainline-1301</li>
           <li>Added missing Primehack config and Configurator options</li>
+          <li>Add CLI option to run Configurator directly</li>
           <li>Resized configurator windows</li>
           <li>Fixed a bug where the retrodeck folder was having a symlink creation issue after migration</li>
+          <li>Fixed a bug where the hidden files were not moved during the directory preparation</li>
+          <li>Fixed a bug where the symlinks were recursively placed inside the prepeared paths</li>
       </ul>
     </description>
   </release>
diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml
index f59fafae..4544e86b 100644
--- a/net.retrodeck.retrodeck.yml
+++ b/net.retrodeck.retrodeck.yml
@@ -181,6 +181,17 @@ modules:
         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
+
   # ES-DE - START
   # https://gitlab.com/es-de/emulationstation-de
 
@@ -282,7 +293,7 @@ modules:
 
   # RetroArch - START
   # https://github.com/flathub/org.libretro.RetroArch
-  
+
   - name: retroarch
     config-opts:
       - '--enable-dbus'
@@ -405,8 +416,8 @@ modules:
       - mv ./RetroArch-Linux-x86_64.AppImage.home/.config/retroarch/cores/* /app/share/libretro/cores/
     sources:
       - type: archive
-        url: https://buildbot.libretro.com/stable/1.12.0/linux/x86_64/RetroArch_cores.7z
-        sha256: b5c87aa3462c023fa4e1aa171d1bd4f5b0b5cf9d8e4f0a6b5606ff26b05e0059
+        url: https://buildbot.libretro.com/stable/1.14.0/linux/x86_64/RetroArch_cores.7z
+        sha256: 59369f1ef18cdc302c38bcb270d71989cef665d71f3156a1f07486122713d030
 
   # PPSSPP - START
   # https://github.com/flathub/org.ppsspp.PPSSPP
@@ -424,16 +435,21 @@ modules:
 
       - -DBUILD_TESTING=OFF
       - -DOpenGL_GL_PREFERENCE=GLVND
-    #build-options:
-      #- -DX86_64=ON
-
+    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: &ppsspp-tag v1.13.2
-        commit: &ppsspp-commit 9fe6338e3bf397f8a009a51a282c139dfa180eb6
+        tag: v1.14.4
+        commit: cd535263c1ad65fd03869591a8bd706680cbf04b
         x-checker-data:
           type: git
           tag-pattern: ^v([\d.]+)$
@@ -470,8 +486,8 @@ modules:
       - 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-1301/yuzu-mainline-20230109-8c9f71e76.AppImage
-        sha256: 8dc52ddc8547b92d08cf450ce32c2f400049b7df98475a42be5012660c76743d
+        url: https://github.com/yuzu-emu/yuzu-mainline/releases/download/mainline-0-1343/yuzu-mainline-20230217-b795f3bc1.AppImage
+        sha256: 47eb1ec3e4d7368d0eef832a7b9c378fd6a0fbaebfd7af7768d6edaf8b35f8a5
 
   # Yuzu - END
 
@@ -482,14 +498,17 @@ modules:
     buildsystem: cmake-ninja
     builddir: true
     config-opts:
-      - -DCMAKE_BUILD_TYPE=Release
-      - -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON
-      - -DENABLE_QT_TRANSLATION=ON
-      - -DCITRA_ENABLE_COMPATIBILITY_REPORTING=ON
-      - -DENABLE_COMPATIBILITY_LIST_DOWNLOAD=ON
-      #- '-DENABLE_FFMPEG_VIDEO_DUMPER=ON'
-      # Disabled because of this: https://github.com/citra-emu/citra/issues/5949
-      - -DENABLE_FDK=ON
+      - '-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
@@ -497,14 +516,20 @@ modules:
       - 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: git
-        url: https://github.com/citra-emu/citra-nightly.git
-        tag: nightly-1785
-        commit: baecc18d8c5365af0dddb231bc8c0a9c03850bf6
-        disable-shallow-clone: true
+      - type: archive
+        url: >-
+          https://github.com/citra-emu/citra-nightly/releases/download/nightly-1844/citra-unified-source-20230217-cda3584.tar.xz
+        sha256: 9e0c5fcf503f5d0dbe95cc6de68c4b3c9148c07e2df892b85cc99ada8963c14e
         x-checker-data:
-          type: git
-          tag-pattern: ^(nightly-\d+)$
+          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
 
@@ -523,16 +548,11 @@ modules:
       - 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.3501/pcsx2-v1.7.3501-linux-AppImage-64bit-AVX2-Qt.AppImage
-        sha256: 104e8dae653aeb1fa7c75a4cc0fd07038715e75c1f7d40d111428ae83279356c
+        url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.4108/pcsx2-v1.7.4108-linux-AppImage-64bit-Qt.AppImage
+        sha256: 31dab12f7f7d0c4a7122011c0f86f5acfe9a9018cece66b4333d230154c8b910
 
   # PCSX2 - END
 
-  - name: debug
-    buildsystem: simple
-    build-commands:
-      - whoami
-
   # Dolphin - START
   # https://github.com/flathub/org.DolphinEmu.dolphin-emu
   # WHEN UPADTING: remember to update rd-submodules/dolphin contents
@@ -551,12 +571,15 @@ modules:
       - --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.65.tar.xz
-        sha256: 2565a4d48354b576e6ad92e25b54ed66808296581c8abb80587051f9993d96d4
+        url: https://www.kernel.org/pub/linux/bluetooth/bluez-5.66.tar.xz
+        sha256: 39fea64b590c9492984a0c27a89fc203e1cdc74866086efb8f4698677ab2b574
         x-checker-data:
           type: anitya
           project-id: 10029
@@ -599,13 +622,13 @@ modules:
     cleanup:
       - /share/man
     post-install:
-      - install -D dolphin-emu-wrapper /app/bin/dolphin-emu-wrapper
+      - 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
-        url: ssh://git@github.com/dolphin-emu/dolphin.git
-        #url: https://github.com/dolphin-emu/dolphin.git
-        commit: 48c9c224cf9f82f0f9f2690b7cc6283d7448480c
+        #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
@@ -630,14 +653,7 @@ modules:
               test -S $XDG_RUNTIME_DIR/discord-ipc-$i ||
                 ln -sf {app/com.discordapp.Discord,$XDG_RUNTIME_DIR}/discord-ipc-$i;
             done
-            # use gtk3 filechooser on steamdeck
-            bv=`cat /sys/devices/virtual/dmi/id/board_vendor`
-            bv=$bv`cat /sys/devices/virtual/dmi/id/board_name`
-            if [[ $bv == "ValveJupiter" ]]; then
-              QT_QPA_PLATFORMTHEME=gtk3 dolphin-emu "$@"
-            else
-              dolphin-emu "$@"
-            fi
+            dolphin-emu "$@"
         dest-filename: dolphin-emu-wrapper
 
   # Dolphin - END
@@ -674,8 +690,8 @@ modules:
       - /share
     sources:
       - type: archive
-        url: https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz
-        sha256: ed285f4accaf05344f90975757b3dbfe772ba41d1c401c2648b7fa45b711bdd4
+        url: https://www.tcpdump.org/release/libpcap-1.10.3.tar.gz
+        sha256: 2a8885c403516cf7b0933ed4b14d6caa30e02052489ebd414dc75ac52e7559e6
         x-checker-data:
           type: anitya
           project-id: 1702
@@ -706,20 +722,20 @@ modules:
     post-install:
       - |-
         for px in 16 32 48 64 128 256 512; do
-          install -Dm644 ../ui/icons/xemu_${px}x${px}.png /app/share/icons/hicolor/${px}x${px}/apps/app.xemu.xemu.png
+          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 /app/share/icons/hicolor/scalable/apps/app.xemu.xemu.svg
-      - mv qemu-system-i386 /app/bin/xemu
-      - mkdir -p /app/share/licenses/xemu
-      - cd .. && python3 scripts/gen-license.py > /app/share/licenses/xemu/LICENSE.txt
+      - 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/mborgerson/xemu.git
-        tag: v0.7.71
-        commit: 22db3304a454b2d289a9d5ea488fa3c3dec836f4
+        url: https://github.com/xemu-project/xemu.git
+        tag: v0.7.84
+        commit: d8fa50e524c22f85ecb2e43108fd6a5501744351
         x-checker-data:
           type: json
-          url: https://api.github.com/repos/mborgerson/xemu/releases/latest
+          url: https://api.github.com/repos/xemu-project/xemu/releases/latest
           tag-query: .tag_name
           timestamp-query: .published_at
           version-query: .tag_name
@@ -735,7 +751,7 @@ modules:
     sources:
       - type: git
         url: https://gitlab.freedesktop.org/slirp/libslirp.git
-        tag: v4.4.0
+        tag: v4.7.0
   - name: melonds
     buildsystem: cmake-ninja
     builddir: true
@@ -743,11 +759,11 @@ modules:
       arch:
         aarch64:
           config-opts:
-            - -DENABLE_OGLRENDERER=OFF
+            - -DENABLE_LTO_RELEASE=OFF
     sources:
       - type: git
-        url: https://github.com/Arisotura/melonDS.git
-        commit: cce9de5ee1f51e906a644922b2ada6644d81287a
+        url: https://github.com/melonDS-emu/melonDS.git
+        commit: 430de6b2702bb93faa8c2004aff3fbd084db4a1e
 
   # MELONDS - END
 
@@ -788,20 +804,26 @@ modules:
       - -DITTAPI_SOURCE_DIR=/run/build/rpcs3/ittapi
       - -Wno-dev
     post-install:
-      - |
-        set -eux;
-        COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)";
+      - |-
+        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: 8d5a9dc722de8e8e881adf8c7f16e76226a1dad8
+        commit: 6b556a5206fa68e4801fca124bfc3874440e4e17
       - type: git
         url: https://github.com/intel/ittapi.git
-        commit: 2428ed97aa977c66b30940081e7d3e9b1a3c7402
+        commit: 2de8a23f6130036dcd4d1b78d05df3187951d298
         dest: ittapi/ittapi
         disable-shallow-clone: true
+      # remove git-lfs hook
+      - type: inline
+        dest: ittapi/ittapi/.git/hooks
+        dest-filename: post-checkout
+        contents:
 
   # RPCS3 - END
 
diff --git a/post_update.sh b/post_update.sh
index d7d771bd..ecd6a2c2 100644
--- a/post_update.sh
+++ b/post_update.sh
@@ -7,7 +7,7 @@ post_update() {
 
   local prev_version=$(sed -e 's/[\.a-z]//g' <<< $version)
 
-  if [[ $prev_version -le "054" ]]; then # If updating from prior to save sorting change
+  if [[ $prev_version -le "050" ]]; then # If updating from prior to save sorting change at 0.5.0b
 
     # Finding existing ROMs folder
     if [ -d "$default_sd/retrodeck" ]
diff --git a/rd-submodules/citra/unified-source-compat.patch b/rd-submodules/citra/unified-source-compat.patch
new file mode 100644
index 00000000..6a1ca47c
--- /dev/null
+++ b/rd-submodules/citra/unified-source-compat.patch
@@ -0,0 +1,56 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 710f3fcfb..e5f4f4687 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -94,7 +94,11 @@ function(check_submodules_present)
+         endif()
+     endforeach()
+ endfunction()
+-check_submodules_present()
++
++if (EXISTS "${PROJECT_SOURCE_DIR}/.git/objects")
++    # only check submodules when source is obtained via Git
++    check_submodules_present()
++endif()
+ 
+ configure_file(${PROJECT_SOURCE_DIR}/dist/compatibility_list/compatibility_list.qrc
+                ${PROJECT_BINARY_DIR}/dist/compatibility_list/compatibility_list.qrc
+diff --git a/CMakeModules/GenerateSCMRev.cmake b/CMakeModules/GenerateSCMRev.cmake
+index a011c6cbf..87e9eef35 100644
+--- a/CMakeModules/GenerateSCMRev.cmake
++++ b/CMakeModules/GenerateSCMRev.cmake
+@@ -6,15 +6,27 @@ endfunction()
+ 
+ list(APPEND CMAKE_MODULE_PATH "${SRC_DIR}/externals/cmake-modules")
+ 
+-# Find the package here with the known path so that the GetGit commands can find it as well
+-find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
+-
+ # generate git/build information
+-include(GetGitRevisionDescription)
+-get_git_head_revision(GIT_REF_SPEC GIT_REV)
+-git_describe(GIT_DESC --always --long --dirty)
+-git_branch_name(GIT_BRANCH)
+ get_timestamp(BUILD_DATE)
++if (EXISTS "${SRC_DIR}/.git/objects")
++    # Find the package here with the known path so that the GetGit commands can find it as well
++    find_package(Git QUIET PATHS "${GIT_EXECUTABLE}")
++    # only use Git to check revision info when source is obtained via Git
++    include(GetGitRevisionDescription)
++    get_git_head_revision(GIT_REF_SPEC GIT_REV)
++    git_describe(GIT_DESC --always --long --dirty)
++    git_branch_name(GIT_BRANCH)
++elseif(EXISTS "${SRC_DIR}/GIT-COMMIT" AND EXISTS "${SRC_DIR}/GIT-TAG")
++    # unified source archive
++    file(READ "${SRC_DIR}/GIT-COMMIT" GIT_REV_RAW LIMIT 64)
++    string(STRIP "${GIT_REV_RAW}" GIT_REV)
++    string(SUBSTRING "${GIT_REV_RAW}" 0 9 GIT_DESC)
++    set(GIT_BRANCH "HEAD")
++else()
++    # self-packed archive?
++    set(GIT_DESC "UNKNOWN")
++    set(GIT_BRANCH "UNKNOWN")
++endif()
+ 
+ # Generate cpp with Git revision from template
+ # Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well
\ No newline at end of file
diff --git a/rd-submodules/dolphin/detectflatpak.patch b/rd-submodules/dolphin/detectflatpak.patch
index d0b0f889..80930684 100644
--- a/rd-submodules/dolphin/detectflatpak.patch
+++ b/rd-submodules/dolphin/detectflatpak.patch
@@ -23,11 +23,11 @@ index 8d9dc2abb8..8a9d39a3d5 100644
 @@ -381,7 +381,7 @@ void SetUserDirectory(std::string custom_path)
      {
        user_path = home_path + "." DOLPHIN_DATA_DIR DIR_SEP;
-
+ 
 -      if (!File::Exists(user_path))
 +      if (File::Exists("/.flatpak-info") || !File::Exists(user_path))
        {
          const char* data_home = getenv("XDG_DATA_HOME");
          std::string data_path =
---
-2.37.1
\ No newline at end of file
+-- 
+2.37.1
diff --git a/rd-submodules/dolphin/nodirtyversion.patch b/rd-submodules/dolphin/nodirtyversion.patch
index 20b6f3c1..f20ae789 100644
--- a/rd-submodules/dolphin/nodirtyversion.patch
+++ b/rd-submodules/dolphin/nodirtyversion.patch
@@ -10,4 +10,4 @@ index 9af66009a1..2acd3bed9a 100644
 +  execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long
        OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE
        OUTPUT_STRIP_TRAILING_WHITESPACE)
- 
+ 
\ No newline at end of file
diff --git a/rd-submodules/ryujinx/nuget_sources.json b/rd-submodules/ryujinx/nuget_sources.json
index 9e109970..e943cede 100644
--- a/rd-submodules/ryujinx/nuget_sources.json
+++ b/rd-submodules/ryujinx/nuget_sources.json
@@ -1,4 +1,11 @@
 [
+    {
+        "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",
@@ -8,10 +15,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.osx-x64/7.0.0/microsoft.netcore.app.host.osx-x64.7.0.0.nupkg",
-        "sha512": "a5a12fe0bcd069780a6d58bb2af0bf550c2544d967d5efb5d7d1674564b1844c2fa716e3bf5e9030a0f6ef693439e8aa66b5581ad76580258a5e9dc47e3887d2",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -50,17 +57,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.4/system.memory.4.5.4.nupkg",
-        "sha512": "8ece5491eb0fe332bc190f40cf76b3beee0c5f996325034861be221fdb0ff02fd59e4f7020b3c4a1f29a457f76ff76c4c95d46d38555e4f48c7a3bf172d87966",
+        "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.4.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.memory/4.5.3/system.memory.4.5.3.nupkg",
-        "sha512": "70fce15a52cc76aacbae05c8e89e2e398d1d32903f63f640a7dd4a3e5747f2c7a887d4bfd22f2a2e40274906cf91648dfd169734fb7c74eb9b4f72614084e1db",
-        "dest": "nuget-sources",
-        "dest-filename": "system.memory.4.5.3.nupkg"
+        "dest-filename": "system.memory.4.5.5.nupkg"
     },
     {
         "type": "file",
@@ -71,10 +71,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.linux-x64/7.0.0/microsoft.aspnetcore.app.runtime.linux-x64.7.0.0.nupkg",
-        "sha512": "285817dc47116766e8f3279c0c6b7add76e1c362ed455b7d03790874bb4fab70f0507a31747a109a8afa3b80215b9c463a3d245e80ba14ee896114ef44f8892d",
+        "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": "microsoft.aspnetcore.app.runtime.linux-x64.7.0.0.nupkg"
+        "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",
@@ -113,10 +120,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.identitymodel.tokens.jwt/6.25.0/system.identitymodel.tokens.jwt.6.25.0.nupkg",
-        "sha512": "c3b8bc78fce36c78161c4807f14091ee178be308ed487c8a2920fe22e8e1268b4d3da1e3b31c0f588a8df48c9ee93e8207768bac458298c2f52408251dfc5361",
+        "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.0.nupkg"
+        "dest-filename": "system.identitymodel.tokens.jwt.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -125,6 +132,13 @@
         "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",
@@ -146,6 +160,13 @@
         "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",
@@ -162,17 +183,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.common/4.2.0/microsoft.codeanalysis.common.4.2.0.nupkg",
-        "sha512": "579adf4d1f1ecb6461788bc29184c09e6f9bf1de047bfa234160fb0b95a931061f89e3bbebaf13d89faafd65b9bad31bcbb3db755de5e20ae8b5e7b9e7a2507c",
+        "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.2.0.nupkg"
+        "dest-filename": "microsoft.codeanalysis.common.4.4.0.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.tokens/6.25.0/microsoft.identitymodel.tokens.6.25.0.nupkg",
-        "sha512": "755b1d20de8529a9875124ec2d8829a0ce700a66d52fc4281148d79cd70421f276af3181373626233b06a4481d0352c3d34fef293bd7d3a263076d9abd3778af",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.tokens.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -190,10 +211,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.win-x64/7.0.0/microsoft.netcore.app.runtime.win-x64.7.0.0.nupkg",
-        "sha512": "c77b10619a29bc1dd81573efa6fd73303b590b8a29ab69f83c6a595c7534050cb45b240d2f1e1c18c5dc63bab55e1184f0febff8eb885b80420a1ab34a75effb",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.runtime.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -218,10 +239,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.codeanalysis.csharp/4.2.0/microsoft.codeanalysis.csharp.4.2.0.nupkg",
-        "sha512": "d54de9b27a4632fd45982e2094c37db3a39425447f79332c289cbd0b8c3f163a05a82d6679b1cdc37ce19cfa701e99070eaddaed15f9e2afd0a5b8beac826465",
+        "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.2.0.nupkg"
+        "dest-filename": "microsoft.codeanalysis.csharp.4.4.0.nupkg"
     },
     {
         "type": "file",
@@ -316,38 +337,24 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/pangosharp/3.22.25.128/pangosharp.3.22.25.128.nupkg",
-        "sha512": "9ff54c0f4f58964d3129649170bcb757563707aa67ffbc2c1c2b764fab8e79043556a13747215b22a93f00ef18791b7f32c9a1a596ddb153da52082050f47a32",
+        "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": "pangosharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.linux-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.host.linux-x64/7.0.0/microsoft.netcore.app.host.linux-x64.7.0.0.nupkg",
-        "sha512": "c902c0592f57eb559a3d1d14c0979abe3eb59913be55aeb65b26ea441eb0ba8b3fa7cbbd267c62c5e93734328c3d96319a3cfe36ce45ac926a4350eeb3e40be3",
+        "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.netcore.app.host.linux-x64.7.0.0.nupkg"
+        "dest-filename": "microsoft.aspnetcore.app.runtime.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.win-x64/7.0.0/microsoft.aspnetcore.app.runtime.win-x64.7.0.0.nupkg",
-        "sha512": "259a8d654da97a14b6ebcc1840be24e3acc1add6947a3e1e920a75d951cef357437f173d8b1256255445ea61ac1ae377895e67f38e77fd225ad3e07e54e778d0",
+        "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.aspnetcore.app.runtime.win-x64.7.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.logging/6.25.0/microsoft.identitymodel.logging.6.25.0.nupkg",
-        "sha512": "9dbaed1fdf9d4b28acb389b0bf262dca03f502ac514f5e4b8c8d5fe683bf9c4750f5adabeda8d9f1aafc5301035025552fcbad8d4f5e494dffcac3ae9a21f4b2",
-        "dest": "nuget-sources",
-        "dest-filename": "microsoft.identitymodel.logging.6.25.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.win32.systemevents/6.0.0/microsoft.win32.systemevents.6.0.0.nupkg",
-        "sha512": "5e274ace996c3eba63099ed5116f9dc39f69f684f7c1e7623c28c3c73988b75c67dfcc929a50a761f0222df243dd540720a6e588e91dfa784f81bfce7a893875",
-        "dest": "nuget-sources",
-        "dest-filename": "microsoft.win32.systemevents.6.0.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.logging.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -372,10 +379,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencymodel/3.1.1/microsoft.extensions.dependencymodel.3.1.1.nupkg",
-        "sha512": "962939cede743858bd9e70509f5951ffd72bcfe59411d18a7a217f6a8b0ec7bcc76d6da755184da38183242635c761945dc5bb6b426092943ff206d2c0cbacad",
+        "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.3.1.1.nupkg"
+        "dest-filename": "microsoft.extensions.dependencymodel.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -398,13 +405,6 @@
         "dest": "nuget-sources",
         "dest-filename": "netstandard.library.2.0.3.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/gdksharp/3.22.25.128/gdksharp.3.22.25.128.nupkg",
-        "sha512": "c081968df5c14e78f0c31bf39e9cbc32efb966406f143e930e367b5f7325e39ff7efe8e2e04b28d1fcf8abe4aa81b2a5f094fdd2c86ac9e5561283c7acf709c2",
-        "dest": "nuget-sources",
-        "dest-filename": "gdksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.numerics.vectors/4.3.0/system.numerics.vectors.4.3.0.nupkg",
@@ -428,10 +428,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.core/2.10.1/silk.net.core.2.10.1.nupkg",
-        "sha512": "abf974ee5257efc79e3809ca5db72c615d8453bdb70b84f96fc521409997165c8a5388faac83526cc1b1d87aa8f0926247457313c13b18c6b486f333597e9bdb",
+        "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.10.1.nupkg"
+        "dest-filename": "silk.net.core.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -454,13 +454,6 @@
         "dest": "nuget-sources",
         "dest-filename": "system.security.principal.4.3.0.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/atksharp/3.22.25.128/atksharp.3.22.25.128.nupkg",
-        "sha512": "b6f34f51f632b35d96aebe2b46785478ec8dc59c77180bb45b3adb7d72197fd3d39f5807376d53bc4f6cbfb04a0fce7beb8c8cd927031403e8ab576c4ee0a2f4",
-        "dest": "nuget-sources",
-        "dest-filename": "atksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.runtime.numerics/4.0.1/system.runtime.numerics.4.0.1.nupkg",
@@ -631,10 +624,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.ext/2.10.1/silk.net.vulkan.extensions.ext.2.10.1.nupkg",
-        "sha512": "470b2423d725545fa305d1a42d07e2c5e05e86f68c094fe02b44413e954df3b0cc38322224cf64b3954db46c54b4f314be6d0ca6686ba37bf0082ed551873fef",
+        "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.10.1.nupkg"
+        "dest-filename": "silk.net.vulkan.extensions.ext.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -699,13 +692,6 @@
         "dest": "nuget-sources",
         "dest-filename": "runtime.unix.system.net.sockets.4.3.0.nupkg"
     },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/gtksharp/3.22.25.128/gtksharp.3.22.25.128.nupkg",
-        "sha512": "aedc50ef1d59135004a79e3dd4f00be2c86b5d47979322e23a33490cf81d2c6e086c61ff4123dfab43b1d1e849e5003221cb920f28fac40e4fbc069984c2a396",
-        "dest": "nuget-sources",
-        "dest-filename": "gtksharp.3.22.25.128.nupkg"
-    },
     {
         "type": "file",
         "url": "https://api.nuget.org/v3-flatcontainer/system.net.http/4.1.0/system.net.http.4.1.0.nupkg",
@@ -715,10 +701,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.abstractions/6.25.0/microsoft.identitymodel.abstractions.6.25.0.nupkg",
-        "sha512": "5c0a884c57e76022852e5b33dbd1790ba63a3fa2b445dd8046423f2f39932c3069761cb4966b9bbfd7c241ed998c89904505d970f3cb330e3e37e1dbb523746f",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.abstractions.6.25.1.nupkg"
     },
     {
         "type": "file",
@@ -771,10 +757,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.osx-x64/7.0.0/microsoft.netcore.app.runtime.osx-x64.7.0.0.nupkg",
-        "sha512": "10a6f069f8152ed97556fdc0f52558ceffe10c02feb8451ad054665d5ce7f323f77772f47844de972cc903a0457a92033faf84e61105ceb4a9ff03c001e0198b",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.netcore.app.runtime.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -792,17 +778,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.identitymodel.jsonwebtokens/6.25.0/microsoft.identitymodel.jsonwebtokens.6.25.0.nupkg",
-        "sha512": "822549449b1d7b1e1d63fe54c1b74da53c327ca769532abbaa69a40aa40a872066185f3f5efd26cb2547d36d2563ee636ea4d5ab694547af5382fa66ba0f0d1c",
+        "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.0.nupkg"
+        "dest-filename": "microsoft.identitymodel.jsonwebtokens.6.25.1.nupkg"
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.collections.immutable/5.0.0/system.collections.immutable.5.0.0.nupkg",
-        "sha512": "726f8db7d179714cf0efeb0fc02fcebe7b4755762902e391e77cf78671dd5d5f364c7cf4ce3545b51cc7f37327d12d1500ba19f4b934f0e8bb69a6a347c0bbfd",
+        "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.5.0.0.nupkg"
+        "dest-filename": "system.collections.immutable.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -846,6 +832,13 @@
         "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",
@@ -876,10 +869,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.netcore.app.runtime.linux-x64/7.0.0/microsoft.netcore.app.runtime.linux-x64.7.0.0.nupkg",
-        "sha512": "0d2c0cd4a669b753abebb2edaf65b9fd277836b029d6f945bc95f98ed487221b462f9a82dc199dd08c5b12f1f15134531e208fcad5931c426f9fdba6ab068786",
+        "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.0.nupkg"
+        "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",
@@ -888,6 +888,13 @@
         "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",
@@ -1135,24 +1142,17 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan.extensions.khr/2.10.1/silk.net.vulkan.extensions.khr.2.10.1.nupkg",
-        "sha512": "d0a5fab0fbc549f62cca0558245b41b696bf89e1e74f75732afb56012a474b5bd70ed0842e24f63c6ec7404a2779dae46c50a959fc2960aed83d3467a0819d65",
+        "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.10.1.nupkg"
+        "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.0/microsoft.netcore.app.host.win-x64.7.0.0.nupkg",
-        "sha512": "5bd8b1e987ff863997900fbefed1164d4659bb8676e3f6f93977f359e27a2097259c84b55797a2238835c02aa255cff7a74aa26b9f84e0a8033f436ca177b77f",
+        "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.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/glibsharp/3.22.25.128/glibsharp.3.22.25.128.nupkg",
-        "sha512": "a0c634eb422c36b07a18adf7410a5bb6f56a28ea85e7ebb1dfc42dfa0a57cdfc9791d62b16dcbe015179d5aefdddf2645a15c836e690c2ac775de5da30192454",
-        "dest": "nuget-sources",
-        "dest-filename": "glibsharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.netcore.app.host.win-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -1161,6 +1161,13 @@
         "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",
@@ -1198,17 +1205,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.drawing.common/6.0.0/system.drawing.common.6.0.0.nupkg",
-        "sha512": "d61f0a3e01c3eac15f13fc1ba04a2c7ce4eac956400b2faa361fecabd3836d49d5bd344f3985ee3d94cdc3f6a72b8e07e423cdb2965b4f5ca2222b5de32988e4",
+        "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": "system.drawing.common.6.0.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.graphics.nvdec.dependencies/5.0.1-build10/ryujinx.graphics.nvdec.dependencies.5.0.1-build10.nupkg",
-        "sha512": "b3899cd05981053998ee14a9ade58617d0302e1151bd566fc9e6809638fd5079fd7b95a0db95c25d5047be2740646a95231931f293cc7ce7c3d6c2a06f3aa442",
-        "dest": "nuget-sources",
-        "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build10.nupkg"
+        "dest-filename": "ryujinx.graphics.nvdec.dependencies.5.0.1-build13.nupkg"
     },
     {
         "type": "file",
@@ -1233,10 +1233,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/ryujinx.sdl2-cs/2.24.2-build21/ryujinx.sdl2-cs.2.24.2-build21.nupkg",
-        "sha512": "43ddb0660ccae42616d5f2205ef399eea21e822a96e3de2e7ca7e0885ea6a77fd3a8fc75b118c645c54c57ff3e48c184a18a7e3314f9efb2a40b070780a6a9cd",
+        "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.24.2-build21.nupkg"
+        "dest-filename": "ryujinx.sdl2-cs.2.26.1-build23.nupkg"
     },
     {
         "type": "file",
@@ -1261,10 +1261,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/system.text.json/4.7.0/system.text.json.4.7.0.nupkg",
-        "sha512": "d6ad50bdc50a094b0e0d08cba8d708e77e974b11102b64e618bc8e324ef7288015f91b44ceddd845d974b138277c4a45aa27c32a4aeb0a918fa65929eb088e7c",
+        "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.4.7.0.nupkg"
+        "dest-filename": "system.text.json.6.0.0.nupkg"
     },
     {
         "type": "file",
@@ -1275,17 +1275,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.app.runtime.osx-x64/7.0.0/microsoft.aspnetcore.app.runtime.osx-x64.7.0.0.nupkg",
-        "sha512": "8e23f05c3a455dc538fe3550704732b4ed00ade8a07a3b93d2af16bbc0dd14086b163d43255e6d396edaf5f99c08cf553f15a7888a09e5657bb419116f0ecf9d",
+        "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.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/giosharp/3.22.25.128/giosharp.3.22.25.128.nupkg",
-        "sha512": "575bef7f1d64b71715b15b8913ad2268e8cdbaa8d1061c6940719a2905eb9fb51eb7a21b054e1e3b4d9be67192799fa0435707bad27672307be27821329ee28c",
-        "dest": "nuget-sources",
-        "dest-filename": "giosharp.3.22.25.128.nupkg"
+        "dest-filename": "microsoft.aspnetcore.app.runtime.osx-x64.7.0.2.nupkg"
     },
     {
         "type": "file",
@@ -1476,6 +1469,13 @@
         "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",
@@ -1485,10 +1485,10 @@
     },
     {
         "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/silk.net.vulkan/2.10.1/silk.net.vulkan.2.10.1.nupkg",
-        "sha512": "83a68239d20c2e7ff15af5da53a1fa8c5b35f36fc842ed34035da8f558c3f9a411eceb7822bd70c819c99ceb6328b95931c0e04d8e93e1278aa4ce92a1fc6941",
+        "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.10.1.nupkg"
+        "dest-filename": "silk.net.vulkan.2.16.0.nupkg"
     },
     {
         "type": "file",
@@ -1524,12 +1524,5 @@
         "sha512": "0c64f255836cb629587b117bd8de5e70bfe7e4c6d7d138bff10b9e85f4883fba250ae07118c21d5e9130ba3cf120a9a2bf581a17577d3a7ec09260933c7b4d47",
         "dest": "nuget-sources",
         "dest-filename": "system.diagnostics.tracing.4.1.0.nupkg"
-    },
-    {
-        "type": "file",
-        "url": "https://api.nuget.org/v3-flatcontainer/cairosharp/3.22.25.128/cairosharp.3.22.25.128.nupkg",
-        "sha512": "259e6fac6bd4fe22a43f1ea2c4f935701f756295829c5b9e1e93aa4b36bc0c2bc55635b70200c2ff85d0cfc4c0af500e9c1c5ab25da7e665d07744f69bd5434d",
-        "dest": "nuget-sources",
-        "dest-filename": "cairosharp.3.22.25.128.nupkg"
     }
 ]
\ No newline at end of file
diff --git a/rd-submodules/ryujinx/ryujinx-wrapper b/rd-submodules/ryujinx/ryujinx-wrapper
index ac9704f6..e7ea8693 100644
--- a/rd-submodules/ryujinx/ryujinx-wrapper
+++ b/rd-submodules/ryujinx/ryujinx-wrapper
@@ -4,4 +4,4 @@ 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
 
-Ryujinx "$@"
+env DOTNET_EnableAlternateStackCheck=1 Ryujinx "$@"
\ No newline at end of file
diff --git a/retrodeck.sh b/retrodeck.sh
index 7d45819b..fd0d4925 100644
--- a/retrodeck.sh
+++ b/retrodeck.sh
@@ -17,9 +17,10 @@ Arguments:
     -h, --help        Print this help
     -v, --version     Print RetroDECK version
     --info-msg        Print paths and config informations
+    --configure       Starts the RetroDECK Configurator
     --reset-all       Starts the initial RetroDECK installer (backup your data first!)
     --reset-ra        Resets RetroArch's config to the default values
-    --reset-sa        Reset standalone emulator configs to the default values
+    --reset-sa        Reset all standalone emulator configs to the default values
     --reset-tools     Recreate the tools section
 
 For flatpak run specific options please run: flatpak run -h
@@ -57,6 +58,10 @@ https://retrodeck.net
       rm -f "$lockfile"
       shift # past argument with no value
       ;;
+    --configure*)
+      sh /var/config/retrodeck/tools/configurator.sh
+      shift # past argument with no value
+      ;;
     -*|--*)
       echo "Unknown option $i"
       exit 1
diff --git a/tools/configurator.sh b/tools/configurator.sh
index beed5170..b46a6c1b 100644
--- a/tools/configurator.sh
+++ b/tools/configurator.sh
@@ -66,7 +66,6 @@ configurator_reset_dialog() {
     --text="Which emulator do you want to reset to default?" \
     --hide-header \
     --column=emulator \
-    "RetroArch" \
     "Citra" \
     "Dolphin" \
     "Duckstation" \
@@ -75,17 +74,11 @@ configurator_reset_dialog() {
     "PPSSPP" \
     "Primehack" \
     "RPCS3" \
-    "Ryujinx" \
     "XEMU" \
     "Yuzu")
 
     case $emulator_to_reset in
 
-    "RetroArch" )
-      ra_init
-      configurator_process_complete_dialog "resetting $emulator_to_reset"
-    ;;
-
     "Citra" )
       citra_init
       configurator_process_complete_dialog "resetting $emulator_to_reset"
@@ -126,11 +119,6 @@ configurator_reset_dialog() {
       configurator_process_complete_dialog "resetting $emulator_to_reset"
     ;;
 
-    "Ryujinx" )
-      ryujinx_init
-      configurator_process_complete_dialog "resetting $emulator_to_reset"
-    ;;
-
     "XEMU" )
       xemu_init
       configurator_process_complete_dialog "resetting $emulator_to_reset"
@@ -220,12 +208,10 @@ configurator_power_user_changes_dialog() {
     "Dolphin" \
     "Duckstation" \
     "MelonDS" \
-    "PCSX2-QT" \
-    "PCSX2-Legacy" \
+    "PCSX2" \
     "PPSSPP" \
     "Primehack" \
     "RPCS3" \
-    "Ryujinx" \
     "XEMU" \
     "Yuzu")
 
@@ -251,14 +237,10 @@ configurator_power_user_changes_dialog() {
       melonDS
     ;;
 
-    "PCSX2-QT" )
+    "PCSX2" )
       pcsx2-qt
     ;;
 
-    "PCSX2-Legacy" )
-      pcsx2
-    ;;
-
     "PPSSPP" )
       PPSSPPSDL
     ;;
@@ -271,10 +253,6 @@ configurator_power_user_changes_dialog() {
       rpcs3
     ;;
 
-    "Ryujinx" )
-      ryujinx-wrapper
-    ;;
-
     "XEMU" )
       xemu
     ;;
@@ -410,7 +388,7 @@ configurator_move_dialog() {
           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
+          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"
@@ -457,7 +435,7 @@ configurator_move_dialog() {
       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=$(browse "RetroDECK directory location")
       if [[ ! -w $custom_dest ]]; then
-          configurator_generic_dialog "The destination was found but is not writable\nThis can happen if RetroDECK does not have permission to write to this location. This can typically be solved through the utility Flatseal, please make the needed changes and try the moving process again."
+          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
@@ -465,9 +443,7 @@ configurator_move_dialog() {
           if [[ -L $rdhome/roms ]]; then # Check for ROMs symlink user may have created
             unlink $rdhome/roms
           fi
-          if [[ -L $rdhome && ! $rdhome == "$HOME/retrodeck" ]]; then # Clean up extraneus symlinks from previous moves
-            unlink $rdhome
-          fi
+
           unlink $HOME/retrodeck # Remove symlink for $rdhome if the previous location was not internal
 
           (
@@ -482,6 +458,10 @@ configurator_move_dialog() {
             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"