#!/bin/bash # Disable the gosh darn XON/XOFF function that serves no purpose but to confuse me when I accidentally press Ctrl+S stty -ixon # Find the path of the git repository relative to this file. export __COMMON_CONFIGS=$(readlink -e "$( dirname "$(realpath -e "${BASH_SOURCE[0]}")" )/..") # Set the SSH auth sock to the central location if [[ -n $SSH_AUTH_SOCK ]] && [[ $SSH_AUTH_SOCK != $HOME/.ssh/ssh_auth_sock ]]; then ln -sf "$SSH_AUTH_SOCK" "$HOME/.ssh/ssh_auth_sock" fi export SSH_AUTH_SOCK="$HOME/.ssh/ssh_auth_sock" # Install EDITOR export EDITOR='nvim' # Set up the vim config path export VIM_CONFIG_DIR=$__COMMON_CONFIGS/vim # Set potentially-destructive commands to use interactive modes alias rm="rm -i" alias cp="cp -i" alias mv="mv -i" # Use a larger number of KDF rounds and the secure ed25519 key type by default. alias ssh-keygen="ssh-keygen -o -a 100 -b 4096 -t ed25519" # Reload this file's (and other customizations') aliases. function reload_bashrc() { . "$HOME"/.bashrc } # Check if the git repository is fully synced. function __common_configs_in_sync() { ( # Failure modes, in order: # exit 9: Problem cd'ing or getting commit hashes - things that should never fail cd "$__COMMON_CONFIGS" || exit 9 localCommit=$(git show-ref --verify --hash refs/heads/master) || exit 9 if [[ $1 == --force-fetch ]] || [[ ! -f .last-fetch ]] || [[ $(date --reference=.last-fetch +%s) -lt $(date --date='5 minutes ago' +%s) ]]; then git fetch --quiet origin && touch .last-fetch fi remoteCommit=$(git show-ref --verify --hash refs/remotes/origin/master) || exit 9 # exit 1: master is not the commit which is checked out. [[ $(git symbolic-ref HEAD) == "refs/heads/master" ]] || exit 1 # exit 2: master and origin/master are different. [[ $localCommit == $remoteCommit ]] || exit 2 # exit 3: There are staged changes. git diff-index --cached --exit-code --quiet HEAD || exit 3 # exit 4: There are unstaged changes. git diff-files --exit-code --quiet HEAD || exit 4 ) } function help_prompt() { echo '\ Help\ page\ '"$@"'\ ?ltline\ %lt?L/%L.:byte\ %bB?s/%s..?\ (END):?pB\ %pB\\%..(press h for help or q to quit)' } function man () { if command man "$@" >&/dev/null; then command man "$@" elif builtin help -m "$@" >&/dev/null; then builtin help -m "$@" | command man -l -r "$(help_prompt "$@")" - else command man "$@" fi } function help () { if builtin help -m "$@" >&/dev/null; then builtin help -m "$@" | command man -l -r "$(help_prompt "$@")" - elif command man "$@" >&/dev/null; then command man "$@" else builtin help -m "$@" fi } source "$__COMMON_CONFIGS"/bash/bash_tmux.sh PROMPT_COMMAND="" export GITAWAREPROMPT="$__COMMON_CONFIGS"/bash/git-aware-prompt source "$GITAWAREPROMPT"/main.sh function __prettylastexit() { local exitcode=$? if [[ -z $exitcode ]]; then echo "[---]$txtrst " elif [[ $exitcode == 0 ]]; then echo "$txtgrn[ OK]$txtrst " else printf "$txtred[%3.3s]$txtrst " "$exitcode" fi } function __prettyconfigstate() { __common_configs_in_sync local exitcode=$? case $exitcode in 0) ;; 2) echo; echo "${txtgrn}${txtrst}"; ;; 3) echo; echo "${txtylw}${txtrst}"; ;; 4) echo; echo "${txtylw}${txtrst}"; ;; *) echo; echo "${txtred}$txtrst" ;; esac } PS1='$(__prettylastexit)\[$bldred\]${debian_chroot:+($debian_chroot)}\[$txtrst\]\[$txtpur\]\u\[$txtrst\]\[$txtylw\]@\[$txtrst\]\[$txtblu\]\h\[$txtrst\]:\[$bldgrn\]\w\[$txtrst\] \[$txtcyn\]$git_branch\[$txtrst\]\[$bldred\]${git_dirty}\[$txtrst\]$(__prettyconfigstate)\n\$ '