mirror of
https://github.com/ohmybash/oh-my-bash.git
synced 2024-05-11 05:55:37 +00:00
oh-my-bash: Manage dependencies by "_omb_module_require"
This commit is contained in:
25
lib/utils.sh
25
lib/utils.sh
@ -263,3 +263,28 @@ _omb_util_add_prompt_command() {
|
||||
PROMPT_COMMAND="$1${PROMPT_COMMAND:+;$PROMPT_COMMAND}"
|
||||
fi
|
||||
}
|
||||
|
||||
_omb_util_glob_expand() {
|
||||
local set=$- shopt=$BASHOPTS gignore=$GLOBIGNORE
|
||||
|
||||
shopt -u failglob
|
||||
shopt -s nullglob
|
||||
shopt -s extglob
|
||||
set +f
|
||||
GLOBIGNORE=
|
||||
|
||||
eval -- "$1=($2)"
|
||||
|
||||
GLOBIGNORE=$gignore
|
||||
# Note: dotglob is changed by GLOBIGNORE
|
||||
if [[ :$shopt: == *:dotglob:* ]]; then
|
||||
shopt -s dotglob
|
||||
else
|
||||
shopt -u dotglob
|
||||
fi
|
||||
[[ $set == *f* ]] && set -f
|
||||
[[ :$shopt: != *:extglob:* ]] && shopt -u extglob
|
||||
[[ :$shopt: != *:nullglob:* ]] && shopt -u nullglob
|
||||
[[ :$shopt: == *:failglob:* ]] && shopt -s failglob
|
||||
return 0
|
||||
}
|
||||
|
134
oh-my-bash.sh
134
oh-my-bash.sh
@ -15,23 +15,74 @@ fi
|
||||
|
||||
# Set OSH_CUSTOM to the path where your custom config files
|
||||
# and plugins exists, or else we will use the default custom/
|
||||
if [[ -z "$OSH_CUSTOM" ]]; then
|
||||
OSH_CUSTOM="$OSH/custom"
|
||||
fi
|
||||
: "${OSH_CUSTOM:=$OSH/custom}"
|
||||
|
||||
# Set OSH_CACHE_DIR to the path where cache files should be created
|
||||
# or else we will use the default cache/
|
||||
if [[ -z "$OSH_CACHE_DIR" ]]; then
|
||||
OSH_CACHE_DIR="$OSH/cache"
|
||||
fi
|
||||
: "${OSH_CACHE_DIR:=$OSH/cache}"
|
||||
|
||||
_omb_module_loaded=
|
||||
_omb_module_require() {
|
||||
local status=0
|
||||
local -a files=()
|
||||
while (($#)); do
|
||||
local type=lib name=$1; shift
|
||||
[[ $name == *:* ]] && type=${name%%:*} name=${name#*:}
|
||||
name=${name%.bash}
|
||||
name=${name%.sh}
|
||||
[[ ' '$_omb_module_loaded' ' == *" $type:$name "* ]] && continue
|
||||
_omb_module_loaded="$_omb_module_loaded $type:$name"
|
||||
|
||||
local -a locations=()
|
||||
case $type in
|
||||
lib) locations=({"$OSH_CUSOM","$OSH"}/lib/"$name".{bash,sh}) ;;
|
||||
plugin) locations=({"$OSH_CUSOM","$OSH"}/plugins/"$name".plugin.{bash,sh}) ;;
|
||||
alias) locations=({"$OSH_CUSOM","$OSH"}/aliases/"$name".alias.{bash,sh}) ;;
|
||||
completion) locations=({"$OSH_CUSOM","$OSH"}/completions/"$name".completion.{bash,sh}) ;;
|
||||
theme) locations=({"$OSH_CUSOM"{,/themes},"$OSH"/themes}/"$name"/"$name".theme.{bash,sh}) ;;
|
||||
*)
|
||||
echo "oh-my-bash (package_require): unknown package type '$type'." >&2
|
||||
status=2
|
||||
continue ;;
|
||||
esac
|
||||
|
||||
local path
|
||||
for path in "${locations[@]}"; do
|
||||
if [[ -f $path ]]; then
|
||||
files+=("$path")
|
||||
continue 2
|
||||
fi
|
||||
done
|
||||
|
||||
echo "oh-my-bash (package_require): package '$type:$name' not found." >&2
|
||||
status=127
|
||||
done
|
||||
|
||||
if ((status==0)); then
|
||||
local path
|
||||
for path in "${files[@]}"; do
|
||||
source "$path" || status=$?
|
||||
done
|
||||
fi
|
||||
|
||||
return "$status"
|
||||
}
|
||||
|
||||
_omb_module_require_lib() { _omb_module_require "${@/#/lib:}"; }
|
||||
_omb_module_require_plugin() { _omb_module_require "${@/#/plugin:}"; }
|
||||
_omb_module_require_alias() { _omb_module_require "${@/#/alias:}"; }
|
||||
_omb_module_require_completion() { _omb_module_require "${@/#/completion:}"; }
|
||||
_omb_module_require_theme() { _omb_module_require "${@/#/theme:}"; }
|
||||
|
||||
# Load all of the config files in ~/.oh-my-bash/lib that end in .sh
|
||||
# TIP: Add files you don't want in git to .gitignore
|
||||
for config_file in $OSH/lib/*.sh; do
|
||||
custom_config_file="${OSH_CUSTOM}/lib/$(basename "${config_file}")"
|
||||
[ -f "${custom_config_file}" ] && config_file=${custom_config_file}
|
||||
source $config_file
|
||||
done
|
||||
_omb_module_require_lib utils
|
||||
_omb_module_require_lib omb-deprecate
|
||||
_omb_util_glob_expand _omb_init_files '{"$OSH","$OSH_CUSOM"}/lib/*.sh'
|
||||
_omb_init_files=("${_omb_init_files[@]##*/}")
|
||||
_omb_init_files=("${_omb_init_files[@]%.sh}")
|
||||
_omb_module_require_lib "${_omb_init_files[@]}"
|
||||
unset -v _omb_init_files
|
||||
|
||||
# Figure out the SHORT hostname
|
||||
if [[ "$OSTYPE" = darwin* ]]; then
|
||||
@ -42,66 +93,41 @@ else
|
||||
fi
|
||||
|
||||
# Load all of the plugins that were defined in ~/.bashrc
|
||||
for plugin in ${plugins[@]}; do
|
||||
if [ -f $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh ]; then
|
||||
source $OSH_CUSTOM/plugins/$plugin/$plugin.plugin.sh
|
||||
elif [ -f $OSH/plugins/$plugin/$plugin.plugin.sh ]; then
|
||||
source $OSH/plugins/$plugin/$plugin.plugin.sh
|
||||
fi
|
||||
done
|
||||
_omb_module_require_plugin ${plugins[@]}
|
||||
|
||||
# Load all of the aliases that were defined in ~/.bashrc
|
||||
for alias in ${aliases[@]}; do
|
||||
if [ -f $OSH_CUSTOM/aliases/$alias.aliases.sh ]; then
|
||||
source $OSH_CUSTOM/aliases/$alias.aliases.sh
|
||||
elif [ -f $OSH/aliases/$alias.aliases.sh ]; then
|
||||
source $OSH/aliases/$alias.aliases.sh
|
||||
fi
|
||||
done
|
||||
_omb_module_require_alias ${aliases[@]}
|
||||
|
||||
# Load all of the completions that were defined in ~/.bashrc
|
||||
for completion in ${completions[@]}; do
|
||||
if [ -f $OSH_CUSTOM/completions/$completion.completion.sh ]; then
|
||||
source $OSH_CUSTOM/completions/$completion.completion.sh
|
||||
elif [ -f $OSH/completions/$completion.completion.sh ]; then
|
||||
source $OSH/completions/$completion.completion.sh
|
||||
fi
|
||||
done
|
||||
_omb_module_require_completion ${completions[@]}
|
||||
|
||||
# Load all of your custom configurations from custom/
|
||||
for config_file in $OSH_CUSTOM/*.sh; do
|
||||
if [ -f $config_file ]; then
|
||||
source $config_file
|
||||
fi
|
||||
_omb_util_glob_expand _omb_init_files '"$OSH_CUSTOM"/*.{sh,bash}'
|
||||
for _omb_init_file in "${_omb_init_files[@]}"; do
|
||||
[[ -f $_omb_init_file ]] &&
|
||||
source "$_omb_init_file"
|
||||
done
|
||||
unset config_file
|
||||
unset -v _omb_init_files _omb_init_file
|
||||
|
||||
# Load colors first so they can be use in base theme
|
||||
source "${OSH}/themes/colours.theme.sh"
|
||||
source "${OSH}/themes/base.theme.sh"
|
||||
|
||||
# Load the theme
|
||||
if [ "$OSH_THEME" = "random" ]; then
|
||||
themes=($OSH/themes/*/*theme.sh)
|
||||
N=${#themes[@]}
|
||||
((N=(RANDOM%N)))
|
||||
RANDOM_THEME=${themes[$N]}
|
||||
source "$RANDOM_THEME"
|
||||
echo "[oh-my-bash] Random theme '$RANDOM_THEME' loaded..."
|
||||
else
|
||||
if [ ! "$OSH_THEME" = "" ]; then
|
||||
if [ -f "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh" ]; then
|
||||
source "$OSH_CUSTOM/$OSH_THEME/$OSH_THEME.theme.sh"
|
||||
elif [ -f "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh" ]; then
|
||||
source "$OSH_CUSTOM/themes/$OSH_THEME/$OSH_THEME.theme.sh"
|
||||
else
|
||||
source "$OSH/themes/$OSH_THEME/$OSH_THEME.theme.sh"
|
||||
fi
|
||||
if [[ $OSH_THEME == random ]]; then
|
||||
_omb_util_glob_expand _omb_init_files '"$OSH"/themes/*/*.theme.sh'
|
||||
if ((${#_omb_init_files[@]})); then
|
||||
_omb_init_file=${_omb_init_files[RANDOM%${#_omb_init_files[@]}]}
|
||||
source "$_omb_init_file"
|
||||
echo "[oh-my-bash] Random theme '$_omb_init_file' loaded..."
|
||||
fi
|
||||
unset -v _omb_init_files _omb_init_file
|
||||
elif [[ $OSH_THEME ]]; then
|
||||
_omb_module_require_theme "$OSH_THEME"
|
||||
fi
|
||||
|
||||
if [[ $PROMPT ]]; then
|
||||
export PS1="\["$PROMPT"\]"
|
||||
export PS1="\["$PROMPT"\]"
|
||||
fi
|
||||
|
||||
if ! _omb_util_command_exists '__git_ps1' ; then
|
||||
|
Reference in New Issue
Block a user