Skip to content

Instantly share code, notes, and snippets.

@ByScripts
Last active October 16, 2015 07:04
Show Gist options
  • Save ByScripts/0e8fee6517fe91f43586 to your computer and use it in GitHub Desktop.
Save ByScripts/0e8fee6517fe91f43586 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
###################################################################################
#
# /!\ WARNING /!\
#
# If you want to use this script, be sure to read all and adjust it to your needs
# For example, I add my name and my email adress to git global config, change it!
#
###################################################################################
_success() {
echo -e "\e[1;32m$1\e[0m"
}
_error() {
echo -e "\e[1;41;37m$1\e[0m"
}
_info() {
echo -e "\e[0;37m$1\e[0m"
}
commandExists() {
command -v "$1" > /dev/null 2>&1
}
installPackage() {
if [[ "$2" = "" ]]; then
local packages="$1"
else
local packages="$2"
fi
if commandExists "$1"; then
_info "$1 is already installed"
return
fi
echo -n "Installing $packages... "
sudo apt-get install -q -y $packages >> post_install.log 2>&1 &
local pid=$!
spinner $pid
wait $pid
if test $? -eq 0; then
_success "OK"
else
_error "Error installing $packages. See post_install.log"
fi
}
confirm() {
local choices
local question
local defaultResponse
case "$1" in
"-y")
choices="Yn"
question="$2"
defaultResponse=0
;;
"-n")
choices="yN"
question="$2"
defaultResponse=1
;;
*)
choices="yn"
question="$1"
;;
esac
while true; do
read -ep "$question [$choices]: " userChoice
case $userChoice in
[yY]* ) return 0;;
[nN]* ) return 1;;
"" ) if [[ "$defaultResponse" != "" ]]; then return $defaultResponse; fi;;
esac
done
}
# Courtesy of http://fitnr.com/showing-file-download-progress-using-wget.html
download()
{
local url=$1
echo -n " "
wget -P /tmp --progress=dot $url 2>&1 | grep --line-buffered "%" | \
sed -u -e "s,\.,,g" | awk '{printf("\b\b\b\b%4s", $2)}'
echo -ne "\b\b\b\b"
_success "OK"
}
# Courtesy of http://fitnr.com/showing-a-bash-spinner.html
spinner()
{
local pid=$1
local delay=0.75
local spinstr='|/-\'
while [ "$(ps a | awk '{print $1}' | grep $pid)" ]; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
sleep $delay
printf "\b\b\b\b\b\b"
done
printf " \b\b\b\b"
}
echo "" > post_install.log
sudo echo ""
echo "+--------------------------------+"
echo "+ +"
echo "+ WELCOME TO POST INSTALL SCRIPT +"
echo "+ +"
echo "+--------------------------------+"
echo ""
read -ep "Enter PhpStorm file URL to install/update it: " phpstormUrl
read -ep "Enter WebStorm file URL to install/update it: " webstormUrl
read -ep "Enter Mongochef file URL to install/update it: " mongochefUrl
declare -a directories=("$HOME/Applications" "$HOME/Development/Php" "$HOME/Development/Meteor" "$HOME/Development/AngularJS")
for dir in "${directories[@]}"; do
if [[ ! -d "$dir" ]]; then
echo -n "Creating $dir directory... "
mkdir -p "$dir" >> post_install.log 2>&1 &
spinner $!
_success "OK"
fi
done
echo -n "Adding/Updating Google Chrome APT repository... "
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - >> post_install.log 2>&1
echo "deb https://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list >> post_install.log 2>&1
_success "OK"
echo -n "Adding/Updating Oracle Java APT repository... "
sudo add-apt-repository -y "ppa:webupd8team/java" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating Plank APT repository... "
sudo add-apt-repository -y "ppa:ricotz/docky" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating PHP 5.6 APT repository... "
sudo add-apt-repository -y "ppa:ondrej/php5-5.6" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating Sublime Text 3 PPA... "
sudo add-apt-repository -y "ppa:webupd8team/sublime-text-3" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating Touchpad Indicator PPA... "
sudo add-apt-repository -y "ppa:atareao/atareao" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating NodeJS PPA... "
sudo add-apt-repository -y "ppa:chris-lea/node.js" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating FishShell PPA... "
sudo add-apt-repository -y "ppa:fish-shell/release-2" >> post_install.log 2>&1 &
spinner $!
_success "OK"
echo -n "Adding/Updating Numix Theme PPA... "
sudo add-apt-repository -y "ppa:numix/ppa" >> post_install.log 2>&1 &
spinner $!
_success "OK"
# Update sources
echo -n "Updating Sources... "
sudo apt-get -qq -y update >> post_install.log 2>&1 &
spinner $!
_success "OK"
# Accept future Oracle installation without asking user
if ! commandExists "java"; then
echo -n "Pre-Accepting future Oracle installation license... "
echo debconf shared/accepted-oracle-license-v1-1 seen true | sudo debconf-set-selections
echo debconf shared/accepted-oracle-license-v1-1 select true | sudo debconf-set-selections
_success "OK"
fi
# Set mysql password
echo -n "Pre-Configuring MySQL Root password... "
echo mysql-server mysql-server/root_password password root | sudo debconf-set-selections
echo mysql-server mysql-server/root_password_again password root | sudo debconf-set-selections
_success "OK"
# Install softwares
installPackage "curl"
installPackage "dtrx"
installPackage "git"
installPackage "guake"
installPackage "plank"
installPackage "php" "php5 php5-json php5-xdebug php5-intl php5-mysql php5-curl php5-gd php5-mcrypt"
installPackage "google-chrome" "google-chrome-stable"
installPackage "java" "oracle-java7-installer"
installPackage "mysqld" "mysql-server"
installPackage "/opt/extras.ubuntu.com/touchpad-indicator/bin/touchpad-indicator" "touchpad-indicator"
installPackage "node" "nodejs"
installPackage "subl" "sublime-text-installer"
installPackage "fish"
installPackage "cola" "git-cola"
installPackage "numix" "numix-gtk-theme numix-icon-theme"
# Installing LastPass
if [[ ! -f "/usr/lib/mozilla/plugins/libnplastpass64.so" ]]; then
echo -n "Downloading LastPass... "
download "https://lastpass.com/lplinux.tar.bz2"
echo ""
echo -n "Installing LastPass... "
(cd "/tmp" && dtrx --one=rename -n "/tmp/lplinux.tar.bz2" && cd lplinux && ./install_lastpass.sh)
_success "OK"
echo ""
fi
# Configure GIT
echo -n "Configuring GIT user... "
git config --global user.email "[email protected]"
git config --global user.name "Thierry Goettelmann"
_success "OK"
# Install composer
if ! commandExists "composer"; then
echo -n "Downloading Composer and creating bin symlink... "
wget -P "$HOME/Development/Php" https://getcomposer.org/composer.phar >> post_install.log 2>&1 &
spinner $!
sudo ln -s "$HOME/Development/Php/composer.phar" /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
_success "OK"
fi
# Install Boris (Php REPL)
if ! commandExists "boris"; then
echo -n "Installing Boris (Php REPL) via composer... "
composer global require "d11wtq/boris" >> post_install.log 2>&1 &
spinner $!
_success "OK"
fi
# Install Fish Shell config
if test ! -d "$HOME/.config/fish"; then
echo -n "Cloning Fish Shell config from GIT... "
git clone https://github.com/ByScripts/fish-config.git "$HOME/.config/fish" >> post_install.log 2>&1 &
spinner $!
(cd "$HOME/.config/fish" && git remote set-url origin [email protected]:ByScripts/fish-config.git)
_success "OK"
fi
# Set Fish as default shell
echo -n "Set Fish Shell as default shell... "
sudo chsh -s /usr/bin/fish "$(whoami)"
_success "OK"
# Download wallpapers
echo -n "Download and apply Batman Wallpapers... "
wget -q -P "$HOME/Images" "https://dl.dropboxusercontent.com/u/9594979/wallpaper-batman.jpg" >> post_install.log 2>&1
wget -q -P "$HOME/Images" "https://dl.dropboxusercontent.com/u/9594979/wallpaper-batman-lock.jpg" >> post_install.log 2>&1
gsettings set org.gnome.desktop.background picture-uri "file:///$HOME/Images/wallpaper-batman.jpg" >> post_install.log 2>&1
gsettings set org.gnome.desktop.background picture-options "centered"
gsettings set org.gnome.desktop.screensaver picture-uri "file:///$HOME/Images/wallpaper-batman-lock.jpg" >> post_install.log 2>&1
gsettings set org.gnome.desktop.screensaver picture-options "centered"
_success "OK"
# Hide desktop icons
echo -n "Hide desktop icons... "
gsettings set org.gnome.desktop.background show-desktop-icons false
_success "OK"
# Enable Gnome Shell extensions
echo -n "Enable Gnome Shell extensions... "
gsettings set org.gnome.shell enabled-extensions "['[email protected]', '[email protected]']"
_success "OK"
# Download Gnome Shell Theme
if test ! -d "$HOME/.themes/copernico"; then
echo -n "Download and apply Gnome Shell theme... "
mkdir -p "$HOME/.themes"
git clone https://[email protected]/Byscripts/copernico-gnome-shell-theme.git "$HOME/.themes/copernico" >> post_install.log 2>&1 &
spinner $!
gsettings set org.gnome.shell.extensions.user-theme name "copernico"
_success "OK"
fi
# Apply GTK and Mutter theme
echo -n "Apply GTK, Mutter and Icon Numix theme... "
gsettings set org.gnome.desktop.interface gtk-theme "Numix"
gsettings set org.gnome.desktop.wm.preferences theme "Numix"
gsettings set org.gnome.desktop.interface icon-theme "Numix"
_success "OK"
# Display date next to time
echo -n "Display current date next to clock... "
gsettings set org.gnome.desktop.interface clock-show-date true
_success "OK"
# Enable Global Dark Theme
echo -n "Enable Global Dark Theme... "
mkdir -p "$HOME/.config/gtk-3.0" >> post_install.log 2>&1
echo "[Settings]
gtk-application-prefer-dark-theme=1" > "$HOME/.config/gtk-3.0/settings.ini"
_success "OK"
# Enable Guake and Touchpad indicator autostart
echo -n "Add Guake and Touchpad Indicator to autostart... "
cp /opt/extras.ubuntu.com/touchpad-indicator/share/touchpad-indicator/touchpad-indicator-autostart.desktop $HOME/.config/autostart/
cp /usr/share/applications/guake.desktop $HOME/.config/autostart/
_success "OK"
# Install Dev php.ini
echo -n "Copying dev php.ini... "
if test -f /usr/share/php5/php.ini-development; then
sudo cp /usr/share/php5/php.ini-development /etc/php5/apache2/php.ini
_success "OK"
else
_error "File not found"
fi
# Configure Php.ini timezone
echo -n "Configuring php.ini timezone... "
sudo sed -i "s/;date.timezone.*/date.timezone = Europe\/Paris/g" /etc/php5/apache2/php.ini
_success "OK"
# Configure Php.ini Xdebug
echo -n "Configuring php.ini xdebug... "
echo "xdebug.max_nesting_level = 250" | sudo tee -a /etc/php5/apache2/php.ini >> post_install.log 2>&1
_success "OK"
# Create php.ini symlinks
echo -n "Create Php.ini symlinks... "
fish -c php-symlink >> post_install.log 2>&1
_success "OK"
if ! commandExists bower; then
# Install Bower
echo -n "Installing Bower... "
sudo npm install -g bower >> post_install.log 2>&1
_success "OK"
fi
if ! commandExists gulp; then
# Install Gulp
echo -n "Installing Gulp... "
sudo npm install -g gulp >> post_install.log 2>&1
_success "OK"
fi
if ! commandExists browserify; then
# Install Browserify
echo -n "Installing Browserify... "
sudo npm install -g browserify >> post_install.log 2>&1
_success "OK"
fi
if ! commandExists meteor; then
# Install Meteor
echo -n "Installing Meteor... "
curl https://install.meteor.com/ | sh >> post_install.log 2>&1
_success "OK"
fi
# Install Sublime Text 3 config
if test ! -d "$HOME/.config/sublime-text-3"; then
echo -n "Cloning Sublime Text 3 config and packages from GIT... "
git clone https://github.com/ByScripts/sublime-config.git "$HOME/.config/sublime-text-3" >> post_install.log 2>&1 &
spinner $!
_success "OK"
fi
if test -n "$phpstormUrl"; then
fish -c phpstorm-update "$phpstormUrl"
fi
if test -n "$webstormUrl"; then
fish -c webstorm-update "$webstormUrl"
fi
if test -n "$mongochefUrl"; then
fish -c Mongochef-update "$mongochefUrl"
fi
if test ! -f "$HOME/Development/PhpStormBaseSettings.jar"; then
# Get default PhpStorm config
echo -n "Downloading PhpStorm default configuration... "
wget -q -P "$HOME/Development" https://dl.dropboxusercontent.com/u/9594979/PhpStormBaseSettings.jar
_success "OK"
fi
# Configure NPM package destination and add bin folder to path
if test ! -f "$HOME/.npmrc"; then
echo "prefix = $HOME/.local/node_modules" | tee "$HOME/.npmrc"
fish -c add_to_path "$HOME/.local/node_modules/bin"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment