diff --git a/utils_docs/doxygen_single_file b/utils_docs/doxygen_single_file
new file mode 100755
index 0000000000000000000000000000000000000000..b3a4a6ee37c33dd7c6cb39402cee016546d89689
--- /dev/null
+++ b/utils_docs/doxygen_single_file
@@ -0,0 +1,43 @@
+#!/usr/bin/env python3
+"""
+This script takes 2-3 args: [--browse] <Doxyfile> <sourcefile>
+
+Where Doxyfile is a path relative to source root,
+and the sourcefile as an absolute path.
+
+--browse will open the resulting docs in a web browser.
+"""
+import sys
+import os
+import subprocess
+import tempfile
+
+print(sys.argv)
+
+def find_gitroot(filepath_reference):
+    path = filepath_reference
+    path_prev = ""
+    while not os.path.exists(os.path.join(path, ".git")) and path != path_prev:
+        path_prev = path
+        path = os.path.dirname(path)
+    return path
+
+doxyfile, sourcefile = sys.argv[-2:]
+
+doxyfile = os.path.join(find_gitroot(sourcefile), doxyfile)
+os.chdir(os.path.dirname(doxyfile))
+
+tempfile = tempfile.NamedTemporaryFile(mode='w+b')
+doxyfile_tmp = tempfile.name
+tempfile.write(open(doxyfile, "r+b").read())
+tempfile.write(b'\n\n')
+tempfile.write(b'INPUT=' + os.fsencode(sourcefile) + b'\n')
+tempfile.flush()
+
+subprocess.call(("doxygen", doxyfile_tmp))
+del tempfile
+
+# Maybe handy, but also annoying?
+if "--browse" in sys.argv:
+    import webbrowser
+    webbrowser.open("html/files.html")