Python is great but it's a general-purpose language. A build system needs a domain-specific language, otherwise all but trivial tasks will require very verbose code. CMake should converge to conventions that are almost universal in modern interpreted languages, but having a DSL instead of whatever g.p. interpreted language happens to be fashionable today is a wise choice.
I'm very confused by the C++20 modules part. Are you trying to make CMake figure out module dependencies automatically? That sounds kind of crazy. Why not just do what Bazel has been doing for ages?
Modules != packages. A module is a unit of code, kind of a combined cpp + hpp file, optionaly combined with implementation units and partition units. A package can be composed of many modules. The dependencies he talk about are that when you import a module from another file, that file *must* be compiled first. If the other file has not be compiled first, the build fails. So the build system must scan the dependencies before compiling those files.