It is amazing how hard it is to come up with a simple, usable and intuitive configuration file. I am currently in the process of creating a file format for the CtrlProxy configuration file.
The current one (as used in all earlier versions and the first 2.7 pre releases), has a couple of major flaws. First of all, it is in XML. While XML might not be a bad thing by itself, its verbosity is certainly a problem for manually-written configuration files as it requires a lot of typing.
Another problem with the current format is the fact that the user has to manually select which plugins to load, rather then select what features (s)he wishes to use. This can be a major problem, especially since ctrlproxy contains a lot of plugins out of the box, some of which should really be enabled by default.
The configuration files in other projects (as far as I've seen) tend to boil down to one of the following:
- Simple variable<->value files
- Windows Ini style files (variable<->value with sections)
- Turing-complete, based on some programming language
- XML/YAML
- Nested in some other form (such as with braces)
A configuration file that supports nested elements suits CtrlProxy best, as it has to store data for channels, which are part of networks. At the moment, I am very much tempted to adopt a format similar to the one used for irssi. Reasons for this move are the fact that users will usually be familiar with this format, and that it's easy to read and parse.