An approach at encoding behaviours. Even though this is defined in DT, it ends up generating sane structs holding the "behaviour label" and configured user params (e.g. keycode for that binding) which could be compiled in, and then updated with the values from some config stored in NVS.
The equivalent JSON for a "key press with keycode A" in the JSON would be:
{
"bindings": [
{ "behavior": "KEY_PRESS", "cells": [123] }, // THis is the keycode for 'A'
{ "behavior": "LAYER_TO", "cells": [1] }, // THis is the layer number
{ "behavior": "MOD_TAP", "cells": [1, 123] }, // THis is the modifier, and the keycode, for mod-tap behavior.
]
}