-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
main: Glob for *.bash properly when path contains spaces
- `shfmt`, `shellcheck` - Clean up legacy/compatibility code to simpler control flow - Move theme stuff down to where themes are handled - Don't use `**` as _Bash It_ has never before set `globstar`; this eliminates varying behavior by environment; this alsö fixes users having any not-enabled themes under their custom dir. - Lose weird Mac-specific alternate shell startup file (Bash loads startup files on Mac the same as it does on any other *nix system.) - Place `composure.sh` init all in one place - remove 10-years-deprecated backwards compatibility: Deprecated in `b59ee658f78ec6ff8c6c2754216e0322b7fe18e2` dated 2011-10-29.
- Loading branch information
1 parent
4dbe92e
commit 0d346b2
Showing
1 changed file
with
51 additions
and
82 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,145 +1,114 @@ | ||
#!/usr/bin/env bash | ||
# shellcheck source-path=SCRIPTDIR/lib source-path=SCRIPTDIR/scripts | ||
# shellcheck disable=SC2034 | ||
# | ||
# Initialize Bash It | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
|
||
# Only set $BASH_IT if it's not already set | ||
if [ -z "${BASH_IT:-}" ]; then | ||
# Setting $BASH to maintain backwards compatibility | ||
export BASH_IT=$BASH | ||
BASH="$(bash -c 'echo $BASH')" | ||
export BASH | ||
BASH_IT_OLD_BASH_SETUP=true | ||
fi | ||
: "${BASH_IT:=${BASH_SOURCE%/*}}" | ||
: "${BASH_IT_CUSTOM:=${BASH_IT}/custom}" | ||
: "${CUSTOM_THEME_DIR:="${BASH_IT_CUSTOM}/themes"}" | ||
: "${BASH_IT_BASHRC:=${BASH_SOURCE[${#BASH_SOURCE[@]} - 1]}}" | ||
|
||
# Load composure first, so we support function metadata | ||
# shellcheck disable=SC1090 | ||
source "${BASH_IT}"/vendor/github.com/erichs/composure/composure.sh | ||
# shellcheck source-path=SCRIPTDIR/vendor/github.com/erichs/composure | ||
source "${BASH_IT}/vendor/github.com/erichs/composure/composure.sh" | ||
# support 'plumbing' metadata | ||
cite _about _param _example _group _author _version | ||
cite about-alias about-plugin about-completion | ||
|
||
# Declare our end-of-main finishing hook | ||
declare -a _bash_it_library_finalize_hook | ||
# Declare our end-of-main finishing hook, but don't use `declare`/`typeset` | ||
_bash_it_library_finalize_hook=() | ||
|
||
# We need to load logging module early in order to be able to log | ||
# shellcheck source-path=SCRIPTDIR/lib | ||
source "${BASH_IT}/lib/log.bash" | ||
|
||
# We can only log it now | ||
[ -z "${BASH_IT_OLD_BASH_SETUP:-}" ] || _log_warning "BASH_IT variable not initialized, please upgrade your bash-it version and reinstall it!" | ||
|
||
# For backwards compatibility, look in old BASH_THEME location | ||
if [ -z "${BASH_IT_THEME:-}" ]; then | ||
_log_warning "BASH_IT_THEME variable not initialized, please upgrade your bash-it version and reinstall it!" | ||
export BASH_IT_THEME="${BASH_THEME:-}" | ||
unset BASH_THEME | ||
fi | ||
|
||
# support 'plumbing' metadata | ||
cite _about _param _example _group _author _version | ||
cite about-alias about-plugin about-completion | ||
|
||
# libraries, but skip appearance (themes) for now | ||
_log_debug "Loading libraries(except appearance)..." | ||
LIB="${BASH_IT}/lib/*.bash" | ||
APPEARANCE_LIB="${BASH_IT}/lib/appearance.bash" | ||
for _bash_it_config_file in $LIB; do | ||
if [ "$_bash_it_config_file" != "$APPEARANCE_LIB" ]; then | ||
filename=${_bash_it_config_file##*/} | ||
filename=${filename%.bash} | ||
BASH_IT_LOG_PREFIX="lib: ${filename}: " | ||
_log_debug "Loading library file..." | ||
# shellcheck disable=SC1090 | ||
source "$_bash_it_config_file" | ||
fi | ||
for _bash_it_main_file_lib in "${BASH_IT}/lib"/*.bash; do | ||
[[ "$_bash_it_main_file_lib" == "$APPEARANCE_LIB" ]] && continue | ||
filename="${_bash_it_main_file_lib##*/}" | ||
filename="${filename%.bash}" | ||
BASH_IT_LOG_PREFIX="lib: ${filename}: " | ||
_log_debug "Loading library file..." | ||
# shellcheck disable=SC1090 | ||
source "$_bash_it_main_file_lib" | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
done | ||
|
||
BASH_IT_LOG_PREFIX="core: main: " | ||
# Load the global "enabled" directory | ||
# "family" param is empty so that files get sources in glob order | ||
# shellcheck source=./scripts/reloader.bash | ||
source "${BASH_IT}/scripts/reloader.bash" | ||
|
||
# Load enabled aliases, completion, plugins | ||
for file_type in "aliases" "plugins" "completion"; do | ||
# shellcheck source=./scripts/reloader.bash | ||
source "${BASH_IT}/scripts/reloader.bash" "skip" "$file_type" | ||
# Load the global "enabled" directory, then enabled aliases, completion, plugins | ||
# "file_type" param is empty so that files get sourced in glob order | ||
for file_type in "" "aliases" "plugins" "completion"; do | ||
BASH_IT_LOG_PREFIX="core: reloader: " | ||
source "${BASH_IT}/scripts/reloader.bash" "${file_type:+skip}" "$file_type" | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
done | ||
|
||
# Load theme, if a theme was set | ||
if [[ -n "${BASH_IT_THEME}" ]]; then | ||
_log_debug "Loading \"${BASH_IT_THEME}\" theme..." | ||
# shellcheck source-path=SCRIPTDIR/themes | ||
if [[ -n "${BASH_IT_THEME:-}" ]]; then | ||
_log_debug "Loading theme '${BASH_IT_THEME}'." | ||
BASH_IT_LOG_PREFIX="themes: githelpers: " | ||
# shellcheck source=./themes/githelpers.theme.bash | ||
source "${BASH_IT}/themes/githelpers.theme.bash" | ||
BASH_IT_LOG_PREFIX="themes: p4helpers: " | ||
# shellcheck source=./themes/p4helpers.theme.bash | ||
source "${BASH_IT}/themes/p4helpers.theme.bash" | ||
BASH_IT_LOG_PREFIX="themes: command_duration: " | ||
# shellcheck source=./themes/command_duration.theme.bash | ||
source "${BASH_IT}/themes/command_duration.theme.bash" | ||
BASH_IT_LOG_PREFIX="themes: base: " | ||
# shellcheck source=./themes/base.theme.bash | ||
source "${BASH_IT}/themes/base.theme.bash" | ||
|
||
BASH_IT_LOG_PREFIX="lib: appearance: " | ||
# appearance (themes) now, after all dependencies | ||
# shellcheck source=./lib/appearance.bash | ||
# shellcheck source=SCRIPTDIR/lib/appearance.bash | ||
source "$APPEARANCE_LIB" | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
fi | ||
|
||
BASH_IT_LOG_PREFIX="core: main: " | ||
_log_debug "Loading custom aliases, completion, plugins..." | ||
for file_type in "aliases" "completion" "plugins"; do | ||
if [ -e "${BASH_IT}/${file_type}/custom.${file_type}.bash" ]; then | ||
if [[ -s "${BASH_IT}/${file_type}/custom.${file_type}.bash" ]]; then | ||
BASH_IT_LOG_PREFIX="${file_type}: custom: " | ||
_log_debug "Loading component..." | ||
# shellcheck disable=SC1090 | ||
source "${BASH_IT}/${file_type}/custom.${file_type}.bash" | ||
fi | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
done | ||
|
||
# Custom | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
_log_debug "Loading general custom files..." | ||
CUSTOM="${BASH_IT_CUSTOM:=${BASH_IT}/custom}/*.bash ${BASH_IT_CUSTOM:=${BASH_IT}/custom}/**/*.bash" | ||
for _bash_it_config_file in $CUSTOM; do | ||
if [ -e "${_bash_it_config_file}" ]; then | ||
filename=$(basename "${_bash_it_config_file}") | ||
filename=${filename%*.bash} | ||
# shellcheck disable=SC2034 | ||
for _bash_it_main_file_custom in "${BASH_IT_CUSTOM}"/*.bash "${BASH_IT_CUSTOM}"/*/*.bash; do | ||
if [[ -s "${_bash_it_main_file_custom}" ]]; then | ||
filename="${_bash_it_main_file_custom##*/}" | ||
filename="${filename%*.bash}" | ||
BASH_IT_LOG_PREFIX="custom: $filename: " | ||
_log_debug "Loading custom file..." | ||
# shellcheck disable=SC1090 | ||
source "$_bash_it_config_file" | ||
source "$_bash_it_main_file_custom" | ||
fi | ||
BASH_IT_LOG_PREFIX="core: main: " | ||
done | ||
|
||
unset _bash_it_config_file | ||
if [[ -n "${PROMPT:-}" ]]; then | ||
export PS1="\[""$PROMPT""\]" | ||
PS1="${PROMPT}" | ||
fi | ||
|
||
# Adding Support for other OSes | ||
PREVIEW="less" | ||
|
||
if [ -s /usr/bin/gloobus-preview ]; then | ||
if _command_exists gloobus-preview; then | ||
PREVIEW="gloobus-preview" | ||
elif [ -s /Applications/Preview.app ]; then | ||
# shellcheck disable=SC2034 | ||
elif [[ -d /Applications/Preview.app ]]; then | ||
PREVIEW="/Applications/Preview.app" | ||
else | ||
PREVIEW="less" | ||
fi | ||
|
||
# BASH_IT_RELOAD_LEGACY is set. | ||
if ! _command_exists reload && [[ -n "${BASH_IT_RELOAD_LEGACY:-}" ]]; then | ||
case $OSTYPE in | ||
darwin*) | ||
alias reload='source ~/.bash_profile' | ||
;; | ||
*) | ||
alias reload='source ~/.bashrc' | ||
;; | ||
esac | ||
if [[ -n "${BASH_IT_RELOAD_LEGACY:-}" ]] && ! _command_exists reload; then | ||
# shellcheck disable=SC2139 | ||
alias reload="builtin source '${BASH_IT_BASHRC?}'" | ||
fi | ||
|
||
for _bash_it_library_finalize_f in "${_bash_it_library_finalize_hook[@]:-}"; do | ||
eval "${_bash_it_library_finalize_f?}" # Use `eval` to achieve the same behavior as `$PROMPT_COMMAND`. | ||
done | ||
unset "${!_bash_it_library_finalize_@}" | ||
unset "${!_bash_it_library_finalize_@}" "${!_bash_it_main_file_@}" filename file_type |