diff --git a/bash/bashrc b/bash/bashrc index 0c0269c..4d126c4 100644 --- a/bash/bashrc +++ b/bash/bashrc @@ -1,38 +1,41 @@ # If not running interactively, don't do anything case $- in - *i*) ;; - *) return;; + *i*) ;; + *) return;; esac -#========== HISTORY OPTIONS ==========# - +# HISTORY OPTIONS +# --------------- HISTSIZE= ; HISTFILESIZE= HISTCONTROL="ignoreboth:erasedups" HISTTIMEFORMAT="%F %T " -#========== SHELL OPTIONS ==========# - -shopt -s checkhash checkjobs checkwinsize cmdhist direxpand dirspell extglob globstar histappend - -#========== PROGRAM VARIABLES ==========# +# SHELL OPTIONS +# ------------- +shopt -s checkhash checkjobs checkwinsize +shopt -s direxpand dirspell extglob globstar +shopt -s cmdhist histappend +# VARIABLES +# --------- export EDITOR="/usr/bin/vim" export VISUAL="/usr/bin/vim" export PAGER="less" -#========== ALIASES ==========# +export GH="https://github.com/lemonase" +# ALIASES +# ------- # common options LS_OPTS="-F --color=auto" GREP_OPTS="--color=auto" -# ls +# 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}' @@ -62,8 +65,35 @@ alias tmka='tmux kill-server' # aka killall # python venv alias venvac='source venv/bin/activate' -#========== FUNCTIONS ==========# +# COLORS +# ------ +# color vars using tput or ANSI/VT100 Control sequences +if command -v "tput" > /dev/null 2>&1 ; then + black="\[$(tput setaf 0)\]" + red="\[$(tput setaf 1)\]" + green="\[$(tput setaf 2)\]" + yellow="\[$(tput setaf 3)\]" + blue="\[$(tput setaf 4)\]" + purple="\[$(tput setaf 5)\]" + cyan="\[$(tput setaf 6)\]" + white="\[$(tput setaf 7)\]" + reset="\[$(tput sgr0)\]" + bold="\[$(tput bold)\]" +else + black="\[\033[0;30\]" + red="\[\033[1;31\]" + green="\[\033[1;32\]" + yellow="\[\033[1;33\]" + blue="\[\033[1;34\]" + purple="\[\033[1;35\]" + cyan="\[\033[1;36\]" + white="\[\033[1;37\]" + reset="\[\033[0m\]" + bold="\[\033[1m\]" +fi +# FUNCTIONS +# --------- # common commands improved cll() { cd -P "$@" && ls -alshF; } cls() { cd -P "$@" && ls; } @@ -71,117 +101,129 @@ mkcd() { mkdir -p -- "$1" && cd "$1"; } cdd() { [ -n "$1" ] && for i in $(seq 1 "$1"); do cd ..; done; } touchx() { touch "$@" && chmod +x "$@"; } -# git -lazygit() { git commit -a -m "$*" && git push; } -lg() { lazygit "$*"; } - -# git prompt functions -parse_git() { - # ways to get branches - # git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' - # git rev-parse --abbrev-ref HEAD 2> /dev/null | sed -e 's/.*\/\(.*\)/\1/' - - BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" - STATUS="$(git status 2> /dev/null)" - - if [[ $? -ne 0 ]]; then - return - else - printf "\033[1;37m:(${BRANCH})[" - fi - - if echo "${STATUS}" | grep -c "nothing to commit" &> /dev/null; then printf "\033[1;34m=\033[0m"; else printf ""; fi - if echo "${STATUS}" | grep -c "renamed:" &> /dev/null; then printf "\033[1;31m>\033[0m"; else printf ""; fi - if echo "${STATUS}" | grep -c "deleted:" &> /dev/null; then printf "\033[1;31m-\033[0m"; else printf ""; fi - if echo "${STATUS}" | grep -c "new file:" &> /dev/null; then printf "\033[1;32m+\033[0m"; else printf ""; fi - - if echo "${STATUS}" | grep -c "branch is ahead:" &> /dev/null; then printf "\033[1;33m!\033[0m"; else printf ""; fi - if echo "${STATUS}" | grep -c "Untracked files:" &> /dev/null; then printf "\033[1;33m?\033[0m"; else printf ""; fi - if echo "${STATUS}" | grep -c "modified:" &> /dev/null; then printf "\033[1;33m*\033[0m"; else printf ""; fi - - printf "\033[1;37m]" -} - # tmux tm() { - if [ "$#" -gt 0 ]; then - tmux new-session -As "$1" - else - tmux new-session - fi + 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 + if [ "$#" -gt 0 ]; then + tmux attach-session -d -t "$1" + if [ "$?" -ne 0 ]; then + tmux new-session -As "$1" + fi + else + tmux attach + fi } # paths and files pathappend() { - # https://superuser.com/questions/39751/add-directory-to-path-if-its-not-already-there - for ARG; do - if [ -d "$ARG" ] && [[ ":$PATH:" != *":$ARG:"* ]]; then - ABS_DIR="$(readlink -f "$ARG")" - PATH="${PATH:+"$PATH:"}$ABS_DIR" - echo "$ABS_DIR" added! - else - echo Invalid directory in "\"$*\"" - fi - done + # https://superuser.com/questions/39751/add-directory-to-path-if-its-not-already-there + for ARG; do + if [ -d "$ARG" ] && [[ ":$PATH:" != *":$ARG:"* ]]; then + ABS_DIR="$(readlink -f "$ARG")" + PATH="${PATH:+"$PATH:"}$ABS_DIR" + echo "$ABS_DIR" added! + else + echo Invalid directory in "\"$*\"" + fi + done } bkup() { - # create backup file with date appended - if [ -f "$1" ]; then - cp "${1}" "${1}.bkup.$(date +'%F.%R')" - fi + # create backup file with date appended + if [ -f "$1" ]; then + cp "${1}" "${1}.bkup.$(date +'%F.%R')" + fi } -#========== PROMPTS ==========# +# hugo -- create and edit a new post +new-post() { + postname="" + if [ -z "$1" ]; then + echo -n "Please enter a postname: " + read -r postname + else + postname="$1" + fi + + post_filename="$postname.md" + blog_dir="$HOME/src/blog" + local_url="http://localhost:1313/posts/$postname" + + hugo new -s "$blog_dir" "posts/$post_filename" + hugo serve -s "$blog_dir" -D &> /dev/null & + xdg-open "$local_url" &> /dev/null & + vim "$blog_dir/content/posts/$post_filename" && kill %1 +} + +# git +lazygit() { git commit -a -m "$*" && git push; } +lg() { lazygit "$*"; } + +# git prompt function +parse_git() { + # ways to get branches + # git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' + # git rev-parse --abbrev-ref HEAD 2> /dev/null | sed -e 's/.*\/\(.*\)/\1/' + + BRANCH="$(git rev-parse --abbrev-ref HEAD 2> /dev/null)" + STATUS="$(git status 2> /dev/null)" + + if [[ $? -ne 0 ]]; then return; else printf "$(tput sgr0)$(tput bold)%s" ":(${BRANCH})["; fi + + if echo "${STATUS}" | grep -c "nothing to commit" &> /dev/null; then printf "$(tput setaf 4)%s" "="; else printf ""; fi + + if echo "${STATUS}" | grep -c "renamed:" &> /dev/null; then printf "$(tput setaf 1)%s" ">"; else printf ""; fi + if echo "${STATUS}" | grep -c "deleted:" &> /dev/null; then printf "$(tput setaf 1)%s" "-"; else printf ""; fi + if echo "${STATUS}" | grep -c "new file:" &> /dev/null; then printf "$(tput setaf 2)%s" "+"; else printf ""; fi + + if echo "${STATUS}" | grep -c "branch is ahead:" &> /dev/null; then printf "$(tput setaf 3)%s" "!"; else printf ""; fi + if echo "${STATUS}" | grep -c "Untracked files:" &> /dev/null; then printf "$(tput setaf 3)%s" "?"; else printf ""; fi + if echo "${STATUS}" | grep -c "modified:" &> /dev/null; then printf "$(tput setaf 3)%s" "*"; else printf ""; fi + + printf "$(tput setaf 7)%s" "]" +} + +# PROMPTS +# ------- +# start prompt string +PS1="${bold}" # ***git prompts*** - -# PS1="\[\033[1;34m\]\w\[\033[0m\]\$(parse_git) \[\033[1;36m\]\$\[\033[0m\] " -# PS1="\[\033[1;35m\]\u\[\033[1;33m\]@\[\033[1;36m\]\h\[\033[0m\]:\[\033[1;37:\[\033[1;34m\]\w\[\033[0m\]\$(parse_git)\[\033[0m\]\[\033[1;33m\]$ \[\033[0m\]" -# PS1="\[\033[1;36m\]\u \[\033[1;37m\]at \[\033[1;33m\]\h \[\033[1;37m\]in \[\033[1;34m\]\w \[\033[1;37m\]on \[\033[1;37m\]\$(parse_git)\n\[\033[1;37m\]\$ " +# PS1+="${blue}\w\[\$(parse_git)\] ${cyan}\\$ " +PS1+="${white}[\t] ${blue}\w\[\$(parse_git)\] ${green}\\$ " +# PS1+="${purple}\u${yellow}@${cyan}\h${white}:${blue}\w\[\$(parse_git)\]${yellow} \\$ " +# PS1+="\n${cyan}\u ${white}at ${yellow}\h ${white}in ${blue}\w ${white}on \[\$(parse_git)\]\n${yellow}\\$ " # ***non git prompts*** -# PS1="\[\033[1;34m\]\w \[\033[1;33m\]\$ \[\033[0m\]" -# PS1="\[\033[1;35m\]\u\[\033[1;33m\]@\[\033[1;36m\]\h\[\033[0m\]:\[\033[1;37:\[\033[1;34m\]\w\[\033[0m\]\[\033[1;33m\]$ \[\033[0m\]" +# PS1+="${blue}\w ${yellow}\\$ " +# PS1+="${purple}\u${yellow}@${cyan}\h${white}:${blue}\w ${yellow}\\$ " # ***non-color prompts*** +# PS1="\w \\$ " +# PS1="[\u@\h:\w] \\$ " +# PS1="\u@\h:\w \\$ " -# PS1="\w \$ " -# PS1="[\u@\h:\w]$ " -# PS1="\u@\h:\w$ " - -#========== COLORS REFERENCE ==========# -# COLORS according to (ANSI/VT100 Control sequences) -# https://misc.flogisoft.com/bash/tip_colors_and_formatting for examples - -# \[\033[0;30m\] BLACK \[\033[1;30m\] DARK_GREY -# \[\033[0;31m\] RED \[\033[1;31m\] LIGHT_RED -# \[\033[0;32m\] GREEN \[\033[1;32m\] LIGHT_GREEN -# \[\033[0;33m\] BROWN \[\033[1;33m\] YELLOW -# \[\033[0;34m\] BLUE \[\033[1;34m\] LIGHT_BLUE -# \[\033[0;35m\] PURPLE \[\033[1;35m\] LIGHT_PURPLE -# \[\033[0;36m\] CYAN \[\033[1;36m\] LIGHT_CYAN -# \[\033[0;37m\] LIGHT_GREY \[\033[1;37m\] WHITE -# \[\033[0m\] RESET NORMAL -# \[\033[1m\] RESET BOLD - -#========== BASH AUTOCOMPLETION ==========# +# end prompt string +PS1+="${reset}" +# BASH AUTOCOMPLETION +# ------------------- if ! shopt -oq posix; then - if [ -f /usr/share/bash-completion/bash_completion ]; then - . /usr/share/bash-completion/bash_completion - elif [ -f /etc/bash_completion ]; then - . /etc/bash_completion - fi + 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 + +# LOCAL RC +# -------- +[ -f "$HOME/.config/bashrc" ] && source "$HOME/.config/bashrc" +