myshellconfig/bashrc_add

92 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
#debug
# set SSHS to false, if not set
if [ -z ${SSHS+x} ]; then SSHS=false;fi
# check if we are a interactive shell
# https://guide.bash.academy/expansions/
# https://www.tldp.org/LDP/abs/html/refcards.html#AEN22473
if [[ $- = *i* ]] ; then
#echo "interactive shell" >&2
# define variables
[ -z "${USERNAME+x}" ] && USERNAME="$USER"
[ -z "${USEREMAIL+x}" ] && USEREMAIL="$USER@$(domainname -f)"
[ -z "${FULLNAME+x}" ] && FULLNAME="$(getent passwd $USER | cut -d ":" -f 5 | cut -d ',' -f 1)"
[ -z "${GIT_AUTHOR_NAME+x}" ] && GIT_AUTHOR_NAME=$FULLNAME
[ -z "${GIT_AUTHOR_EMAIL+x}" ] && GIT_AUTHOR_EMAIL=$FULLNAME
[ -z "${GIT_COMMITTER_NAME+x}" ] && GIT_COMMITTER_NAME=$FULLNAME
[ -z "${GIT_COMMITTER_EMAIL+x}" ] && GIT_COMMITTER_EMAIL=$FULLNAME
[ -z "${MYSHELLCONFIG_SUBPATH+x}" ] && MYSHELLCONFIG_SUBPATH=".local/myshellconfig"
[ -z "${MYSHELLCONFIG_BASE+x}" ] && MYSHELLCONFIG_BASE="${HOME}/${MYSHELLCONFIG_SUBPATH}"
MYSHELLCONFIG_BASE_PARENT="$(dirname $MYSHELLCONFIG_BASE)"
[ -z "${MYSHELLCONFIG_LOGDIR+x}" ] && MYSHELLCONFIG_LOGDIR="${MYSHELLCONFIG_BASE}/logs"
[ -z "${MYSHELLCONFIG_LOGFILE+x}" ] && MYSHELLCONFIG_LOGFILE="${MYSHELLCONFIG_LOGDIR}/myshellconfig.log"
[ -z "${MYSHELLCONFIG_GIT_TIMEOUT+x}" ] && MYSHELLCONFIG_GIT_TIMEOUT=5s
[ -z "${MYSHELLCONFIG_GIT_CHECKOUT_TIMEOUT+x}" ] && MYSHELLCONFIG_GIT_CHECKOUT_TIMEOUT=20s
MYSHELLCONFIG_BASH_COMPLETION="${HOME}/${MYSHELLCONFIG_SUBPATH}/bash_completion.d"
[ -z "${MYSHELLCONFIG_GIT_SYNC+x}" ] && MYSHELLCONFIG_GIT_SYNC=true
SGIT="git -C ${MYSHELLCONFIG_BASE}"
export MYSHELLCONFIG_BASE MYSHELLCONFIG_LOGDIR MYSHELLCONFIG_LOGFILE SGIT MYSHELLCONFIG_VIM_PLUGINS
cat << EOF >> "${MYSHELLCONFIG_LOGFILE}"
------- start -------------- $(date) ---------------8<--
EOF
# define functions
ckrepo () {
# check if remote repo is reachable
if $MYSHELLCONFIG_NOSYNC; then
echo "no sync allowed from config" >&2
return 0
else
if $( timeout --foreground "${MYSHELLCONFIG_GIT_TIMEOUT}" $SGIT ls-remote >/dev/null 2>&1) ;then
return 0
else
return 1
fi
fi
}
sync_config () {
if $MYSHELLCONFIG_GIT_SYNC; then
local nok=""
local gco=""
if which git >/dev/null; then
echo -n "Sync config with ${MYSHELLCONFIG_GIT_SERVER}: " 1>&2
# MYSHELLCONFIG_GITCHECKOUTSCRIPT_OPTIONS are options for bin/git-myshellconfig-checkout
if [ -z ${MYSHELLCONFIG_GIT_CHECKOUTSCRIPT_OPTIONS+x} ]; then
gco="-h"
else
gco="$MYSHELLCONFIG_GIT_CHECKOUTSCRIPT_OPTIONS"
fi
${MYSHELLCONFIG_BASE}/bin/git-myshellconfig-checkout ${gco}|| nok="not " 1>>"${MYSHELLCONFIG_LOGFILE}" 2>&1
printf '%s\n' "${nok}synced" 1>&2
[ -z "$nok" ] && mkdir -pv "${MYSHELLCONFIG_LOGDIR}"
else
echo "git not installed, no configuration possible, please install git" >&2
fi
else
echo "Not syncing profile in case of configuration"
fi
}
# source git-sync part of myshellconfig
. "${MYSHELLCONFIG_BASE}/myshell_git_sync"
# source loading defaults part of myshellconfig
. "${MYSHELLCONFIG_BASE}/myshell_load_defaults"
cat << EOF >> "${MYSHELLCONFIG_LOGFILE}"
--8<--- end ---------------- $(date) ---------------8<--
EOF
fi