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 )
|
||||
source "$THIS_DIR/tools/common.sh"
|
||||
|
||||
home_slashes=${HOME//\//\\\/}
|
||||
if [[ ! $DOTFILES == ${home_slashes}* ]]; then
|
||||
if [[ ! "$DOTFILES" == "${HOME}"* ]]; then
|
||||
fmt_fatal "\"$DOTFILES\" is not under \"$HOME\". aborting ..."
|
||||
fi
|
||||
dotfile_home_path=${DOTFILES/${home_slashes}/\~}
|
||||
dotfile_relative_path=${DOTFILES#${home_slashes}\/}
|
||||
crontab_job="0 * * * * ${DOTFILES}/update.sh"
|
||||
DOTFILE_TILDE=${DOTFILES/"$HOME"/\~}
|
||||
|
||||
insert_if_not_exist()
|
||||
{
|
||||
local filename=$1
|
||||
local line=$2
|
||||
fmt_note "installing \"$line\" into \"$filename\" ..."
|
||||
mkdir -p $(dirname "$filename")
|
||||
if [ ! -f "$filename" ]; then
|
||||
touch $filename
|
||||
fi
|
||||
grep -qxF -- "$line" "$filename" || echo "$line" >> "$filename"
|
||||
}
|
||||
CRON_JOB="0 * * * * ${DOTFILES}/update.sh"
|
||||
declare -a HOME_FILES_PATH
|
||||
declare -a HOME_FILES_CONTENT
|
||||
HOME_FILES_PATH[0]=".zshrc"
|
||||
HOME_FILES_CONTENT[0]="source ${DOTFILE_TILDE}/.zshrc2"
|
||||
HOME_FILES_PATH[1]=".tmux.conf"
|
||||
HOME_FILES_CONTENT[1]="source-file ${DOTFILE_TILDE}/.tmux.conf2"
|
||||
HOME_FILES_PATH[2]=".vimrc"
|
||||
HOME_FILES_CONTENT[2]="source ${DOTFILE_TILDE}/.vimrc2"
|
||||
HOME_FILES_PATH[3]=".gitconfig"
|
||||
HOME_FILES_CONTENT[3]="[include] path = \"${DOTFILE_TILDE}/.gitconfig2\""
|
||||
|
||||
delete_if_exist()
|
||||
{
|
||||
local filename=$1
|
||||
local line=$2
|
||||
fmt_note "removing \"$line\" from \"$filename\" ..."
|
||||
if [ -f "$filename" ]; then
|
||||
grep -vxF -- "$line" "$filename" | tee "$filename"
|
||||
fi
|
||||
}
|
||||
declare -a HOME_SYMLINKS_SRC
|
||||
declare -a HOME_SYMLINKS_DST
|
||||
HOME_SYMLINKS_SRC[0]=".ssh/authorized_keys2"
|
||||
HOME_SYMLINKS_DST[0]=".ssh/authorized_keys2"
|
||||
|
||||
create_symlink()
|
||||
|
||||
install_file_content()
|
||||
{
|
||||
local src=$1
|
||||
local dest=$2
|
||||
fmt_note "creating symlink \"$dest\" --> \"$src\" ..."
|
||||
if [ ! -f "$src" ]; then
|
||||
fmt_error "\"$src\" does not exist! aborting this job ..."
|
||||
return 1
|
||||
fi
|
||||
mkdir -p $(dirname "$dest")
|
||||
if [ -f "$dest" ]; then
|
||||
if [ "$(readlink $dest)" -ef "$src" ]; then
|
||||
return 0
|
||||
for ((i=0; i<${#HOME_FILES_PATH[@]}; i++)); do
|
||||
local filename="$HOME/${HOME_FILES_PATH[$i]}"
|
||||
local content=${HOME_FILES_CONTENT[$i]}
|
||||
fmt_note "installing \"$content\" into \"$filename\" ..."
|
||||
mkdir -p $(dirname "$filename")
|
||||
if [ ! -f "$filename" ]; then
|
||||
touch $filename
|
||||
fi
|
||||
fmt_warning "\"$dest\" already exists! stat output:"
|
||||
echo ----------
|
||||
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 $?
|
||||
grep -qxF -- "$content" "$filename" || echo "$content" >> "$filename"
|
||||
done
|
||||
}
|
||||
|
||||
delete_link_if_match()
|
||||
uninstall_file_content()
|
||||
{
|
||||
local src=$1
|
||||
local dest=$2
|
||||
if [ "$(readlink $dest)" -ef "$src" ]; then
|
||||
fmt_note "removing symlink \"$dest\" ..."
|
||||
echo ----------
|
||||
stat $dest
|
||||
echo ----------
|
||||
rm $dest
|
||||
fi
|
||||
for ((i=0; i<${#HOME_FILES_PATH[@]}; i++)); do
|
||||
local filename="$HOME/${HOME_FILES_PATH[$i]}"
|
||||
local content=${HOME_FILES_CONTENT[$i]}
|
||||
fmt_note "removing \"$content\" from \"$filename\" ..."
|
||||
if [ -f "$filename" ]; then
|
||||
grep -vxF -- "$content" "$filename" | tee "$filename"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
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(){
|
||||
fmt_note "installing \"$crontab_job\" to crontab ..."
|
||||
( crontab -l | grep -vxF "${crontab_job}" | grep -v "no crontab for"; echo "$crontab_job" ) | crontab -
|
||||
fmt_note "installing \"$CRON_JOB\" to crontab ..."
|
||||
( crontab -l | grep -vxF "${CRON_JOB}" | grep -v "no crontab for"; echo "$CRON_JOB" ) | crontab -
|
||||
}
|
||||
|
||||
uninstall_crontab(){
|
||||
fmt_note "removing \"$crontab_job\" from crontab ..."
|
||||
( crontab -l | grep -vxF "$crontab_job" ) | crontab -
|
||||
fmt_note "removing \"$CRON_JOB\" from crontab ..."
|
||||
( crontab -l | grep -vxF "$CRON_JOB" ) | crontab -
|
||||
}
|
||||
|
||||
install_tmux_tpm(){
|
||||
@ -132,11 +156,8 @@ uninstall_update(){
|
||||
install(){
|
||||
install_update
|
||||
install_crontab
|
||||
insert_if_not_exist "${HOME}/.zshrc" "source ${dotfile_home_path}/.zshrc2"
|
||||
insert_if_not_exist "${HOME}/.tmux.conf" "source-file ${dotfile_home_path}/.tmux.conf2"
|
||||
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"
|
||||
install_file_content
|
||||
install_symlink
|
||||
# those that won't be uninstalled in the future
|
||||
install_tmux_tpm
|
||||
install_vim_vundle
|
||||
@ -145,16 +166,15 @@ install(){
|
||||
|
||||
uninstall(){
|
||||
ask_for_yN "do you really want to uninstall?"
|
||||
if [[ $? == 1 ]]; then
|
||||
uninstall_update
|
||||
uninstall_crontab
|
||||
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!"
|
||||
if [[ $? != 1 ]]; then
|
||||
fmt_error "aborting this job ..."
|
||||
return
|
||||
fi
|
||||
uninstall_update
|
||||
uninstall_crontab
|
||||
uninstall_file_content
|
||||
uninstall_symlink
|
||||
fmt_note "done uninstalling!"
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user