Skip to content

Commit

Permalink
Merge pull request #22 from gianluca-mascolo/cleanup_code
Browse files Browse the repository at this point in the history
cleanup code
  • Loading branch information
gianluca-mascolo committed Oct 8, 2023
2 parents e6b3ca4 + 8bf0009 commit 23e42a1
Showing 1 changed file with 35 additions and 23 deletions.
58 changes: 35 additions & 23 deletions bash_profile_switcher.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,21 @@ export SWITCH_PROFILE_SAVED=".bash_saved_profile"
# snipname1:snipname2:snippetname3
export SWITCH_PROFILE_SNIPPETS=""

# Setup aliases to manage profiles
alias _save_bash_profile='eval echo "export SWITCH_PROFILE_CURRENT=$SELECTED_PROFILE" > "$HOME/$SWITCH_PROFILE_SAVED"'
alias _reset_bash_profile='eval echo "unset SWITCH_PROFILE_CURRENT" > "$HOME/$SWITCH_PROFILE_SAVED"'

alias _get_snippets='eval unset LOAD_SNIPPETS; declare -a LOAD_SNIPPETS; mapfile -c 1 -C _parse_profile -t <"${HOME}/${SWITCH_PROFILE_DIRECTORY}/${SWITCH_PROFILE_CURRENT}.profile"'
# shellcheck disable=SC2154
alias _load_bash_profile='_get_snippets; for ((n=0;n<${#LOAD_SNIPPETS[*]};n++)); do if ! _snippet search "$(basename "${LOAD_SNIPPETS[$n]}" .sh)"; then source "${LOAD_SNIPPETS[$n]}" load && _snippet push "$(basename "${LOAD_SNIPPETS[$n]}" .sh)"; fi; done'
alias _unload_bash_profile='for ((n=-1;n>=-${#LOAD_SNIPPETS[*]};n--)); do if _snippet search "$(basename "${LOAD_SNIPPETS[$n]}" .sh)"; then source "${LOAD_SNIPPETS[$n]}" unload && _snippet pop "$(basename "${LOAD_SNIPPETS[$n]}" .sh)"; fi; done'

# _parse_profile
# _switch_profile_parse
# To be used with mapfile
# Every line in the file is parsed and checked for a corresponding snippet to be loaded
# It will store the valid snippets in global array LOAD_SNIPPETS
_parse_profile() {

_switch_profile_parse() {
local VALUE
local SNIPPET
VALUE="$2"
if [[ "$VALUE" =~ ^[[:blank:]]*([^# ]+)([[:blank:]]|$) ]]; then
{
SNIPPET="${BASH_REMATCH[1]}"
[ -f "$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/$SNIPPET.sh" ] && LOAD_SNIPPETS+=("$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/$SNIPPET.sh")
if [ -f "$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/$SNIPPET.sh" ] && ! _snippet search "$SNIPPET"; then
# shellcheck source=/dev/null
source "$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/$SNIPPET.sh" load && _snippet push "$SNIPPET"
fi
}
fi
return 0
Expand Down Expand Up @@ -165,11 +159,12 @@ EOF
}

switch_profile() {
local OPTIND OPTARG SELECTED_PROFILE KEEP_ENV TEMP_PROFILE

local OPTIND OPTARG SELECTED_PROFILE KEEP_ENV TEMP_PROFILE RESET_PROFILE
local -a SNIPPET_ARRAY
KEEP_ENV=0
TEMP_PROFILE=0
while getopts "tkdhl" Option; do
RESET_PROFILE=0
while getopts ":tkdhl" Option; do
case $Option in
k)
KEEP_ENV=1
Expand All @@ -189,9 +184,7 @@ switch_profile() {
return 0
;;
d)
_unload_bash_profile
_reset_bash_profile
exec bash
RESET_PROFILE=1
;;
*)
_switch_profile_help
Expand All @@ -201,10 +194,27 @@ switch_profile() {
done
shift $((OPTIND - 1))

if ! [ $KEEP_ENV -eq 1 ]; then
IFS=':' read -r -a SNIPPET_ARRAY <<<"$SWITCH_PROFILE_SNIPPETS"
for ((n = -1; n >= -${#SNIPPET_ARRAY[*]}; n--)); do
if [ -f "$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/${SNIPPET_ARRAY[$n]}.sh" ]; then
# shellcheck source=/dev/null
source "$HOME/$SWITCH_PROFILE_DIRECTORY/snippets/${SNIPPET_ARRAY[$n]}.sh" unload && _snippet pop "${SNIPPET_ARRAY[$n]}"
fi
done
fi
if [ $RESET_PROFILE -eq 1 ]; then
echo "unset SWITCH_PROFILE_CURRENT" >"$HOME/$SWITCH_PROFILE_SAVED"
exec bash
fi

SELECTED_PROFILE="$1"
if [ -f "${HOME}/${SWITCH_PROFILE_DIRECTORY}/${SELECTED_PROFILE}.profile" ]; then {
[ $KEEP_ENV -eq 0 ] && _unload_bash_profile
if [ $TEMP_PROFILE -eq 0 ]; then _save_bash_profile; else export SWITCH_PROFILE_NEXT="$SELECTED_PROFILE"; fi
if [ $TEMP_PROFILE -eq 0 ]; then
echo "export SWITCH_PROFILE_CURRENT=$SELECTED_PROFILE" >"$HOME/$SWITCH_PROFILE_SAVED"
else
export SWITCH_PROFILE_NEXT="$SELECTED_PROFILE"
fi
exec bash
}; else
{
Expand All @@ -225,13 +235,15 @@ if [ -z ${SWITCH_PROFILE_NEXT+is_set} ]; then {
{
# shellcheck source=/dev/null
source "$HOME/$SWITCH_PROFILE_SAVED"
if [ -n "${SWITCH_PROFILE_CURRENT+is_set}" ]; then _load_bash_profile; fi
}
fi
}; else
{
export SWITCH_PROFILE_CURRENT="$SWITCH_PROFILE_NEXT"
unset SWITCH_PROFILE_NEXT
_load_bash_profile
}
fi

if [ -n "${SWITCH_PROFILE_CURRENT+is_set}" ]; then
mapfile -c 1 -C _switch_profile_parse -t <"${HOME}/${SWITCH_PROFILE_DIRECTORY}/${SWITCH_PROFILE_CURRENT}.profile"
fi

0 comments on commit 23e42a1

Please sign in to comment.