OMZ/config/init.zsh

148 lines
3.7 KiB
Bash

_OMZ_INSTALL_STATE_FILE="$OMZ/cache/install.state"
_omz_read_install_state() {
if [ -f "$_OMZ_INSTALL_STATE_FILE" ]; then
cat "$_OMZ_INSTALL_STATE_FILE" 2>/dev/null
fi
}
_omz_write_install_state() {
local state="$1"
mkdir -p "$OMZ/cache"
echo "$state" > "$_OMZ_INSTALL_STATE_FILE"
}
_omz_run_install_steps() {
local prev_auto_install prev_retry_seconds failed
prev_auto_install="${_OMZ_AUTO_INSTALL:-}"
prev_retry_seconds="${_OMZ_AUTO_INSTALL_RETRY_SECONDS:-}"
_OMZ_AUTO_INSTALL=true
_OMZ_AUTO_INSTALL_RETRY_SECONDS=0
failed=0
_omz_install_fd || failed=1
_omz_install_fzf || failed=1
_omz_install_lua || failed=1
_omz_install_conda || failed=1
if [ -n "$prev_auto_install" ]; then
_OMZ_AUTO_INSTALL="$prev_auto_install"
else
unset _OMZ_AUTO_INSTALL
fi
if [ -n "$prev_retry_seconds" ]; then
_OMZ_AUTO_INSTALL_RETRY_SECONDS="$prev_retry_seconds"
else
unset _OMZ_AUTO_INSTALL_RETRY_SECONDS
fi
return $failed
}
_omz_run_update_steps() {
local prev_retry_seconds failed
prev_retry_seconds="${_OMZ_AUTO_INSTALL_RETRY_SECONDS:-}"
_OMZ_AUTO_INSTALL_RETRY_SECONDS=0
failed=0
if _omz_has_cmd fd; then
_omz_install_with_pkg_manager "fd-find" || _omz_install_with_pkg_manager "fd" || failed=1
else
_omz_install_fd || failed=1
fi
if [ -d "$HOME/.fzf/.git" ] && _omz_has_cmd git; then
git -C "$HOME/.fzf" pull --ff-only || failed=1
"$HOME/.fzf/install" --key-bindings --completion --no-bash --no-fish --no-update-rc || failed=1
elif _omz_has_cmd fzf; then
_omz_install_with_pkg_manager "fzf" || failed=1
else
_omz_install_fzf || failed=1
fi
if _omz_has_cmd lua; then
_omz_install_with_pkg_manager "lua" || _omz_install_with_pkg_manager "lua5.4" || failed=1
else
_omz_install_lua || failed=1
fi
if _omz_has_cmd conda; then
conda update -n base -y conda || failed=1
else
_omz_install_conda || failed=1
fi
if [ -n "$prev_retry_seconds" ]; then
_OMZ_AUTO_INSTALL_RETRY_SECONDS="$prev_retry_seconds"
else
unset _OMZ_AUTO_INSTALL_RETRY_SECONDS
fi
return $failed
}
omz_install() {
local state
state="$(_omz_read_install_state)"
if [ "$state" = "managed" ]; then
echo "[omz] install mode=managed, running dependency update..."
_omz_run_update_steps || {
echo "[omz] some dependencies failed to update"
return 1
}
echo "[omz] dependency update finished"
return 0
fi
echo "[omz] running first-time dependency install..."
_omz_run_install_steps || {
echo "[omz] some dependencies failed to install"
return 1
}
_omz_write_install_state "managed"
echo "[omz] install finished, future install will perform update"
}
inttall() {
omz_install "$@"
}
if [[ "${_OMZ_ENABLE_INSTALL_COMMAND:-true}" == "true" ]]; then
install() {
if [ "$#" -eq 0 ]; then
omz_install
else
command install "$@"
fi
}
fi
_omz_init_install_prompt() {
local state answer
[[ -o interactive ]] || return 0
[[ "${_OMZ_INSTALL_PROMPT:-true}" == "true" ]] || return 0
state="$(_omz_read_install_state)"
if [ "$state" = "managed" ] || [ "$state" = "deferred" ]; then
return 0
fi
printf "[omz] Install dependencies now (fzf/fd/lua/conda)? [y/N]: "
read -r answer
case "$answer" in
y|Y|yes|YES)
omz_install
;;
*)
_omz_write_install_state "deferred"
echo "[omz] dependencies skipped, run 'inttall' to install later"
;;
esac
}
_omz_init_install_prompt