Ben Grande 9954972df3
fix: POSIX does not support head byte count
Test done on OpenBSD for compatibility with the POSIX specification,
also becoming a new supported system.
2024-04-23 18:34:10 +02:00

119 lines
3.1 KiB
Bash

#!/usr/bin/env bash
## SPDX-FileCopyrightText: 2023 Benjamin Grande M. S. <ben.grande.b@gmail.com>
##
## SPDX-License-Identifier: AGPL-3.0-or-later
## {{{ Requirements
## If not running interactively, return.
case $- in
*i*) ;;
*) return;;
esac
## Source default files.
# shellcheck disable=SC1090,SC1091
source "$HOME/.profile"
# shellcheck disable=SC1090
source "$ENV"
## }}}
## {{{ Options
HISTCONTROL=ignoredups
shopt -s autocd
shopt -s direxpand
shopt -s cdspell
shopt -s dirspell
shopt -s histappend
shopt -s checkwinsize
shopt -s extglob
shopt -s globstar
## }}}
## {{{ Alias
alias reload="exec bash"
## }}}
## {{{ Prompt
if test -z "${debian_chroot:-}" && test -r /etc/debian_chroot; then
debian_chroot="$(cat /etc/debian_chroot)"
fi
_reset_line() {
case "${TERM-}" in
""|dumb|linux*|vt100*|vt220*) return;;
esac
## Credit: Can't find the source, posted on StackExchange or alike.
## Does not work well on Bash 5.0 and older.
test "$(echo "${BASH_VERSION%.*}" | tr -d ".")" -lt 51 && return
local termios cur_y
## Ask the terminal for any pending (line buffered) input.
termios=$(stty -g) && stty -icanon && stty "$termios"
## On pending input, assume it's been echoed and we're not in first column.
## Otherwise ask the terminal for current column and read it from input.
if read -t 0 || {
IFS='[;' read -s -r -d'R' -p$'\033[6n' _ _ cur_y && [[ $cur_y != 1 ]]
}
then
## Print line ending char with reversed video and end with newline.
if test "${color_prompt-}" = "yes"; then
printf '%b' "\033[41m\033[0m\033[7m%\033[m\n\r"
else
printf '%b' "%\n\r"
fi
fi
}
_print_ec(){
test "${_ec_ps1}" = "0" && return
if test "${color_prompt:-}" = "yes"; then
printf %s"(\001\033[31m\002${_ec_ps1}\001\033[0m\002)"
else
printf '%s' "(${_ec_ps1})"
fi
}
_save_ec() { _ec_ps1=$?; }
PROMPT_COMMAND=(_save_ec)
newline=$'\n'
if test "${color_prompt:-}" = "yes"; then
# shellcheck disable=SC2154
PS1="\$(_reset_line)\$(resize-terminal)\[\033[35m\][\[${reset_color}\]${debian_chroot:+($debian_chroot)}\[${usercolor}\]\u@\h \[${dircolor}\]\w\[${reset_color}\]\$(_git_prompt_info)\[\033[35m\]]\[${reset_color}\]${newline-}\$(_print_ec)${ps1_symbol} "
else
PS1="\$(_reset_line)\$(resize-terminal)[${debian_chroot:+($debian_chroot)}\u@\h:\w\$(_git_prompt_info)]${newline-}\$(_print_ec)${ps1_symbol} "
fi
case "${TERM-}" in
screen*|xterm*|rxvt*)
## Set window title
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
;;
esac
case "${TERM-}" in
""|dumb|linux*|vt100*|vt220*)
PS0=""
;;
*)
## Reset cursor to steady block after command input and before execution.
# shellcheck disable=SC2034
PS0="\e[2 q\2"
;;
esac
if ! shopt -oq posix; then
source_readable /usr/share/bash-completion/bash_completion
fi
unset newline ps1_symbol
## }}}
## {{{ Plugins
! has zoxide || eval "$(zoxide init bash)"
! has gitlint || eval "$(_GITLINT_COMPLETE=bash_source gitlint)"
source_readable /usr/share/doc/fzf/examples/key-bindings.bash
source_readable /usr/share/doc/fzf/examples/completion.bash
## }}}
## {{{ End
## Source local bash configuration.
source_readable "$HOME/.bashrc.local"
## }}}