[Galaxy 3 Android Development] coolfire92:
Nice work!

Should make rom customisation a lot easier.

Could you provide options for which gapps to install?

Example of code(i was searching for such a installer,used on ics.)

Aroma-config:

###################################################################################################################
# #
# INSTALLATION #
# #
###################################################################################################################

###################################################################################################################
#
# STEP 1 - SHOW VIEWBOX - SOFTWARE INFORMATION
#
viewbox(
#-- Title
"<~welcome.title>",

#-- Text
"<~welcome.text1> <b>"+
#-- Get Config Value
ini_get("rom_name")+
"</b> <~common.for> <b>"+ini_get("rom_device")+"</b>.\n\n"+

" <~welcome.updated>\t: <b><#selectbg_g>"+ini_get("rom_date")+"</#></b>\n\n\n"+

"<~welcome.text2>\n\n"+

"<~welcome.next>",

#-- Icon
"@welcome"
);

###################################################################################################################
#
# STEP 2 - LICENSE
#
agreebox(
#-- Title
"License Terms",

#-- Subtitle / Description
"Please note:",

#-- Icon
"@license",

#-- Text Content ( Read from <AROMA Resource Dir>/license.txt )
resread("license.txt"),

#-- Checkbox Text
"Accept",

#-- Unchecked Alert Message
"You must accept the license terms first!"
);

###################################################################################################################
#
# STEP 3 - CHANGELOG
#
textbox(
#-- Title
"Changelog",

#-- Subtitle
"",

#-- Icon
"@update",

#-- Arg 4
resread("changelog.txt")
);

###################################################################################################################
#
# STEP 4 - SHOW MENUBOX - INSTALLATION TYPE
#
menubox(
#-- Title
"Select Install-Type",

#-- Sub Title
"Choose your prefered installation type:",

#-- Icon
"@info",

#-- Will be saved in /tmp/aroma/type.prop
"type.prop",

#-------------------------+-----------------[ Menubox Items ]-------------------------+---------------#
# TITLE | SUBTITLE | Item Icons #
#-------------------------+-----------------------------------------------------------+---------------#

"Full Install", "Installs 27 APKs with a total size of 53.42 Mb (+ 15.2 Mb libs).", "@install", #-- selected = 1
"Custom Install", "Choose which Apps you want to be installed. ", "@personalize" #-- selected = 2
);

###################################################################################################################
#
# STEP 5 - SET CUSTOMIZED INSTALLATION FLAGS (PROP VALUES)
#
###
# 3.a - If installation type IS NOT "Custom", skip select view and write defaults.
# NOTE: customize.prop should exists, or updater-script will error
#
if (prop("type.prop","selected")!="2") then
writetmpfile(
#-- Prop file will write to /tmp/aroma/customize.prop
"customize.prop",

#-- Full-Install Values ( all selected )
"item.1.1=1\n"+ #-- Gallery
"item.1.2=1\n"+ #-- Gmail
"item.1.3=1\n"+ #-- Maps
"item.1.4=1\n"+ #-- Market
"item.1.5=1\n"+ #-- Music
"item.1.6=1\n"+ #-- YouTube

"item.2.1=1\n"+ #-- Genie Widget
"item.2.2=1\n"+ #-- Google Play Magazines
"item.2.3=1\n"+ #-- Talk
"item.2.4=1\n"+ #-- TTS
"item.2.5=1\n"+ #-- Voice
"item.2.6=1\n"+ #-- Quick Search
"item.2.7=1\n" #-- Voice Search
);
###
# 3.b - If installation type IS "Custom", show App selection view.
#
else
checkbox(
#-- Title
"Customize Your Installation",

#-- Sub Title
"Select the Apps you want to be installed: ",

#-- Icon: <AROMA Resource Dir>/icons/personalize.png or <ThemeDir>/icon.personalize.png
"@personalize",

#-- Will be saved in /tmp/aroma/customize.prop
"customize.prop",

#------------------------------------------------[ Checkbox Without Group ]----------------------------------------------#
# TITLE | SUBTITLE | Initial Value #
#------------------+-------------------------------------------------------------------------------------+---------------#

"Common Apps", "", 2, #-- Group 1. key = "item.1.x"
"Gallery", "Filesize: 1.54 mb", 1, #-- item.1.1 = Selected by default
"Gmail", "Filesize: 2.67 mb", 1, #-- item.1.2 = Selected by default
"Google Maps", "Filesize: 8.26 mb + Steetview (259 kb)", 1, #-- item.1.3 = Selected by default
"Google Play Store", "Filesize: 3.82 mb", 1, #-- item.1.4 = Selected by default
"Google Play Music", "Filesize: 4.82 mb", 1, #-- item.1.5 = Selected by default
"YouTube", "Filesize: 5.76 mb", 1, #-- item.1.6 = Selected by default

"More Apps", "", 2, #-- Group 2. key = "item.2.x"
"Genie Widget", "Filesize: 1.08 mb", 0, #-- item.2.1 = Un-Selected by default
"Google Play Magazines", "Filesize: 5.18 mb", 0, #-- item.2.2 = Un-Selected by default
"Google Talk", "Filesize: 1.58 mb + Libs (7.67 mb)", 0, #-- item.2.3 = Un-Selected by default
"Google TTS Engine", "Filesize: 4.12 mb + Libs (7.25 mb)", 1, #-- item.2.4 = Selected by default
"Google Voice", "Filesize: 4.53 mb", 0, #-- item.2.5 = Un-Selected by default
"Quick Search Box", "Filesize: 583 kb", 0, #-- item.2.6 = Un-Selected by default
"Voice-Search", "Filesize: 1.76 mb", 1 #-- item.2.7 = Selected by default

#--------[ Initial Value = 0: Unselected, 1: Selected, 2: Group Item, 3: Not Visible ]---------#
);
endif;

#-- Change confirm button value from "Next >" to "Install Now".
ini_set("text_next", "Install Now");

###################################################################################################################
#
# STEP 6 - SHOW VIEWBOX - CONFIRM INSTALLATION
#
viewbox(
#-- Title
"Confirm selection",

#-- Text
"The wizard is ready to begin installation.\n\n"+
"Press <b>Install Now</b> to begin the installation.\n\n"+
"If you want to review or change any of your installation settings, press <b>Back</b>.\n\n"+
"To abort installation, press Menu Key -> Quit Installation.",

#-- Icon
"@install"
);

#-- Change confirm button value back from "Install Now" to "Finish".
ini_set("text_next", "Finish");

###################################################################################################################
#
# STEP 7 - INSTALL
#
setvar("retstatus",
install(
#-- Title
"Installing",

#-- Installation Process message
"<b>"+ini_get("rom_name")+"</b> are being installed.\n\n"+
"Please wait while installation wizard installs <b>"+ini_get("rom_name")+
"</b>.",

#-- Installation Icon
"@install",

#-- Installation Finish Message
"The installation wizard has successfully installed <b>"+ini_get("rom_name")+
"</b>."
)
);

###################################################################################################################
#
# STEP 8 - SHOW CHECKVIEWBOX - EXIT TO RECOVERY, OR REBOOT SYSTEM
#
checkviewbox(
#-- Title
"Installation completed!",

#-- Text
"<#selectbg_g><b>Congratulation...</b></#>\n\n"+
"<b>"+ini_get("rom_name")+"</b> have been installed on your device.\n\n",

#-- Icon
"@welcome",

#-- Checkbox Text
"Reboot your device now.",

#-- Initial Checkbox value ( 0=unchecked, 1=checked ) - (Optional, default:0)
"1",

#-- Save checked value in variable "reboot_it" (Optional)
"reboot_it"
);

##
# Check if reboot checkbox was checked
#
if
getvar("reboot_it")=="1"
then
reboot("onfinish");
endif;

#---- FINISH

Updater Script:

##
#
# AROMA Installer - Installer Script
# (c) 2011 by Ahmad Amarullah
# amarullz - xda-developers
#
##

#####################################################################################################
#
# Installer Script for ICS Google-Apps
# (c) 2012 by Stephan Schmitz <eyecatchup@gmail.com>
#

#
# Mount system partition
#

set_progress(0.05);
ui_print("Mounting /system...");
ui_print(" ");

set_progress(0.1);
run_program("/sbin/busybox", "mount", "/system");

#
# Extract files to /system/etc, /system/framework, /system/lib
#

ui_print("Copying libs and other requirements...");
show_progress(0.35, 23);
package_extract_dir("system", "/system");
ui_print(" ");

#
# Extract new APKs
#
ui_print("Installing Google Apps...");
ui_print(" ");

show_progress(0.4, 14);
##---- Customize Packages
#
# Most common APKs (select group one)
#
# Gallery
if
file_getprop("/tmp/aroma/customize.prop","item.1.1") == "1"
then
ui_print("@ Installing Gallery");
delete("/system/app/Gallery2.apk");
package_extract_dir("custom/gallery", "/system/app");
endif;

# Gmail
if
file_getprop("/tmp/aroma/customize.prop","item.1.2") == "1"
then
ui_print("@ Installing Gmail");
delete("/system/app/Gmail.apk", "/data/app/Gmail.apk");
package_extract_dir("custom/gmail", "/system/app");
endif;

# Google Maps
if
file_getprop("/tmp/aroma/customize.prop","item.1.3") == "1"
then
ui_print("@ Installing Google Maps");
delete("/system/app/Maps.apk", "/data/app/Maps.apk",
"/system/app/Street.apk", "/data/app/Street.apk");
package_extract_dir("custom/maps", "/system/app");
package_extract_dir("custom/_lib/tts", "/system/lib");
endif;

# Market / Play Store
if
file_getprop("/tmp/aroma/customize.prop","item.1.4") == "1"
then
ui_print("@ Installing Play Store");
delete("/system/app/Vending.apk");
package_extract_dir("custom/market", "/system/app");
endif;

# Play Music
if
file_getprop("/tmp/aroma/customize.prop","item.1.5") == "1"
then
ui_print("@ Installing Play Music");
delete("/system/app/Music2.apk", "/system/app/Music.apk");
package_extract_dir("custom/music", "/system/app");
endif;

# Youtube
if
file_getprop("/tmp/aroma/customize.prop","item.1.6") == "1"
then
ui_print("@ Installing YouTube");
delete("/system/app/YouTube.apk", "/data/app/com.google.android.youtube-1.apk");
package_extract_dir("custom/yt", "/system/app");
endif;
#
# Not that common APKs (select group two)
#
# Genie Widget
if
file_getprop("/tmp/aroma/customize.prop","item.2.1") == "1"
then
ui_print("@ Installing Genie Widget");
delete("/system/app/GenieWidget.apk");
package_extract_dir("custom/genie", "/system/app");
endif;

# Google Play Magazines
if
file_getprop("/tmp/aroma/customize.prop","item.2.2") == "1"
then
ui_print("@ Installing Play Magazines");
delete("/system/app/Magazines.apk");
package_extract_dir("custom/magazines", "/system/app");
endif;

# Google Talk
if
file_getprop("/tmp/aroma/customize.prop","item.2.3") == "1"
then
ui_print("@ Installing Google Talk");
delete("/system/app/Talk.apk");
package_extract_dir("custom/talk", "/system/app");
package_extract_dir("custom/_lib/talk", "/system/lib");
endif;

# Google TTS Engine
if
file_getprop("/tmp/aroma/customize.prop","item.2.4") == "1"
then
ui_print("@ Installing Google TTS Engine");
delete("/system/app/GoogleTTS.apk");
package_extract_dir("custom/tts", "/system/app");
package_extract_dir("custom/_lib/tts", "/system/lib");
endif;

# Google Voice
if
file_getprop("/tmp/aroma/customize.prop","item.2.5") == "1"
then
ui_print("@ Installing Google Voice");
delete("/system/app/Voice.apk");
package_extract_dir("custom/voice", "/system/app");
endif;

# Quick Search
if
file_getprop("/tmp/aroma/customize.prop","item.2.6") == "1"
then
ui_print("@ Installing Quick Search");
delete("/system/app/QuickSearchBox.apk", "/system/app/GoogleQuickSearchBox.apk");
package_extract_dir("custom/quicksearch", "/system/app");
endif;

# Voice Search
if
file_getprop("/tmp/aroma/customize.prop","item.2.7") == "1"
then
ui_print("@ Installing Voice Search");
delete("/system/appa/VoiceSearch.apk");
package_extract_dir("custom/voicesearch", "/system/app");
endif;

#--- END OF Customize
ui_print(" ");

#
# Fix permissions
#

ui_print("Setting permissions for new APKs...");
set_perm_recursive(0, 0, 0755, 0644, "/system/app");
set_perm_recursive(0, 0, 0755, 0644, "/system/etc/permissions");
set_perm_recursive(0, 0, 0755, 0644, "/system/framework");
set_perm_recursive(0, 0, 0755, 0644, "/system/lib");
set_progress(0.85);
ui_print(" ");

#
# Unmount system partition
#

ui_print("Unmounting /system...");
run_program("/sbin/busybox", "umount", "/system");
set_progress(0.90);
ui_print(" ");

ui_print("Formatting /cache...");
format("yaffs2", "MTD", "cache");
set_progress(0.91);
ui_print(" ");

#
# Mount data partition
#

ui_print("Mounting data...");
run_program("/sbin/busybox", "mount", "/data");
set_progress(0.93);
ui_print(" ");

#
# Wipe DC
#

ui_print("Deleting Dalvik-Cache...");
delete_recursive("/data/dalvik-cache");
set_progress(0.96);
ui_print(" ");

#
# Unmount data partition
#

ui_print("Unmounting data...");
run_program("/sbin/busybox", "umount", "/data");
ui_print(" ");
set_progress(0.99);

#run_program("/sbin/busybox", "mount", "/cache");

#-- Finish
ui_print("----------------------");
ui_print("Installation complete!");
set_progress(1);

Also use radio buttons for app2sd script selection,so multiple scripts aren't installed by mistake. :p