The order in which I group my header includes is as follows. Each section is separated by exactly one blank line, even if the section only has one include.
""
Internal headers""
Internal generated headers (e.g. fromversion.h.in
; okay to use from include path)""
Internal third-party headers (vendored into project)""
Private API headers (always relative paths)""
Public API headers<>
Build-system level third party headers (e.g. from CMake'sadd_subdirectory()
; always from include path)