#!/bin/bash ### tmux auto attach if command -v tmux &> /dev/null && [ -z "$TMUX" ]; then tmux attach -t default || tmux new -s default fi ### ssh-agent # https://rabexc.org/posts/pitfalls-of-ssh-agents SSH_ENV="$HOME/.ssh/environment" function start_agent { echo "Initialising new SSH agent..." (umask 066; /usr/bin/ssh-agent > "${SSH_ENV}") . "${SSH_ENV}" > /dev/null /usr/bin/ssh-add; } # Source SSH settings, if applicable if [ -f "${SSH_ENV}" ]; then . "${SSH_ENV}" > /dev/null ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { start_agent; } else start_agent; fi ### 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 \[\] 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 # bach History Zeitstempel am Anfang der Zeile export HISTTIMEFORMAT='[%F_%T] ' # 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 " ;; "") 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 " 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 " # 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 " 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 " 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 "") echo "[ERROR] Branch/Option fehlt..." ;; --help | -h) cat < Options: -h, --help Prints this help. -b, --new-branch Create a new Branch instead changing to an existing branch. Author: michael.grote@posteo.de - git.mgrote.net EOF ;; --new-branch | -b) (git checkout --quiet -b "$2" > /dev/null 2>&1 && echo '>>> Create new branch "'"$2"'"') || (git checkout --quiet "$2" > /dev/null 2>&1 && echo '>>> Branch already exists, checking out... ') ;; *) (echo ">>> Try local checkout" && git checkout --quiet "$1" > /dev/null 2>&1) || (echo ">>> Try remote checkout" && git checkout --quiet -b "$1" origin/"$1" > /dev/null 2>&1 || echo ">>> Unkown branch!") 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 } function gs { echo "* = unstaged // + = staged // $ = stashed // % = untracked" git status --show-stash } ### 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 tracert="traceroute" 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" alias ru="rip url" alias mkdir="mkdir -p" alias last="last -w" # 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 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 " # rest alias rs="pwgen --capitalize --num-passwords=1 --numerals --secure 14" alias suspend="~/dotfiles/scripts/pwr.sh -sd" alias hibernate="~/dotfiles/scripts/pwr.sh -hb" alias restart="~/dotfiles/scripts/pwr.sh -r" alias shutdown="~/dotfiles/scripts/pwr.sh -s"