blob: 450d70e96c29742bb7458117aafd517ca2ebc7ed (
plain) (
tree)
|
|
#!/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"
"nvim:nvim:nvimConfigInstaller"
"emacs:emacs:emacsInstaller"
"Xresources:xterm:xtermConfigInstaller"
"i3config:i3:i3ConfigInstaller"
"i3status:i3status:i3statusConfigInstaller"
"i3blocks:i3blocks:i3blocksConfigInstaller"
"termite:termite:termiteConfigInstaller"
"zshrc:zsh:zshrcInstaller"
"rofi:rofi:rofiConfigInstaller"
)
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
return 0
}
#}}}
#{{{ nvimConfigInstaller
function nvimConfigInstaller() {
local vimrc=~/.config/nvim/init.vim
touch $vimrc
grep $gMagicNumber $vimrc > /dev/null 2>&1
if [[ $? = 0 ]]; then
return 1
fi
echo -e "\n\" $gMagicNumber - Auto generated, do not delete or modify!" >> $vimrc
echo -e "source $ABS_BASE_DIR/nvim.init.vim" >> $vimrc
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=~/.config/i3
local i3_conf=$i3_home/config
mkdir $i3_home 2> /dev/null
if [ -f $i3_conf ]; then
return 1
fi
cp $ABS_BASE_DIR/i3wm.conf $i3_conf
return 0
}
#}}}
#{{{ i3statusConfigInstaller
function i3statusConfigInstaller() {
local i3_home=~/config/.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 $ABS_BASE_DIR/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=~/.config/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 $ABS_BASE_DIR/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
}
#}}}
#{{{ i3blocksConfigInstaller
function rofiConfigInstaller() {
local rofi_home=~/.config/rofi
local rofi_conf=$rofi_home/config.rasi
mkdir $rofi_home 2> /dev/null
if [ -f $rofi_conf ]; then
return 1
fi
ln -s $ABS_BASE_DIR/rofi.rasi $rofi_conf
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
|