I found this awesome TuT on setting up UC by Slueth225 over at XDA
Code:
here:http://forum.xda-developers.com/showthread.php?t=366337
This will help you to set up User Customization. So, whenever you flash a new rom, everything you want to install and change will be done so automatically. Making it even easier to make your phone yours again. I will be posting a
video Tutorial on this either tonight or tomorow, for those that need some visual assistance. I have attached a tool to create a sdconfig.txt for those that do not wish to do it manually. Enjoy and have some fun!!!
What is UC? It is a feature contained in UC capable ROMs. A UC capable ROM extends initial customization to your SD card so you can load cabs and install XML files that are located there too. What this means is that once you get your customization scripts right, you can flash any UC capable ROM and all your apps and settings will be restored as part of the initial customization process whenever your SD card is inserted in the slot.
If you are a ROM chef and want to make your own ROM UC capable, then go
here to learn how. The effort is trivial btw.
Ok, on to creating scripts!
First you need to read a short WiKi article on customization that's located
here
How do you set up UC? By placing a file called "SDConfig.txt" in the root directory of your storage card. The best way to illustrate this is to show examples. Here is my SDConfig.txt:
This is mine, Superman369
Code:
LOCK:Enabled
CAB: \Storage Card\Cabs\Advanced_Configuration_Tool_v3.0.cab
CAB: \Storage Card\Cabs\Badboy8813 Audio Fix- (Full Volume).cab
CAB: \Storage Card\Cabs\brainZapr_wm5or6_vga.cab
CAB: \Storage Card\Cabs\CorePlayer v1.3.0 Build-6213 for PPC_Reg.cab
CAB: \Storage Card\Cabs\Diamond TF3D Config Setup v0.6.7.CAB
CAB: \Storage Card\Cabs\Diamond Tweak 0.5.3_English.cab
CAB: \Storage Card\Cabs\fexploreext205.CAB
CAB: \Storage Card\Cabs\Facebook.cab
CAB: \Storage Card\Cabs\iNigmaReader.CAB
CAB: \Storage Card\Cabs\oldSAP SMS Nuke WM5 WM6.cab
CAB: \Storage Card\Cabs\OpMon.CAB
CAB: \Storage Card\Cabs\palringo.CAB
CAB: \Storage Card\Cabs\ShakeAndSave_Setup.cab
CAB: \Storage Card\Cabs\Skyfire-PPC.CAB
CAB: \Storage Card\Cabs\smmssetupfull.cab
CAB: \Storage Card\Cabs\tcmdpocketarm.cab
CAB: \Storage Card\Cabs\VGA MusicID_1.3.16.CAB
CAB: \Storage Card\Cabs\WindowsLive_NoIM_0409.cab
CAB: \Storage Card\TF3D Fonts\GODZSON_-Drafting_Fonts.cab
CAB: \Storage Card\TF3D Themes\Probex\PROBE-X-DESIGN Stone Chrome KillerX.cab
CAB: \Storage Card\Cabs\ThrottleLock0.4\ThrottleLock0.4.CAB
LOCK:Disabled
RST: Reset
Here are some important facts to remember:
- end your file with the "RST: Reset" command
- The file cannot be UNICODE
- All commands must be in UPPER CASE. CAB: is valid but Cab: is not. Case is not important in the parameter portion however: \Storage Card\CABS\myCAB.cab is the same as \storage card\cabs\mycab.cab.
- Cabs that specifically wait for additiional user input (other than the initial location) can be loaded but require special grouping. An example of this is the 1-calc installation which stops and makes you accept a license agreement. Go here to find out how to load these. Thanks booda!
- Tabs/Spaces at the end of a line are not allowed and will cause SDAutoRun to abort on a file not found error.
- The first 5 characters of a line are reserved for the command. The parameter for the command must begin on the 6th character That means to add one space to 4 character commands like "CAB:" and no spaces to 5 character commands like "HIDE:".
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++
Settings customization is pretty advanced stuff. You might want to get going first by simply using User Customization to install some cabs. If I were first starting out, I'd install cabs that customize my device. For example, I have a Tilt, so I would install a Keyboard patch cab for the Tilt layout and another cab that disables the AT&T hidden proxy. This would require two CAB: statements in SDConfig.txt.
However, if you're yearning to do more settings customization, then the "XML:" config statement is the key. Here's my XML provisioning file called SleuthProvisioning.xml. It initializes me in cleartype mode, changes my notification settings, initializes the default SIP to Block Recognizer, sets power and backlight timeouts, re-arranges my today screen and updates my Owner Name.
Code:
<wap-provisioningdoc>
<!-- ClearType Preferences -->
<characteristic type="Registry">
<!-- Just adding this Key enables ClearType -->
<characteristic type="HKLM\System\GDI\CLEARTYPE">
<parm name="Default" value="0" datatype="integer"/>
<noparm name="Default"/>
</characteristic>
<characteristic type="HKLM\System\GDI\ClearTypeSettings">
<parm name="OffOnRotation" value="0" datatype="integer"/>
</characteristic>
<!-- Owner Preferences -->
<characteristic type="HKCU\ControlPanel\Owner">
<parm name="Name" value="Sleuth 255" datatype="string"/>
<!-- Owner value is SZ_BINARY: 320 Unicode characters (640 bytes). XML "Binary" datatype processes this as Base64-->
<parm name="Owner" value="SwBlAaSwDyuuIIgvrRRvAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==" datatype="binary"/>
</characteristic>
<!-- Notification Preferences -->
<!-- New Email Message -->
<characteristic type="HKCU\ControlPanel\Notifications\{A877D65A-239C-47a7-9304-0D347F580408}">
<parm name="Options" value="2" datatype="integer"/>
</characteristic>
<!-- Reminders -->
<characteristic type="HKCU\ControlPanel\Notifications\{15F11F90-8A5F-454c-89FC-BA9B7AAB0CAD}">
<parm name="Options" value="1073741833" datatype="integer"/>
</characteristic>
<!-- Power/Backlight Timeout Preferences -->
<characteristic type="HKCU\ControlPanel\BackLight">
<parm name="BatteryTimeout" value="240" datatype="integer"/>
<parm name="ACTimeout" value="360" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\System\CurrentControlSet\Control\Power\Timeouts">
<parm name="ACSuspendTimeout" value="300" datatype="integer"/>
<parm name="BattSuspendTimeout" value="180" datatype="integer"/>
</characteristic>
<!-- Application Preferences -->
<characteristic type="HKCU\Software\The Paradigm Group\sipchange\Parameters">
<parm name="DefaultSIP" value="Block Recognizer" datatype="string"/>
<parm name="Delay" value="10" datatype="integer"/>
</characteristic>
<characteristic type="HKCU\Software\Spacreat\SP TimeSync\General settings">
<parm name="Start minimized" value="Yes" datatype="string"/>
</characteristic>
<characteristic type="HKCU\Software\Spacreat\SP TimeSync\NTP client">
<parm name="Autosync period" value="21600" datatype="string"/>
</characteristic>
<!-- Silent Keyboard Sliding Sound -->
<characteristic type="HKLM\Software\HTC\SlidingSound">
<parm name="ActiveSlidingSound" value="0" datatype="integer"/>
<parm name="SlidingSoundEffect" value="0" datatype="integer"/>
</characteristic>
<!-- Today Screen Order/Enabled Preferences -->
<characteristic type="HKLM\Software\Microsoft\Today\Items\HTC Home">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="0" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\Windows Live Search">
<parm name="Enabled" value="1" datatype="integer"/>
<parm name="Order" value="1" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Messaging"">
<parm name="Enabled" value="1" datatype="integer"/>
<parm name="Order" value="5" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Calendar"">
<parm name="Enabled" value="1" datatype="integer"/>
<parm name="Order" value="20" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Tasks"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="21" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"TomTom"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="22" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\Windows Live">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="23" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Pocket Plus"">
<parm name="Enabled" value="1" datatype="integer"/>
<parm name="Order" value="24" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Swcked Weather"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="26" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Swcked Time"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="28" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Swcked Backup"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="42" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\"Owner Info"">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="46" datatype="integer"/>
</characteristic>
<characteristic type="HKLM\Software\Microsoft\Today\Items\Getting Started">
<parm name="Enabled" value="0" datatype="integer"/>
<parm name="Order" value="47" datatype="integer"/>
</characteristic>
</characteristic>
<-- File Operations -->
<-- Copy the SP Timesync link to startup so it gets executed whenever I reset -->
<characteristic type="FileOperation">
<characteristic type="%CE2%\Startup" translation="install">
<characteristic type="MakeDir" />
<characteristic type="StartTimeSync.lnk" translation="install">
<characteristic type="Copy">
<parm name="Source" value="\windows\Start Menu\Programs\SP TimeSync.lnk" translation="install" />
</characteristic>
</characteristic>
</characteristic>
</characteristic>
</wap-provisioningdoc>
Lets take a look at this more closely. The XML itself sets up two Configuration Service providers. One is used for registry operations and one for file operations. both are enclosed by the wap-provisioning tags. Here they are shown without any operations:
Code:
<wap-provisioningdoc>
<characteristic type="Registry">
</characteristic>
<characteristic type="FileOperation">
</characteristic>
</wap-provisioningdoc>
Registry CSPs
Within the registry type, I set a lot of cool stuff. You should be able to firgure out how it works if you have basic registry skills. Essentially, setting values for any registry key looks like this:
Code:
<characteristic type="HKCU\ControlPanel\BackLight">
<parm name="BatteryTimeout" value="240" datatype="integer"/>
<parm name="ACTimeout" value="360" datatype="integer"/>
</characteristic>
First you set the key with the <characteristic type> tag, then you set values with the <parm name> tags. Binary values are a PITA since they're encoded Base 64 (see my entry for Owner Information above). If you want to set owner information as I did in the example, then you need to convert Unicode to Base64. Post here if you want to learn how and I'll show you how I do it.
Special characters within quotes in XML files must be represented using html special character sequences. For instance, the double quote (") character sequence is " so "Today\Items\"Pocket Plus"" would be written as "Today\Items\"Pocket Plus"". The full list of special HTML character sequences can be found
here. This is especially important when changing today screen plugin order since some today screen registry entries actually have quotes in the key name. See my provisioning file above under "Today Screen order/enabled preferences" for an example of this.