diff --git a/.gitmodules b/.gitmodules
index b27cd7ff..8e5495ec 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,9 +10,6 @@
 [submodule "rd-submodules/pcsx2"]
 	path = rd-submodules/pcsx2
 	url = https://github.com/flathub/net.pcsx2.PCSX2.git
-[submodule "rd-submodules/dolphin"]
-	path = rd-submodules/dolphin
-	url = https://github.com/flathub/org.DolphinEmu.dolphin-emu
 [submodule "rd-submodules/ryujinx"]
 	path = rd-submodules/ryujinx
 	url = https://github.com/flathub/org.ryujinx.Ryujinx.git
diff --git a/rd-submodules/dolphin b/rd-submodules/dolphin
deleted file mode 160000
index f75cb498..00000000
--- a/rd-submodules/dolphin
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f75cb4987bb2de1a745ff4179a401a855cf1432f
diff --git a/rd-submodules/dolphin/detectflatpak.patch b/rd-submodules/dolphin/detectflatpak.patch
new file mode 100644
index 00000000..2133f1ff
--- /dev/null
+++ b/rd-submodules/dolphin/detectflatpak.patch
@@ -0,0 +1,40 @@
+commit d4c899cede0743d40934ca11f83691cda72ff9dd
+Author: Carles Pastor <cpbadosa@gmail.com>
+Date:   Sat Apr 2 20:47:06 2022 +0200
+
+    Detect when running inside a flatpak sandbox
+
+diff --git a/Source/Core/UICommon/UICommon.cpp b/Source/Core/UICommon/UICommon.cpp
+index cb857fd3c7..e3ddde24fb 100644
+--- a/Source/Core/UICommon/UICommon.cpp
++++ b/Source/Core/UICommon/UICommon.cpp
+@@ -309,24 +309,25 @@ void SetUserDirectory(std::string custom_path)
+     // We are on a non-Apple and non-Android POSIX system, there are 4 cases:
+     // 1. GetExeDirectory()/portable.txt exists
+     //    -> Use GetExeDirectory()/User
+-    // 2. $DOLPHIN_EMU_USERPATH is set
++    // 2. $DOLPHIN_EMU_USERPATH is set, and we're not in flatpak
+     //    -> Use $DOLPHIN_EMU_USERPATH
+-    // 3. ~/.dolphin-emu directory exists
++    // 3. ~/.dolphin-emu directory exists, and we're not in flatpak
+     //    -> Use ~/.dolphin-emu
+     // 4. Default
+     //    -> Use XDG basedir, see
+     //    http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
+     user_path = home_path + "." DOLPHIN_DATA_DIR DIR_SEP;
+     std::string exe_path = File::GetExeDirectory();
++    bool flatpak = File::Exists("/.flatpak-info");
+     if (File::Exists(exe_path + DIR_SEP "portable.txt"))
+     {
+       user_path = exe_path + DIR_SEP "User" DIR_SEP;
+     }
+-    else if (env_path)
++    else if (env_path && !flatpak)
+     {
+       user_path = env_path;
+     }
+-    else if (!File::Exists(user_path))
++    else if (flatpak || !File::Exists(user_path))
+     {
+       const char* data_home = getenv("XDG_DATA_HOME");
+       std::string data_path =
diff --git a/rd-submodules/dolphin/nodirtyversion.patch b/rd-submodules/dolphin/nodirtyversion.patch
new file mode 100644
index 00000000..20b6f3c1
--- /dev/null
+++ b/rd-submodules/dolphin/nodirtyversion.patch
@@ -0,0 +1,13 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 9af66009a1..2acd3bed9a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -149,7 +149,7 @@ if(GIT_FOUND)
+       OUTPUT_VARIABLE DOLPHIN_WC_REVISION
+       OUTPUT_STRIP_TRAILING_WHITESPACE)
+   # defines DOLPHIN_WC_DESCRIBE
+-  execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty
++  execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long
+       OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE
+       OUTPUT_STRIP_TRAILING_WHITESPACE)
+