diff --git a/MODULE.bazel b/MODULE.bazel
index c9a52e05..e213d43e 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -39,29 +39,38 @@ module(
 # Only direct dependencies need to be listed below.
 # Please keep the versions in sync with the versions in the WORKSPACE file.
 
-bazel_dep(name = "abseil-cpp",
-          version = "20240116.2")
+bazel_dep(
+    name = "abseil-cpp",
+    version = "20240116.2",
+)
+bazel_dep(
+    name = "platforms",
+    version = "0.0.10",
+)
+bazel_dep(
+    name = "re2",
+    version = "2024-07-02",
+)
 
-bazel_dep(name = "platforms",
-          version = "0.0.10")
-
-bazel_dep(name = "re2",
-          version = "2024-07-02")
-
-bazel_dep(name = "rules_python",
-          version = "0.34.0",
-          dev_dependency = True)
+bazel_dep(
+    name = "rules_python",
+    version = "0.34.0",
+    dev_dependency = True,
+)
 
 # https://rules-python.readthedocs.io/en/stable/toolchains.html#library-modules-with-dev-only-python-usage
 python = use_extension(
     "@rules_python//python/extensions:python.bzl",
     "python",
-    dev_dependency = True
+    dev_dependency = True,
+)
+python.toolchain(
+    ignore_root_user_error = True,
+    is_default = True,
+    python_version = "3.12",
 )
 
-python.toolchain(python_version = "3.12",
-                 is_default = True,
-                 ignore_root_user_error = True)
-
-fake_fuchsia_sdk = use_repo_rule("//:fake_fuchsia_sdk.bzl", "fake_fuchsia_sdk")
-fake_fuchsia_sdk(name = "fuchsia_sdk")
+# See fake_fuchsia_sdk.bzl for instructions on how to override this with a real SDK, if needed.
+fuchsia_sdk = use_extension("//:fake_fuchsia_sdk.bzl", "fuchsia_sdk")
+fuchsia_sdk.create_fake()
+use_repo(fuchsia_sdk, "fuchsia_sdk")
diff --git a/fake_fuchsia_sdk.bzl b/fake_fuchsia_sdk.bzl
index 2024dc6c..bc5b9273 100644
--- a/fake_fuchsia_sdk.bzl
+++ b/fake_fuchsia_sdk.bzl
@@ -1,10 +1,20 @@
 """Provides a fake @fuchsia_sdk implementation that's used when the real one isn't available.
 
-This is needed since bazel queries on targets that depend on //:gtest (eg:
-`bazel query "deps(set(//googletest/test:gtest_all_test))"`) will fail if @fuchsia_sdk is not
-defined when bazel is evaluating the transitive closure of the query target.
+GoogleTest can be used with the [Fuchsia](https://fuchsia.dev/) SDK. However,
+because the Fuchsia SDK does not yet support bzlmod, GoogleTest's `MODULE.bazel`
+file by default provides a "fake" Fuchsia SDK.
 
-See https://github.com/google/googletest/issues/4472.
+To override this and use the real Fuchsia SDK, you can add the following to your
+project's `MODULE.bazel` file:
+
+    fake_fuchsia_sdk_extension =
+    use_extension("@com_google_googletest//:fake_fuchsia_sdk.bzl", "fuchsia_sdk")
+    override_repo(fake_fuchsia_sdk_extension, "fuchsia_sdk")
+
+NOTE: The `override_repo` built-in is only available in Bazel 8.0 and higher.
+
+See https://github.com/google/googletest/issues/4472 for more details of why the
+fake Fuchsia SDK is needed.
 """
 
 def _fake_fuchsia_sdk_impl(repo_ctx):
@@ -31,3 +41,21 @@ fake_fuchsia_sdk = repository_rule(
         ),
     },
 )
+
+_create_fake = tag_class()
+
+def _fuchsia_sdk_impl(module_ctx):
+    create_fake_sdk = False
+    for mod in module_ctx.modules:
+        for _ in mod.tags.create_fake:
+            create_fake_sdk = True
+
+    if create_fake_sdk:
+        fake_fuchsia_sdk(name = "fuchsia_sdk")
+
+    return module_ctx.extension_metadata(reproducible = True)
+
+fuchsia_sdk = module_extension(
+    implementation = _fuchsia_sdk_impl,
+    tag_classes = {"create_fake": _create_fake},
+)