ozsh/libozsh.zsh

90 lines
1.8 KiB
Bash

export OZSH_HOME="$HOME/.ozsh"
export OZSH_MODULES="$OZSH_HOME/modules"
export OZSH_LASTUPDATE_FILE="$OZSH_HOME/last_update"
#
# clone the plugin if not exist
# $1 = plugin name
# $2 = git URL
#
function ozsh_clone_plugin {
if [ ! -d "$OZSH_MODULES/$1" ]; then
echo "Installing plugin $1..."
git -C "$OZSH_MODULES" clone "$2" "$1"
fi
}
#
# load plugin
# $1 = plugin type
# $2 = plugin name
# $3 = plugin url <ignored for plugin_omz>
#
function ozsh_load {
if [ "$1" = 'plugin' ]; then
ozsh_clone_plugin "$2" "$3"
source "$OZSH_MODULES/$2/$2.plugin.zsh"
elif [ "$1" = 'theme' ]; then
ozsh_clone_plugin "$2" "$3"
source "$OZSH_MODULES/$2/$2.zsh-theme"
elif [ "$1" = 'plugin_omz' ]; then
ozsh_clone_plugin ohmyzsh "https://github.com/ohmyzsh/ohmyzsh"
source "$OZSH_MODULES/ohmyzsh/plugins/$2/$2.plugin.zsh"
else
echo "Invalid ozsh_load arguments: $@"
fi
}
function ozsh_write_update_date {
echo $(date +%s) > "$OZSH_LASTUPDATE_FILE"
}
function ozsh_update {
git -C $OZSH_HOME stash
git -C $OZSH_HOME pull --rebase
git -C $OZSH_HOME stash pop
# check for updates in modules
for d in $OZSH_MODULES/*/ ;
do
echo "Updating $d..."
git -C $d pull --rebase
done
ozsh_write_update_date
}
function ozsh_autoupdate {
local timediff=$(( ( $(date +%s) - $(cat $OZSH_LASTUPDATE_FILE) ) / 86400 ))
if [ "$timediff" -ge "7" ]; then
vared -p 'Would you like to update ozsh? [y/N]: ' -c answer
if [ "$answer" = "y" ] || [ "$answer" = "Y" ]; then
ozsh_update
fi
fi
}
function ozsh_init {
# check modules directory
if [ ! -d $OZSH_MODULES ]; then
mkdir -p $OZSH_MODULES
fi
# create lastupdate file if not exist
if [ ! -f $OZSH_LASTUPDATE_FILE ]; then
ozsh_write_update_date
fi
# load the datetime module
zmodload zsh/datetime
ozsh_autoupdate
}
# init
ozsh_init
# undefine functions
unset -f ozsh_init
unset -f ozsh_autoupdate