Some cleaning, adds bashrc for those who don't want / can't install zsh
This commit is contained in:
329
bin/update
Executable file
329
bin/update
Executable file
@@ -0,0 +1,329 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
_check_date_if_format() {
|
||||
local format=`_date_format`
|
||||
|
||||
if [ "$format" != "" ]; then
|
||||
_check_date $format $1
|
||||
fi
|
||||
}
|
||||
|
||||
_date_format() {
|
||||
|
||||
case $UPDATE_CHECK in
|
||||
"daily") echo +%d/%m/%Y;;
|
||||
"weekly") echo +%V/%Y;;
|
||||
"monthly") echo +%m/%Y;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
_check_date_file() {
|
||||
mkdir -p ~/.config/dotfiles/.data
|
||||
touch ~/.config/dotfiles/.data/update_date
|
||||
}
|
||||
|
||||
_sentence() {
|
||||
subject0=("Your" "The" "This")
|
||||
subject1=("system" "machine" "pc" "computer")
|
||||
adjective=("awesome" "incredible" "amazing" "brave" "hard working" "loyal" "nice" "polite" "powerful" "pro-active" "reliable" "fabulous" "fantastic" "incredible" "outstanding" "remarkable" "spectacular" "splendid" "super" "happy" "cheerful")
|
||||
verb=("is" "seems" "looks" "appears to be")
|
||||
no_verb=("is not" "doesn't seem" "doesn't look" "appears not to be")
|
||||
adverb=("up-to-date" "ready" "updated")
|
||||
dot=("." "!" "...")
|
||||
|
||||
n_subject0=`shuf -i0-"$((${#subject0[@]}-1))" -n1`
|
||||
n_subject1=`shuf -i0-"$((${#subject1[@]}-1))" -n1`
|
||||
n_adjective=`shuf -i0-"$((${#adjective[@]}-1))" -n1`
|
||||
n_adverb=`shuf -i0-"$((${#adverb[@]}-1))" -n1`
|
||||
n_dot=`shuf -i0-"$((${#dot[@]}-1))" -n1`
|
||||
|
||||
if [ $1 = "updated" ]; then
|
||||
color="32"
|
||||
n_verb=`shuf -i0-"$((${#verb[@]}-1))" -n1`
|
||||
s_verb=${verb[$n_verb]}
|
||||
elif [ $1 = "not_updated" ]; then
|
||||
color="31"
|
||||
n_verb=`shuf -i0-"$((${#no_verb[@]}-1))" -n1`
|
||||
s_verb=${no_verb[$n_verb]}
|
||||
fi
|
||||
|
||||
echo -e "\033[$color;1m${subject0[$n_subject0]} ${adjective[$n_adjective]} ${subject1[$n_subject1]} $s_verb ${adverb[$n_adverb]}${dot[$n_dot]}\033[0m"
|
||||
}
|
||||
|
||||
_check_date() {
|
||||
|
||||
_check_date_file
|
||||
|
||||
old_date=`cat ~/.config/dotfiles/.data/update_date`
|
||||
new_date=`date $1`
|
||||
|
||||
if [ "$new_date" != "$old_date" ]; then
|
||||
_sentence not_updated
|
||||
elif [ "$UPDATE_CHECK_ALWAYS" = "true" ] || [ "$2" = "force" ]; then
|
||||
_sentence updated
|
||||
fi
|
||||
}
|
||||
|
||||
update-system() {
|
||||
|
||||
echo -e "\033[32;1m=== Starting system update, please enter your password ===\033[0m"
|
||||
sudo true
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not get sudo..."
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo -e "\033[32;1m=== Updating system ===\033[0m"
|
||||
start_system_update=`date +%s`
|
||||
|
||||
# Debian based systems
|
||||
command -v apt > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo apt update -y
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo apt upgrade -y
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo apt autoremove -y
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# Archlinux based systems
|
||||
command -v yay > /dev/null 2>&1
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
yay -Syu --noconfirm
|
||||
yay -Syua --noconfirm
|
||||
else
|
||||
command -v pacman > /dev/null 2>&1
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo pacman -Syu --noconfirm
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fedora based systems
|
||||
command -v dnf > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo dnf upgrade
|
||||
fi
|
||||
|
||||
seconds=$((`date +%s` - $start_system_update ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== System updated in $formatted ===\033[0m"
|
||||
}
|
||||
|
||||
update-rust() {
|
||||
|
||||
# Update rust if installed
|
||||
command -v rustup > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
start_rust_update=`date +%s`
|
||||
echo -e "\033[32;1m=== Updating rustup ===\033[0m"
|
||||
rustup self update
|
||||
|
||||
echo -e "\033[32;1m=== Updating rust ===\033[0m"
|
||||
rustup update
|
||||
|
||||
cargo install-update --help > /dev/null 2>&1
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
pkg-config --libs --cflags openssl > /dev/null 2>&1
|
||||
|
||||
# We need to install openssl
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
# Ask for sudo right now
|
||||
sudoresult=$(sudo -nv 2>&1)
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
command -v apt > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo apt install -y libssl-dev
|
||||
fi
|
||||
|
||||
# For fedora
|
||||
command -v dnf > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
sudo dnf install openssl-devel
|
||||
fi
|
||||
elif echo $sudoresult | grep -q '^sudo:'; then
|
||||
echo -e "\033[32;1m=== libssl-dev is needed to update rust packages, please enter your password ===\033[0m"
|
||||
sudo true
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Could not get sudo..."
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
echo -e "\033[33;1m=== You are not a sudoer, cannot install cargo-update... ===\033[0m"
|
||||
return 1
|
||||
fi
|
||||
|
||||
fi
|
||||
|
||||
echo -e "\033[32;1m=== Installing rust packages updater ===\033[0m"
|
||||
cargo install cargo-update
|
||||
fi
|
||||
|
||||
echo -e "\033[32;1m=== Updating rust packages ===\033[0m"
|
||||
cargo install-update -ag
|
||||
|
||||
seconds=$((`date +%s` - $start_rust_update ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== Rust updated in $formatted ===\033[0m"
|
||||
|
||||
}
|
||||
|
||||
update-npm() {
|
||||
|
||||
# Update node packages if installed
|
||||
command -v npm > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -d ~/.npmbin ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
start_npm_update=`date +%s`
|
||||
echo -e "\033[32;1m=== Updating node packages ===\033[0m"
|
||||
|
||||
for package in $(npm -g outdated --parseable --depth=0 | cut -d: -f3)
|
||||
do
|
||||
npm -g install "$package"
|
||||
done
|
||||
|
||||
seconds=$((`date +%s` - $start_npm_update ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== Node packages updated in $formatted ===\033[0m"
|
||||
}
|
||||
|
||||
update-dotfiles() {
|
||||
start_dotfiles_update=`date +%s`
|
||||
|
||||
current_dir=$PWD
|
||||
|
||||
echo -e "\033[32;1m=== Updating oh-my-zsh ===\033[0m"
|
||||
cd ~/.config/oh-my-zsh && git pull
|
||||
|
||||
echo -e "\033[32;1m=== Updating dotfiles ===\033[0m"
|
||||
cd ~/.config/dotfiles && git pull
|
||||
|
||||
if [ -d ~/.config/awesome/.git ]; then
|
||||
echo -e "\033[32;1m=== Updating awesome config ===\033[0m"
|
||||
cd ~/.config/awesome/ && git pull
|
||||
fi
|
||||
|
||||
cd $current_dir
|
||||
|
||||
seconds=$((`date +%s` - $start_dotfiles_update ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== Dotfiles updated in $formatted ===\033[0m"
|
||||
}
|
||||
|
||||
update-neovim() {
|
||||
command -v nvim > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
return
|
||||
fi
|
||||
|
||||
start_neovim_update=`date +%s`
|
||||
echo -e "\033[32;1m=== Updating neovim packages ===\033[0m"
|
||||
|
||||
nvim +PlugUpdate +qall
|
||||
|
||||
seconds=$((`date +%s` - $start_neovim_update ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== Neovim updated in $formatted ===\033[0m"
|
||||
}
|
||||
|
||||
_print_help() {
|
||||
echo
|
||||
}
|
||||
|
||||
partial-test() {
|
||||
case $1 in
|
||||
"system") return 0;;
|
||||
"rust") return 0;;
|
||||
"npm") return 0;;
|
||||
"dotfiles") return 0;;
|
||||
"neovim") return 0;;
|
||||
"check") return 0;;
|
||||
"startup") return 0;;
|
||||
*) return 1;;
|
||||
esac
|
||||
}
|
||||
|
||||
partial-update() {
|
||||
case $1 in
|
||||
"system") update-system;;
|
||||
"rust") update-rust;;
|
||||
"npm") update-npm;;
|
||||
"dotfiles") update-dotfiles;;
|
||||
"neovim") update-neovim;;
|
||||
"check") _check_date_if_format force;;
|
||||
"startup") _check_date_if_format;;
|
||||
*) return 1
|
||||
esac
|
||||
}
|
||||
|
||||
main() {
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
|
||||
start=`date +%s`
|
||||
echo -e "\033[32;1m=== Starting full update ===\033[0m"
|
||||
|
||||
# Update the system
|
||||
update-system
|
||||
|
||||
# Update rust and rust packages
|
||||
update-rust
|
||||
|
||||
# Update npm and npm packages
|
||||
update-npm
|
||||
|
||||
# Update the dotfiles
|
||||
update-dotfiles
|
||||
|
||||
# Update the neovim packages
|
||||
update-neovim
|
||||
|
||||
format=`_date_format`
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
_check_date_file
|
||||
date $format > ~/.config/dotfiles/.data/update_date
|
||||
fi
|
||||
|
||||
seconds=$((`date +%s` - $start ))
|
||||
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
|
||||
echo -e "\033[32;1m=== Update finished in $formatted ===\033[0m"
|
||||
|
||||
_check_date_if_format force
|
||||
|
||||
else
|
||||
|
||||
for part in $@; do
|
||||
partial-test $part
|
||||
if [ $? -ne 0 ]; then
|
||||
echo -e "\033[1;31merror:\033[0m unrocognized update command \"$part\""
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
|
||||
for part in $@; do
|
||||
partial-update $part
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
main $@
|
||||
Reference in New Issue
Block a user