#!/bin/bash # Set up my desktop/laptop with all default setttings that I want. # # uses salt-call masterless configuration. # # to auto answer YES set the INITDESKTOP_YES=1 environment variable DOTFILES_REPO="$HOME/.dotfiles" DOTFILES_REMOTE="https://git.rre.nu:443/jonas/dotfiles.git" DOTFILES_REMOTE_SSH="ssh://git@curry.rre.nu:3022/jonas/dotfiles.git" DOTFILES_RENAME_EXISTING_FILES=( .bashrc ) ### NO Changes below this line set -aeou pipefail function printHelp(){ cat << EOF Usage ${0##*/} [options..] -h,-?, --help Show help and exit -c, --codecs install propriatory media codecs (openSUSE) -f, --firefox configure firefox and install addons -g, --gnome configure gnome and install extentions -G, --google-chrome configure and install google-chrome extentions -d, --dotfiles configure dotfiles -s, --salt run a masterless salt-call -y, --yes answer 'yes' on all questions EOF } function asktobreak(){ if [[ "$ANSWER_YES" == true ]];then printf "\n" return 1 fi printf "Do you want to run this step (y/n)" while read -r -n 1 -s answer; do if [[ $answer == [YyNn] ]];then [[ $answer == [Yy] ]] && return_value=1 [[ $answer == [Nn] ]] && return_value=0 printf "\n" break; fi done return $return_value } function new_log(){ # script output printf "\n**** [%s] ***\n" "$*" } function log(){ printf "%s\n" "$*" } function gnome_config(){ new_log "Setting my default gnome bindings" log "WARNING! All running google-chrome instances will be killed" if asktobreak; then return fi set +e pkill -f firefox set -e printf "Current version %s\n" "$(gnome-shell --version)" log "Launching firefox to install GNOME Extetions" google-chrome https://extensions.gnome.org/extension/1031/topicons/ 2> /dev/null google-chrome https://extensions.gnome.org/extension/600/launch-new-instance/ 2> /dev/null google-chrome https://extensions.gnome.org/extension/921/multi-monitors-add-on/ 2> /dev/null google-chrome https://extensions.gnome.org/extension/1319/gsconnect/ 2> /dev/null google-chrome https://extensions.gnome.org/extension/906/sound-output-device-chooser/ 2> /dev/null log "loading dconf settings" dconf load / < "$HOME/.dconf.conf" } function setup_dotfiles(){ local dotf="git --git-dir=$DOTFILES_REPO --work-tree=$HOME" new_log "Setting up dotf (dotfiles)" if asktobreak;then return fi log "creating git repo in $DOTFILES_REPO" mkdir "$HOME/.dotfiles" git init --bare "$DOTFILES_REPO" $dotf config --local status.showUntrackedFiles no log "adding remote repo ($DOTFILES_REMOTE)" $dotf remote add origin "$DOTFILES_REMOTE" for file in "${DOTFILES_RENAME_EXISTING_FILES[@]}"; do if [[ -f "$HOME/.bashrc" ]];then log "renaming local $file to ${file}.bak" mv "$HOME/$file" "$HOME/${file}.bak" fi done log "fetching dotfiles" $dotf fetch origin $dotf checkout master printf "Do you want to switch to SSH remote on dotfiles [N/y]? " read -r -n 1 -s answer if [[ $answer == [Yy] ]];then $dotf remote set-url origin "$DOTFILES_REMOTE_SSH" fi } function do_salt_call(){ local salt="sudo salt-call --local --file-root $HOME/salt/states --pillar-root $HOME/salt/pillars" new_log "Running salt high state" if asktobreak;then return fi $salt state.apply pillar="{username: $USER}" } function firefox_config(){ new_log "Installing firefox addons" if [[ ! -f "$HOME/bin/install_firefox_addon" ]];then printf "install firefox addon script not found, run dotfile sync first" fi log "WARNING! all running firefox instances will be killed" if asktobreak;then return fi set +e pkill -f firefox set -e "$HOME"/bin/install_firefox_addon } function chrome_config(){ new_log "Installing chrome extentions" log "WARNING! all running instances of google-chrome will be killed" if asktobreak; then return fi set +e pkill -f google-chrome set -e google-chrome https://chrome.google.com/webstore/detail/gnome-shell-integration/gphhapmejobijbbhgpjhcjognlahblep 2> /dev/null } function suse_install_codecs(){ new_log "Install Proprietary media codecs?" log "WARNING! This is for openSUSE only" if asktobreak; then return fi sudo "$HOME/bin/install_codecs" } function check_prerequisites(){ set +e local answer type git > /dev/null 2>&1 RESULT=$? if [[ $RESULT != 0 ]];then printf "git is not installed, do your want to install it [y/N]?" read -r -n 1 -s answer; printf "\n" if [[ $answer == [yY] ]];then sudo zypper --non-interactive install git fi fi type salt-call > /dev/null 2>&1 RESULT=$? if [[ $RESULT != 0 ]];then printf "salt-minion is not installed, do your want to install it [y/N]?" read -r -n 1 -s answer; printf "\n" if [[ $answer == [yY] ]];then sudo zypper --non-interactive install salt-minion fi fi set -e } #initialize all options ALL=true CODECS=false FIREFOX=false GNOME=false SALT=false DOTFILES=false CHROME=false ANSWER_YES=false while :; do case $1 in -c|--codecs) CODECS=true ALL=false ;; -h|-\?|--help) printHelp exit ;; -f|--firefox) FIREFOX=true ALL=false ;; -g|--gnome) GNOME=true ALL=false ;; -G|--google-chrome) CHROME=true ALL=false ;; -s|--salt) SALT=true ALL=false ;; -d|--dotfiles) DOTFILES=true ALL=false ;; -y|--yes) ANSWER_YES=true ;; --) #End of all options shift break ;; -?*) printf "'%s' is not a valid option\n" "$1" >&2 exit 1 ;; *) #Break out of case, no more options break esac shift done check_prerequisites [[ $ALL == true ]] || [[ $DOTFILES == true ]] && setup_dotfiles [[ $ALL == true ]] || [[ $SALT == true ]] && do_salt_call [[ $ALL == true ]] || [[ $FIREFOX == true ]] && firefox_config [[ $ALL == true ]] || [[ $CHROME == true ]] && chrome_config [[ $ALL == true ]] || [[ $GNOME == true ]] && gnome_config [[ $ALL == true ]] || [[ $CODECS == true ]] && suse_install_codecs printf "\n DONE!!!!!!!\n"