summaryrefslogblamecommitdiff
path: root/install
blob: 28a0fa2b1abd56c71c1441d6ae713d20b4ccbf66 (plain) (tree)


























































































































































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

gInstallConfigFile=install.config

#"<config_tag>:<dep_binary>:<installer_fct_name>"
gToolsConfig=(
"bashrc:bash:bashrcInstaller"
"cgdb:cgdb:cgdbrcInstaller"
"conkyrc:conky:conkyrcInstaller"
"gitconfig:git:gitConfigInstaller"
"tmux.conf:tmux:tmuxConfigInstaller"
"vimrc:vim:vimConfigInstaller"
"Xresources:xterm:xtermConfigInstaller"
)

#{{{ bashrcInstaller

function bashrcInstaller() {
   echo "bashInstaller called!"
}

#}}}
#{{{ cgdbrcInstaller

function cgdbrcInstaller() {
   echo "cgdbrcInstaller called"
}

#}}}
#{{{ conkyrcInstaller

function conkyrcInstaller() {
   echo "conkyrcInstaller called"
}

#}}}
#{{{ gitConfigInstaller

function gitConfigInstaller() {
   echo "gitConfigInstaller called"
}

#}}}
#{{{ tmuxConfigInstaller 

function tmuxConfigInstaller() {
   echo "tmuxConfigInstaller called"
}

#}}}
#{{{ vimConfigInstaller

function vimConfigInstaller() {
   echo "vimConfigInstaller called"
}

#}}}
#{{{ xtermConfigInstaller

function xtermConfigInstaller() {
   echo "xtermConfigInstaller called"
}

#}}}

#{{{ Installer Main Loop

function main() {
   # parse gInstallConfigFile to see what should be installed
   configToInstall=()
   while read line; do
      if [[ ! $line =~ ^[yYnN][[:blank:]]?- ]]; then 
         continue
      fi
      flag=$(echo $line | cut -d '-' -f 1 | sed 's/ //g')
      if [[ $flag =~ ^[yY]$ ]]; then
         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

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

#}}}
#{{{ Installer Core

installConfig() {
   local config=$1
   local binary=$(getDepenentBinaryName $config)
   isBinaryInstalled $binary
   if [[ $? -eq 1 ]]; then 
      echo "[Warning]: Skipping $config... $config is not installed!"
      return 
   fi
   local installerFctPtr=$(getConfigInstallerFctPtr $config)
   if [[ -z $installerFctPtr ]]; then 
      echo "[Warning]: Skipping $config... installer function pointer loopup 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
}

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