Right now, each plugin infers a certain number of defaults for its settings and also it installs various defaults in the database when it makes it easier to deal with the values that way.
This creates a default Snap! installation template which does not automatically serve a user well because the resulting website is likely going to look quite raw.
The Snap! library and several of the core plugins offer a mechanism to make the installation of all the other plugins data a breeze. That data is expected to be defined in a content.xml file which is loaded the first time the plugin is loaded and any time the plugin gets updated (although updates may not take immediately on a live system in an attempt to avoid potential load problems.)
The Template Installation feature is an extension to that content.xml file to force (overwrite) certain values in the database and in effect to setup the website one way or another without having to write any C++ code to do so.
For example, the template installation can offer one setup that transforms the website in a blog or journal, another that creates a wiki, and yet another that makes the website work like a dating site. This way, any template can be used and the extend of the template is pretty much unlimited. This should include forcing the installation of various plugins if they are not yet installed (i.e. maybe the template creates a book and the book feature was not yet installed.)
Note that since a company may want to work with a very large website, the Template Installation should also offer the capability to create many books within a single site instead of just making the whole site a book.
More or less, the template capability should be to automatically create pages (root of a book, blog home page, etc.) and setup various things such as lists and tags. This certainly means we want to offer ways for the end users to enter a few parameters such as the path to the root of said book, some names, tags, etc. that the template can make use of to generate the result.
We may want to offer a way to register various changes that one makes to create a specific setup and then offer the user to save that information in an XML file.
Snap! Websites
An Open Source CMS System in C++