В общем, я попытался рассмотреть разные варианты, и больше всего мне импонирует json-совместимый формат с рядом послаблений и расширений. Основная «фишка» формата — возможность тем же парсером разбирать json и модифицированный формат (и точно также выполнять дамп объекта в разные форматы).
1) Воспринимать файл, как описание объекта, что избавляет нас от {} верхнего уровня.
2) Ключи объекта не требуют обрамления кавычками, кроме того, вместо ':' допустимо применять '=', а если значение является объектом или массивом, вообще не требовать наличия сепаратора. То есть, допустимые варианты такие:
"key": value
key = value
key = { .. }
key {}
key []
3) Запятые, разделяющие значения могут быть опущены или заменены на символы ';' символ перевода строки воспринимать как окончание значения (если он не экранирован обратным слешем), то есть, допустимо:
key1 = value,
key2 = value;
key3 = {}
key4 = "some long" \
"string"
4) Комментарии: однострочные (// и #) и многострочные (/* */), для многострочных обязательна поддержка вложенности, так как это частое действие для конфигурационного файла — комментировать вложенными блоками.
5) Макросы: начинаются с '.' и могут содержать много строк, заключенных символами {}. Приложения могут регистрировать в парсере свои макросы, расширяя функционал. Встроенные функции парсера — .include и .includes. Первый просто включает другой кусок конфигурации из файла или по HTTP, а второй дополнительно проверяет цифровую подпись.
Если формат получится удобным для работы, то можно будет оформить парсер как отдельную библиотеку.