The configuration for the gamelogic is spread over three places:
cvars
definitions (unvanquished.h)
config files
This in itself is already bad but it's made worse by the fact that settings are spread more or less arbitrarily over these places and each of them has a drawback of its own. Players can be lucky if their client isn't out-of-sync but it's impossible for them to see whether or how a server is modified. Let's clean this up.
The half-assed approach
Basically, there are things we want server admins to configure and stuff they should better not touch, since it would confuse people used to the default gameplay. For instance, everything related to build points and building limitations is configurable via cvars to allow for UBP or Tremulous-like configurations but I don't want server admins to tweak damage values without the user being informed. While modifications that are easily visible to both teams (build point generation, stage thresholds) can stay in the volatile form of cvars, we should have a single, well organized place for all the other settings.
Config files can, in theory, contain most of the stuff that is currently located in unvanquished.h. However, when we give them a greater importance we should allow them to be automatically synchronized with the client as the cgame needs some of those values for display purposes (an out-of-sync visualization is worse than having none at all). It would also be very nice for players to be able to see a list of modifications on a given server.
Forcing server admins to create a mod and packaging the config files in a pk3 is nearly as bad a solution as baking them into the client vm. Instead, I could imagine config files being parsed into read-only cfg_* cvars at the beginning of a match and using the cvar's synchronization abilities. This requires some network traffic on client connect but it would be trivial to display a list of modifications to the player that way. The naming of the cvars could be derived directly from the directory structure of the configs, e.g. cfg_weapon_lcannon_attr_maxAmmo. Configuration cvars don't have a default value in the code but the game will refuse to start if not all of them are set in the config files.
The radical approach
Put all gamelogic settings, including those that might change on a per-map basis, in config files. Instead of per-map or per-layout .cfg files, a map can be started with a given profile. A profile is a directory that has the same structure as the configs folder where individual config files can be overwritten. A server can set a default profile.
Please discuss this here!