Files
.dotfiles/.bashrc

77 lines
2.1 KiB
Bash

#!/bin/bash
# shellcheck disable=SC1091,SC2155
#
# ~/.bashrc
# sourced upon launch of an interactive shell, which isn't a login shell has been executed
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
[[ -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