Jakobus Schürz
d2f0657629
and use the same pathes for vim plugin repos on git.schuerz.at as on github.com
316 lines
12 KiB
Bash
Executable file
316 lines
12 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
|
|
if [ -n "$PS1" ] ;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/hostconfig"
|
|
[ -z "${MYSHELLCONFIG_BASE+x}" ] && MYSHELLCONFIG_BASE="${HOME}/${MYSHELLCONFIG_SUBPATH}"
|
|
[ -z "${MYSHELLCONFIG_LOGDIR+x}" ] && MYSHELLCONFIG_LOGDIR="${MYSHELLCONFIG_BASE}/logs"
|
|
[ -z "${MYSHELLCONFIG_LOGFILE+x}" ] && MYSHELLCONFIG_LOGFILE="${MYSHELLCONFIG_LOGDIR}/git.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"
|
|
|
|
SGIT="git -C ${MYSHELLCONFIG_BASE}"
|
|
export MYSHELLCONFIG_BASE MYSHELLCONFIG_LOGDIR MYSHELLCONFIG_LOGFILE SGIT
|
|
|
|
# define functions
|
|
|
|
ckrepo () {
|
|
# check if remote repo is reachable
|
|
if $( timeout --foreground "${MYSHELLCONFIG_GIT_TIMEOUT}" $SGIT ls-remote >/dev/null 2>&1) ;then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
|
|
}
|
|
|
|
sync_config () {
|
|
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
|
|
# this are now:
|
|
# -h for headless repo
|
|
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 #|tee -a ./logs/git.log 1>&2
|
|
printf '%s\n' "${nok}synced" 1>&2
|
|
|
|
# If you want, put a greeting message after sync here
|
|
# cat << EOF >&2
|
|
#
|
|
#---------------------------------------------------
|
|
#if you want to update submodules, change dir an run
|
|
#cd $MYSHELLCONFIG_BASE
|
|
#git submodule update --remote --merge
|
|
#cd ~
|
|
#---------------------------------------------------
|
|
#EOF
|
|
|
|
else
|
|
echo "git not installed, no configuration possible, please install git" >&2
|
|
fi
|
|
}
|
|
|
|
if ! $SSHS; then
|
|
# echo "do not source bashrc_add" >&2
|
|
# else
|
|
# echo "source bashrc_add" >&2
|
|
# Uncomment the following line if you don't like systemctl's auto-paging feature:
|
|
# export SYSTEMD_PAGER=
|
|
|
|
### set userspecific variables #######
|
|
[ -z "$PDSH_RCMD_TYPE" ] && PDSH_RCMD_TYPE=ssh
|
|
[ -z "$XDG_RUNTIME_DIR" ] && export XDG_RUNTIME_DIR=/run/user/$(id -u $USER)
|
|
|
|
######################################
|
|
|
|
MYSHELLCONFIG_GIT_PROTOCOL_GIT="git://"
|
|
MYSHELLCONFIG_GIT_PROTOCOL_HTTP="http://"
|
|
MYSHELLCONFIG_GIT_PROTOCOL_SSH="git@"
|
|
[ -z "${MYSHELLCONFIG_GIT_SERVER+x}" ] && MYSHELLCONFIG_GIT_SERVER="git.schuerz.at"
|
|
[ -z "${MYSHELLCONFIG_GIT_REPO_NAME+x}" ] && MYSHELLCONFIG_GIT_REPO_NAME="$(basename $MYSHELLCONFIG_BASE).git"
|
|
[ -z "${MYSHELLCONFIG_GIT_REPO_PATH_HTTP+x}" ] && MYSHELLCONFIG_GIT_REPO_PATH_HTTP="/public/"
|
|
[ -z "${MYSHELLCONFIG_GIT_REPO_PATH_SSH+x}" ] && MYSHELLCONFIG_GIT_REPO_PATH_SSH=":public/"
|
|
[ -z "${MYSHELLCONFIG_GIT_REPO_PATH_GIT+x}" ] && MYSHELLCONFIG_GIT_REPO_PATH_GIT="/public/"
|
|
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC_GIT="${MYSHELLCONFIG_GIT_PROTOCOL_GIT}${MYSHELLCONFIG_GIT_SERVER}${MYSHELLCONFIG_GIT_REPO_PATH_GIT}"
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC_SSH="${MYSHELLCONFIG_GIT_PROTOCOL_SSH}${MYSHELLCONFIG_GIT_SERVER}${MYSHELLCONFIG_GIT_REPO_PATH_SSH}"
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC_HTTP="${MYSHELLCONFIG_GIT_PROTOCOL_HTTP}${MYSHELLCONFIG_GIT_SERVER}${MYSHELLCONFIG_GIT_REPO_PATH_HTTP}"
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC_DEFAULT="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_GIT}"
|
|
|
|
MYSHELLCONFIG_GIT_REMOTE_DEFAULT="${MYSHELLCONFIG_GIT_PROTOCOL_GIT}${MYSHELLCONFIG_GIT_SERVER}${MYSHELLCONFIG_GIT_REPO_PATH_GIT}"
|
|
|
|
# If MYSHELLCONFIG_GIT_REMOTE is set in ~/.bashrc before sourcing this file, take value from ~/.bashrc
|
|
# If set MYSHELLCONFIG_GIT_REMOTE_PROTOCOL in ~/.bashrc before sourcing this file, you cange choose one of the above
|
|
# defined values for a specific host
|
|
|
|
if [ -z ${MYSHELLCONFIG_GIT_REMOTE+x} ]; then
|
|
case $MYSHELLCONFIG_GIT_REMOTE_PROTOCOL in
|
|
git)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_GIT}"
|
|
;;
|
|
ssh)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_SSH}"
|
|
;;
|
|
http)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_HTTP}"
|
|
;;
|
|
*)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_DEFAULT}"
|
|
;;
|
|
esac
|
|
MYSHELLCONFIG_GIT_REMOTE="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC}${MYSHELLCONFIG_GIT_REPO_NAME}"
|
|
fi
|
|
|
|
if [ -z ${MYSHELLCONFIG_GIT_REMOTE_PUSH+x} ]; then
|
|
case $MYSHELLCONFIG_GIT_REMOTE_PUSH_PROTOCOL in
|
|
git)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUSH_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_GIT}"
|
|
;;
|
|
ssh)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUSH_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_SSH}"
|
|
;;
|
|
http)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUSH_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_HTTP}"
|
|
;;
|
|
*)
|
|
MYSHELLCONFIG_GIT_REMOTE_PUSH_PUBLIC="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_DEFAULT}"
|
|
;;
|
|
esac
|
|
MYSHELLCONFIG_GIT_REMOTE_PUSH=${MYSHELLCONFIG_GIT_REMOTE_PUSH_PUBLIC}${MYSHELLCONFIG_GIT_REPO_NAME}
|
|
fi
|
|
|
|
#GIT_SSH_PATH="/srv/repos"
|
|
|
|
case $TERM in
|
|
*term*)
|
|
|
|
if [ -d "${MYSHELLCONFIG_BASE}" -a $($SGIT status 1>/dev/null 2>&1; echo $?) -eq 0 ]; then
|
|
[ -d "${MYSHELLCONFIG_LOGDIR}" ] || mkdir -p "${MYSHELLCONFIG_LOGDIR}"
|
|
if ! $SGIT rev-parse --git-dir > /dev/null 2>&1 ; then
|
|
echo "Init ${MYSHELLCONFIG_BASE} as git-repo" >&2
|
|
$SGIT init
|
|
fi
|
|
|
|
# Update Userinformations for git
|
|
$SGIT config user.email "${USERNAME}"
|
|
$SGIT config user.name "${FULLNAME}"
|
|
|
|
# set upstream only if not detached
|
|
[ $($SGIT rev-parse --abbrev-ref HEAD) != "HEAD" ] && $SGIT branch --set-upstream-to=origin/$($SGIT rev-parse --abbrev-ref HEAD)
|
|
|
|
# sync repo with origin if git is reachable
|
|
if ckrepo ; then
|
|
sync_config
|
|
. ${MYSHELLCONFIG_BASE}/functions.sh
|
|
create_symlinks "$MYSHELLCONFIG_BASE"
|
|
else
|
|
echo "${MYSHELLCONFIG_GIT_SERVER}" not reachable >&2;
|
|
echo profile not syncing >&2;
|
|
fi
|
|
|
|
else
|
|
echo "Clone ${MYSHELLCONFIG_GIT_REMOTE} and configure git" >&2
|
|
|
|
if $( timeout --foreground "${MYSHELLCONFIG_GIT_CHECKOUT_TIMEOUT}" git -C ${HOME} clone "${MYSHELLCONFIG_GIT_REMOTE}" "${MYSHELLCONFIG_BASE}" ); then
|
|
:
|
|
else
|
|
MYSHELLCONFIG_GIT_REMOTE="${MYSHELLCONFIG_GIT_REMOTE_PUBLIC_HTTP}${MYSHELLCONFIG_GIT_REPO_NAME}"
|
|
echo "Clone ${MYSHELLCONFIG_GIT_REMOTE} and configure git" >&2
|
|
timeout --foreground "${MYSHELLCONFIG_GIT_CHECKOUT_TIMEOUT}" git -C ${HOME} clone "${MYSHELLCONFIG_GIT_REMOTE}" "${MYSHELLCONFIG_BASE}" || exit 1
|
|
fi
|
|
|
|
|
|
|
|
[ -d "${MYSHELLCONFIG_BASE}" ] && { echo create ${MYSHELLCONFIG_LOGDIR} >&2; mkdir -p "${MYSHELLCONFIG_LOGDIR}"; }
|
|
|
|
$SGIT config user.email "${USERNAME}"
|
|
$SGIT config user.name "${FULLNAME}"
|
|
|
|
# Initialize Vundle as preconfigured Submodule
|
|
#$SGIT submodule update --init --recursive
|
|
#$SGIT submodule foreach 'git checkout master'
|
|
|
|
echo "sync config" >&2
|
|
sync_config
|
|
. ${MYSHELLCONFIG_BASE}/functions.sh
|
|
echo "config synced, functions.sh sourced" >&2
|
|
create_symlinks "$MYSHELLCONFIG_BASE"
|
|
|
|
# Install vim Plugins
|
|
#echo "Run Vim, and in Vim run :PluginInstall to install all Plugins"
|
|
vim -c "PluginInstall" -c ":qa!"
|
|
fi
|
|
[ -z ${MYSHELLCONFIG_GIT_REMOTE_PUSH+x} ] || $SGIT remote set-url --push origin "${MYSHELLCONFIG_GIT_REMOTE_PUSH}"
|
|
# cd ${HOME}
|
|
;;
|
|
*screen*)
|
|
echo "I'm in sceen/tmux now" >&2
|
|
;;
|
|
*dumb*)
|
|
echo "Run with dumb terminal" 1>&2
|
|
;;
|
|
esac
|
|
|
|
if [ -e ${MYSHELLCONFIG_BASE}/functions.sh ]; then
|
|
. ${MYSHELLCONFIG_BASE}/functions.sh
|
|
else
|
|
return
|
|
fi
|
|
|
|
|
|
|
|
######################################################################################
|
|
# ls is not in color on all systems
|
|
export LS_OPTIONS='--color=auto'
|
|
eval "`dircolors`"
|
|
|
|
#######################################################################################
|
|
# User specific aliases and function
|
|
|
|
|
|
if [ -d "${HOME}/bin" ] ; then
|
|
pathmunge "${HOME}/bin"
|
|
export PATH
|
|
fi
|
|
|
|
if [ -d "${MYSHELLCONFIG_BASE}/bin" ] ; then
|
|
pathmunge "${MYSHELLCONFIG_BASE}/bin"
|
|
export PATH
|
|
fi
|
|
|
|
if [ -d "${MYSHELLCONFIG_BASE}/git-credential-pass" ] ; then
|
|
pathmunge "${MYSHELLCONFIG_BASE}/git-credential-pass"
|
|
export PATH
|
|
fi
|
|
|
|
if [ -f "${MYSHELLCONFIG_BASE}/aliases" ]; then
|
|
. "${MYSHELLCONFIG_BASE}/aliases"
|
|
fi
|
|
|
|
if [ -f ~/.aliases ]; then
|
|
. ~/.aliases
|
|
fi
|
|
|
|
if [ -f "${MYSHELLCONFIG_BASE}/PS1" ]; then
|
|
. "${MYSHELLCONFIG_BASE}/PS1"
|
|
fi
|
|
|
|
if [ -e "${MYSHELLCONFIG_BASH_COMPLETION}" ]; then
|
|
for i in $( ls "${MYSHELLCONFIG_BASH_COMPLETION}" ); do
|
|
. "${MYSHELLCONFIG_BASH_COMPLETION}/${i}"
|
|
done
|
|
fi
|
|
|
|
|
|
#########################################################################################
|
|
|
|
|
|
# Go HOME
|
|
#cd ${HOME}
|
|
|
|
|
|
echo "bashrc_add sourced" 1>&2
|
|
|
|
if test ! $TMUX && test $SSH_TTY && test $TERM != screen && test $(systemctl status tmux@${USER}.service 1>/dev/null 2>&1; echo $? ) -eq 0; then
|
|
cat << EOF
|
|
|
|
"User: $USER - $UID"
|
|
|
|
Starting or resuming screen session
|
|
Press CTRL+C to cancel screen startup
|
|
|
|
EOF
|
|
sleep 1
|
|
#screen -UxR
|
|
tmux attach-session
|
|
fi
|
|
|
|
unset -f pathmunge
|
|
|
|
else
|
|
|
|
case $TERM in
|
|
*screen*)
|
|
echo BASHRC: $BASHRC -> source it
|
|
#[ -e $BASHRC ] && . "$BASHRC"
|
|
if [ ! -z ${BASHRC+x} ]; then
|
|
if [ -e $BASHRC ] ; then
|
|
exec bash --rcfile "$BASHRC" -i /dev/null
|
|
else
|
|
exec bash -i
|
|
fi
|
|
else
|
|
exec bash -i
|
|
fi
|
|
|
|
;;
|
|
esac
|
|
|
|
fi
|
|
|
|
fi
|
|
|