# # ~/.bashrc # # If not running interactively, don't do anything [[ $- != *i* ]] && return [[ "$(whoami)" = "root" ]] && return [[ -z "$FUNCNEST" ]] && export FUNCNEST=100 # limits recursive functions, see 'man bash' # disable history HISTFILE=/dev/null ## Use the up and down arrow keys for finding a command in history ## (you can write some initial letters of the command first). bind '"\e[A":history-search-backward' bind '"\e[B":history-search-forward' # check the window size after each command and, if necessary, # update the values of LINES and COLUMNS. shopt -s checkwinsize # add home bin if [ -d "$HOME/.local/bin" ]; then export PATH="$HOME/.local/bin:$PATH" fi # --------------------------------------------------------------------------- # EDITOR # --------------------------------------------------------------------------- if hash nvim 2>/dev/null; then export EDITOR=nvim elif hash vim 2>/dev/null; then export EDITOR=vim elif hash vi 2>/dev/null; then export EDITOR=vi else export EDITOR=nano fi export SVN_EDITOR=$EDITOR export GIT_EDITOR=$EDITOR export VISUAL=$EDITOR alias vi=$EDITOR # --------------------------------------------------------------------------- # ALIASES # --------------------------------------------------------------------------- if hash exa 2>/dev/null; then alias ll="exa --long --group-directories-first --classify --git" alias la="ll --all" else alias ll="ls -lv --group-directories-first --ignore=.." # show long listing but no hidden dotfiles except "." alias la='ls -lav' fi alias rm='rm --interactive --verbose' alias mv='mv --interactive --verbose' alias cp='cp --verbose --interactive' if hash wget 2>/dev/null; then alias wget='wget -c' fi alias dmesg='dmesg -T' alias grep='grep --color' if hash tmux 2>/dev/null; then alias ta='tmux attach' alias tkill="for s in \$(tmux list-sessions | awk -F ':' '{print \$1}' | fzf); do tmux kill-session -t \$s; done;" fi if hash tig 2>/dev/null; then alias tiga='tig --all' fi if hash fd 2>/dev/null; then alias fdfind='fd' fi if hash nix-env 2>/dev/null; then alias nix-update='nix-channel --update && nix-env -u' nix-search() { nix-env -qa --description ".*$1.*" } fi alias cdd='cd {{ .deploydir }}' export cdd={{ .deploydir }} # --------------------------------------------------------------------------- # TMUX # --------------------------------------------------------------------------- # Function to set tmux window title function set_tmux_title { if [ -n "$TMUX" ]; then tmux rename-window "$1" fi } # SSH wrapper to change the tmux title locally function ssh() { if [ -n "$TMUX" ]; then # Save the original tmux window title original_title=$(tmux display-message -p '#W') fi # Change tmux title before connecting set_tmux_title "SSH $1" # Run the actual ssh command with all arguments command ssh "$@" # Restore the original tmux window title after disconnecting if [ -n "$TMUX" ]; then set_tmux_title "$original_title" tmux set-window-option automatic-rename on fi } export FAVORITE_COMMAND1="{{ .tmux_favorite1 }}" export FAVORITE_COMMAND2="{{ .tmux_favorite2 }}" export FAVORITE_COMMAND3="{{ .tmux_favorite3 }}" export FAVORITE_COMMAND4="{{ .tmux_favorite4 }}" # --------------------------------------------------------------------------- # COMPLETIONS # --------------------------------------------------------------------------- complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' ?akefile | sed 's/[^a-zA-Z0-9_.-]*$//'\`" make # ------------------------------------------------------------- # Source .bashrc.d files # ------------------------------------------------------------- if [ -d "$HOME/.bashrc.d/" ]; then for file in ~/.bashrc.d/*.bashrc; do . "$file" done fi if [ -f "$HOME/.bashrc.local" ]; then source $HOME/.bashrc.local fi # --------------------------------------------------------------------------- # History # --------------------------------------------------------------------------- # don't put duplicate lines or lines starting with space in the history. # See bash(1) for more options HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend # store multiline commands shopt -s cmdhist # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=2000 HISTFILESIZE=2000 # don't story history commands HISTIGNORE=history* HISTFILE=~/.bash_history # Hishtory (https://github.com/ddworken/hishtory) if [ -d "$HOME/.hishtory/" ]; then export PATH="$PATH:$HOME/.hishtory" source $HOME/.hishtory/config.sh hishtory config-set displayed-columns CWD Command fi # enable history set -o history # --------------------------------------------------------------------------- # PROMPT # --------------------------------------------------------------------------- # starship must be evaluated at the end to catch properly error codes if hash starship 2>/dev/null; then eval "$(starship init bash)" else # set a minimalist prompt red='\[\e[0;31m\]' # Red green='\[\e[0;32m\]' # Green blue='\[\e[0;34m\]' # Bold Blue boldred='\[\e[1;31m\]' # Bold Red reset='\[\e[0m\]' # Text Reset if [ "$USER" = "root" ] ; then # $bold$red PROMPT_USER_COLOR=$boldred PROMPT_SYMBOL="#" else PROMPT_USER_COLOR=$green PROMPT_SYMBOL="$" fi if [[ -n "$SSH_CLIENT$SSH2_CLIENT$SSH_TTY" ]] ; then PROMPT_SSH="@\h" else PROMPT_SSH="" fi PS1="$PROMPT_USER_COLOR\u$PROMPT_SSH $blue\w$reset $PROMPT_SYMBOL " if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then GIT_PROMPT_ONLY_IN_REPO=1 GIT_PROMPT_IGNORE_SUBMODULES=1 GIT_PROMPT_WITH_VIRTUAL_ENV=0 GIT_PROMPT_THEME=Solarized_Yax source $HOME/.bash-git-prompt/gitprompt.sh fi fi