#!/bin/sh
# Written by Urban
# Licensed under the UPL http://urbanunderworld.net/upl/
# Project Page: http://urbanunderworld.net/software/linux/fym/
# Version 1.0

# Check running as root
if [ "`whoami`" != "root" ]
then
	echo "You must be root to run this script! Use sudo."
	exit 67
fi
aptitude -y -q update
if [ ! -x `which zenity` ]
then
	echo "Installing zenity..."
	aptitude -y -q install zenity
fi
APT="aptitude -y install"
# Using ^A (ascii 1) to delimit packages 
# Using ^G (ascii 7) to delimit options.
# To insert in VIM Ctrl-V #
ARGS=""
ARGS="FALSEAdd Vogon Gnome SFTP (CSC, SE, CPE)USR=\`zenity --entry --title 'Enter CSC User Name' --entry-text='Enter CSC User Name'\` && echo \"sftp://\$USR@vogon.csc.calpoly.edu/home/\$USR Vogon\" >> $HOME/.gtk-bookmarks"
ARGS="${ARGS}TRUEUbuntu Multimedia Repo (Only Ubuntu - required)wget --output-document=/etc/apt/sources.list.d/medibuntu.list http://www.medibuntu.org/sources.list.d/$(lsb_release -cs).list
aptitude -y -q -q -q update
aptitude -y -q -q -q --allow-untrusted install medibuntu-keyring
aptitude -y -q -q -q update"
ARGS="${ARGS}FALSEDebian Multimedia Repo (Only Debian - required)echo \"deb http://www.debian-multimedia.org \`lsb_release -cs\` main\" >> /etc/apt/sources.list
aptitude -y -q -q -q update
aptitude -y -q -q -q --allow-untrusted install debian-multimedia-keyring
aptitude -y -q -q -q update"
ARGS="${ARGS}FALSEChange sources.list to use kernel.org (permanent)sed -i s-us\.archive.ubuntu\.com-mirrors.kernel.org-g /etc/apt/sources.list
aptitude -y -q -q -q update"
ARGS="${ARGS}FALSEChange sources.list to use calpoly.edu (permanent/unstable)sed -i s-us\.archive.ubuntu\.com-mirrors.calpoly.edu-g /etc/apt/sources.list
aptitude -y -q -q -q update"
ARGS="${ARGS}FALSEUbuntu Restricted Extras$APT ubuntu-restricted-extras"
ARGS="${ARGS}FALSEJava 6 Development Kitecho 'sun-java6-jdk shared/accepted-sun-dlj-v1-1 select true' | /usr/bin/debconf-set-selections && $APT sun-java6-jdk"
ARGS="${ARGS}TRUEJava 6 Runtimeecho 'sun-java6-jre shared/accepted-sun-dlj-v1-1 select true' | /usr/bin/debconf-set-selections && $APT sun-java6-jre"
ARGS="${ARGS}TRUEJava 6 Pluginecho 'sun-java6-jre shared/accepted-sun-dlj-v1-1 select true' | /usr/bin/debconf-set-selections && $APT sun-java6-plugin"
ARGS="${ARGS}TRUEFlash Plugin$APT flashplugin-nonfree"
ARGS="${ARGS}TRUEMoonlight (Silverlight)$APT moonlight-plugin-mozilla moonlight-plugin-core"
ARGS="${ARGS}FALSEThunderbird$APT thunderbird"
ARGS="${ARGS}FALSEEclipse$APT eclipse"
ARGS="${ARGS}FALSENetbeans$APT netbeans"
ARGS="${ARGS}TRUEVIM$APT vim-nox"
ARGS="${ARGS}FALSESVN$APT subversion"
ARGS="${ARGS}TRUEBuild Essential (gcc, etc)$APT build-essential"
ARGS="${ARGS}TRUEValgrind$APT valgrind"
ARGS="${ARGS}TRUEDeveloper Manpages$APT manpages-posix manpages-dev gcc-doc glibc-doc"
ARGS="${ARGS}FALSEant (Java make)$APT ant"
ARGS="${ARGS}FALSEDoxygen$APT doxygen"
ARGS="${ARGS}FALSEirssi$APT irssi"
ARGS="${ARGS}TRUEPidgin$APT pidgin pidgin-plugin-pack aspell"
REALUSR="`logname`_$$"
ACNTCONF="\n\t<account>\n\t\t<protocol>prpl-irc<\/protocol>\n\t\t<name>${REALUSR}@irc.freenode.net<\/name>\n\t\t<statuses>\n\t\t\t<status type='available' name='Available' active='true'>\n\t\t\t\t<attributes\/>\n\t\t\t<\/status>\n\t\t\t<status type='away' name='Away' active='false'>\n\t\t\t\t<attributes\/>\n\t\t\t<\/status>\n\t\t\t<status type='offline' name='Offline' active='false'>\n\t\t\t\t<attributes\/>\n\t\t\t<\/status>\n\t\t<\/statuses>\n\t\t<settings>\n\t\t\t<setting name='port' type='int'>6667<\/setting>\n\t\t\t<setting name='autodetect_utf8' type='bool'>0<\/setting>\n\t\t\t<setting name='ssl' type='bool'>0<\/setting>\n\t\t\t<setting name='encoding' type='string'>UTF-8<\/setting>\n\t\t<\/settings>\n\t\t<settings ui='gtk-gaim'>\n\t\t\t<setting name='auto-login' type='bool'>1<\/setting>\n\t\t<\/settings>\n\t\t<current_error\/>\n\t<\/account>"
BLIST="\n\t\t<group name='IRC Chans'>\n\t\t\t<setting name='collapsed' type='bool'>0<\/setting>\n\t\t\t<chat proto='prpl-irc' account='${REALUSR}@irc.freenode.net'>\n\t\t\t\t<alias>Cal Poly Linux Users Group<\/alias>\n\t\t\t\t<component name='channel'>#cplug<\/component>\n\t\t\t<\/chat>\n\t\t<\/group>"
ARGS="${ARGS}TRUE= Add CPLUG IRC Channel to Pidginif [ -e ${HOME}/.purple/accounts.xml ]
then
	sed -i \"s/<account version='1.0'>/<account version='1.0'>${ACNTCONF}/\" ${HOME}/.purple/accounts.xml
else
	mkdir -p ${HOME}/.purple/
	echo \"<?xml version='1.0' encoding='UTF-8' ?>\n\n<account version='1.0'>\n</account>\" > ${HOME}/.purple/accounts.xml
	sed -i \"s/<account version='1.0'>/<account version='1.0'>${ACNTCONF}/\" ${HOME}/.purple/accounts.xml
fi
if [ -e ${HOME}/.purple/blist.xml ]
then
	sed -i \"s/<blist>/<ADLFJ>${BLIST}/\" ${HOME}/.purple/blist.xml
else
	mkdir -p ${HOME}/.purple/
	echo \"<?xml version='1.0' encoding='UTF-8' ?>\n\n<purple version='1.0'>\n\t<blist>\n</blist>\n\t<privacy>\n\t\t<account proto='prpl-irc' name='${REALUSR}@irc.freenode.net' mode='1'/>\n\t</privacy>\n</purple>\n\" > ${HOME}/.purple/blist.xml
	sed -i \"s/<blist>/<blist>${BLIST}/\" ${HOME}/.purple/blist.xml
fi
chown -R `logname`:`logname` ${HOME}/.purple"
ARGS="${ARGS}TRUEGimp$APT gimp"
ARGS="${ARGS}FALSEScribus$APT scribus"
ARGS="${ARGS}TRUEOpenOffice.org$APT openoffice.org libxrender1 libgl1"
ARGS="${ARGS}TRUEWINE$APT wine"
ARGS="${ARGS}TRUEMS Fonts$APT msttcorefonts"
ARGS="${ARGS}TRUEw32codecs$APT w32codecs"
ARGS="${ARGS}FALSEw64codecs$APT w64codecs"
ARGS="${ARGS}TRUEDVDs$APT libdvdcss2 libdvdread4 libdvdnav4 libxine1"
ARGS="${ARGS}TRUEGstreamer good, ugly, and bad plugins$APT gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-good gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-pitfdll"
ARGS="${ARGS}TRUEMP4 Codec (AAC)$APT libmp4v2-0"
ARGS="${ARGS}TRUEffmpeg$APT gstreamer0.10-ffmpeg libavcodec52 libxine1 libavformat52 libpostproc51 libswscale0"
ARGS="${ARGS}FALSEflac codec$APT flac"
ARGS="${ARGS}TRUEzip$APT zip unzip"
ARGS="${ARGS}TRUERAR$APT rar unrar-nonfree unrar"
ARGS="${ARGS}FALSEfslint (clean filesystem lint)$APT fslint"
ARGS="${ARGS}FALSErdesktop$APT rdesktop"
ARGS="${ARGS}FALSEWireshark$APT wireshark"
ARGS="${ARGS}FALSEAircrack-ng$APT aircrack-ng"
ARGS="${ARGS}FALSEnmap, netcat, tcpdump$APT nmap netcat-openbsd tcpdump"
ARGS="${ARGS}FALSEAvrdude, gcc-avr, gdb-avr$APT avrdude avrdude-doc gcc-avr gdb-avr"
ARGS="${ARGS}FALSEspim (mips emulator)$APT spim"
ARGS="${ARGS}TRUESet swappiness to 40 (default 60)echo 'vm.swappiness=40' >> /etc/sysctl.conf"
ARGS="${ARGS}TRUEUpgrade all installed packagesaptitude -y full-upgrade"

# Convert the crazy 2D array into something zenity understands
FOUND=""
OLDIFSA=$IFS
IFS=""
for ELE in $ARGS
do
	OLDIFSB=$IFS
	IFS=""
	SETTING=""
	FIRST=1
	for ELF in $ELE
	do
		if [ $FIRST -eq 1 ]
		then
			SETTING=$ELF
			FIRST=0
		else
			FOUND="$FOUND \"$SETTING\" \"$ELF\""
			break
		fi
	done
	IFS=$OLDIFSB
done
IFS=$OLDIFSA

# Run zenity
# /bin/sh below because there is some sort of grouping issue with $FOUND
ARR=`/bin/sh -c "zenity --list --title 'FYM Script' --text 'Packages to install:' \
	--checklist --column 'Pick' --column 'options' --separator '' \
	--width 515 --height 560 $FOUND"`

# Install the packages returned by zenity by matching the Option name with
# the Option name in the 2D array.
OLDIFS=$IFS
IFS=""
for ELE in $ARR
do
	OLDIFSA=$IFS
	IFS=""
	for ELF in $ARGS
	do
		OLDIFSB=$IFS
		IFS=""
		FND=0
		FIRST=1
		for ELG in $ELF
		do
			if [ "$FIRST" -eq 1 ]
			then
				FIRST=0
			elif [ "$ELE" = "$ELG" ]
			then
				FND=1
			elif [ "$FND" -eq 1 ]
			then
				# Actually install
				/bin/sh -c "$ELG"
			fi
		done
		IFS=$OLDIFSB
	done
	IFS=$OLDIFSA
done
IFS=$OLDIFS

echo "#!/usr/bin/env xdg-open\n\n[Desktop Entry]\nEncoding=UTF-8\nVersion=1.0\nType=Application\nTerminal=false\nIcon[en_US]=gnome-panel-launcher\nExec=firefox -new-tab http://webchat.freenode.net/?channels=cplug\nName[en_US]=CPLUG IRC\nName=CPLUG IRC\nIcon=gnome-panel-launcher" > /home/`logname`/Desktop/CPLUG\ IRC.desktop
chown `logname`:`logname` /home/`logname`/Desktop/CPLUG\ IRC.desktop
chmod 755 /home/`logname`/Desktop/CPLUG\ IRC.desktop

exit

