However, it turns out it's really annoying to use text based config for most things. Primarily because integrations can't edit your config, so you have to do a lot more manual migration of config. Yaml also doesn't have any proper ide support, so it's an annoying loop of restarting the app and staring at logs looking for typos.
And finally the version control was useless because so much of what I wanted to keep was state, which can't be in config.
I've recently realised that I only actually needed the complex rules and UI to be in code. And they still are: now through the ui with instant validation.
I do still periodically go into the config folder and do a bulk 'bump' commit, though given the config is likely useless without the state of the database I don't know if this is ever going to be useful. Perhaps having some history is good in case a complex automation is lost but still quite limited.
Since YAML is a superset of JSON, I highly recommend converting[1] it to JSON, and then just treating it as a JSON config file.
1: For this, I use yaml2json (npm yaml-to-json)
https://www.amalytix.com/en/blog/home-assistant-with-conbee-...
Note: This guide is based on an older version of Home Assistant, but it might still be useful for someone just starting out to understand some general concepts.
Otherwise it's pretty straight forward nowadays!
I've been 'intending' to set it up nicely for years (more than 'a few', clearly) but that's a dealbreaker. Every time I've thought about/planned it, the main annoyance has been NodeRed being like this, I didn't realise HA was now too.
It makes sense maybe for mass market appeal I suppose, but is there something else catering more to developers/tinkerers, those who want it all in text (or better: terraform!) for version control (and just as a more familiar way to edit it than a love-it-or-hate-it UI)?
It works well for me.