326 lines
8.1 KiB
Bash
326 lines
8.1 KiB
Bash
# If not running interactively, don't do anything
|
|
case $- in
|
|
*i*) ;;
|
|
*) return;;
|
|
esac
|
|
|
|
# HISTORY OPTIONS
|
|
# ---------------
|
|
HISTSIZE= ;
|
|
HISTFILESIZE=
|
|
HISTCONTROL="ignoreboth:erasedups"
|
|
HISTTIMEFORMAT="%F %T "
|
|
|
|
# SHELL OPTIONS
|
|
# -------------
|
|
shopt -s checkhash checkjobs checkwinsize
|
|
shopt -s dirspell extglob globstar
|
|
shopt -s cmdhist histappend
|
|
|
|
# VARIABLES
|
|
# ---------
|
|
# PROGRAMS
|
|
export EDITOR="/usr/bin/vim"
|
|
export VISUAL="/usr/bin/vim"
|
|
export PAGER="less"
|
|
|
|
# DIRS
|
|
export WD="$HOME/src"
|
|
export GOWD="$HOME/.go/src/github.com/lemonase"
|
|
export DF="$WD/repos/dotfiles"
|
|
|
|
# URLS
|
|
export GH="https://github.com/lemonase"
|
|
|
|
# ALIASES
|
|
# -------
|
|
# common options
|
|
LS_OPTS="-F --color=auto"
|
|
GREP_OPTS="--color=auto"
|
|
|
|
# ls
|
|
alias l='ls ${LS_OPTS}'
|
|
alias ls='ls ${LS_OPTS}'
|
|
alias ll='ls -lsh ${LS_OPTS}'
|
|
alias la='ls -Alsh ${LS_OPTS}'
|
|
alias al='ls -A ${LS_OPTS}'
|
|
alias sl='ls -lsSh ${LS_OPTS}'
|
|
alias sal='ls -AlsSh ${LS_OPTS}'
|
|
|
|
# grep
|
|
alias grep='grep ${GREP_OPTS}'
|
|
alias fgrep='fgrep ${GREP_OPTS}'
|
|
alias egrep='egrep ${GREP_OPTS}'
|
|
|
|
# utility aliases
|
|
alias tree='tree -C'
|
|
alias treel='tree -C | less -R'
|
|
alias df='df -h'
|
|
alias lsmnt='mount | column -t'
|
|
alias mkdir='mkdir -p'
|
|
|
|
# git
|
|
alias g=git
|
|
alias groot='cd $(git rev-parse --show-toplevel 2> /dev/null || echo -n ".")'
|
|
|
|
# tmux
|
|
alias tmls='tmux ls'
|
|
alias tmlsc='tmux lsc'
|
|
alias tmks='tmux kill-session -t' # kill one session
|
|
alias tmka='tmux kill-server' # aka killall
|
|
|
|
# python venv
|
|
alias venvac='source venv/bin/activate'
|
|
|
|
# COLORS
|
|
# ------
|
|
# color vars using tput or ANSI/VT100 Control sequences
|
|
|
|
# check if tput is available
|
|
if [ -x "$(command -v tput)" ]; then
|
|
num_colors=$(tput colors)
|
|
if [ -n "$num_colors" ] && [ "$num_colors" -ge 8 ]; then
|
|
black="\[$(tput setaf 0)\]"; unesc_black="$(tput setaf 0)"
|
|
red="\[$(tput setaf 1)\]"; unesc_red="$(tput setaf 1)"
|
|
green="\[$(tput setaf 2)\]"; unesc_green="$(tput setaf 2)"
|
|
yellow="\[$(tput setaf 3)\]"; unesc_yellow="$(tput setaf 3)"
|
|
blue="\[$(tput setaf 4)\]"; unesc_blue="$(tput setaf 4)"
|
|
purple="\[$(tput setaf 5)\]"; unesc_purple="$(tput setaf 5)"
|
|
cyan="\[$(tput setaf 6)\]"; unesc_cyan="$(tput setaf 6)"
|
|
white="\[$(tput setaf 7)\]"; unesc_white="$(tput setaf 7)"
|
|
reset="\[$(tput sgr0)\]"; unesc_reset="$(tput sgr0)"
|
|
bold="\[$(tput bold)\]"; unesc_bold="$(tput bold)"
|
|
fi
|
|
else
|
|
# fallback to ANSI esacpe codes
|
|
black="\[\033[0;30m\]"; unesc_black="\033[0;30m"
|
|
red="\[\033[1;31m\]"; unesc_red="\033[1;31m"
|
|
green="\[\033[1;32m\]"; unesc_green="\033[1;32m"
|
|
yellow="\[\033[1;33m\]"; unesc_yellow="\033[1;33m"
|
|
blue="\[\033[1;34m\]"; unesc_blue="\033[1;34m"
|
|
purple="\[\033[1;35m\]"; unesc_purple="\033[1;35m"
|
|
cyan="\[\033[1;36m\]"; unesc_cyan="\033[1;36m"
|
|
white="\[\033[1;37m\]"; unesc_white="\033[1;37m"
|
|
reset="\[\033[0m\]"; unesc_reset="\033[0m"
|
|
bold="\[\033[1m\]"; unesc_bold="\033[1m"
|
|
fi
|
|
|
|
# FUNCTIONS
|
|
# ---------
|
|
# common commands improved
|
|
cll() { cd -P "$@" && ls -alshF; }
|
|
cls() { cd -P "$@" && ls; }
|
|
mkcd() { mkdir -p -- "$1" && cd "$1"; }
|
|
cdd() { [ -n "$1" ] && for i in $(seq 1 "$1"); do cd ..; done; }
|
|
touchx() { touch "$@" && chmod +x "$@"; }
|
|
|
|
# tmux
|
|
tm() {
|
|
if [ "$#" -gt 0 ]; then
|
|
tmux new-session -As "$1"
|
|
else
|
|
tmux new-session
|
|
fi
|
|
}
|
|
|
|
tma() {
|
|
if [ "$#" -gt 0 ]; then
|
|
tmux attach-session -d -t "$1"
|
|
if [ "$?" -ne 0 ]; then
|
|
tmux new-session -As "$1"
|
|
fi
|
|
else
|
|
tmux attach
|
|
fi
|
|
}
|
|
|
|
# checks if directory exists and path duplication
|
|
appendpath () {
|
|
if [ -d "$1" ]; then
|
|
case ":$PATH:" in
|
|
*:"$1":*)
|
|
;;
|
|
*)
|
|
PATH="${PATH:+$PATH:}$1"
|
|
esac
|
|
fi
|
|
}
|
|
|
|
|
|
# easy backup
|
|
bkup() {
|
|
if [ -f "$1" ]; then
|
|
cp "${1}" "${1}.bkup.$(date +'%F.%R')";
|
|
fi
|
|
}
|
|
|
|
# easy diff rc files in home and in dotfile repo
|
|
rc() {
|
|
error_1() {
|
|
echo "Please specify rc command: [diff] [up] [down]"
|
|
echo "and a valid dotfile: [vim] [bash] [git] [tmux]"
|
|
return 1
|
|
}
|
|
|
|
error_2() {
|
|
echo "Please specify a valid dotfile: [vim] [bash] [git] [tmux]"
|
|
return 2
|
|
}
|
|
|
|
case "$1" in
|
|
"diff"|"di")
|
|
case "$2" in
|
|
"vim")
|
|
vimdiff "$HOME/.vim/vimrc" "$DF/vim/vimrc" ;;
|
|
"bash")
|
|
vimdiff "$HOME/.bashrc" "$DF/bash/bashrc" ;;
|
|
"git")
|
|
vimdiff "$HOME/.gitconfig" "$DF/git/gitconfig" ;;
|
|
"tmux")
|
|
vimdiff "$HOME/.tmux.conf" "$DF/tmux/tmux.conf" ;;
|
|
*)
|
|
error_2
|
|
esac
|
|
return;;
|
|
|
|
"edit"|"e")
|
|
case "$2" in
|
|
"vim")
|
|
vim "$HOME/.vim/vimrc" ;;
|
|
"bash")
|
|
vim "$HOME/.bashrc" ;;
|
|
"git")
|
|
vim "$HOME/.gitconfig" ;;
|
|
"tmux")
|
|
vim "$HOME/.tmux.conf" ;;
|
|
*)
|
|
error_2
|
|
esac
|
|
return;;
|
|
|
|
"up"|"u")
|
|
case "$2" in
|
|
"vim")
|
|
cp "$HOME/.vim/vimrc" "$DF/vim/vimrc" ;;
|
|
"bash")
|
|
cp "$HOME/.bashrc" "$DF/bash/bashrc" ;;
|
|
"git")
|
|
cp "$HOME/.gitconfig" "$DF/git/gitconfig" ;;
|
|
"tmux")
|
|
cp "$HOME/.tmux.conf" "$DF/tmux/tmux.conf" ;;
|
|
*)
|
|
error_2
|
|
esac
|
|
(cd "$DF" || return) && git diff
|
|
return;;
|
|
|
|
"down"|"d")
|
|
case "$2" in
|
|
"vim")
|
|
cp "$DF/vim/vimrc" "$HOME/.vim/vimrc" ;;
|
|
"bash")
|
|
cp "$DF/bash/bashrc" "$HOME/.bashrc" ;;
|
|
"git")
|
|
cp "$DF/git/gitconfig" "$HOME/.gitconfig" ;;
|
|
"tmux")
|
|
cp "$DF/tmux/tmux.conf" "$HOME/.tmux.conf" ;;
|
|
*)
|
|
error_2
|
|
esac
|
|
return;;
|
|
|
|
*)
|
|
error_1
|
|
esac
|
|
}
|
|
|
|
# git
|
|
lazygit() {
|
|
git commit -a -m "$*" && git push;
|
|
}
|
|
|
|
lg() {
|
|
lazygit "$*";
|
|
}
|
|
|
|
# GIT PROMPT FUNCTION
|
|
# -------
|
|
parse_git() {
|
|
BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)"
|
|
STATUS="$(git status 2> /dev/null)"
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
return
|
|
else
|
|
printf "\001${unesc_reset}${unesc_bold}\002:(%s)" "${BRANCH}"
|
|
printf "\001${unesc_white}\002%s" "["
|
|
if echo "${STATUS}" | grep -c "nothing to commit" &> /dev/null; then printf "\001${unesc_blue}\002%s" "="; fi
|
|
if echo "${STATUS}" | grep -c "renamed:" &> /dev/null; then printf "\001${unesc_red}\002%s" "%"; fi
|
|
if echo "${STATUS}" | grep -c "deleted:" &> /dev/null; then printf "\001${unesc_red}\002%s" "-"; fi
|
|
if echo "${STATUS}" | grep -c "new file:" &> /dev/null; then printf "\001${unesc_green}\002%s" "+"; fi
|
|
if echo "${STATUS}" | grep -c "branch is ahead:" &> /dev/null; then printf "\001${unesc_yellow}\002%s" ">"; fi
|
|
if echo "${STATUS}" | grep -c "branch is behind" &> /dev/null; then printf "\001${unesc_yellow}\002%s" "<"; fi
|
|
if echo "${STATUS}" | grep -c "Untracked files:" &> /dev/null; then printf "\001${unesc_yellow}\002%s" "?"; fi
|
|
if echo "${STATUS}" | grep -c "modified:" &> /dev/null; then printf "\001${unesc_yellow}\002%s" "*"; fi
|
|
printf "\001${unesc_white}\002%s" "]"
|
|
fi
|
|
}
|
|
|
|
# PROMPTS
|
|
# -------
|
|
# ***common prompts***
|
|
# PS1="\W \\$ "
|
|
# PS1="[\u@\h:\W]\\$ "
|
|
# PS1="\u@\h:\W\\$ "
|
|
|
|
# ***color prompts***
|
|
# PS1="${bold}${blue}\W ${yellow}\\$ ${reset}"
|
|
# PS1="${bold}${purple}\u${yellow}@${cyan}\h${white}:${blue}\W ${yellow}\\$ ${reset}"
|
|
|
|
# ***git prompts***
|
|
# PS1="${bold}${blue}\W\$(parse_git)${green} \\$ ${reset}"
|
|
# PS1="${bold}${white}\t ${blue}\W\$(parse_git) ${cyan}\\$ ${reset}"
|
|
# PS1="${bold}${purple}\u${yellow}@${cyan}\h${white}:${blue}\W\$(parse_git)${green} \\$ ${reset}"
|
|
# PS1="${bold}\n${cyan}\u ${white}at ${yellow}\h ${white}in ${blue}\w ${white}on \$(parse_git)\n${yellow}\\$ ${reset}"
|
|
|
|
# BASH AUTOCOMPLETION
|
|
# -------------------
|
|
if ! shopt -oq posix; then
|
|
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
|
source /usr/share/bash-completion/bash_completion
|
|
elif [ -f /etc/bash_completion ]; then
|
|
source /etc/bash_completion
|
|
fi
|
|
fi
|
|
|
|
# EXTRA PATHS
|
|
# --------------
|
|
|
|
# Languages
|
|
|
|
# Ruby
|
|
if command -v ruby > /dev/null && command -v gem > /dev/null; then
|
|
appendpath "$(ruby -r rubygems -e 'puts Gem.user_dir')/bin"
|
|
fi
|
|
|
|
# Go
|
|
if command -v go > /dev/null; then
|
|
[ -d "$HOME/go" ] && mv "$HOME/go" "$HOME/.go"
|
|
export GOPATH="$HOME/.go"
|
|
appendpath "$(go env GOPATH)/bin"
|
|
fi
|
|
|
|
# Rust
|
|
if command -v cargo > /dev/null; then
|
|
appendpath "$HOME/.cargo/bin"
|
|
fi
|
|
|
|
# Local
|
|
appendpath "$HOME/.local/bin"
|
|
appendpath "$HOME/.local/scripts"
|
|
|
|
# SOURCE LOCAL RC
|
|
# --------
|
|
[ -f "$HOME/.config/bashrc" ] && source "$HOME/.config/bashrc"
|
|
[ -f "$HOME/.local/bashrc" ] && source "$HOME/.local/bashrc"
|