298 lines
10 KiB
Bash
298 lines
10 KiB
Bash
#!/bin/bash
|
|
# shellcheck disable=SC1091
|
|
# jeremystartm's bashrc
|
|
|
|
# check for $TERM
|
|
if [[ ! "${TERM}" ]]; then
|
|
echo ":: Error: \$TERM is not set. Please ensure your terminal"
|
|
echo " (emulator) sets this environment variable."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
fi
|
|
|
|
# source configuration file
|
|
if [ -f "${HOME}/.jstmbash/config.env" ] && [ "${JSTMBASH_LOCAL_CONFIG}" != "true" ]; then
|
|
source "${HOME}/.jstmbash/config.env"
|
|
elif [ -f "${HOME}/.config/jstmbash.env" ] && [ "${JSTMBASH_LOCAL_CONFIG}" != "true" ]; then
|
|
source "${HOME}/.config/jstmbash.env"
|
|
elif [ -f "/etc/jstmbash/config.env" ] && [ "${JSTMBASH_LOCAL_CONFIG}" != "true" ]; then
|
|
source "/etc/jstmbash/config.env"
|
|
elif [ -f "$(pwd)/config.env" ]; then
|
|
source "$(pwd)/config.env"
|
|
else
|
|
echo ":: Error: Configuration file not found."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
fi
|
|
|
|
# check configuration version
|
|
case "${JSTMBASH_VERSION}" in
|
|
"")
|
|
echo ":: Error: Invalid configuration file."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
;;
|
|
"1") ;;
|
|
*)
|
|
echo ":: Error: Unsupported configuration version \"${JSTMBASH_VERSION}\"."
|
|
echo " Please migrate your configuration file to the latest version."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
esac
|
|
|
|
# create directories
|
|
mkdir -p "/tmp/${UID}/"
|
|
|
|
# export xdg variables (because we can)
|
|
export "XDG_CONFIG_HOME=${HOME}/.config"
|
|
export "XDG_CACHE_HOME=${HOME}/.cache"
|
|
export "XDG_DATA_HOME=${HOME}/.local/share"
|
|
export "XDG_STATE_HOME=${HOME}/.local/state"
|
|
export "XDG_RUNTIME_DIR=/tmp/${UID}/"
|
|
export "XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/flatpak/exports/share:${HOME}/.local/share/flatpak/exports/share"
|
|
export "XDG_CONFIG_DIRS=/etc/xdg"
|
|
|
|
# globals
|
|
## enable or disable flow control
|
|
if [ "${JSTMBASH_GLOBAL_FLOW_CONTROL}" == "true" ]; then
|
|
stty ixon
|
|
else
|
|
stty -ixon
|
|
fi
|
|
## set prompt aka. $PS1 and replace "$(tput sgr0)" with ansi escape sequence
|
|
export "PS1=${JSTMBASH_GLOBAL_PROMPT}"
|
|
export "PROMPT_COMMAND=${JSTMBASH_GLOBAL_PROMPT_COMMAND}"
|
|
## set "incomplete prompt" aka. $PS2
|
|
if [ "${JSTMBASH_GLOBAL_PROMPT_INCOMPLETE}" == "true" ]; then
|
|
export "PS2=\[\033[38;5;196m\][incomplete]: \033[0;10m"
|
|
fi
|
|
export "PS4=\${0}:\${LINENO}+ "
|
|
## set default $EDITOR
|
|
if ! which "${JSTMBASH_GLOBAL_EDITOR}" &> /dev/null; then
|
|
echo ":: Error: Invalid editor \"${JSTMBASH_GLOBAL_EDITOR}\""
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
fi
|
|
|
|
# manipulate $PATH
|
|
if [ "${JSTMBASH_PATH_ENFORCE_CLEAN}" == "true" ]; then
|
|
## $PATH for system-wide binaries
|
|
PATH_SYSTEM="/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/local/games:/usr/lib/flatpak/exports/bin"
|
|
## $PATH for user-wide binaries
|
|
PATH_USER="${HOME}/.local/bin:${HOME}/.local/share/flatpak/exports/bin:${HOME}/.cargo/bin"
|
|
export "PATH=${PATH_SYSTEM}:${PATH_USER}"
|
|
unset PATH_SYSTEM
|
|
unset PATH_USER
|
|
fi
|
|
if [[ "${JSTM_PATH_APPENDS}" ]]; then
|
|
export "PATH=${PATH}:${JSTM_PATH_APPENDS}"
|
|
fi
|
|
|
|
# add goodies
|
|
## extract command, very useful
|
|
if [ "${JSTMBASH_GOODIES_EXTRACT}" == "true" ]; then
|
|
function extract(){
|
|
if [ -n "${1}" ]; then
|
|
echo ":: Error: No file given."
|
|
return 1
|
|
fi
|
|
if [ -f "${1}" ]; then
|
|
case "${1}" in
|
|
*.tar|*.tar.xz) tar xf "${1}" ;;
|
|
*.tar.bz2) tar xjf "${1}" ;;
|
|
*.tar.gz|*.tgz) tar xzf "${1}" ;;
|
|
*.tar.zst) unzstd "${1}" ;;
|
|
*.tbbz2) tar xjf "${1}" ;;
|
|
*.gz) gunzip "${1}" ;;
|
|
*.bz2) bunzip2 "${1}" ;;
|
|
*.rar) unrar x "${1}" ;;
|
|
*.zip|*.jar) unzip "${1}" ;;
|
|
*.7z) 7z x "${1}" ;;
|
|
*.Z) uncompress "${1}" ;;
|
|
*.deb) ar x "${1}" ;;
|
|
*)
|
|
echo ":: Error: Invalid archive"
|
|
return 1
|
|
;;
|
|
esac
|
|
elif [ -d "${1}" ]; then
|
|
## is it a bird? is it a dir?
|
|
echo ":: Error: Is a directory"
|
|
return 1
|
|
elif [ -a "${1}" ]; then
|
|
## if block device or something
|
|
echo ":: Error: jeremystartm's bashrc implementation of the extract command only supports files."
|
|
return 1
|
|
else
|
|
## not found
|
|
echo ":: Error: No such file or directory"
|
|
return 1
|
|
fi
|
|
}
|
|
fi
|
|
|
|
# aliases
|
|
## replace package manager
|
|
if [ "${JSTMBASH_ALIASES_PKGMGR_REPLACE}" == "true" ]; then
|
|
## check if original pkgmgr exists
|
|
if ! which "${JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM}" &> /dev/null; then
|
|
echo ":: Error: Invalid package manager \"${JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM}\"."
|
|
echo " Please specify a valid one in \"JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM\"."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
fi
|
|
## check if new pkgmgr exists
|
|
if ! which "${JSTMBASH_ALIASES_PKGMGR_REPLACE_TO}" &> /dev/null; then
|
|
echo ":: Error: Invalid package manager \"${JSTMBASH_ALIASES_PKGMGR_REPLACE_TO}\"."
|
|
echo " Please specify a valid one in \"JSTMBASH_ALIASES_PKGMGR_REPLACE_TO\"."
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
fi
|
|
## replace pkgmgr
|
|
# shellcheck disable=SC2139
|
|
alias "${JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM}=${JSTMBASH_ALIASES_PKGMGR_REPLACE_TO}"
|
|
## make alias to old pkgmgr, just in case
|
|
# shellcheck disable=SC2139
|
|
alias "${JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM}-real=$(which "${JSTMBASH_ALIASES_PKGMGR_REPLACE_FROM}")"
|
|
fi
|
|
## use eza instead of ls and dir
|
|
if [ "${JSTMBASH_ALIASES_USE_EZA}" == "true" ] && which eza &> /dev/null; then
|
|
alias "ls=eza"
|
|
alias "dir=eza"
|
|
fi
|
|
## use bat instead of cat
|
|
if [ "${JSTMBASH_ALIASES_USE_BAT}" == "true" ] && which bat &> /dev/null; then
|
|
alias "cat=bat"
|
|
fi
|
|
## use moar instead of less and more
|
|
if [ "${JSTMBASH_ALIASES_USE_MOAR}" == "true" ] && which moar &> /dev/null; then
|
|
alias "more=moar"
|
|
alias "less=moar"
|
|
export "PAGER=moar"
|
|
fi
|
|
|
|
# make programs fancier
|
|
## makes eza fancier
|
|
if [ "${JSTMBASH_FANCIER_EZA}" == "true" ] && which eza &> /dev/null; then
|
|
if [ "${JSTMBASH_FANCIER_EZA_LONG}" == "true" ]; then
|
|
export "LONGGRID=--long"
|
|
else
|
|
export "LONGGRID=--grid"
|
|
fi
|
|
if [ "${JSTMBASH_FANCIER_EZA_DIRECTORIES_BEFORE_FILES}" == "true" ]; then
|
|
export "DIRS_BEFORE_FILES= --group-directories-first"
|
|
else
|
|
unset DIRS_BEFORE_FILES
|
|
fi
|
|
if [ "${JSTMBASH_FANCIER_EZA_SIZE1000}" == "true" ]; then
|
|
unset SIZE1000
|
|
else
|
|
export "SIZE1000= --binary"
|
|
fi
|
|
if [ "${JSTMBASH_FANCIER_EZA_DISPLAY_MOUNTS}" == "true" ]; then
|
|
unset DISPLAYMOUNTS
|
|
else
|
|
export "DISPLAYMOUNTS= --mounts"
|
|
fi
|
|
if [ "${JSTMBASH_FANCIER_EZA_OCTAL_PERMISSIONS}" == "true" ]; then
|
|
export "OCTALPERMS= --octal-permissions --no-permissions"
|
|
else
|
|
unset OCTALPERMS
|
|
fi
|
|
if [ "${JSTMBASH_FANCIER_EZA_GITINFO}" == "true" ]; then
|
|
export "GITINFO= --git"
|
|
else
|
|
export "GITINFO= --no-git"
|
|
fi
|
|
## arguments to avoid redundancy
|
|
EZA_ARGUMENTS="${LONGGRID} --color=always --color-scale=size --color-scale-mode=fixed --no-quotes --smart-group --almost-all --sort name${DIRS_BEFORE_FILES}${SIZE1000}${DISPLAY_MOUNTS}${OCTALPERMS}"
|
|
# shellcheck disable=SC2139
|
|
alias "eza=$(which eza) ${EZA_ARGUMENTS}"
|
|
if [ "${JSTMBASH_ALIASES_USE_EZA}" == "true" ]; then
|
|
# shellcheck disable=SC2139
|
|
alias "ls=$(which eza) ${EZA_ARGUMENTS}"
|
|
# shellcheck disable=SC2139
|
|
alias "dir=$(which eza) ${EZA_ARGUMENTS}"
|
|
fi
|
|
unset LONGGRID
|
|
unset DIRS_BEFORE_FILES
|
|
unset SIZE1000
|
|
unset DISPLAYMOUNTS
|
|
unset GITINFO
|
|
unset EZA_ARGUMENTS
|
|
fi
|
|
## makes bat fancier
|
|
if [ "${JSTMBASH_FANCIER_BAT}" == "true" ] && which bat &> /dev/null; then
|
|
## check if moar should be bat's pager
|
|
if [ "${JSTMBASH_FANCIER_BAT_USE_MOAR}" == "true" ] && which moar &> /dev/null; then
|
|
export "env PAGER=moar -colors 16M --no-linenumbers --statusbar bold "
|
|
fi
|
|
BAT_ARGUMENTS="--decorations=always --color=always --theme=Dracula --italic-text=always --wrap=never --nonprintable-notation=caret --paging=auto --style full"
|
|
# shellcheck disable=SC2139
|
|
alias "bat=${PAGER}$(which bat) ${BAT_ARGUMENTS}"
|
|
if [ "${JSTMBASH_ALIASES_USE_BAT}" == "true" ]; then
|
|
# shellcheck disable=SC2139
|
|
alias "cat=$(which bat) ${BAT_ARGUMENTS}"
|
|
fi
|
|
unset PAGER
|
|
unset BAT_ARGUMENTS
|
|
fi
|
|
## makes moar fancier
|
|
if [ "${JSTMBASH_FANCIER_MOAR}" == "true" ] && which moar &> /dev/null; then
|
|
## arguments to avoid redundancy
|
|
MOAR_ARGUMENTS="-colors 16M -statusbar bold --style ${JSTMBASH_FANCIER_MOAR_STYLE}"
|
|
# shellcheck disable=SC2139
|
|
alias "moar=$(which moar) ${MOAR_ARGUMENTS}"
|
|
if [ "${JSTMBASH_ALIASES_USE_MOAR}" == "true" ]; then
|
|
# shellcheck disable=SC2139
|
|
alias "more=moar ${MOAR_ARGUMENTS}"
|
|
# shellcheck disable=SC2139
|
|
alias "less=moar ${MOAR_ARGUMENTS}"
|
|
export "PAGER=moar ${MOAR_ARGUMENTS}"
|
|
fi
|
|
unset MOAR_ARGUMENTS
|
|
fi
|
|
## makes ytfzf fancier
|
|
if [ "${JSTMBASH_FANCIER_YTFZF}" == "true" ] && which ytfzf &> /dev/null; then
|
|
## check for valid thumbnail viewer
|
|
case "${JSTMBASH_FANCIER_YTFZF_THUMBVIEWER}" in
|
|
"chafa") ;;
|
|
"catimg") ;;
|
|
"imv") ;;
|
|
"mpv") ;;
|
|
"swayimg") ;;
|
|
"swayimg-hyprland") ;;
|
|
*)
|
|
echo ":: Error: Invalid ytfzf thumbnail viewer \"${JSTMBASH_FANCIER_YTFZF_THUMBVIEWER}\""
|
|
env --ignore-environment bash --norc --noprofile
|
|
exit ${?}
|
|
;;
|
|
esac
|
|
## *bonk*
|
|
if [ "${JSTMBASH_FANCIER_YTFZF_NSFW}" == "true" ]; then
|
|
export "NSFW=--nsfw"
|
|
else
|
|
unset NSFW
|
|
fi
|
|
## subtitles
|
|
if [ "${JSTMBASH_FANCIER_YTFZF_SUBTITLES}" == "true" ]; then
|
|
export "SUBTITLES=--features=subtitles"
|
|
else
|
|
unset SUBTITLES
|
|
fi
|
|
# shellcheck disable=SC2139
|
|
alias "ytfzf=ytfzf --formats --format-selection=normal --search-again --show-thumbnails --async-thumbnails --thumb-viewer=${JSTMBASH_FANCIER_YTFZF_THUMBVIEWER} --scrape=youtube,invidious-channel,url --force-invidious --pages=5 --max-threads=${JSTMBASH_GLOBAL_THREADS} ${NSFW} --sort-by=relevance --video-duration=short --thumbnail-quality=maxres ${SUBTITLES} --rii --search-source=prompt"
|
|
unset NSFW
|
|
unset SUBTITLES
|
|
fi
|
|
|
|
# display warnings
|
|
if [ "${JSTMBASH_WARNINGS_NO_TRUECOLOR}" == "true" ] && [ "${COLORTERM}" != "truecolor" ]; then
|
|
echo ":: Warning: Your terminal (emulator) does not provide truecolor support."
|
|
echo " Things may break! If you think this is an false-positive set"
|
|
echo " \"JSTMBASH_WARNINGS_NO_TRUECOLOR\" to false to avoid seeing this message."
|
|
fi
|
|
if [ "${JSTMBASH_WARNINGS_EXA_UNMAINTAINED}" == "true" ] && which exa &> /dev/null; then
|
|
echo ":: Warning: exa is unmaintained software and should be avoided."
|
|
echo " Use eza (https://eza.rocks) as a replacement."
|
|
fi
|