#!/bin/bash # shellcheck disable=SC1091,SC2155 # # ~/.bashrc # sourced upon launch of an interactive shell, which isn't a login shell has been executed # case $- in *i*) return ;; esac [ -z "${PS1-}" ] && return # lazy loading of ssh agents _lazy_ssh() { if [ -z "$SSH_AUTH_SOCK" ]; then eval "$(ssh-agent -s)" >/dev/null ssh-add "$HOME/.ssh/github" >/dev/null ssh-add "$HOME/.ssh/gitea" >/dev/null ssh-add "$HOME/.ssh/admin@homeserver" >/dev/null fi } # aliases so the function is called beforehand alias ssh='_lazy_ssh; ssh' alias sudo='_lazy_ssh; sudo' # alias to colourise make output _make() { make "$@" 2> >(sed -E \ -e "s/^([Mm]akefile:[0-9]+:.*)/\x1b[33m\1\x1b[0m/" \ -e "s/^.*error.*$/\x1b[31m&\x1b[0m/I" >&2) } alias make='_make' # lazily loads the git utilities, to prevent slowdowns __lazy_git_ps1() { if [ -z "$__GIT_PROMPT_SOURCED__" ]; then if [ -d .git ] || git worktree list &>/dev/null; then . /usr/share/bash-completion/completions/git &>/dev/null . /usr/share/git/completion/git-prompt.sh &>/dev/null export __GIT_PROMPT_SOURCED__=1 __git_ps1 fi else __git_ps1; fi return 0 } # regenerates the PS1 prompt __regenprompt() { local err=$? # acquire the error code of the last executed command local git=$(__lazy_git_ps1) if [ $err -ne 0 ]; then err="\033[s\033[$((COLUMNS - 4))G${err}\033[u" else unset err; fi PS1="\[\033[?25h\]" # show cursor PS1="$PS1\[\033[01;35m\]\u@\h" # user@host PS1="$PS1\[\033[00m\]:" # separator PS1="$PS1\[\033[01;34m\]\w" # working directory PS1="$PS1\[\033[01;93m\]$git" # git branch PS1="$PS1\[\033[01;31m\]\[$err\]" # error code PS1="$PS1\[\033[00m\]\$ " # shell sign } PROMPT_COMMAND=__regenprompt # history settings HISTSIZE=2048 HISTCONTROL=erasedups:ignoredups:ignorespace HISTIGNORE='exit*:clear*:\:*:echo*' shopt -s checkwinsize # check the window size after each command (and if necessary, the values of LINES and COLUMNS) shopt -s globstar # enable globstar (**/*) [ -f "$HOME/.bash_aliases" ] && . .bash_aliases # cute lil hyfetch :3 [ "$TERM" == "xterm-kitty" ] && fastfetch