bashrc.d/0-builder

80 lines
2.2 KiB
Bash

#!/bin/bash
export IFS=$'\n'
BASHRC_D="$HOME/.bashrc.d"
COMPILED_SRC="$BASHRC_D/1-compiled"
################################################################################
# Setup the default build functions
export __BUILDER__WORKING_DIR="$BASHRC_D"
function __builder_prebuild { :; }
function __builder_postbuild { :; }
__builder_prebuild_exec() {
pushd $__BUILDER__WORKING_DIR >/dev/null; printf '\e[34m';
( __builder_prebuild; )
printf '\e[0m'; popd >/dev/null
}
__builder_postbuild_exec() {
pushd $__BUILDER__WORKING_DIR >/dev/null; printf '\e[34m'
( __builder_postbuild; )
printf '\e[0m'; popd >/dev/null
}
################################################################################
echo "Rebuilding $COMPILED_SRC"
echo """#!/bin/bash
# COMPILED AUTOMAGICALLY AT """$(date -I)"""
""" > $COMPILED_SRC
__HOSTNAME=$(hostname)
__HOSTNAME=${__HOSTNAME,,} # make it lowercase
HOST_SPECIFIC_META_SRC="$BASHRC_D/hostname/${__HOSTNAME}.meta.sh"
if [[ -e $HOST_SPECIFIC_META_SRC ]]; then
echo "Executing host specific config file $HOST_SPECIFIC_META_SRC"
source "$HOST_SPECIFIC_META_SRC"
else
echo "No host specific file found at $HOST_SPECIFIC_META_SRC"
fi
__builder_prebuild_exec
SELF_SRC=$(readlink -f $0)
for F in $(find $BASHRC_D -maxdepth 1 -iname "*.sh"); do
echo " Building in $F"
echo "##################" >> $COMPILED_SRC
echo "# $(basename $F)" >> $COMPILED_SRC
echo "##################" >> $COMPILED_SRC
cat $F >> $COMPILED_SRC
echo "" >> $COMPILED_SRC
done
HOST_SPECIFIC_SRC="$BASHRC_D/hostname/${__HOSTNAME}.sh"
if [[ -e $HOST_SPECIFIC_SRC ]]; then
echo "Adding host specific file $HOST_SPECIFIC_SRC"
echo "##################" >> $COMPILED_SRC
echo "# $(basename $HOST_SPECIFIC_SRC)" >> $COMPILED_SRC
echo "##################" >> $COMPILED_SRC
cat $HOST_SPECIFIC_SRC >> $COMPILED_SRC
echo "" >> $COMPILED_SRC
else
echo "No host specific file found at $HOST_SPECIFIC_SRC"
fi
echo "##################" >> $COMPILED_SRC
echo "# Reloader Script" >> $COMPILED_SRC
echo """##################
function __rebuild_bashrcd() {
bash \""""$SELF_SRC"""\"
if [[ \$? -eq 0 && \"\${1}\" == '-a' ]]; then
echo "Automatically loading compiled script."
source \""""$(readlink -f "$COMPILED_SRC")"""\"
fi
}
""" >> $COMPILED_SRC
__builder_postbuild_exec