diff --git a/pkgs/development/libraries/flatpak/bubblewrap-paths.patch b/pkgs/development/libraries/flatpak/bubblewrap-paths.patch
index 407811736f83..e0b6df195893 100644
--- a/pkgs/development/libraries/flatpak/bubblewrap-paths.patch
+++ b/pkgs/development/libraries/flatpak/bubblewrap-paths.patch
@@ -7,7 +7,7 @@ index 9e885070..d02eeb8c 100644
              "--unshare-net",
              "--unshare-pid",
 -            "--ro-bind", "/usr", "/usr",
--            "--ro-bind", "/etc/ld.so.cache", "/etc/ld.so.cache",
+-            "--ro-bind-try", "/etc/ld.so.cache", "/etc/ld.so.cache",
 +            "--ro-bind", "@storeDir@", "@storeDir@",
 +            "--ro-bind", "/run/current-system", "/run/current-system",
              "--ro-bind", validate_icon, validate_icon,
diff --git a/pkgs/development/libraries/flatpak/default.nix b/pkgs/development/libraries/flatpak/default.nix
index 97410fda0d31..40e07c590742 100644
--- a/pkgs/development/libraries/flatpak/default.nix
+++ b/pkgs/development/libraries/flatpak/default.nix
@@ -49,18 +49,19 @@
 , dconf
 , gsettings-desktop-schemas
 , librsvg
+, makeWrapper
 }:
 
 stdenv.mkDerivation rec {
   pname = "flatpak";
-  version = "1.10.2";
+  version = "1.12.2";
 
   # TODO: split out lib once we figure out what to do with triggerdir
   outputs = [ "out" "dev" "man" "doc" "devdoc" "installedTests" ];
 
   src = fetchurl {
     url = "https://github.com/flatpak/flatpak/releases/download/${version}/${pname}-${version}.tar.xz";
-    sha256 = "sha256-2xUnOdBy+P8pnk6IjYljobRTjaexDguGUlvkOPLh3eQ=";
+    sha256 = "df1eb464f9142c11627f99f04f6a5c02c868bbb145489b8902cb6c105e774b75"; # Taken from https://github.com/flatpak/flatpak/releases/
   };
 
   patches = [
@@ -90,25 +91,19 @@ stdenv.mkDerivation rec {
     # Patch taken from gtk-doc expression.
     ./respect-xml-catalog-files-var.patch
 
-    # Don’t hardcode flatpak binary path in launchers stored under user’s profile otherwise they will break after Flatpak update.
-    # https://github.com/NixOS/nixpkgs/issues/43581
-    ./use-flatpak-from-path.patch
-
-    # Hardcode flatpak binary path for flatpak-spawn.
-    # When calling the portal’s Spawn command with FLATPAK_SPAWN_FLAGS_CLEAR_ENV flag,
-    # it will clear environment, including PATH, making the flatpak run fail.
-    # https://github.com/flatpak/flatpak/pull/4174
-    (fetchpatch {
-      url = "https://github.com/flatpak/flatpak/commit/495449daf6d3c072519a36c9e4bc6cc1da4d31db.patch";
-      sha256 = "gOX/sGupAE7Yg3MVrMhFXzWHpFn+izVyjtkuPzIckuY=";
-    })
-
     # Nix environment hacks should not leak into the apps.
     # https://github.com/NixOS/nixpkgs/issues/53441
     ./unset-env-vars.patch
 
     # But we want the GDK_PIXBUF_MODULE_FILE from the wrapper affect the icon validator.
     ./validate-icon-pixbuf.patch
+
+    # Tests don't respect the FLATPAK_BINARY override that was added, this is a workaround.
+    # https://github.com/flatpak/flatpak/pull/4496 (Can be removed once included).
+    (fetchpatch {
+      url = "https://github.com/flatpak/flatpak/commit/96dbe28cfa96e80b23fa1d8072eb36edad41279c.patch";
+      sha256 = "1jczk06ymfs98h3nsg245g0jwxvml7wg2x6pb7mrfpsdmrpz2czd";
+    })
   ];
 
   nativeBuildInputs = [
@@ -189,7 +184,14 @@ stdenv.mkDerivation rec {
   in ''
     patchShebangs buildutil
     patchShebangs tests
-    PATH=${lib.makeBinPath [vsc-py]}:$PATH patchShebangs --build variant-schema-compiler/variant-schema-compiler
+    PATH=${lib.makeBinPath [vsc-py]}:$PATH patchShebangs --build subprojects/variant-schema-compiler/variant-schema-compiler
+  '';
+
+  preFixup = ''
+    gappsWrapperArgs+=(
+      # Use flatpak from PATH in exported assets (e.g. desktop files).
+      --set FLATPAK_BINARY flatpak
+    )
   '';
 
   passthru = {
diff --git a/pkgs/development/libraries/flatpak/use-flatpak-from-path.patch b/pkgs/development/libraries/flatpak/use-flatpak-from-path.patch
deleted file mode 100644
index 84534b7bc53a..000000000000
--- a/pkgs/development/libraries/flatpak/use-flatpak-from-path.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-diff --git a/common/flatpak-dir.c b/common/flatpak-dir.c
-index 52b222ea..9489441f 100644
---- a/common/flatpak-dir.c
-+++ b/common/flatpak-dir.c
-@@ -6956,7 +6956,7 @@ export_desktop_file (const char         *app,
- 
-       new_exec = g_string_new ("");
-       g_string_append_printf (new_exec,
--                              FLATPAK_BINDIR "/flatpak run --branch=%s --arch=%s",
-+                              "flatpak run --branch=%s --arch=%s",
-                               escaped_branch,
-                               escaped_arch);
- 
-@@ -8290,8 +8290,8 @@ flatpak_dir_deploy (FlatpakDir          *self,
-                                        error))
-         return FALSE;
- 
--      bin_data = g_strdup_printf ("#!/bin/sh\nexec %s/flatpak run --branch=%s --arch=%s %s \"$@\"\n",
--                                  FLATPAK_BINDIR, escaped_branch, escaped_arch, escaped_app);
-+      bin_data = g_strdup_printf ("#!/bin/sh\nexec flatpak run --branch=%s --arch=%s %s \"$@\"\n",
-+                                  escaped_branch, escaped_arch, escaped_app);
-       if (!g_file_replace_contents (wrapper, bin_data, strlen (bin_data), NULL, FALSE,
-                                     G_FILE_CREATE_REPLACE_DESTINATION, NULL, cancellable, error))
-         return FALSE;
-diff --git a/tests/test-bundle.sh b/tests/test-bundle.sh
-index d1682344..5e2b9a97 100755
---- a/tests/test-bundle.sh
-+++ b/tests/test-bundle.sh
-@@ -67,7 +67,7 @@ assert_has_dir $FL_DIR/app/org.test.Hello/$ARCH/master/active/files
- assert_has_dir $FL_DIR/app/org.test.Hello/$ARCH/master/active/export
- assert_has_file $FL_DIR/exports/share/applications/org.test.Hello.desktop
- # Ensure Exec key is rewritten
--assert_file_has_content $FL_DIR/exports/share/applications/org.test.Hello.desktop "^Exec=.*/flatpak run --branch=master --arch=$ARCH --command=hello\.sh org\.test\.Hello$"
-+assert_file_has_content $FL_DIR/exports/share/applications/org.test.Hello.desktop "^Exec=flatpak run --branch=master --arch=$ARCH --command=hello\.sh org\.test\.Hello$"
- assert_has_file $FL_DIR/exports/share/icons/hicolor/64x64/apps/org.test.Hello.png
- assert_has_file $FL_DIR/exports/share/icons/HighContrast/64x64/apps/org.test.Hello.png
- 
-diff --git a/tests/test-run.sh b/tests/test-run.sh
-index fecb756e..64043281 100644
---- a/tests/test-run.sh
-+++ b/tests/test-run.sh
-@@ -45,7 +45,7 @@ assert_has_dir $FL_DIR/app/org.test.Hello/$ARCH/stable/active/files
- assert_has_dir $FL_DIR/app/org.test.Hello/$ARCH/stable/active/export
- assert_has_file $FL_DIR/exports/share/applications/org.test.Hello.desktop
- # Ensure Exec key is rewritten
--assert_file_has_content $FL_DIR/exports/share/applications/org.test.Hello.desktop "^Exec=.*/flatpak run --branch=stable --arch=$ARCH --command=hello\.sh org\.test\.Hello$"
-+assert_file_has_content $FL_DIR/exports/share/applications/org.test.Hello.desktop "^Exec=flatpak run --branch=stable --arch=$ARCH --command=hello\.sh org\.test\.Hello$"
- assert_has_file $FL_DIR/exports/share/gnome-shell/search-providers/org.test.Hello.search-provider.ini
- assert_file_has_content $FL_DIR/exports/share/gnome-shell/search-providers/org.test.Hello.search-provider.ini "^DefaultDisabled=true$"
- assert_has_file $FL_DIR/exports/share/icons/hicolor/64x64/apps/org.test.Hello.png