|
|
|
#
|
|
|
|
# ~/.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 lsd 2>/dev/null; then
|
|
|
|
alias ls="lsd"
|
|
|
|
alias ll="ls -l"
|
|
|
|
alias la="ls -la"
|
|
|
|
elif 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'
|
|
|
|
test -r "~/.dir_colors" && eval $(dircolors ~/.dir_colors)
|
|
|
|
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
|
|
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# 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
|
|
|
|
|
|
|
|
# enable history
|
|
|
|
set -o history
|