#!/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_agent() { if [ -z "$SSH_AUTH_SOCK" ]; then eval "$(ssh-agent -s)" >/dev/null ssh-add "$HOME/.ssh/github" >/dev/null 2>&1 ssh-add "$HOME/.ssh/gitea" >/dev/null 2>&1 ssh-add "$HOME/.ssh/admin@homeserver" >/dev/null 2>&1 fi } # aliases so the function is called beforehand alias ssh='__lazy_ssh_agent; ssh' alias sudo='__lazy_ssh_agent; sudo' # colourises make output, so when it prints via # $(warning) or $(error), it is formatted properly __colour_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='__colour_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) # Format the error code to be in the last column of the terminal # this shall be printed as non-printable characters, so won't effect text wrapping. if [ $err -ne 0 ]; then err="\033[$((COLUMNS - 4))G\033[01;31m${err}\033[0G" else unset err; fi PS1="\[$err\]" # error code PS1="$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[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