bash-it/bash_it.sh

183 lines
5.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# 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
# Load composure first, to support function metadata, then create our custom attributes.
# shellcheck disable=SC1090
source "${BASH_IT}"/vendor/github.com/erichs/composure/composure.sh
cite _about _param _example _group _author _version
cite about-alias about-completion about-plugin
# Next, load our logging library so we can give useful feedback to the user
# shellcheck source=./lib/log.bash
source "${BASH_IT}/lib/log.bash"
BASH_IT_LOG_PREFIX='core: main: '
# Check for old installations
if [[ -n "$BASH_IT_OLD_BASH_SETUP" ]]; then
_log_warning "BASH_IT variable not initialized, please upgrade your bash-it version and reinstall it!"
fi
# 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
# Load the base libraries ...
# Note: Ordering is important and intentional
# "utilities" - internal functions meant for use within the bash-it codebase
BASH_IT_LOG_PREFIX='lib: utilities: '
_log_debug 'Loading library file ...'
# shellcheck source=./lib/utilities.bash
source "${BASH_IT}/lib/utilities.bash"
# "helpers" - generic functions meant for generic use by end users,
# often wrappers of functions found in utilities
BASH_IT_LOG_PREFIX='lib: helpers: '
_log_debug 'Loading library file ...'
# shellcheck source=./lib/helpers.bash
source "${BASH_IT}/lib/helpers.bash"
# "search" - allows end users to search for matching aliases, plugins and completions in bash-it
BASH_IT_LOG_PREFIX='lib: search: '
_log_debug 'Loading library file ...'
# shellcheck source=./lib/search.bash
source "${BASH_IT}/lib/search.bash"
# Load aliases, completion, plugins ...
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"
done
# Load theme, if a theme was set
if [[ -n "${BASH_IT_THEME}" ]]; then
_log_debug "Loading \"${BASH_IT_THEME}\" theme..."
# Load colors and helpers first so they can be used in base theme
BASH_IT_LOG_PREFIX='themes: colors: '
_log_debug 'Loading theme file ...'
# shellcheck source=./themes/colors.theme.bash
source "${BASH_IT}/themes/colors.theme.bash"
BASH_IT_LOG_PREFIX='themes: githelpers: '
_log_debug 'Loading theme file ...'
# shellcheck source=./themes/githelpers.theme.bash
source "${BASH_IT}/themes/githelpers.theme.bash"
BASH_IT_LOG_PREFIX='themes: p4helpers: '
_log_debug 'Loading theme file ...'
# shellcheck source=./themes/p4helpers.theme.bash
source "${BASH_IT}/themes/p4helpers.theme.bash"
BASH_IT_LOG_PREFIX='themes: command_duration: '
_log_debug 'Loading theme file ...'
# shellcheck source=./themes/command_duration.theme.bash
source "${BASH_IT}/themes/command_duration.theme.bash"
BASH_IT_LOG_PREFIX='themes: base: '
_log_debug 'Loading theme file ...'
# shellcheck source=./themes/base.theme.bash
source "${BASH_IT}/themes/base.theme.bash"
BASH_IT_LOG_PREFIX='lib: appearance: '
_log_debug 'Loading library file ...'
# appearance (themes) now, after all dependencies
# shellcheck source=./lib/appearance.bash
source "${BASH_IT}/lib/appearance.bash"
fi
# Load custom components ...
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
BASH_IT_LOG_PREFIX="${file_type}: custom: "
_log_debug 'Loading component...'
# shellcheck disable=SC1090
source "${BASH_IT}/${file_type}/custom.${file_type}.bash"
fi
done
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}
BASH_IT_LOG_PREFIX="custom: $filename: "
_log_debug "Loading custom file..."
# shellcheck disable=SC1090
source "$_bash_it_config_file"
fi
done
unset _bash_it_config_file
if [[ $PROMPT ]]; then
export PS1="\[""$PROMPT""\]"
fi
# Adding Support for other OSes
PREVIEW="less"
if [ -s /usr/bin/gloobus-preview ]; then
PREVIEW="gloobus-preview"
elif [ -s /Applications/Preview.app ]; then
# shellcheck disable=SC2034
PREVIEW="/Applications/Preview.app"
fi
# Load all the Jekyll stuff
if [ -e "$HOME/.jekyllconfig" ]; then
# shellcheck disable=SC1090
. "$HOME/.jekyllconfig"
fi
# BASH_IT_RELOAD_LEGACY is set.
if ! command -v reload &> /dev/null && [ -n "$BASH_IT_RELOAD_LEGACY" ]; then
case $OSTYPE in
darwin*)
alias reload='source ~/.bash_profile'
;;
*)
alias reload='source ~/.bashrc'
;;
esac
fi
# Now that everything is loaded and configured, load the previewer
BASH_IT_LOG_PREFIX='lib: preview: '
# and the associated preview script
# shellcheck source=./lib/preview.bash
source "${BASH_IT}/lib/preview.bash"
# Disable trap DEBUG on subshells - https://github.com/Bash-it/bash-it/pull/1040
set +T
# Finally, load preexec directly from vendor.
# This has to be last because it wants to have full control over DEBUG trap and PROMPT_COMMAND
BASH_IT_LOG_PREFIX='vendor: bash-preexec: '
# shellcheck source=./vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh
source "${BASH_IT}/vendor/github.com/rcaloras/bash-preexec/bash-preexec.sh"