#!/bin/bash
### PS1
# git-symbole: * unstaged, + staged, $ stashed, % untracked
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export PS1='\n\[\e[34m\]\u@\[\e[34m\]\h \[\e[94m\]\w\[\e[33m\]$(__git_ps1) \[\e[94m\]\n> \[\e[39m\]'

#\e[34m	\u	   @	\e[34m	\h 		    \e[37m		 \e[94m		  \w		        \e[33m	$(__git_ps1) 	\e[94m	    \n> 	             \e[39m
#Blau	  User	 @	Bue	    Hostname	Light Gray LightBlue 	Verzeichnis	  Yellow	Git-Script	  LightBlue	  Zeilenumbruch      Standard-Vordergrund-Farbe
# https://unix.stackexchange.com/questions/105958/terminal-prompt-not-wrapping-correctly
# alle Farben sind mit \[<wert>\] escaped, sonst kann die shelle die länge nicht richtig ausrechnen
# https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh
# https://gist.github.com/justintv/168835
# https://misc.flogisoft.com/bash/tip_colors_and_formatting

### Praktische Dinge
# Deaktiviere FlowControl
# https://unix.stackexchange.com/questions/332791/how-to-permanently-disable-ctrl-s-in-terminal
stty -ixon

# farben fur manpages
# https://opensource.com/article/18/5/bash-tricks
export LESS_TERMCAP_mb=$'\E[01;31m'
export LESS_TERMCAP_md=$'\E[01;33m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;42;30m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'

# bash history bei mehreren Session
shopt -s histappend

# typo bei cd entfernen
shopt -s cdspell

# less mit maus scrollen
export LESS='--mouse --wheel-lines=3 eFRX'

# deaktiviere alias von ll
# weiter unten ist die FUnktion ll definiert die entweder exa oder ls ausführt
unalias ll 2>/dev/null

### Funktionen
function sgc {
  case "$1" in
    --help)
      echo "Suche in der kompletten git-history nach "\$1""
      echo ""
      echo "    Usage: sgc <Suchbegriff>"
      ;;
    "")
      echo "[ERROR] Suchbegriff fehlt..."
      ;;
    *)
      git grep "$1" $(git rev-list --all)
  esac
}
function m2m {
  if [[ "$1" == "--help" ]]; then
    echo "Sende Datei "\$2" per Mail; Betreff = "\$1""
    echo ""
    echo "    Usage: m2m <Pfad zu Datei> <Betreff>"
  else
    if [ ! -f "$2" ]; then
      echo "[ERROR] Dateipfad fehlt..."
    else
      if [ -z "$1" ]; then
        echo "[ERROR] Betreff fehlt..."
      else
        echo "$1" | mail -s "$1" -A "$2" michael.grote@posteo.de
      fi
    fi
  fi
}
#function psk {
#  if [[ "$1" == "--help" ]]; then
#    echo "Beende Prozess "\$1""
#    echo ""
#    echo "    Usage: psk <prozessname>"
#  else
#    if [  -z "$1" ]; then
#      echo "[ERROR] Prozessname fehlt..."
#    else
#      ps -ef | grep "$1" | grep -v grep | awk '{ print $2 }' | xargs kill -9
#    fi
#  fi
#}
function rgf {
  if [[ "$1" == "--help" ]]; then
    echo "Finde alle Dateien die "\$1" im Namen haben."
    echo ""
    echo "    Usage: rgf <string>"
    return 0
  fi
  if [ -z "$1" ]; then
    echo "[ERROR] Suchbegriff fehlt..."
    return 1
  fi
  if command -v rg >/dev/null ; then
    rg --files -g *"$1"* --hidden
  else
    echo "[INFO] ripgrep ist nicht installiert... suche mit 'find'"
    find . -type f -name *"$1"*
  fi
}
function rgi {
  if [[ "$1" == "--help" ]]; then
    echo "Finde alle Dateien die "\$1" im Inhalt haben."
    echo ""
    echo "    Usage: rgi <string>"
    return 0
  fi
  if [ -z "$1" ]; then
    echo "[ERROR] Suchbegriff fehlt..."
    return 1
  fi
  if command -v rg >/dev/null ; then
    rg -i "$1"
  else
    echo "[INFO] ripgrep ist nicht installiert... suche mit 'grep'"
    grep -r -n -i "$1" .
  fi
}
function ssh {
  # benennt das aktuelle tmux-windows nach dem ssh-ziel
  # baut ssh-verbindung auf
  if [ -n "${TMUX}" ]; then
    tmux rename-window ""${@: -1}""
  fi
	command ssh "$@"
  if [ -n "${TMUX}" ]; then
    tmux rename-window "`hostname -f`"
  fi
}
function gcm {
  # übergibt alle argumente an git commit -m als commit nachricht
  git commit -m "$*"
}
function gc {
  case "$1" in
    --help)
      echo "Versuche lokalen checkout, wenn der Branch nicht vorhanden ist versuche eine checkout aus dem Remote-Repository."
      echo ""
      echo "    Usage: gc <branch>"
      ;;
    "")
      echo "[ERROR] Branch fehlt..."
      ;;
    *)
      git checkout $1 || git checkout -b $1 origin/$1
  esac
}
function ll {
  if command -v exa >/dev/null ; then
    exa --long --git --all --ignore-glob='.git' --group-directories-first --sort=name --group "$@"
  else
    ls -lah "$@"
  fi
}


### Aliase
# tmux
alias tmuxa="tmux a -t "
alias tmuxn="tmux new -s "
alias tmuxl="tmux ls"
alias tmuxk="tmux kill-session -t"
# abkuerzungen
alias se="sudoedit"
alias ip="ip --color=auto"
alias cls="clear"
alias df="df -h"
alias du="du -h"
alias grep="grep -i --color=auto"
alias hostname="hostname -f"
alias untar="tar -xzf"
alias unmount="umount"
alias psk="pkill"
# git
alias gp="git stash && git pull && git stash pop"
alias gf="git fetch"
alias gdel="git add . && git stash && git stash clear"
alias glast="git log -1 HEAD --stat"
alias gsp="git stage -p"
alias gd="git diff"
alias gs="git status"
alias glogs="git log --all --graph --pretty=format:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"
# vim
alias v="view"
# docker
alias dcu="docker-compose up"
alias dcd="docker-compose down"
alias dcr="docker-compose down && docker-compose up -d"
alias lzd="docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock lazyteam/lazydocker"
# safeguard
alias mv="mv -i "
alias cp="cp -i "
alias rm="rm -i "