blob: d3e520796210e204ffd8474a3241ed7861679d12 (
plain) (
tree)
|
|
#!/bin/bash
# dotfiles -- install
# author: johannst
gInstallConfigFile=install.config
#"<config_tag>:<dep_binary>:<installer_fct_name>"
gToolsConfig=(
"bashrc:bash:bashrcInstaller"
"gdb:cgdb:gdbrcInstaller"
"cgdb:cgdb:cgdbrcInstaller"
"conkyrc:conky:conkyrcInstaller"
"gitconfig:git:gitConfigInstaller"
"tmux.conf:tmux:tmuxConfigInstaller"
"vimrc:vim:vimConfigInstaller"
"Xresources:xterm:xtermConfigInstaller"
"i3config:i3:i3ConfigInstaller"
"i3status:i3status:i3statusConfigInstaller"
)
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
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"
}
#}}}
#{{{ conkyrcInstaller
function conkyrcInstaller() {
echo "conkyrcInstaller called"
}
#}}}
#{{{ 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 || { echo "Vundle not cloned, using existing!"; }
vim +PluginInstall +qall
return 0
}
#}}}
#{{{ xtermConfigInstaller
function xtermConfigInstaller() {
echo "xtermConfigInstaller called"
return 0
}
#}}}
#{{{ 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
}
#}}}
#{{{ Installer Main Loop
function main() {
# 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
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... $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
|