diff --git a/dot_bashrc b/dot_bashrc index f8d360f..c1faaff 100644 --- a/dot_bashrc +++ b/dot_bashrc @@ -1,224 +1,141 @@ -# -# ~/.bashrc -# +[[ $- != *i* ]] && return -[[ $- != *i* ]] - -colors() { - local fgc bgc vals seq0 - - printf "Color escapes are %s\n" '\e[${value};...;${value}m' - printf "Values 30..37 are \e[33mforeground colors\e[m\n" - printf "Values 40..47 are \e[43mbackground colors\e[m\n" - printf "Value 1 gives a \e[1mbold-faced look\e[m\n\n" - - # foreground colors - for fgc in {30..37}; do - # background colors - for bgc in {40..47}; do - fgc=${fgc#37} # white - bgc=${bgc#40} # black - - vals="${fgc:+$fgc;}${bgc}" - vals=${vals%%;} - - seq0="${vals:+\e[${vals}m}" - printf " %-9s" "${seq0:-(default)}" - printf " ${seq0}TEXT\e[m" - printf " \e[${vals:+${vals+$vals;}}1mBOLD\e[m" - done - echo; echo - done -} - -[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion - -# Change the window title of X terminals -case ${TERM} in - xterm*|rxvt*|Eterm*|aterm|kterm|gnome*|interix|konsole*) - PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"' - ;; - screen*) - PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\033\\"' - ;; -esac - -use_color=true - -# Set colorful PS1 only on colorful terminals. -# dircolors --print-database uses its own built-in database -# instead of using /etc/DIR_COLORS. Try to use the external file -# first to take advantage of user additions. Use internal bash -# globbing instead of external grep binary. -safe_term=${TERM//[^[:alnum:]]/?} # sanitize TERM -match_lhs="" -[[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)" -[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(/dev/null \ - && match_lhs=$(dircolors --print-database) -[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true - -if ${use_color} ; then - # Enable colors for ls, etc. Prefer ~/.dir_colors #64489 - if type -P dircolors >/dev/null ; then - if [[ -f ~/.dir_colors ]] ; then - eval "$(dircolors -b ~/.dir_colors)" - elif [[ -f /etc/DIR_COLORS ]] ; then - eval "$(dircolors -b /etc/DIR_COLORS)" - fi - fi - - # code for handling prompt feedback about error or success - PROMPT_COMMAND='if [ $? = 0 ]; then DOLLAR_COLOR="\033[32m"; else DOLLAR_COLOR="\033[31m"; fi' - - if [[ ${EUID} == 0 ]] ; then - PS1='\[\033[01;35m\]\u@\h\[\033[01;37m\] \W\[\033[01;32m\] \[$(echo -ne $DOLLAR_COLOR)\]$\[\033[00m\] ' - else - PS1='\[\033[01;34m\]\u@\h\[\033[01;37m\] \W\[\033[01;32m\] \[$(echo -ne $DOLLAR_COLOR)\]$\[\033[00m\] ' # normal prompt - fi - - alias ls='ls --color=auto' - alias grep='grep --colour=auto' - alias egrep='egrep --colour=auto' - alias fgrep='fgrep --colour=auto' -else - if [[ ${EUID} == 0 ]] ; then - # show root@ when we don't have colors - PS1='\u@\h \W \$ ' - else - PS1='\u@\h \w \$ ' - fi -fi - -unset use_color safe_term match_lhs sh - -alias cp="cp -i" # confirm before overwriting something -alias df='df -h' # human-readable sizes -alias free='free -m' # show sizes in MB -alias np='nano -w PKGBUILD' -alias more=less - -xhost +local:root > /dev/null 2>&1 - -complete -cf sudo - -# Bash won't get SIGWINCH if another process is in the foreground. -# Enable checkwinsize so that bash will check the terminal size when -# it regains control. #65623 -# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11) -shopt -s checkwinsize - -shopt -s expand_aliases - -# export QT_SELECT=4 - -# Enable history appending instead of overwriting. #139609 shopt -s histappend +shopt -s checkwinsize +export HISTCONTROL=ignoreboth +export HISTSIZE=1000 +export HISTFILESIZE=2000 -# -# # ex - archive extractor -# # usage: ex -ex () -{ - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) tar xjf "$1" ;; - *.tar.gz) tar xzf "$1" ;; - *.bz2) bunzip2 "$1" ;; - *.rar) unrar x "$1" ;; - *.gz) gunzip "$1" ;; - *.tar) tar xf "$1" ;; - *.tbz2) tar xjf "$1" ;; - *.tgz) tar xzf "$1" ;; - *.zip) unzip "$1" ;; - *.Z) uncompress "$1" ;; - *.7z) 7z x "$1" ;; - *) echo "'$1' cannot be extracted via ex()" ;; - esac - else - echo "'$1' is not a valid file" - fi +set -o vi + +export EDITOR=nvim +export GIT_EDITOR=nvim +export PIPENV_VERBOSITY=-1 +export MAKEFLAGS="-j$(($(nproc) + 1))" +export JULIA_NUM_THREADS="$(nproc)" +export YAOURT_COLORS="nb=1:pkg=1:ver=1;32:lver=1;45:installed=1;42:grp=1;34:od=1;41;5:votes=1;44:dsc=0:other=1;35" +export XDG_CONFIG_HOME="$HOME/.config" +export PASSWORD_STORE_DIR="$HOME/.cache/password-store" +export GLAMOUR_STYLE="$XDG_CONFIG_HOME/glamour/tokyo_night.json" + +if [[ "$(uname)" != "Windows_NT" ]]; then + export GPG_TTY=$(tty) +fi + +export LESS_TERMCAP_mb=$'\e[01;31m' +export LESS_TERMCAP_md=$'\e[01;31m' +export LESS_TERMCAP_me=$'\e[0m' +export LESS_TERMCAP_so=$'\e[01;44;36m' +export LESS_TERMCAP_se=$'\e[0m' +export LESS_TERMCAP_us=$'\e[00;36m' +export LESS_TERMCAP_ue=$'\e[0m' + +path_prepend() { + if [ -d "$1" ]; then + export PATH="$1:$PATH" + fi } -# better yaourt colors (or other AUR helper) -export YAOURT_COLORS="nb=1:pkg=1:ver=1;32:lver=1;45:installed=1;42:grp=1;34:od=1;41;5:votes=1;44:dsc=0:other=1;35" +path_prepend "/opt/miniconda3/bin" +path_prepend "/nix/var/nix/profiles/default/bin" +path_prepend "$HOME/.nix-profile/bin" +path_prepend "$HOME/.ghcup/bin" +path_prepend "$HOME/.poetry/bin" +path_prepend "$HOME/.cargo/bin" +path_prepend "$HOME/.local/bin" +unset -f path_prepend -# custom aliases -alias q="exit" -alias c="clear" -alias h="history" -alias cs="clear;ls" -alias p="cat" -alias pd="pwd" -alias lsa="ls -a" -alias lsl="ls -l" -alias pd="pwd" -alias t="time" -alias k="kill" -alias null="/dev/null" -alias ..="cd .." -alias ...="cd ../.." -alias ....="cd ../../.." -alias .....="cd ../../../.." -alias ......="cd ../../../../.." -# alias for upgrade of all pip packages -alias pip-upgrade="pip freeze --user | cut -d'=' -f1 | xargs -n1 pip install -U" +# --- Aliases --- +# Modern Unix Replacements +alias cat='bat' +alias du='dust' +alias df='duf' +alias grep='rg' +alias cp='xcp' +alias find='fd' +alias top='btm' +alias htop='btm' +alias burn='command rm' +alias rm='rip' -# Aliases for conditionally present packages -# alias for using the "thefuck" command -if (hash thefuck &> /dev/null) -then - eval "$(thefuck --alias)" -fi +# Convenience aliases +alias free='free -m' +alias npkg='nano -w PKGBUILD' +alias q='exit' +alias :q='exit' +alias c='clear' +alias h='history' +alias lsa='ls -a' +alias lsl='ls -l' +alias lsla='ls -la' -if (hash pypy3 &> /dev/null) && (! hash pypy &> /dev/null) -then - alias pypy="pypy3" -fi +# Navigation +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias .....='cd ../../../..' -if (hash paru &> /dev/null) && (! hash yay &> /dev/null) -then - alias yay="paru" -fi +# Python / Poetry +alias pip-upgrade='python -m pip install --upgrade pip' +alias pypy='pypy3' +alias poem='poetry run python' +alias bashpoem='poetry run bash' +alias nupoem='poetry run nu' +alias jupyterpoem='poetry run jupyter' -# to finish, if fastfetch, neofetch or screenfetch is present, call it (preferring fastfetch) -if (hash neofetch &> /dev/null) -then - fastfetch -elif (hash neofetch &> /dev/null) -then - neofetch -elif (hash screenfetch &> /dev/null) -then - screenfetch -fi +# Misc +alias vim='nvim' +alias vi='nvim' +alias nix-bash='nix-shell --command bash' -# bashrc session path variables -export PATH="$HOME/.local/bin:$PATH" -export PATH="$HOME/.cargo/bin:$PATH" -export PATH="$HOME/.poetry/bin:$PATH" - -# Compiler/interpreter variables -export MAKEFLAGS="-j$(nproc)" -export JULIA_NUM_THREADS=12 - -# >>> conda initialize >>> -# !! Contents within this block are managed by 'conda init' !! -__conda_setup="$('$HOME/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)" -if [ $? -eq 0 ]; then - eval "$__conda_setup" -else - if [ -f "$HOME/anaconda3/etc/profile.d/conda.sh" ]; then - . "$HOME/anaconda3/etc/profile.d/conda.sh" - else - export PATH="$HOME/anaconda3/bin:$PATH" +cd() { + builtin cd "$@" || return + if [ -d .git ] && command -v onefetch >/dev/null 2>&1; then + onefetch --nerd-fonts fi -fi -unset __conda_setup -# <<< conda initialize <<< +} -if [ -d "$HOME/.bash_completions/openapi-python-client.sh" ] -then - source "$HOME/.bash_completions/openapi-python-client.sh" +sysfetch() { + if command -v fastfetch >/dev/null 2>&1; then + if { [[ "$TERM" == *"kitty"* ]] || [[ "$TERM" == *"ghostty"* ]]; } \ + && [ -f "$HOME/.config/fastfetch/kitty.jsonc" ]; then + fastfetch --config "$HOME/.config/fastfetch/kitty.jsonc" + else + fastfetch + fi + elif command -v neofetch >/dev/null 2>&1; then + echo "Why are you still using neofetch? It's deprecated!" + neofetch + elif command -v screenfetch >/dev/null 2>&1; then + screenfetch + elif command -v archey >/dev/null 2>&1; then + archey + elif command -v lsb_release >/dev/null 2>&1; then + lsb_release -a + elif command -v uname >/dev/null 2>&1; then + uname + fi +} + +# --- Plugin Initializations --- +# Starship +if command -v starship >/dev/null 2>&1; then + eval "$(starship init bash)" fi + +# Atuin (Shell History) +if command -v atuin >/dev/null 2>&1; then + eval "$(atuin init bash)" +fi + +# Direnv +if command -v direnv >/dev/null 2>&1; then + eval "$(direnv hook bash)" +fi + +# Rbw (Bitwarden) +if command -v rbw >/dev/null 2>&1; then + eval "$(rbw gen-completions bash)" +fi + +sysfetch