summaryrefslogblamecommitdiff
path: root/install
blob: d3f0c39d53ce28c1581344adebe4336e4e4759c2 (plain) (tree)
1
2
3
4
5
6
7
8
9








                                                 
                        




                                    
                            
                                       

                                           
                                           
                                        
                          

 


                                         


                            



                                              
              


                                                                                    
           


    



                           
                      


                                               
              
     
                                                   




                                                                                     



                                
           






                                 
           





                               



                                               
              



                                                                                     
           


    
                        

                                
                              






                                                                                      
           





                               




                                             
              

                                   
                                                       
                                                                                    
                                                          
                                                

                                                                                        
                                                 
                                                                                                                                                   
                                 
           


    















                                                                                      



                                     
           


























                                              






















                                                                                                   
                


    














                                              

















                                                                                     














                                                                                   



                        



                                                   
                                                             
                           



                                                     
                                                               
                                    
                                                                    




                                                
                                        


                       




                                            

                                        






                         
















                                                                            




                                                
                                                                     



                                                            
                                                                                    








                                                                         




                                                





































                                                        
       
#!/bin/bash
# dotfiles -- install
# author: johannst

gInstallConfigFile=install.config

#"<config_tag>:<dep_binary>:<installer_fct_name>"
gToolsConfig=(
"bashrc:bash:bashrcInstaller"
"gdb:gdb:gdbrcInstaller"
"cgdb:cgdb:cgdbrcInstaller"
"conkyrc:conky:conkyrcInstaller"
"gitconfig:git:gitConfigInstaller"
"tmux.conf:tmux:tmuxConfigInstaller"
"vimrc:vim:vimConfigInstaller"
"emacs:emacs:emacsInstaller"
"Xresources:xterm:xtermConfigInstaller"
"i3config:i3:i3ConfigInstaller"
"i3status:i3status:i3statusConfigInstaller"
"i3blocks:i3blocks:i3blocksConfigInstaller"
"termite:termite:termiteConfigInstaller"
"zshrc:zsh:zshrcInstaller"
)

gMagicNumber=e2718281
ABS_BASE_DIR=$(readlink -f $(dirname $0))

#{{{ bashrcInstaller

function bashrcInstaller() {
   local bashrc=~/.bashrc
   touch $bashrc
   grep $gMagicNumber $bashrc > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $bashrc
   echo -e "source $ABS_BASE_DIR/bashrc" >> $bashrc
   return 0
}

#}}}
#{{{ gdbrcInstaller

function gdbrcInstaller() {
   local gdbinit=~/.gdbinit
   local gdbdir=~/.gdb
   touch $gdbinit
   grep $gMagicNumber $gdbinit > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
	if [ ! -d $gdbdir ]; then mkdir $gdbdir; fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $gdbinit
   echo -e "source $ABS_BASE_DIR/gdbinit" >> $gdbinit
}

#}}}
#{{{ cgdbrcInstaller

function cgdbrcInstaller() {
   echo "cgdbrcInstaller called"
   return 1
}

#}}}
#{{{ conkyrcInstaller

function conkyrcInstaller() {
   echo "conkyrcInstaller called"
   return 1
}

#}}}
#{{{ gitConfigInstaller

function gitConfigInstaller() {
   local gitconf=~/.gitconfig
   touch $gitconf
   grep $gMagicNumber $gitconf > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $gitconf
   echo -e "[include]" >> $gitconf
   echo -e "   path = $ABS_BASE_DIR/gitconfig" >> $gitconf
   return 0
}

#}}}
#{{{ tmuxConfigInstaller

function tmuxConfigInstaller() {
   local tmuxconf=~/.tmux.conf
   touch $tmuxconf
   grep $gMagicNumber $tmuxconf > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $tmuxconf
   echo -e "source-file $ABS_BASE_DIR/tmux.conf" >> $tmuxconf
   return 0
}

#}}}
#{{{ vimConfigInstaller

function vimConfigInstaller() {
   local vimrc=~/.vimrc
   local vim_home=~/.vim
   touch $vimrc
   grep $gMagicNumber $vimrc > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   mkdir $vim_home > /dev/null 2>&1
   ln -s $ABS_BASE_DIR/vim/* $vim_home > /dev/null 2>&1
   echo -e "\n\" $gMagicNumber - Auto generated, do not delete or modify!" >> $vimrc
   echo -e "let \$MYVIMRC='$ABS_BASE_DIR/vimrc'" >> $vimrc
   echo -e "let \$VIMHOME='$vim_home'" >> $vimrc
   # link ctags
   type ctags >/dev/null 2>&1 && { echo -e "let \$MYCTAGS='$(which ctags)'" >> $vimrc; }
   echo -e "source $ABS_BASE_DIR/vimrc" >> $vimrc
   git clone https://github.com/VundleVim/Vundle.vim.git $vim_home/bundle/Vundle.vim &> /dev/null || { echo "Vundle not cloned, using existing!"; }
   vim +PluginUpdate +qall -c "q"
   return 0
}

#}}}
#{{{ emacsInstaller

function emacsInstaller() {
   local emacsrc=~/.emacs
   touch $emacsrc
   grep $gMagicNumber $emacsrc > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n;; $gMagicNumber - Auto generated, do not delete or modify!" >> $emacsrc
   echo -e "(load \"$ABS_BASE_DIR/emacs\")" >> $emacsrc
   echo -e "(require 'johannst)" >> $emacsrc
   return 0
}

#}}}
#{{{ xtermConfigInstaller

function xtermConfigInstaller() {
   echo "xtermConfigInstaller called"
   return 1
}

#}}}
#{{{ i3ConfigInstaller

function i3ConfigInstaller() {
   local i3_home=~/.i3
   local i3_conf=$i3_home/config
	mkdir $i3_home 2> /dev/null
	if [ -f $i3_conf ]; then
		return 1
	fi
	cp i3wm.conf $i3_conf
	return 0
}

#}}}
#{{{ i3statusConfigInstaller

function i3statusConfigInstaller() {
   local i3_home=~/.i3
   local i3_status_conf=$i3_home/i3status.conf
	mkdir $i3_home 2> /dev/null
	if [ -f $i3_status_conf ]; then
		return 1
	fi
	cp i3status.conf $i3_status_conf

	local nif=$(ip link show | grep ^[1-9] | grep -v LOOPBACK | sed 's/ //g' | cut -d ':' -f 2)

	local num_wlanif=$(echo -e $nif | tr ' ' '\n' | grep wl | wc -l)
	local wlanif=$(echo -e $nif | tr ' ' '\n' | grep wl)
	if [[ $num_wlanif != 1 || -z $wlanif ]]; then
      echo "[Warning]: i3statusConfigInstaller couldn't find name of WIFI IF!"
		sed -i '/__DEF__WIFI_START__/,/__DEF__WIFI_END__/d' $i3_status_conf
	else
		sed -i "s/__NIF_WIFI__/$wlanif/g" $i3_status_conf
	fi

	local num_ethif=$(echo -e $nif | tr ' ' '\n' | grep en | wc -l)
	local ethif=$(echo -e $nif | tr ' ' '\n' | grep en)
	if [[ $num_ethif != 1 || -z $ethif ]]; then
      echo "[Warning]: i3statusConfigInstaller couldn't find name of ETH IF!"
		sed -i '/__DEF__ETH_START__/,/__DEF__ETH_END__/d' $i3_status_conf
	else
		sed -i "s/__NIF_ETH__/$ethif/g" $i3_status_conf
	fi

	sed -i '/__DEF__.*__/d' $i3_status_conf

	return 0
}

#}}}
#{{{ i3blocksConfigInstaller

function i3blocksConfigInstaller() {
   local i3_home=~/.i3
   local i3_blocks_conf=$i3_home/i3blocks.conf
	mkdir $i3_home 2> /dev/null
	if [ -f $i3_blocks_conf ]; then
		return 1
	fi
	cp i3blocks.conf $i3_blocks_conf

	return 0
}

#}}}
#{{{ termiteConfigInstaller

function termiteConfigInstaller() {
	local tm_dir=~/.config/termite
   local tm_conf=$tm_dir/config
	[[ ! -d $tm_dir ]] && mkdir -p $tm_dir
   touch $tm_conf
   grep $gMagicNumber $tm_conf > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $tm_conf
	echo -e "$(cat termite)" >> $tm_conf

	return 0
}

#}}}
#{{{ zshrcInstaller

function zshrcInstaller() {
   local zshrc=~/.zshrc
   touch $zshrc
   grep $gMagicNumber $zshrc > /dev/null 2>&1
   if [[ $? = 0 ]]; then
      return 1
   fi
   echo -e "\n# $gMagicNumber - Auto generated, do not delete or modify!" >> $zshrc
   echo -e "source $ABS_BASE_DIR/zshrc" >> $zshrc
   return 0
}

#}}}

#{{{ Installer Main Loop

function main() {
   [[ -f $gInstallConfigFile ]] || {
      generateInstallConfigFile $gInstallConfigFile
   }

   # parse gInstallConfigFile to see what should be installed
   local configToInstall=()
   while read line; do
      if [[ ! $line =~ ^[yYnN][[:blank:]]?- ]]; then 
         continue
      fi
      local flag=$(echo $line | cut -d '-' -f 1 | sed 's/ //g')
      if [[ $flag =~ ^[yY]$ ]]; then
         local config=$(echo $line | cut -d '-' -f 2 | sed 's/ //g')
         configToInstall+=("$config")
      fi
   done < $gInstallConfigFile

   echo "[Info]: List of tags found to install:"
   for conf in ${configToInstall[@]}; do
      echo -e "\t$conf"
   done

   [[ $1 != '-y' ]] && {
      echo "Install this configs? [yY/nN]"
      read go_install
      [[ $go_install =~ ^[^yY]$ ]] && exit 0
   }

   for conf in ${configToInstall[@]}; do
      installConfig $conf
   done
}

#}}}
#{{{ Installer Core

generateInstallConfigFile () {
    local config_fname=$1
    : > $config_fname

    echo "No config found, about to generate new config >> $config_fname <<"
    for conf in ${gToolsConfig[@]}; do
        local conf=$(echo $conf | cut -d':' -f1)
        echo "Install $conf? [yY/nN]"
        read install
        [[ $install =~ ^[^yY]?$ ]] && {
            echo "n - $conf" >> $config_fname
        } || {
            echo "y - $conf" >> $config_fname
        }
    done
}

installConfig() {
   local config=$1
   local binary=$(getDepenentBinaryName $config)
   isBinaryInstalled $binary
   if [[ $? -eq 1 ]]; then 
      echo "[Warning]: Skipping $config... $binary is not installed!"
      return 
   fi
   local installerFctPtr=$(getConfigInstallerFctPtr $config)
   if [[ -z $installerFctPtr ]]; then 
      echo "[Warning]: Skipping $config... installer function pointer lookup error!"
      return
   fi
   isInstallerDefined $installerFctPtr
   if [[ $? -eq 1 ]]; then 
      echo "[Warning]: Skipping $config... $installerFctPtr not defined!"
      return
   fi
   echo "[Info]: Intalling config for $binary using $installerFctPtr!"
   $installerFctPtr
   if [[ $? -eq 1 ]]; then 
      echo "[Info]: $config already installed!"
      return
   fi
   echo "[Info]: $config sucessfully installed!"
}

getValue() {
   local search_key=$1
   for k in ${gToolsConfig[@]}; do 
      local key=$(echo $k | cut -d ':' -f 1)
      if [[ "$key" == "$search_key" ]]; then 
         local entry=$(echo $k | cut -d ':' -f 2,3)
         echo ${entry}
         break
      fi
   done
}

getDepenentBinaryName() {
   local result=$(echo $(getValue $1) | cut -d ':' -f 1)
   echo $result
}

getConfigInstallerFctPtr() {
   local result=$(echo $(getValue $1) | cut -d ':' -f 2)
   echo $result
}

isBinaryInstalled() {
   local binary=$1
   type $binary >/dev/null 2>&1 || { return 1; }
   return 0
}

isInstallerDefined () {
   local func=$1
   declare -F $func >/dev/null 2>&1 || { return 1; }
   return 0
}

#}}}

main $1