SharePoint for End Users just put up up a post about custom themes that echoed the same process that has been repeated several times before:
- Log into your SharePoint server
- Copy an existing theme
- Rename OLDTHEME.INF to NEWTHEME.INF and inside replace OldTheme with NewTheme
- Modify TEMPLATE\LAYOUTS\1033\SPTHEMES.XML
- Modify theme.css, images, etc.
I like this article in particular because it points out to the “end user” the un/ghosting caveat of SPD customizations that administrators despise and most developers learn on day 1. But it still advises the changes be made directly on the file system, with no mention of how that should be done. Sure it’s an end user audience, but modifying the hive should bump it squarely out of beginner territory.
That said, one of the comments got me thinking:
I have just one question. Is there a way to deploy custom themes as a solution?
Well, we developers all know the answer is yes. I’ve previously discussed updating SPTHEMES.XML, and there are several tools (WSPBuilder, STSDEV, VSeWSS (in theory)…) that can handle “solutionizing” the theme resources, but there has to be a better way. And through STSDEV‘s solution provider interface, there is!
Imaginiff
Suppose getting started on a new theme were as simple as this:
- Create Solution

- Pick Theme Template

- Enter Theme Details

- Solutionized!

The solution provider copies the existing theme, renames the .INF, does the search and replace, and even builds a farm-scoped feature complete with receiver to update SPTHEMES.XML. The current STSDEV release (1.3) doesn’t populate the feature receiver assembly, but after adding that to feature.xml the solution should be ready to customize and deploy.
I need to clean up the code a bit before I put it on CodePlex, but in the meantime you can download the binary here: STSDEV 1.3a with Theme Generator. If you’re new to STSDEV, check out Ted‘s Tutorial Screencasts (scroll down) to get started. And if you have any problems or feature requests, please let me know. One idea that I’m already planning to implement is an option to convert a theme to use Heather Solomon‘s @import technique.
Update 12/11/2008: An updated release is available here: STSDEV 1.3b with Theme Generator