dotfiles/zsh/bin/update

282 lines
7.2 KiB
Plaintext
Raw Normal View History

2019-02-11 16:40:33 +00:00
#!/usr/bin/env zsh
_check_date_if_format() {
local format=`_date_format`
if [ "$format" != "" ]; then
_check_date $format
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 -i1-"${#subject0[@]}" -n1`
n_subject1=`shuf -i1-"${#subject1[@]}" -n1`
n_adjective=`shuf -i1-"${#adjective[@]}" -n1`
n_adverb=`shuf -i1-"${#adverb[@]}" -n1`
n_dot=`shuf -i1-"${#dot[@]}" -n1`
if [ $1 = "updated" ]; then
color="32"
n_verb=`shuf -i1-"${#verb[@]}" -n1`
s_verb=$verb[$n_verb]
elif [ $1 = "not_updated" ]; then
color="31"
n_verb=`shuf -i1-"${#no_verb[@]}" -n1`
s_verb=$no_verb[$n_verb]
fi
echo "\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
2019-02-01 16:22:35 +00:00
elif [ "$UPDATE_CHECK_ALWAYS" = "true" ]; then
_sentence updated
fi
}
2019-01-07 13:25:56 +00:00
update-system() {
2019-01-08 10:16:43 +00:00
# Ask for sudo right now
sudoresult=$(sudo -nv 2>&1)
if [ $? -eq 0 ]; then
# Nothing to do
elif echo $sudoresult | grep -q '^sudo:'; then
echo "\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
else
echo "\033[33;1m=== You are not a sudoer, skipping system update... ===\033[0m"
return 1
fi
2018-09-26 16:12:04 +01:00
echo "\033[32;1m=== Updating system ===\033[0m"
2018-11-19 08:59:36 +00:00
start_system_update=`date +%s`
2018-09-26 16:12:04 +01:00
# 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
2019-03-13 09:46:24 +00:00
command -v yay > /dev/null 2>&1
2018-09-26 16:12:04 +01:00
if [ $? -eq 0 ]; then
2019-03-15 19:42:03 +00:00
yay -Syua --noconfirm
2018-09-26 16:12:04 +01:00
else
2019-03-13 09:46:24 +00:00
command -v pacman > /dev/null 2>&1
2018-09-26 16:12:04 +01:00
if [ $? -eq 0 ]; then
2019-03-15 19:42:03 +00:00
sudo pacman -Syu --noconfirm
2018-09-26 16:12:04 +01:00
fi
fi
# Fedora based systems
command -v dnf > /dev/null 2>&1
if [ $? -eq 0 ]; then
2018-09-26 17:30:54 +01:00
sudo dnf upgrade
2018-09-26 16:12:04 +01:00
fi
2018-11-19 08:59:36 +00:00
seconds=$((`date +%s` - $start_system_update ))
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
echo "\033[32;1m=== System updated in $formatted ===\033[0m"
2019-01-07 13:25:56 +00:00
}
2018-11-19 08:59:36 +00:00
2019-01-07 13:25:56 +00:00
update-rust() {
# Update rust if installed
command -v rustup > /dev/null 2>&1
2019-01-09 10:02:32 +00:00
if [ $? -ne 0 ]; then
return
fi
2019-01-07 13:25:56 +00:00
2019-01-09 10:02:32 +00:00
start_rust_update=`date +%s`
echo "\033[32;1m=== Updating rustup ===\033[0m"
rustup self update
2018-09-26 16:12:04 +01:00
2019-01-09 10:02:32 +00:00
echo "\033[32;1m=== Updating rust ===\033[0m"
rustup update
2018-09-26 16:12:04 +01:00
2019-01-09 10:02:32 +00:00
cargo install-update --help > /dev/null 2>&1
2018-09-26 16:12:04 +01:00
2019-01-09 10:02:32 +00:00
if [ $? -ne 0 ]; then
2018-09-26 17:30:54 +01:00
2019-01-09 10:02:32 +00:00
pkg-config --libs --cflags openssl > /dev/null 2>&1
2019-01-08 10:16:43 +00:00
2019-01-09 10:02:32 +00:00
# We need to install openssl
if [ $? -ne 0 ]; then
2018-09-26 17:30:54 +01:00
2019-01-09 10:02:32 +00:00
# Ask for sudo right now
sudoresult=$(sudo -nv 2>&1)
2018-09-26 17:30:54 +01:00
2019-01-09 10:02:32 +00:00
if [ $? -eq 0 ]; then
command -v apt > /dev/null 2>&1
2018-09-26 17:30:54 +01:00
if [ $? -eq 0 ]; then
2019-01-09 10:02:32 +00:00
sudo apt install -y libssl-dev
2018-09-26 17:30:54 +01:00
fi
2019-01-09 10:02:32 +00:00
# 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 "\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 "\033[33;1m=== You are not a sudoer, cannot install cargo-update... ===\033[0m"
return 1
2018-09-26 17:30:54 +01:00
fi
2018-09-26 16:12:04 +01:00
fi
2018-09-26 17:11:42 +01:00
2019-01-09 10:02:32 +00:00
echo "\033[32;1m=== Installing rust packages updater ===\033[0m"
cargo install cargo-update
2018-09-26 16:12:04 +01:00
fi
2019-01-09 10:02:32 +00:00
echo "\033[32;1m=== Updating rust packages ===\033[0m"
cargo install-update -ag
2018-11-19 08:59:36 +00:00
seconds=$((`date +%s` - $start_rust_update ))
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
echo "\033[32;1m=== Rust updated in $formatted ===\033[0m"
2019-01-07 13:25:56 +00:00
}
2019-03-15 14:32:54 +00:00
update-npm() {
# Update node packages if installed
command -v npm > /dev/null 2>&1
if [ $? -ne 0 ]; then
return
fi
start_npm_update=`date +%s`
echo "\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
2019-03-17 21:37:40 +00:00
seconds=$((`date +%s` - $start_npm_update ))
2019-03-15 14:32:54 +00:00
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
echo "\033[32;1m=== Node packages updated in $formatted ===\033[0m"
}
2019-01-07 13:25:56 +00:00
update-dotfiles() {
2018-11-19 08:59:36 +00:00
start_dotfiles_update=`date +%s`
2019-01-07 13:25:56 +00:00
current_dir=$PWD
echo "\033[32;1m=== Updating oh-my-zsh ===\033[0m"
cd ~/.config/oh-my-zsh && git pull
echo "\033[32;1m=== Updating dotfiles ===\033[0m"
cd ~/.config/dotfiles && git pull
if [ -d ~/.config/awesome/.git ]; then
echo "\033[32;1m=== Updating awesome config ===\033[0m"
cd ~/.config/awesome/ && git pull
fi
cd $current_dir
2018-09-26 16:12:04 +01:00
2018-11-19 08:59:36 +00:00
seconds=$((`date +%s` - $start_dotfiles_update ))
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
echo "\033[32;1m=== Dotfiles updated in $formatted ===\033[0m"
2019-01-07 13:25:56 +00:00
}
2019-02-11 16:40:33 +00:00
main() {
2019-01-07 13:25:56 +00:00
2019-02-11 16:40:33 +00:00
if [ $# -eq 0 ]; then
2019-01-07 13:25:56 +00:00
2019-02-11 16:40:33 +00:00
start=`date +%s`
echo "\033[32;1m=== Starting full update ===\033[0m"
2019-01-07 13:25:56 +00:00
2019-02-11 16:40:33 +00:00
# Update the system
update-system
2019-01-07 13:25:56 +00:00
2019-02-11 16:40:33 +00:00
# Update rust and rust packages
update-rust
2018-11-19 08:59:36 +00:00
2019-03-15 14:32:54 +00:00
# Update npm and npm packages
update-npm
2019-02-11 16:40:33 +00:00
# Update the dotfiles
update-dotfiles
2019-01-07 13:25:56 +00:00
2019-02-11 16:40:33 +00:00
format=`_date_format`
2019-02-11 16:40:33 +00:00
if [ $? -eq 0 ]; then
_check_date_file
date $format > ~/.config/dotfiles/.data/update_date
fi
2019-02-11 16:40:33 +00:00
seconds=$((`date +%s` - $start ))
formatted=`date -ud "@$seconds" +'%H hours %M minutes %S seconds'`
echo "\033[32;1m=== Update finished in $formatted ===\033[0m"
else
case $1 in;
"system") update-system;;
"rust") update-rust;;
2019-03-15 14:32:54 +00:00
"npm") update-npm;;
2019-02-11 16:40:33 +00:00
"dotfiles") update-dotfiles;;
"check") _check_date_if_format;;
esac
fi
2019-02-11 16:40:33 +00:00
2018-09-26 16:12:04 +01:00
}
2019-02-11 16:40:33 +00:00
main $@