Skip to content

Instantly share code, notes, and snippets.

@diyan
Last active December 26, 2015 03:19
Show Gist options
  • Save diyan/7085360 to your computer and use it in GitHub Desktop.
Save diyan/7085360 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Based on https://github.com/holman/dotfiles/blob/master/script/bootstrap
set -e
declare -r DOTFILES_ROOT=$(pwd)
# Ask for the admin password upfront
#sudo -v
#https://github.com/cowboy/dotfiles/blob/master/bin/dotfiles
header() { echo -e "\033[1m$@\033[0m"; }
info() { echo -e " [\033[00;34mINFO\033[0m] $@"; }
success() { echo -e " [ \033[00;32mOK\033[0m ] $@"; }
fail() { echo -e " [\033[00;31mFAIL\033[0m] $@"; }
input() { echo -e " [ \033[0;33m??\033[0m ] $@ "; }
link_files () {
ln -s $1 $2
success "linked $1 to $2"
}
install_dotfiles() {
header "install dotfiles. start"
local overwrite_all=false
local backup_all=false
local skip_all=false
#info "installing dotfiles... info"
#success "installing dotfiles... success"
#fail "installing dotfiles... fail"
#input "installing dotfiles... input"
cd $DOTFILES_ROOT/home
#TODO create directories automatically
mkdir -p $HOME/.config/autostart
mkdir -p $HOME/.config/gtk-3.0
mkdir -p $HOME/.config/i3
mkdir -p $HOME/.config/i3status
mkdir -p $HOME/.config/mc
for source in $(find $DOTFILES_ROOT/home -maxdepth 4 -not -type d); do
local dest=$(echo $source | sed s:$DOTFILES_ROOT/home:$HOME:)
if [ -f $dest ] || [ -d $dest ]; then
local overwrite=false
local backup=false
local skip=false
if [ "$overwrite_all" == "false" ] && [ "$backup_all" == "false" ] && [ "$skip_all" == "false" ]; then
input "File already exists: `basename $source`, what do you want to do? [s]kip, [S]kip all, [o]verwrite, [O]verwrite all, [b]ackup, [B]ackup all?"
read -n 1 action
echo ""
case "$action" in
o )
overwrite=true ;;
O )
overwrite_all=true ;;
b )
backup=true ;;
B )
backup_all=true ;;
s )
skip=true ;;
S )
skip_all=true ;;
* )
;;
esac
fi
if [ "$overwrite" == "true" ] || [ "$overwrite_all" == "true" ]; then
rm -rf $dest
success "removed $dest"
fi
if [ "$backup" == "true" ] || [ "$backup_all" == "true" ]; then
mv $dest $dest\.backup
success "moved $dest to $dest.backup"
fi
if [ "$skip" == "false" ] && [ "$skip_all" == "false" ]; then
link_files $source $dest
else
success "skipped $source"
fi
else
link_files $source $dest
fi
done
header "install dotfiles. finish"
}
setup_de_settings() {
sudo apt-get install -yqq shimmer-themes
success Greybird GTK theme installed
sudo add-apt-repository -y ppa:noobslab/icons
sudo apt-get update -qq && sudo apt-get install -yqq faenza-icon-theme
success Faenza icon theme installed
# Use bigger font on high resolution display
local font_name='Sans 11'
local mono_font_name='Inconsolata for Powerline Medium 13'
if [ `xrandr | grep -E 'connected 1920x1080.*? 282mm x 165mm' | wc -l` -eq 1 ]; then
font_name='Sans 16'
mono_font_name='Inconsolata for Powerline Medium 16'
fi
#TOOD consider use text scaling as described here
#http://askubuntu.com/questions/281941/ubuntu-resolution-with-ultrabook
#http://askubuntu.com/questions/197828/how-to-find-and-change-the-screen-dpi
#gsettings set org.gnome.desktop.interface text-scaling-factor 1.0
gsettings set org.gnome.desktop.interface font-name "$font_name"
gsettings set org.gnome.desktop.interface monospace-font-name "$mono_font_name"
gsettings set org.gnome.desktop.interface gtk-theme "Greybird"
gsettings set org.gnome.desktop.interface icon-theme "Faenza-Dark"
#gsettings set org.gnome.desktop.interface menubar-accel ''
gsettings set org.gnome.desktop.interface show-input-method-menu false
gsettings set org.gnome.desktop.background show-desktop-icons false
# Gnome Terminal
gconftool --type bool --set /apps/gnome-terminal/profiles/Default/default_show_menubar false
gconftool --type string --set /apps/gnome-terminal/profiles/Default/cursor_shape underline
gconftool --type string --set /apps/gnome-terminal/profiles/Default/background_type transparent
gconftool --type string --set /apps/gnome-terminal/profiles/Default/background_color "#000000000000"
gconftool --type float --set /apps/gnome-terminal/profiles/Default/background_darkness 0.7
# gconftool --type bool --set /apps/gnome-terminal/profiles/Default/use_theme_colors false
success Unity/Gnome settings were configured
}
install_zsh() {
sudo apt-get install -yqq zsh git
if [ ! -d ~/.oh-my-zsh ]; then
curl -L https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh | sh
git clone git://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
fi
mkdir -p ~/.fonts
curl -L https://github.com/Lokaltog/powerline-fonts/raw/master/Inconsolata/Inconsolata%20for%20Powerline.otf > ~/.fonts/Inconsolata_for_Powerline.otf
fc-cache -vf ~/.fonts
success zsh, powerline, oh-my-zsh and zsh syntax highlighting installed
}
install_vim() {
if [ ! -d ~/.vim/bundle/vundle ]; then
git clone git://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/vundle
fi
# NOTE vim-gtk package has Lua, Mouse and Clipboard support
sudo apt-get install -yqq vim-gtk
vim +BundleInstall +qa
# Build vimproc binary module
cd ~/.vim/bundle/vimproc.vim && make
success Vim. Installed and configured
}
fix_update_apt_xapi() {
# http://ubuntuforums.org/showthread.php?p=9304431#post9304431
sudo sed -i 's/$CMD --quiet/$CMD --update --quiet/g' /etc/cron.weekly/apt-xapian-index
success Fixed. update-apt-xapi process consumes too much CPU power
}
install_i3wm() {
echo "deb http://debian.sur5r.net/i3/ $(lsb_release -c -s) universe" | \
sudo tee /etc/apt/sources.list.d/i3wm.list
sudo apt-get update -qq
sudo apt-get --allow-unauthenticated install sur5r-keyring
sudo apt-get update -qq && sudo apt-get install -yqq i3
}
install_google_chrome() {
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | \
sudo apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | \
sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt-get update -qq && sudo apt-get install -yqq google-chrome-stable
success "Google Chrome (web browser) installed"
}
install_google_music_manager() {
# http://www.ubuntuupdates.org/ppa/google_music
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | \
sudo apt-key add -
echo 'deb http://dl.google.com/linux/musicmanager/deb/ stable main' | \
sudo tee /etc/apt/sources.list.d/google-musicmanager.list
sudo apt-get update -qq && sudo apt-get install -yqq google-musicmanager-beta
success Google Music Manager installed
}
fix_dual_screen() {
xrandr --output HDMI1 --primary --left-of HDMI2
success Switch dual monitors to extend instead of clone. HDMI1 is primary
}
fix_skype_sound() {
# https://wiki.archlinux.org/index.php/PulseAudio#Glitches.2C_skips_or_crackling
sudo sed -i "s/module-udev-detect$/module-udev-detect tsched=0/" /etc/pulse/default.pa
success Skype sound fixed by enabling interrupt-based PulseAudio scheduler
}
fix_font_rendering() {
# http://www.webupd8.org/2013/06/better-font-rendering-in-linux-with.html
sudo add-apt-repository -y ppa:no1wantdthisname/ppa
sudo apt-get update -qq && sudo apt-get upgrade -y
sudo apt-get install -yqq fontconfig-infinality
sudo bash /etc/fonts/infinality/infctl.sh setstyle
# http://www.webupd8.org/2013/06/install-openjdk-patched-with-font-fixes.html
cat << EOF | sudo tee
/etc/apt/preferences.d/no1wantdthisname-openjdk-fontfix-pin-600
Package: *
Pin: release o=LP-PPA-no1wantdthisname-openjdk-fontfix
Pin-Priority: 600
EOF
success "High priority was configured for PPA with Infinality/OpenJDK"
sudo add-apt-repository -y ppa:no1wantdthisname/openjdk-fontfix
sudo apt-get update -qq && sudo apt-get install -yqq openjdk-7-jre
success "Infinality font rendering was installed for freetype and OpenJDK"
}
install_exfat_support() {
sudo add-apt-repository -y ppa:relan/exfat
sudo apt-get update -qq && sudo apt-get install -yqq exfat-fuse exfat-utils
success "exFAT support (FUSE) installed"
}
install_dropbox() {
# http://askubuntu.com/questions/126198/how-to-install-dropbox
echo 100000 | sudo tee /proc/sys/fs/inotify/max_user_watches
sudo apt-key adv --keyserver=keyserver.ubuntu.com --recv-keys=8E5D2411637A5E2A
#TODO add dropbox repo in separate file
echo "deb http://linux.dropbox.com/ubuntu $(lsb_release -sc) main" | \
sudo tee /etc/apt/sources.list.d/dropbox.list
sudo apt-get update -qq && sudo apt-get install -yqq python-gpgme dropbox
success "Dropbox (file sync/hosting/sharing service) installed"
}
install_zim() {
sudo add-apt-repository -y ppa:jaap.karssenberg/zim
sudo apt-get update -qq && sudo apt-get install -yqq zim
success "Zim (notetaking application) installed"
}
#install_viewnior() {
# sudo add-apt-repository -y ppa:xsisqox/ppa
# sudo sed -i "s/$(lsb_release -sc)/maverik/g" /etc/apt/sources.list.d/xsisqox-ppa-*.list
# sudo apt-get -qq update && sudo apt-get install -yqq viewnior
# success "Viewnior (light image viewer) installed"
#}
install_deadbeef() {
sudo add-apt-repository -y ppa:starws-box/deadbeef-player
sudo apt-get update -qq && sudo apt-get install -yqq deadbeef
success "DeaDBeeF (audio player) installed"
}
install_vkontakte_deadbeef() {
cd ~ && git clone https://github.com/scorpp/db-vk.git deadbeef_vk_plugin && cd $_
sudo apt-get install -yqq cmake libgtk2.0-dev libgtk-3-dev libcurl3-dev \
libjson-glib-dev deadbeef-plugins-dev
cmake . && make
mkdir -p ~/.local/lib/deadbeef
cp vkontakte_gtk*.so ~/.local/lib/deadbeef/
sudo apt-get remove -yqq cmake libgtk2.0-dev libgtk-3-dev libcurl3-dev \
libjson-glib-dev deadbeef-plugins-dev
sudo apt-get -yqq autoremove
success "VKontakte plugin for DeaDBeeF compiled and installed"
}
install_sublime_text() {
sudo add-apt-repository -y ppa:webupd8team/sublime-text-2
sudo apt-get update -qq && sudo apt-get install -yqq sublime-text
success "Sublime Text 2 (text editor) installed"
}
install_diff_merge() {
sudo wget -O - http://debian.sourcegear.com/SOURCEGEAR-GPG-KEY | \
sudo apt-key add -
echo "deb http://debian.sourcegear.com/ubuntu raring main" | \
sudo tee /etc/apt/sources.list.d/sourcegear-diffmerge.list
sudo apt-get update -qq && sudo apt-get install -yqq diffmerge
success "SourceGear DiffMerge (diff tool) installed"
}
install_shutter() {
sudo add-apt-repository -y ppa:shutter/ppa
sudo apt-get update -qq && sudo apt-get install -yqq shutter
success "Shutter (powerful screenshot tool) installed"
}
install_youtube_dl(){
sudo add-apt-repository -y ppa:nilarimogard/webupd8
sudo apt-get update -qq && sudo apt-get install -yqq youtube-dl
success "YouTube downloader installed"
}
#install_oracle_java() {
# sudo add-apt-repository -y ppa:webupd8team/java
# sudo apt-get update -qq && sudo apt-get install -yqq oracle-java7-installer
# success Oracle Java Runtime installed
#}
install_pycharm() {
echo "fs.inotify.max_user_watches = 524288" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
wget http://download-ln.jetbrains.com/python/pycharm-professional-3.1.tar.gz
mkdir -p ~/opt/pycharm && tar -xzf pycharm-*.tar.gz --strip=1 -C ~/opt/pycharm
#~/opt/pycharm/bin/pycharm.sh
success "PyCharm (Python IDE) installed"
}
install_skype() {
# https://help.ubuntu.com/community/Skype
echo "deb http://archive.canonical.com/ $(lsb_release -sc) partner" | \
sudo tee /etc/apt/sources.list.d/canonical-partnet.list
sudo apt-get update -qq && sudo apt-get install -yqq skype qt4-qtconfig
mkdir -p ~/.config/skype/dev-pro.alexey.diyan
mkdir -p ~/.config/skype/alexey.diyan
success Skype installed
}
install_wine() {
# http://www.tecmint.com/install-wine-on-ubuntu-and-linux-mint/
sudo add-apt-repository -y ppa:ubuntu-wine/ppa
#TODO Investigate how to use ms fonts intaller in non-interactive mode
sudo apt-get update -qq && sudo apt-get install -yqq wine winetricks
success Wine installed
}
install_nodejs() {
# https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager
sudo add-apt-repository -y ppa:chris-lea/node.js
sudo apt-get update -qq && sudo apt-get install -yqq nodejs
success Node.js installed
}
install_pypy() {
sudo add-apt-repository -y ppa:pypy/ppa
sudo apt-get update -qq && sudo apt-get install -yqq pypy
success PyPy installed
}
install_unetbootin() {
sudo add-apt-repository -y ppa:gezakovacs/ppa
sudo apt-get update -qq && sudo apt-get install -yqq unetbootin
success UNetbootin installed
}
install_ubuntu_soft() {
sudo apt-get install -yqq mc htop curl git tig p7zip dos2unix expect
sudo apt-get install -yqq exuberant-ctags
sudo apt-get install -yqq flashplugin-installer
sudo apt-get install -yqq feh pidgin speedcrunch synapse weather-util
success Software listed in Ubuntu repository installed
}
uninstall_ubuntu_soft() {
sudo apt-get remove -y gnome-screenshot gnome-orca gnome-sudoku \
gnome-mahjongg gnomine aisleriot gcalctool brasero thunderbird \
simple-scan xchat rhythmbox
sudo apt-get -y autoremove
success Some GNOME default soft were replaced with third-party and removed
}
#autostart_soft() {
# find /usr/share/applications/*.desktop | grep -E 'firefox|skype|pidgin|zim'\
# | xargs cp -t ~/.config/autostart
# success Frequently used programs added to autostart
#}
install_percona_toolkit() {
gpg --keyserver hkp://keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
gpg -a --export CD2EFD2A | sudo apt-key add -
#TODO use tee tool and add debian repo into separate file
sudo add-apt-repository -y "deb http://repo.percona.com/apt $(lsb_release -sc) main"
sudo apt-get update -qq && sudo apt-get install -yqq percona-toolkit
success "Percona Toolkit (advanced cli tools for MySQL) installed"
}
<< COMMENT
install_ubuntu_soft
install_dotfiles
setup_de_settings
install_zsh
install_vim
install_i3wm
fix_update_apt_xapi
fix_skype_sound
fix_font_rendering
fix_dual_screen
install_exfat_support
install_google_chrome
install_google_music_manager
###install_dropbox
install_zim
install_deadbeef
###install_vkontakte_deadbeef
install_sublime_text
install_diff_merge
install_shutter
install_youtube_dl
install_pycharm
install_skype
COMMENT
install_wine
install_nodejs
install_pypy
install_unetbootin
uninstall_ubuntu_soft
# Powerline in Bash
#sudo mkdir -p /usr/share/fonts/opentype
#sudo wget -P /usr/share/fonts/opentype "https://github.com/Lokaltog/powerline-fonts/raw/master/Inconsolata/Inconsolata for Powerline.otf"
#sudo fc-cache -f
# TODO Do git clone into ~/.config/powerline-shell or ~/.local/share/powerline-shell then create symbol link
#ln -s ~/Dropbox/dotfiles/powerline-shell/powerline-shell.py ~/powerline-shell.py
#chmod 600 ~/.ssh/alexey_diyan_at_github.key
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment