sourcing flow improved, faster startups yeaaa
This commit is contained in:
parent
f77a77b034
commit
d33265970a
26
.bashrc
26
.bashrc
|
@ -2,6 +2,7 @@
|
||||||
# ex: set ts=4 sw=4 ft=sh
|
# ex: set ts=4 sw=4 ft=sh
|
||||||
|
|
||||||
# TODO: Test on solaris (and other unices). Many tools will fail since we're not considering /usr/xpg4/bin
|
# TODO: Test on solaris (and other unices). Many tools will fail since we're not considering /usr/xpg4/bin
|
||||||
|
# TODO: Make more general purpose, currently quite bashy
|
||||||
|
|
||||||
# Exit when noninteractive. This is more portable than checking PS1.
|
# Exit when noninteractive. This is more portable than checking PS1.
|
||||||
[ "${-#*i}" = "${-}" ] && return
|
[ "${-#*i}" = "${-}" ] && return
|
||||||
|
@ -12,29 +13,9 @@ _have_all () { while [ "${#}" -gt "0" ] ; do [ -x "$(_path_lookup "${1-}")" ] ||
|
||||||
_have () { _have_all "${1-}" ; }
|
_have () { _have_all "${1-}" ; }
|
||||||
_source_if () { [ -f "${1-}" ] && [ -r "${1-}" ] && . "${1-}" ; }
|
_source_if () { [ -f "${1-}" ] && [ -r "${1-}" ] && . "${1-}" ; }
|
||||||
|
|
||||||
# TODO: Create ~/.local/bin directory and add ~/.local/bin to PATH
|
|
||||||
# Add some basic scripts, like log.log, etc.
|
|
||||||
############################ logging utils (posix) #############################
|
|
||||||
log.log () {
|
|
||||||
case "${1-}" in
|
|
||||||
red) __ansi='41;30' ;;
|
|
||||||
orange) __ansi='43;30' ;;
|
|
||||||
blue) __ansi='44;30' ;;
|
|
||||||
green) __ansi='42;30' ;;
|
|
||||||
*) __ansi='45;30' ;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
1>&2 printf "\033[${__ansi}m%s\033[m\n" "${*}"
|
|
||||||
unset __ansi
|
|
||||||
}
|
|
||||||
log.err () { log.log red "${@}" ; }
|
|
||||||
log.warn () { log.log orange "${@}" ; }
|
|
||||||
log.info () { log.log blue "${@}" ; }
|
|
||||||
log.good () { log.log green "${@}" ; }
|
|
||||||
|
|
||||||
###################### exit when already sourced (posix) #######################
|
###################### exit when already sourced (posix) #######################
|
||||||
[ -n "${BASHRC_SOURCED}" ] && { log.err ".bashrc already sourced. Reset shell with 'exec bash [-l]' or start a new terminal." ; return 1 ; }
|
[ -n "${BASHRC_SOURCED}" ] && { log.err ".bashrc already sourced. Reset shell with 'exec bash [-l]' or start a new terminal." ; return 1 ; }
|
||||||
BASHRC_SOURCED='1'
|
BASHRC_SOURCED='1' # don't use export here, otherwise you can't start shells within shells
|
||||||
|
|
||||||
################################## bash reset ##################################
|
################################## bash reset ##################################
|
||||||
# Set IFS to the default value, <space><tab><newline>
|
# Set IFS to the default value, <space><tab><newline>
|
||||||
|
@ -55,7 +36,10 @@ unalias -a
|
||||||
unset -v POSIXLY_CORRECT
|
unset -v POSIXLY_CORRECT
|
||||||
|
|
||||||
####################### per session environment (posix) ########################
|
####################### per session environment (posix) ########################
|
||||||
|
set | grep -sq '^\(TMUX_PANE\|SSH_CONNECTION\)' && exec 2>/dev/null
|
||||||
[ -n "${DISPLAY-}" ] || log.warn 'DISPLAY not set'
|
[ -n "${DISPLAY-}" ] || log.warn 'DISPLAY not set'
|
||||||
|
set | grep -sq '^\(TMUX_PANE\|SSH_CONNECTION\)' && exec 2>/dev/tty
|
||||||
|
|
||||||
BAT_THEME='gruvbox-dark' # BAT_THEME='gruvbox-light'
|
BAT_THEME='gruvbox-dark' # BAT_THEME='gruvbox-light'
|
||||||
GPG_TTY="$(tty)"
|
GPG_TTY="$(tty)"
|
||||||
|
|
||||||
|
|
63
.profile
63
.profile
|
@ -3,7 +3,31 @@
|
||||||
|
|
||||||
# TODO: Make more general purpose, currently quite bashy
|
# TODO: Make more general purpose, currently quite bashy
|
||||||
|
|
||||||
############################## global environment ##############################
|
# TODO: Create ~/.local/bin directory and add ~/.local/bin to PATH
|
||||||
|
# Add some basic scripts, like log.log, etc.
|
||||||
|
############################ logging utils (posix) #############################
|
||||||
|
log.log () {
|
||||||
|
case "${1-}" in
|
||||||
|
red) __ansi='41;30' ;;
|
||||||
|
orange) __ansi='43;30' ;;
|
||||||
|
blue) __ansi='44;30' ;;
|
||||||
|
green) __ansi='42;30' ;;
|
||||||
|
*) __ansi='45;30' ;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
1>&2 printf "\033[${__ansi}m%s\033[m\n" "${*}"
|
||||||
|
unset __ansi
|
||||||
|
}
|
||||||
|
log.err () { log.log red "${@}" ; }
|
||||||
|
log.warn () { log.log orange "${@}" ; }
|
||||||
|
log.info () { log.log blue "${@}" ; }
|
||||||
|
log.good () { log.log green "${@}" ; }
|
||||||
|
|
||||||
|
if [ -n "${PROFILE_SOURCED}" ] ; then
|
||||||
|
###################### exit when already sourced (posix) #######################
|
||||||
|
log.err ".profile already sourced. unset PROFILE_SOURCED to force reloading, or don't start a login session (e.g. leave the -l flag from bash)."
|
||||||
|
else
|
||||||
|
########################## global environment (posix) ##########################
|
||||||
if ! [ -n "${USER-}" ] ; then
|
if ! [ -n "${USER-}" ] ; then
|
||||||
if ! USER="$(2>/dev/null ps -o user= -p "${$}" | awk '{print $1}')" ; then
|
if ! USER="$(2>/dev/null ps -o user= -p "${$}" | awk '{print $1}')" ; then
|
||||||
if ! USER="$(2>/dev/null whoami)" ; then
|
if ! USER="$(2>/dev/null whoami)" ; then
|
||||||
|
@ -50,25 +74,26 @@ export MANPAGER
|
||||||
export PATH
|
export PATH
|
||||||
export LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
####################### path append & prepend functions ########################
|
||||||
pathvarprepend () {
|
pathvarprepend () {
|
||||||
# prepending paths to pathvar denoted by the expansion of the PATHVAR parameter
|
# prepending paths to pathvar denoted by the expansion of the PATHVAR parameter
|
||||||
# if it's already in the PATH, move it to the end
|
# if it's already in the PATH, move it to the end
|
||||||
# POSIX compliant version
|
# POSIX compliant version
|
||||||
|
|
||||||
test -n "${2}" ||
|
test -n "${2}" ||
|
||||||
{ echo "Usage: pathvarprepend PATHVAR PATH_TO_ADD [PATH_TO_ADD...]";
|
{ log.info "Usage: pathvarprepend PATHVAR PATH_TO_ADD [PATH_TO_ADD...]";
|
||||||
echo "Example: pathvarprepend LD_LIBRARY_PATH '${HOME}/.local/lib' '/usr/local/lib'";
|
log.info "Example: pathvarprepend LD_LIBRARY_PATH '${HOME}/.local/lib' '/usr/local/lib'";
|
||||||
return 2; }
|
return 2; }
|
||||||
|
|
||||||
pathvar="${1}"
|
pathvar="${1}"
|
||||||
shift
|
shift
|
||||||
|
|
||||||
case $pathvar in (*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*|""|[0123456789]*) false;; esac ||
|
case $pathvar in (*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*|""|[0123456789]*) false;; esac ||
|
||||||
{ echo 'Expanded pathvar is not a valid name/variable identifier'; return 3; }
|
{ log.err 'Expanded pathvar is not a valid name/variable identifier'; return 3; }
|
||||||
|
|
||||||
if [ "$pathvar" = "PATH" ]; then
|
if [ "$pathvar" = "PATH" ]; then
|
||||||
test "${-#*r}" = "${-}" ||
|
test "${-#*r}" = "${-}" ||
|
||||||
{ echo 'Restricted shell, cannot change PATH'; return 4; }
|
{ log.err 'Restricted shell, cannot change PATH'; return 4; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
path_prepend_error=0
|
path_prepend_error=0
|
||||||
|
@ -86,10 +111,10 @@ pathvarprepend () {
|
||||||
norm_path_to_add="${1}"
|
norm_path_to_add="${1}"
|
||||||
|
|
||||||
test "${norm_path_to_add#*:}" = "${norm_path_to_add}" ||
|
test "${norm_path_to_add#*:}" = "${norm_path_to_add}" ||
|
||||||
{ echo 'Cannot add path with colon'; path_prepend_error="1"; continue; }
|
{ log.warn 'Cannot add path with colon'; path_prepend_error="1"; continue; }
|
||||||
|
|
||||||
test -d "${norm_path_to_add}" ||
|
test -d "${norm_path_to_add}" ||
|
||||||
{ echo "path_to_add ('${norm_path_to_add}') not a directory"; path_prepend_error="1"; continue; }
|
{ log.warn "path_to_add ('${norm_path_to_add}') not a directory"; path_prepend_error="1"; continue; }
|
||||||
|
|
||||||
norm_path=$(printf %s ":$(eval "printf %s "'"'"\$$pathvar"'"'):" | head -n 1 | sed 's|/\+|/|g; s/\/$//; s/:/::/g') # fence with colons, ensure one line, deduplicate slashes, trim trailing, duplicate colons
|
norm_path=$(printf %s ":$(eval "printf %s "'"'"\$$pathvar"'"'):" | head -n 1 | sed 's|/\+|/|g; s/\/$//; s/:/::/g') # fence with colons, ensure one line, deduplicate slashes, trim trailing, duplicate colons
|
||||||
norm_path_to_add=$(printf %s "$norm_path_to_add" | head -n 1 | sed 's|/\+|/|g; s/\/$//') # ensure one line, deduplicate slashes, trim trailing
|
norm_path_to_add=$(printf %s "$norm_path_to_add" | head -n 1 | sed 's|/\+|/|g; s/\/$//') # ensure one line, deduplicate slashes, trim trailing
|
||||||
|
@ -117,18 +142,18 @@ pathvarappend () {
|
||||||
# POSIX compliant version
|
# POSIX compliant version
|
||||||
|
|
||||||
test -n "${2}" ||
|
test -n "${2}" ||
|
||||||
{ echo "Usage: pathappend PATHVAR PATH_TO_ADD [PATH_TO_ADD...]";
|
{ log.info "Usage: pathappend PATHVAR PATH_TO_ADD [PATH_TO_ADD...]";
|
||||||
echo "Example: pathappend LD_LIBRARY_PATH '${HOME}/.local/lib' '/usr/local/lib'";
|
log.info "Example: pathappend LD_LIBRARY_PATH '${HOME}/.local/lib' '/usr/local/lib'";
|
||||||
return 2; }
|
return 2; }
|
||||||
|
|
||||||
pathvar="${1}"
|
pathvar="${1}"
|
||||||
|
|
||||||
case "${pathvar}" in (*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*|""|[0123456789]*) false;; esac ||
|
case "${pathvar}" in (*[!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]*|""|[0123456789]*) false;; esac ||
|
||||||
{ echo 'Expanded pathvar is not a valid name/variable identifier'; return 3; }
|
{ log.err 'Expanded pathvar is not a valid name/variable identifier'; return 3; }
|
||||||
|
|
||||||
if [ "${pathvar}" = "PATH" ]; then
|
if [ "${pathvar}" = "PATH" ]; then
|
||||||
test "${-#*r}" = "${-}" ||
|
test "${-#*r}" = "${-}" ||
|
||||||
{ echo 'Restricted shell, cannot change PATH'; return 4; }
|
{ log.err 'Restricted shell, cannot change PATH'; return 4; }
|
||||||
fi
|
fi
|
||||||
|
|
||||||
path_append_error="0"
|
path_append_error="0"
|
||||||
|
@ -137,10 +162,10 @@ pathvarappend () {
|
||||||
norm_path_to_add="${1}"
|
norm_path_to_add="${1}"
|
||||||
|
|
||||||
test "${norm_path_to_add#*:}" = "${norm_path_to_add}" ||
|
test "${norm_path_to_add#*:}" = "${norm_path_to_add}" ||
|
||||||
{ echo 'Cannot add path with colon'; path_append_error="1"; continue; }
|
{ log.warn 'Cannot add path with colon'; path_append_error="1"; continue; }
|
||||||
|
|
||||||
test -d "${norm_path_to_add}" ||
|
test -d "${norm_path_to_add}" ||
|
||||||
{ echo "path_to_add ('${norm_path_to_add}') not a directory"; path_append_error="1"; continue; }
|
{ log.warn "path_to_add ('${norm_path_to_add}') not a directory"; path_append_error="1"; continue; }
|
||||||
|
|
||||||
norm_path="$(printf %s ":$(eval "printf %s "'"'"\$${pathvar}"'"'):" | head -n 1 | sed 's|/\+|/|g; s/\/$//; s/:/::/g')" # fence with colons, ensure one line, deduplicate slashes, trim trailing, duplicate colons
|
norm_path="$(printf %s ":$(eval "printf %s "'"'"\$${pathvar}"'"'):" | head -n 1 | sed 's|/\+|/|g; s/\/$//; s/:/::/g')" # fence with colons, ensure one line, deduplicate slashes, trim trailing, duplicate colons
|
||||||
norm_path_to_add="$(printf %s "${norm_path_to_add}" | head -n 1 | sed 's|/\+|/|g; s/\/$//')" # ensure one line, deduplicate slashes, trim trailing
|
norm_path_to_add="$(printf %s "${norm_path_to_add}" | head -n 1 | sed 's|/\+|/|g; s/\/$//')" # ensure one line, deduplicate slashes, trim trailing
|
||||||
|
@ -189,6 +214,7 @@ cdpath_prepend () {
|
||||||
# ld_lib_path_append \
|
# ld_lib_path_append \
|
||||||
# "${HOME}/.local/lib"
|
# "${HOME}/.local/lib"
|
||||||
|
|
||||||
|
set | grep -sq '^\(TMUX_PANE\|SSH_CONNECTION\)' && exec 2>/dev/null
|
||||||
path_prepend \
|
path_prepend \
|
||||||
"/bin" \
|
"/bin" \
|
||||||
"/sbin" \
|
"/sbin" \
|
||||||
|
@ -207,6 +233,8 @@ path_append \
|
||||||
"${HOME}/.local/sbin" \
|
"${HOME}/.local/sbin" \
|
||||||
"${HOME}/.brew/bin" \
|
"${HOME}/.brew/bin" \
|
||||||
"${GOPATH}/bin"
|
"${GOPATH}/bin"
|
||||||
|
set | grep -sq '^\(TMUX_PANE\|SSH_CONNECTION\)' && exec 2>/dev/tty
|
||||||
|
|
||||||
|
|
||||||
# add cargo bin to path
|
# add cargo bin to path
|
||||||
if [ -f "${HOME}/.cargo/env" ] && [ -r "${HOME}/.cargo/env" ]; then
|
if [ -f "${HOME}/.cargo/env" ] && [ -r "${HOME}/.cargo/env" ]; then
|
||||||
|
@ -217,7 +245,12 @@ export NVM_DIR="${HOME}/.nvm"
|
||||||
[ -s "${NVM_DIR}/nvm.sh" ] && . "${NVM_DIR}/nvm.sh"
|
[ -s "${NVM_DIR}/nvm.sh" ] && . "${NVM_DIR}/nvm.sh"
|
||||||
[ -s "${NVM_DIR}/bash_completion" ] && . "${NVM_DIR}/bash_completion"
|
[ -s "${NVM_DIR}/bash_completion" ] && . "${NVM_DIR}/bash_completion"
|
||||||
|
|
||||||
1>/dev/null pidof -q startx && 1>/home/tosuman/.startx.log 2>&1 startx
|
if ! set | grep -sq '^\(TMUX_PANE\|SSH_CONNECTION\)' ; then
|
||||||
|
pidof -q startx && 1>/home/tosuman/.startx.log 2>&1 startx || log.warn "Not starting X again"
|
||||||
|
fi
|
||||||
|
log.info ".profile sourced"
|
||||||
|
export PROFILE_SOURCED='1'
|
||||||
|
fi
|
||||||
|
|
||||||
# if running bash
|
# if running bash
|
||||||
[ -n "${BASH_VERSINFO}" ] && if [ -f "${HOME}/.bashrc" ] && [ -r "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"
|
[ -n "${BASH_VERSINFO}" ] && [ -f "${HOME}/.bashrc" ] && [ -r "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"
|
||||||
|
|
Loading…
Reference in New Issue