mirror of
https://github.com/DictXiong/dotfiles.git
synced 2025-07-07 09:20:30 +08:00
mass mod install.sh
This commit is contained in:
parent
aa448efb6d
commit
d3766b883e
178
install.sh
178
install.sh
@ -3,87 +3,111 @@
|
|||||||
THIS_DIR=$( cd "$( dirname "${BASH_SOURCE[0]:-${(%):-%x}}" )" && pwd )
|
THIS_DIR=$( cd "$( dirname "${BASH_SOURCE[0]:-${(%):-%x}}" )" && pwd )
|
||||||
source "$THIS_DIR/tools/common.sh"
|
source "$THIS_DIR/tools/common.sh"
|
||||||
|
|
||||||
home_slashes=${HOME//\//\\\/}
|
if [[ ! "$DOTFILES" == "${HOME}"* ]]; then
|
||||||
if [[ ! $DOTFILES == ${home_slashes}* ]]; then
|
|
||||||
fmt_fatal "\"$DOTFILES\" is not under \"$HOME\". aborting ..."
|
fmt_fatal "\"$DOTFILES\" is not under \"$HOME\". aborting ..."
|
||||||
fi
|
fi
|
||||||
dotfile_home_path=${DOTFILES/${home_slashes}/\~}
|
DOTFILE_TILDE=${DOTFILES/"$HOME"/\~}
|
||||||
dotfile_relative_path=${DOTFILES#${home_slashes}\/}
|
|
||||||
crontab_job="0 * * * * ${DOTFILES}/update.sh"
|
|
||||||
|
|
||||||
insert_if_not_exist()
|
CRON_JOB="0 * * * * ${DOTFILES}/update.sh"
|
||||||
{
|
declare -a HOME_FILES_PATH
|
||||||
local filename=$1
|
declare -a HOME_FILES_CONTENT
|
||||||
local line=$2
|
HOME_FILES_PATH[0]=".zshrc"
|
||||||
fmt_note "installing \"$line\" into \"$filename\" ..."
|
HOME_FILES_CONTENT[0]="source ${DOTFILE_TILDE}/.zshrc2"
|
||||||
mkdir -p $(dirname "$filename")
|
HOME_FILES_PATH[1]=".tmux.conf"
|
||||||
if [ ! -f "$filename" ]; then
|
HOME_FILES_CONTENT[1]="source-file ${DOTFILE_TILDE}/.tmux.conf2"
|
||||||
touch $filename
|
HOME_FILES_PATH[2]=".vimrc"
|
||||||
fi
|
HOME_FILES_CONTENT[2]="source ${DOTFILE_TILDE}/.vimrc2"
|
||||||
grep -qxF -- "$line" "$filename" || echo "$line" >> "$filename"
|
HOME_FILES_PATH[3]=".gitconfig"
|
||||||
}
|
HOME_FILES_CONTENT[3]="[include] path = \"${DOTFILE_TILDE}/.gitconfig2\""
|
||||||
|
|
||||||
delete_if_exist()
|
declare -a HOME_SYMLINKS_SRC
|
||||||
{
|
declare -a HOME_SYMLINKS_DST
|
||||||
local filename=$1
|
HOME_SYMLINKS_SRC[0]=".ssh/authorized_keys2"
|
||||||
local line=$2
|
HOME_SYMLINKS_DST[0]=".ssh/authorized_keys2"
|
||||||
fmt_note "removing \"$line\" from \"$filename\" ..."
|
|
||||||
if [ -f "$filename" ]; then
|
|
||||||
grep -vxF -- "$line" "$filename" | tee "$filename"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
create_symlink()
|
|
||||||
|
install_file_content()
|
||||||
{
|
{
|
||||||
local src=$1
|
for ((i=0; i<${#HOME_FILES_PATH[@]}; i++)); do
|
||||||
local dest=$2
|
local filename="$HOME/${HOME_FILES_PATH[$i]}"
|
||||||
fmt_note "creating symlink \"$dest\" --> \"$src\" ..."
|
local content=${HOME_FILES_CONTENT[$i]}
|
||||||
if [ ! -f "$src" ]; then
|
fmt_note "installing \"$content\" into \"$filename\" ..."
|
||||||
fmt_error "\"$src\" does not exist! aborting this job ..."
|
mkdir -p $(dirname "$filename")
|
||||||
return 1
|
if [ ! -f "$filename" ]; then
|
||||||
fi
|
touch $filename
|
||||||
mkdir -p $(dirname "$dest")
|
|
||||||
if [ -f "$dest" ]; then
|
|
||||||
if [ "$(readlink $dest)" -ef "$src" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
fi
|
||||||
fmt_warning "\"$dest\" already exists! stat output:"
|
grep -qxF -- "$content" "$filename" || echo "$content" >> "$filename"
|
||||||
echo ----------
|
done
|
||||||
stat $dest
|
|
||||||
echo ----------
|
|
||||||
ask_for_yN "would you like to replace ${dest}?"
|
|
||||||
if [ $? -eq 1 ]; then
|
|
||||||
rm $dest
|
|
||||||
else
|
|
||||||
fmt_error "\"$dest\" already exists! aborting this job ..."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
ln -s $src $dest
|
|
||||||
return $?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_link_if_match()
|
uninstall_file_content()
|
||||||
{
|
{
|
||||||
local src=$1
|
for ((i=0; i<${#HOME_FILES_PATH[@]}; i++)); do
|
||||||
local dest=$2
|
local filename="$HOME/${HOME_FILES_PATH[$i]}"
|
||||||
if [ "$(readlink $dest)" -ef "$src" ]; then
|
local content=${HOME_FILES_CONTENT[$i]}
|
||||||
fmt_note "removing symlink \"$dest\" ..."
|
fmt_note "removing \"$content\" from \"$filename\" ..."
|
||||||
echo ----------
|
if [ -f "$filename" ]; then
|
||||||
stat $dest
|
grep -vxF -- "$content" "$filename" | tee "$filename"
|
||||||
echo ----------
|
fi
|
||||||
rm $dest
|
done
|
||||||
fi
|
}
|
||||||
|
|
||||||
|
install_symlink()
|
||||||
|
{
|
||||||
|
for ((i=0; i<${#HOME_SYMLINKS_SRC[@]}; i++)); do
|
||||||
|
local src="$DOTFILES/${HOME_SYMLINKS_SRC[$i]}"
|
||||||
|
local dst="$HOME/${HOME_SYMLINKS_DST[$i]}"
|
||||||
|
fmt_note "creating symlink \"$dst\" --> \"$src\" ..."
|
||||||
|
if [ ! -f "$src" ]; then
|
||||||
|
fmt_error "\"$src\" does not exist! aborting this job ..."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
mkdir -p $(dirname "$dst")
|
||||||
|
if [ -f "$dst" ]; then
|
||||||
|
if [ "$(readlink $dst)" -ef "$src" ]; then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fmt_warning "\"$dst\" already exists! stat output:"
|
||||||
|
echo ----------
|
||||||
|
stat $dst
|
||||||
|
echo ----------
|
||||||
|
ask_for_yN "would you like to replace ${dst}?"
|
||||||
|
if [ $? -eq 1 ]; then
|
||||||
|
rm $dst
|
||||||
|
else
|
||||||
|
fmt_error "aborting this job ..."
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
ln -s $src $dst
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
uninstall_symlink()
|
||||||
|
{
|
||||||
|
local src
|
||||||
|
for src in "${!HOME_SYMLINKS[@]}"; do
|
||||||
|
local dst=${HOME_SYMLINKS[$src]}
|
||||||
|
src="$DOTFILES/$src"
|
||||||
|
dst="$HOME/$dst"
|
||||||
|
if [ "$(readlink $dst)" -ef "$src" ]; then
|
||||||
|
fmt_note "removing symlink \"$dst\" ..."
|
||||||
|
echo ----------
|
||||||
|
stat $dst
|
||||||
|
echo ----------
|
||||||
|
rm $dst
|
||||||
|
fi
|
||||||
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
install_crontab(){
|
install_crontab(){
|
||||||
fmt_note "installing \"$crontab_job\" to crontab ..."
|
fmt_note "installing \"$CRON_JOB\" to crontab ..."
|
||||||
( crontab -l | grep -vxF "${crontab_job}" | grep -v "no crontab for"; echo "$crontab_job" ) | crontab -
|
( crontab -l | grep -vxF "${CRON_JOB}" | grep -v "no crontab for"; echo "$CRON_JOB" ) | crontab -
|
||||||
}
|
}
|
||||||
|
|
||||||
uninstall_crontab(){
|
uninstall_crontab(){
|
||||||
fmt_note "removing \"$crontab_job\" from crontab ..."
|
fmt_note "removing \"$CRON_JOB\" from crontab ..."
|
||||||
( crontab -l | grep -vxF "$crontab_job" ) | crontab -
|
( crontab -l | grep -vxF "$CRON_JOB" ) | crontab -
|
||||||
}
|
}
|
||||||
|
|
||||||
install_tmux_tpm(){
|
install_tmux_tpm(){
|
||||||
@ -132,11 +156,8 @@ uninstall_update(){
|
|||||||
install(){
|
install(){
|
||||||
install_update
|
install_update
|
||||||
install_crontab
|
install_crontab
|
||||||
insert_if_not_exist "${HOME}/.zshrc" "source ${dotfile_home_path}/.zshrc2"
|
install_file_content
|
||||||
insert_if_not_exist "${HOME}/.tmux.conf" "source-file ${dotfile_home_path}/.tmux.conf2"
|
install_symlink
|
||||||
insert_if_not_exist "${HOME}/.vimrc" "source ${dotfile_home_path}/.vimrc2"
|
|
||||||
insert_if_not_exist "${HOME}/.gitconfig" "[include] path = \"${dotfile_home_path}/.gitconfig2\""
|
|
||||||
create_symlink "${DOTFILES}/.ssh/authorized_keys2" "${HOME}/.ssh/authorized_keys2"
|
|
||||||
# those that won't be uninstalled in the future
|
# those that won't be uninstalled in the future
|
||||||
install_tmux_tpm
|
install_tmux_tpm
|
||||||
install_vim_vundle
|
install_vim_vundle
|
||||||
@ -145,16 +166,15 @@ install(){
|
|||||||
|
|
||||||
uninstall(){
|
uninstall(){
|
||||||
ask_for_yN "do you really want to uninstall?"
|
ask_for_yN "do you really want to uninstall?"
|
||||||
if [[ $? == 1 ]]; then
|
if [[ $? != 1 ]]; then
|
||||||
uninstall_update
|
fmt_error "aborting this job ..."
|
||||||
uninstall_crontab
|
return
|
||||||
delete_if_exist "${HOME}/.zshrc" "source ${dotfile_home_path}/.zshrc2"
|
|
||||||
delete_if_exist "${HOME}/.tmux.conf" "source-file ${dotfile_home_path}/.tmux.conf2"
|
|
||||||
delete_if_exist "${HOME}/.vimrc" "source ${dotfile_home_path}/.vimrc2"
|
|
||||||
delete_if_exist "${HOME}/.gitconfig" "[include] path = \"${dotfile_home_path}/.gitconfig2\""
|
|
||||||
delete_link_if_match "${DOTFILES}/.ssh/authorized_keys2" "${HOME}/.ssh/authorized_keys2"
|
|
||||||
fmt_note "done uninstalling!"
|
|
||||||
fi
|
fi
|
||||||
|
uninstall_update
|
||||||
|
uninstall_crontab
|
||||||
|
uninstall_file_content
|
||||||
|
uninstall_symlink
|
||||||
|
fmt_note "done uninstalling!"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user