76 lines
2 KiB
Bash
76 lines
2 KiB
Bash
# .bashrc
|
|
# Don't load the bashrc if the terminal is not interactive. More information
|
|
# on how this test works can be found at the end of the bash_profile. I had to
|
|
# move this test here, because in remote shells the bashrc is sourced directly,
|
|
# wether the shell is really interactive or not. A brief explanation of this
|
|
# behaviour can be found here:
|
|
# https://unix.stackexchange.com/questions/257571
|
|
if ! [[ -t 0 ]]; then
|
|
return 0
|
|
fi
|
|
|
|
# Source global definitions
|
|
if [[ -r /etc/bashrc ]]; then
|
|
. /etc/bashrc
|
|
fi
|
|
|
|
# Bash 4 or bust
|
|
if (( BASH_VERSINFO[0] < 4 )); then
|
|
echo "Please get a newer version of Bash." >&2
|
|
echo "Your bashrc won't work otherwise." >&2
|
|
return 1
|
|
fi
|
|
|
|
# Basic safe boolean evaluation. See this Gist for details:
|
|
# https://gist.github.com/gliech/184dc7566821442202f21dfe15e2b7ff
|
|
function truthy {
|
|
if [[ "${1,,}" == @(y|yes|on|true|1) ]]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function falsy {
|
|
if [[ "${1,,}" == @(n|no|off|false|0) ]]; then
|
|
return 0
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function true_false_default {
|
|
case "${1,,}" in
|
|
y | yes | on | true | 1)
|
|
return 0 ;;
|
|
n | no | off | false | 0)
|
|
return 1 ;;
|
|
esac
|
|
shift
|
|
eval "$@"
|
|
return 1
|
|
}
|
|
|
|
export -f truthy falsy true_false_default
|
|
|
|
# Now that we have the bare essentials, determine if the rest of the configura-
|
|
# tion should be loaded. DOTFILES_ACTIVE is a environment variable that can be
|
|
# set in ~/.environment.d/dotfiles.env
|
|
if truthy $DOTFILES_ACTIVE; then
|
|
|
|
# Load utilty functions that may be used by other configurations
|
|
. "$DOTFILES_DIR/bash_functions.sh"
|
|
|
|
# Load the rest of the bash configs in ~/.basrc.d
|
|
for file in ~/.bashrc.d/*.sh; do
|
|
. "$file"
|
|
done
|
|
|
|
unset -v file
|
|
|
|
# If the DOTFILES_ACTIVE is not set at all, assume that the dotfiles repo was
|
|
# cloned very recently and print a friendly reminder.
|
|
elif [[ ! -v DOTFILES_ACTIVE ]]; then
|
|
echo "Dotfiles environment not found." >&2
|
|
echo "You should probably reload your login session before proceeding." >&2
|
|
return 1
|
|
fi
|
|
|