pre-commit is a framework for managing and maintaining multi-language pre-commit hooks and its better than what we put together. I've noticed that mp-units uses it and it was, I think, suggested in the C++ architecture book I reviewed a few weeks back on LinkedIn. It looks far more manageable than putting together lint rules in the CI directly. We should just be installing and launching pre-commit on a repo or project and let them decide how they want it to be.
For libhal projects, we can have a special pre-commit injected into their project like we do with clang-format to ensure everything conforms.