Just fyi, dune already supports specifying all these dependencies: OPAM integration — dune documentation
And if you don’t like either the opam or dune formats, there’s drom, which also uses TOML format: [ANN] drom.0.2.0: OCaml Project Manager, beta release
But I think if the main thing you want to solve is to ‘force you to explicitly specify all your direct dependencies (opam or pins) and their versions’, then you have no choice but to use esy or nix. I mean, unless you want to reimplement package management.