Skip to content
.bashrc 8.81 KiB
Newer Older
# shellcheck disable=SC2148,SC1091
nimrod's avatar
nimrod committed
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

export LANG=en_US.UTF8
export HISTFILE="$HOME/.history"
export HISTCONTROL=ignoreboth:erasedups
export HISTSIZE=100000
export HISTFILESIZE=100000
nimrod's avatar
nimrod committed
export REPREPRO_BASE_DIR="$HOME/Documents/Shore/debian-repository"
export EDITOR=vim
nimrod's avatar
nimrod committed
export GOPATH="$HOME/Documents/Golang"
export PATH="$GOPATH/bin:/usr/lib/go/bin/:$PATH"
export PATH="$HOME/Documents/Shore/ssh-ca:$PATH"
export PATH="$HOME/Documents/Shore/ssl-ca:$PATH"
export PATH="$HOME/.cargo/bin:$PATH"
export PATH="$HOME/.cabal/bin:$PATH"
export PATH="$HOME/Documents/bin:$PATH"
export PYTHONSTARTUP=~/.config/python/startup.py
nimrod's avatar
nimrod committed
export AWS_DEFAULT_PROFILE='shore'
export ANSIBLE_VERBOSITY=2
export ANSIBLE_COMMAND_WARNINGS=True
export ANSIBLE_DEPRECATION_WARNINGS=True
export ANSIBLE_RETRY_FILES_SAVE_PATH=/tmp/
export ANSIBLE_SSH_PIPELINING=True
export ANSIBLE_GATHERING=smart
export ANSIBLE_CACHE_PLUGIN=jsonfile
export ANSIBLE_CACHE_PLUGIN_CONNECTION="$HOME/.ansible/facts"
export ANSIBLE_CALLBACK_WHITELIST=profile_tasks
nimrod's avatar
nimrod committed
export LYNX_SAVE_SPACE="$HOME/Downloads"
export LYNX_TEMP_SPACE="$HOME/.cache/lynx"
nimrod's avatar
nimrod committed
export VAGRANT_DEFAULT_PROVIDER="virtualbox"
nimrod's avatar
nimrod committed
# Blinking
export LESS_TERMCAP_mb=$'\E[01;31m'
# Double bright
export LESS_TERMCAP_md=$'\E[01;35m'
export LESS_TERMCAP_me=$'\E[0m'
# Standout
export LESS_TERMCAP_so=$'\E[01;33m'
export LESS_TERMCAP_se=$'\E[0m'
# Underline
export LESS_TERMCAP_us=$'\E[01;32m'
export LESS_TERMCAP_ue=$'\E[0m'
alias ll='ls -lha'
alias la='ls -A'
alias l='ls -CF'
alias gcc='gcc --std=c99 -Wall -Wextra -Werror -pedantic'
nimrod's avatar
nimrod committed
alias dpkglog="grep -v 'status\|trigproc\|configure' /var/log/dpkg.log"
alias deborphan='deborphan -a --no-show-section --ignore-suggests'
nimrod's avatar
nimrod committed
alias aptitude='aptitude --display-format %p --quiet'
alias obsolete='aptitude search ?obsolete'
alias missing-recommends="aptitude search '~RBrecommends:~i'"
nimrod's avatar
nimrod committed
# shellcheck disable=SC2142
alias deinstalled="dpkg --get-selections | awk '\$2==\"deinstall\" {print \$1}'"
alias ansible-local='ansible localhost -c local -i localhost,'
alias ansible-local-playbook='ansible-playbook -i localhost, -c local'
alias concat="perl -pe 's/\n/\\\n/g'"
alias deconcat="perl -pe 's/\\\n/\n/g'"
nimrod's avatar
nimrod committed
alias ecr-login='eval $(aws ecr get-login --no-include-email)'
alias hostlocal='docker run --rm --privileged --net=host gliderlabs/hostlocal'
nimrod's avatar
nimrod committed
alias cadvisor='docker run --rm   --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --volume=/dev/disk/:/dev/disk:ro --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest'
alias apt-daily="sudo /bin/sh -c 'apt-get update && apt-get dist-upgrade --download-only --yes && apt-get autoclean'"
alias flatpak-daily='flatpak --user update --no-deploy'
alias cdtemp='cd $(mktemp -d)'
nimrod's avatar
nimrod committed
alias 0-day-cleanup='ssh xbmc.shore.co.il "sudo -u debian-transmission find /srv/library/Comics -name *.part -path *0-Day\ Week\ of* -delete"'
alias httpbin='gunicorn httpbin:app'
alias update-requirements='find -name "*requirements*.txt" -exec pur --requirement {} \;'
alias restart-kodi='ssh xbmc.shore.co.il "sudo systemctl kill --kill-who all xorg.service"'
alias sync-podcasts='(cd && unison podcasts)'
nimrod's avatar
nimrod committed
# shellcheck disable=SC2142
alias tolower='awk "{print tolower(\$0)}"'
nimrod's avatar
nimrod committed
# shellcheck disable=SC2142
alias toupper='awk "{print toupper(\$0)}"'
alias wifi-portal='curl --silent --fail --write-out "%{redirect_url}" --output /dev/null http://detectportal.firefox.com/success.txt'
alias urlencode='perl -MURI::Escape -ne "chomp;print uri_escape(\$_), \"\n\""'
alias urldecode='perl -MURI::Escape -ne "chomp;print uri_unescape(\$_), \"\n\""'
alias transmission-remote='ssh -fNo ExitOnForwardFailure=yes xbmc.shore.co.il && transmission-remote'
alias kpcli='kpcli --kdb ~/Documents/Database.kdbx'
alias gen-mac="hexdump -n5 -e '\"02\" 5/1 \":%02X\" \"\\n\"' /dev/urandom"
alias clean-swp="find \$HOME/ -name '*.swp' -delete"
alias unssh="ssh -o \"UserKnownHostsFile /dev/null\" -o \"StrictHostKeyChecking no\""
alias todo="vim \$HOME/Documents/TODO.yml"
nimrod's avatar
nimrod committed
alias presentation='docker dev adarnimrod/presentation'
alias netdata='docker run --detach --name netdata --cap-add SYS_PTRACE --volume /proc:/host/proc:ro --volume /sys:/host/sys:ro --volume /var/run/docker.sock:/var/run/docker.sock --publish 19999:19999 firehol/netdata'
alias json-tool='python3 -m json.tool'
alias jt='json-tool'
alias http-server='python3 -m http.server 8080'
nimrod's avatar
nimrod committed
alias dd='dd status=progress'
alias screenshot-cleanup='find "$HOME/Pictures" -name "Screenshot from *.png" -delete'
nimrod's avatar
nimrod committed
alias bell='printf \a'

prune_prerun () {
    local shell_procs="$(pgrep -u "$(id -u)" "$(basename $SHELL)")"
    for file in $HOME/.prerun.*
    do
        echo "file" | grep -qv "$shell_procs" || rm "$file"
    done
}

nimrod's avatar
nimrod committed
bold () {
    printf '\e[1m'
    echo "$@"
    printf '\e[0m'
}

red () {
    printf '\e[1;91m'
    echo "$@"
    printf '\e[0m'
}

green () {
    printf '\e[1;92m'
    echo "$@"
    printf '\e[0m'
}

yellow () {
    printf '\e[1;93m'
    echo "$@"
    printf '\e[0m'
}

blue () {
    printf '\e[1;94m'
    echo "$@"
    printf '\e[0m'
}

magenta () {
    printf '\e[1;95m'
    echo "$@"
    printf '\e[0m'
}

cyan () {
    printf '\e[1;96m'
    echo "$@"
    printf '\e[0m'
}
    AWS_DEFAULT_REGION="$(python << EOF
from __future__ import print_function
try:
    from urllib import urlopen
except ImportError:
    from urllib.request import urlopen
import json
print(json.load(urlopen('http://169.254.169.254/latest/dynamic/instance-identity/document'))['region'])
EOF
    )"
    export AWS_DEFAULT_REGION
nimrod's avatar
nimrod committed
    echo "$AWS_DEFAULT_REGION"
}
    ssh-keyscan "$@" >> "$HOME/.ssh/known_hosts"
    sort -uo "$HOME/.ssh/known_hosts" "$HOME/.ssh/known_hosts"
    openssl req -new -newkey rsa:4096 -nodes -out "$1.csr" -keyout "$1.key"
nimrod's avatar
nimrod committed
}
nimrod's avatar
nimrod committed
    local this_month last_month format
    format='+xbmc.shore.co.il:/srv/library/Comics/0-Day\ Week\ of\ %Y.%m.*'
    this_month="$( date "$format" )"
    last_month="$( date --date '1 month ago' "$format" )"
nimrod's avatar
nimrod committed
    rsync --prune-empty-dirs --ignore-missing-args --recursive --compress --progress --exclude "*.part" "$last_month" "$this_month" "$HOME/Downloads/Comics/"
    find "$HOME/Downloads/Comics/" -name "$(date --date '2 month ago' +'0-Day\ Week\ of\ %Y.%m.*')" -exec rm -r {} +
bfg () {
    [ -f "$HOME/Downloads/bfg.jar" ] || curl 'https://search.maven.org/remote_content?g=com.madgag&a=bfg&v=LATEST' -sLo "$HOME/Downloads/bfg.jar"
    java -jar "$HOME/Downloads/bfg.jar" "$@"
}

ddg () {
    lynx "https://duckduckgo.com/lite/?q=$(echo "$@" | urlencode)"
}

bump () {
    semver-bump "$1-release" && \
    git commit VERSION -m"- Bumped $1 version." && \
    git tag-version
}

match_ssl_pair () {
    if [ "$#" -ne 2 ]
    then
        echo "Usage: match_ssl_pair private_key certificate"
        return 1
    fi
    tempkey="$(mktemp)"
    tempcert="$(mktemp)"
    openssl pkey -pubout -outform PEM -in "$1" > "$tempkey"
    openssl x509 -pubkey -noout -in "$2" > "$tempcert"
    cmp "$tempkey" "$tempcert" > /dev/null
    exitcode="$?"
    rm "$tempkey" "$tempcert"
    return "$exitcode"
}

__run_duration () {
    # Assumes that $HOME/.prerun.$$ exists.
    local endtime starttime
    endtime="$(date +%s)"
    starttime="$(cat "$HOME/.prerun.$$")"
    rm "$HOME/.prerun.$$"
    echo "$(( endtime - starttime ))"
}

__prerun () {
    date +%s > "$HOME/.prerun.$$"
}

__prompt () {
    local exitstatus="$?"
    local runduration prompt
    #nocolor="\033[0m"
    #red="\033[31;1m"
    #yellow="\033[33;1m"
    prompt=""
    [ ! -f "$HOME/.prerun.$$" ] || runduration="$(__run_duration)"
    [ "${runduration:-0}" -lt "10" ] || prompt="[Run duration: $runduration] $prompt"
    [ -n "${runduration:-}" ] || exitstatus='0'
    [ "$exitstatus" = "0" ] || prompt="[Exit status: $exitstatus] $prompt"
# shellcheck disable=SC1090
. "$HOME/Documents/Shore/bundle_certs/bundle_certs"

if [ -n "${BASH:-}" ]
then
    shopt -s histappend
    shopt -s checkwinsize
    shopt -s cmdhist
    export PS0="\$(__prerun)"
    export PS1="\$(__prompt)\u@\h:\w\$ "
    export PROMPT_COMMAND="history -a"
    [ -f /etc/bash_completion ] && . /etc/bash_completion

    # shellcheck disable=SC1090
    for sourcefile in $HOME/.bash_completion.d/*
    do
        [ ! -f "$sourcefile" ] || . "$sourcefile"
    done
    ! command -v direnv > /dev/null || eval $(direnv hook bash)
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias diff='diff --color=auto'
nimrod's avatar
nimrod committed
    alias ip='ip -color'
nimrod's avatar
nimrod committed
    alias less='less --raw-control-chars'