diff --git a/shared/bash_logout b/shared/bash_logout new file mode 100644 index 0000000..de4f5f7 --- /dev/null +++ b/shared/bash_logout @@ -0,0 +1,7 @@ +# ~/.bash_logout: executed by bash(1) when login shell exits. + +# when leaving the console clear the screen to increase privacy + +if [ "$SHLVL" = 1 ]; then + [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q +fi diff --git a/shared/bash_profile b/shared/bash_profile index 9d6d644..b435b53 100755 --- a/shared/bash_profile +++ b/shared/bash_profile @@ -8,6 +8,15 @@ if [[ $- != *i* ]] ; then fi + +# History control +# don't use duplicate lines or lines starting with space +HISTCONTROL=ignoreboth +HISTSIZE=1000 +HISTFILESIZE=2000 +# append to the history file instead of overwrite +shopt -s histappend + _setpath() { for i in /usr/local/bin /usr/local/sbin /usr/local/sqlite/bin do diff --git a/shared/bashrc b/shared/bashrc new file mode 100644 index 0000000..228f496 --- /dev/null +++ b/shared/bashrc @@ -0,0 +1,495 @@ +# Source .bashrc for non-interactive Bash shells +export BASH_ENV=~/.bashrc + + +if [[ $- != *i* ]] ; then + # Shell is non-interactive. Be done now! + return +fi + +THISOS=$(uname | awk '{print tolower($1)}') +THISHOST=$(uname -n) + + +# History control +# don't use duplicate lines or lines starting with space +HISTCONTROL=ignoreboth +HISTSIZE=1000 +HISTFILESIZE=2000 +# append to the history file instead of overwrite +shopt -s histappend + +_setpath() { + local paths=( + /usr/local/bin + /usr/local/sbin + /usr/local/sqlite/bin + ) + + local i + for i in ${paths[@]}; do + # Move these paths to the front + PATH=$(echo $PATH | sed -e "s#$i##g") + if [ -d $i ]; then + PATH=$i:$PATH + fi + done + + PATH=`echo $PATH | sed -e 's/^\://' -e 's/\:\:/:/g'` + + export PATH +} + +_setldpath() { + local paths=( + /usr/local/sqlite/lib + ) + + local i + for i in ${paths[@]}; do + # Move these paths to the front + LD_LIBRARY_PATH=$(echo $LD_LIBRARY_PATH | sed -e "s#$i##g") + if [ -d $i ]; then + LD_LIBRARY_PATH=$i:$LD_LIBRARY_PATH + fi + done + + LD_LIBRARY_PATH=`echo $LD_LIBRARY_PATH | sed -e 's/^\://' -e 's/\:\:/:/g'` + + export LD_LIBRARY_PATH +} + +_setldrunpath() { + local paths=( + /usr/local/sqlite/lib + ) + + local i + for i in ${paths[@]}; do + # Move these paths to the front + LD_RUN_PATH=$(echo $LD_RUN_PATH | sed -e "s#$i##g") + if [ -d $i ]; then + LD_RUN_PATH=$i:$LD_RUN_PATH + fi + done + + LD_RUN_PATH=`echo $LD_RUN_PATH | sed -e 's/^\://' -e 's/\:\:/:/g'` + + export LD_RUN_PATH +} + +# Function to calculate total memory consumption grouped by process name +mem() { + local GREPCMD="cat" + if [ ! -z $1 ]; then + GREPCMD="grep -P $1" + fi + ps aux | awk '{print $4"\t"$6"\t"$11}' | + sort -k3 | + awk '{rss[$3]+=$2; per[$3]+=$1} END {for (i in rss) {print rss[i],i,per[i]"%"}}' | + sort -n | + eval $GREPCMD +} + +_setaliases() { + case "$THISOS" in + darwin) + # Use MacVim's terminal vim for awesomeness support + hash rvim 2>/dev/null && alias vim=rvim + local FIND_EGREP="-E ."; + local LS_COLORFLAG='-G' + ;; + linux) + alias ls='ls -G' + local FIND_EGREP=". -regextype posix-egrep"; + local LS_COLORFLAG='--color=auto' + ;; + esac + + alias ls="ls $LS_COLORFLAG" + alias ll='ls -hl' + alias l.='ls -d .* --color=auto' + alias tree='tree -C' + + alias cruft="find $FIND_EGREP -regex '.*swo|.*swp|.*pyc|.*pyo|.*~' -exec rm {} \;" + + alias p="ps aux |grep " + alias grep="grep --color=auto" + + alias facts="echo -ne '\033[36m'; curl -s randomfunfacts.com | grep '' | sed 's/.*\(.*\)<\/i>.*/\1/'; echo -ne '\033[0m'; tput sgr0" + + # show numeric permissions + local FORMATFLAG="-c" + if ( uname -a | grep Darwin >/dev/null); then + FORMATFLAG="-f" + fi + alias perms="stat $FORMATFLAG '%A %a %n' *" + + # Add an "alert" alias for long running commands. Use like so: + # sleep 10; alert + alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' + +# alias dotfiles='git --git-dir=$HOME/.dotfiles.git/ --work-tree=$HOME' +# alias d='dotfiles' + alias .bashrc='source ~/.bashrc' + +# alias vimall='vim -p $(find . -type f)' + +# alias vp='vagrant provision' +# alias vdu='vagrant destroy -f; vagrant up' +# alias be='bundle exec' +# alias bek='bundle exec kitchen' + alias sha256='shasum -a 256' + +# local JSONCHECK="require 'json';puts(JSON.pretty_generate JSON.parse(STDIN.read))" +# alias checkjson="ruby -e \"$JSONCHECK\"" + + alias path='echo -e ${PATH//:/\\n}' +} + +_setlocalaliases() { + case "$THISHOST" in + MINT660) + alias ansible-playbook='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-playbook' + alias ansible-lint='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-lint' + alias vgit='docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@" ' + alias mycicd='/volume17/zNFS2/Sync${THISHOST}/zNFS2/zDocky/mycicd.sh' + ;; + MINT661) + alias ansible-playbook='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-playbook' + alias ansible-lint='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-lint' + alias vgit='docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@" ' + alias mycicd='/volume12/zTools/Sync${THISHOST}/zTools/zDocky/mycicd.sh' + ;; + MINT662) + alias ansible-playbook='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-playbook' + alias ansible-lint='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-lint' + alias vgit='docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@" ' + alias mycicd='/volume12/zTools/Sync${THISHOST}/zTools/zDocky/mycicd.sh' + ;; + MINT663) + alias ansible-playbook='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-playbook' + alias ansible-lint='docker run -it --rm -v /volume12/zTools/Sync${THISHOST}/zTools/zAnsible:/ansible dansible:latest ansible-lint' + alias vgit='docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@" ' + alias mycicd='/volume12/zTools/Sync${THISHOST}/zTools/zDocky/mycicd.sh' + ;; + esac +} + +# function git () { +# (docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@") +# } + + +_setprompt() { + local SAVEHISTORY="history -a" + local SETWINDOWTITLE='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"' + + local TMUXCMD='' + if [ -n $TMUX ]; then + local TMUXENV='tmux set-environment -g CWD "$PWD"' + local TMUXPATH='tmux set-option default-path $PWD' + local TMUXCMD="($TMUXENV 2>/dev/null && $TMUXPATH 2>/dev/null >&2)" + fi + + export PROMPT_COMMAND="$SETWINDOWTITLE;$SAVEHISTORY;$TMUXCMD" + + # Reset + local Color_Off='\[\e[0m\]' # Text Reset + + # Regular Colors + local Black='\[\e[0;30m\]' # Black + local Red='\[\e[0;31m\]' # Red + local Green='\[\e[0;32m\]' # Green + local Yellow='\[\e[0;33m\]' # Yellow + local Blue='\[\e[0;34m\]' # Blue + local Purple='\[\e[0;35m\]' # Purple + local Cyan='\[\e[0;36m\]' # Cyan + local White='\[\e[0;37m\]' # White + local NEWLINE="\n" + + # Use for chroots, venvs, or other info that should be stuck in the prompt + EXTRAPROMPT=$2 + + case "$1" in + simple) + export PS1="\[\[\e[32;1m\]\h$EXTRAPROMPT \W> \[\e[0m\]" + ;; + 2line) + # Default PROMPT_COLOR values + : ${PROMPT_COLOR:=Yellow} + : ${PROMPT_COLOR2:=Blue} + local C1=${!PROMPT_COLOR} + local C2=${!PROMPT_COLOR2} + + # ┌(jer@myhost)─(✗)─(10:18 PM Sun Apr 14) + # └─(~/dev/git/myproject)─> + local DASH="\342\224\200" + local X="\342\234\227" + local ERRCODE="\$([[ \$? != 0 ]] && echo \"${DASH}(${Red}${X}${White})\")${DASH}" + + LINE1="${White}\342\224\214(${C1}\u@\h$EXTRAPROMPT${White})${ERRCODE}(${C1}\@ \d${White})" + local LINE2="\342\224\224\342\224\200(${C2}\w${White})-> " + export PS1="${NEWLINE}${LINE1}${NEWLINE}${LINE2}${Color_Off}" + ;; + 3line) + _setprompt 2line + export PS1="$PS1${NEWLINE}${White}\342\224\224\342\224\200>${Color_Off} " + ;; + esac + +} + +_sethistory() { + export HISTFILE=~/.bash_history + export HISTSIZE=10000 + export HISTFILESIZE=${HISTSIZE} + export HISTCONTROL=ignoredups:ignorespace + shopt -s histappend + + # Do *not* append the following to our history: + HISTIGNORE='\&:fg:bg:ls:pwd:cd ..:cd ~-:cd -:cd:jobs:set -x:ls -l:ls -l' + HISTIGNORE=${HISTIGNORE}':%1:%2:popd:top:shutdown*' + export HISTIGNORE + + # Save multi-line commands in history as single line + shopt -s cmdhist +} + +_sources() { + local sources=( + ${HOME}/.nvm/nvm.sh + /etc/bash_completion + ${HOME}/.sources + ${HOME}/.sources/${HOSTNAME} + ${HOME}/.sources/${THISOS} + ${HOME}/.bash_completion.d + ${HOME}/.rvm/scripts/rvm + ) + + local i + for i in ${sources[@]}; do + # Source files + if [ -f $i ]; then + source $i + continue + fi + + # Source all files in a directory + if [ -d $i ]; then + for j in $i/*; do + if [ -f $j ]; then + source $j + fi + done + fi + done +} + +# Use lesspipe for more powerful less output +_moreless() { + local lesspipe='' + if ( type lesspipe >/dev/null 2>&1 ); then + lesspipe=$(which lesspipe) + fi + if ( type lesspipe.sh >/dev/null 2>&1 ); then + lesspipe=$(which lesspipe.sh) + fi + + if [ ! "x${lesspipe}" = "x" ]; then + export LESSOPEN="|$lesspipe %s" + fi +} + +_manpagecolor() { + export LESS_TERMCAP_mb=$'\E[01;31m' + export LESS_TERMCAP_md=$'\E[01;31m' + export LESS_TERMCAP_me=$'\E[0m' + export LESS_TERMCAP_se=$'\E[0m' + export LESS_TERMCAP_so=$'\E[01;44;33m' + export LESS_TERMCAP_ue=$'\E[0m' + export LESS_TERMCAP_us=$'\E[01;32m' +} + +# Vagrant up plus vagrant ssh +vssh() { + vagrant up $1 + vagrant ssh $1 +} + +tmuxssh() { + for i in $@; do tmux split -v "ssh $i"; tmux select-layout tiled; done +} + +# Check if we're online +connected() { + case "$THISOS" in + darwin) + ping -c1 -w2 google.com > /dev/null 2>&1; + ;; + linux) + ping -c1 -t2 google.com > /dev/null 2>&1; + ;; + esac +} + +# Fetch a little info about a domain name +url-info() +{ + doms=$@ + if [ $# -eq 0 ]; then + echo -e "No domain given\nTry $0 domain.com domain2.org anyotherdomain.net" + fi + local i + for i in $doms; do + _ip=$(host $i|grep 'has address'|awk {'print $4'}) + if [ "$_ip" == "" ]; then + echo -e "\nERROR: $i DNS error or not a valid domain\n" + continue + fi + ip=`echo ${_ip[*]}|tr " " "|"` + echo -e "\nInformation for domain: $i [ $ip ]\nQuerying individual IPs" + for j in ${_ip[*]}; do + echo -e "\n$j results:" + whois $j |egrep -w 'OrgName:|City:|Country:|OriginAS:|NetRange:' + done + done +} + +# Map over a list of files +map-find() { find $1 -name $2 -exec ${@:3} {} \; ; } + +# Map over a bunch of lines piped in +map() { + [ -z $1 ] && exit 1 + local IFS="$(printf '\n\t')" + local i cmd + case "$@" in + *\$i*) cmd="$@" ;; + *) cmd="$@ \$i" ;; + esac + while read i; do + eval $cmd + done +} + +# Filter on a predicate. Return all of the matches +filter() { + [ -z $1 ] && exit 1 + local IFS="$(printf '\n\t')" + local i cmd + case "$@" in + *\$i*) cmd="$@" ;; + *) cmd="$@ \$i" ;; + esac + while read i; do + eval $cmd >/dev/null && echo $i; + done +} + +# Execute command $i times, returning the time +timerepeat() { + time ( + local count=$1; shift; + for ((i=0; i< $count; i++)); do + eval $@ + done ) +} + +# For the tmux status bar +#git_tmuxstatus() { +# [ -d .git ] || git rev-parse --git-dir 2> /dev/null || return +# local BRANCH=$(git branch --no-color 2>/dev/null | sed -e "/^[^*]/d" -e "s/* //") +# local ALLCHANGED=$(git status --porcelain 2>/dev/null | wc -l | tr -d ' ') +# #local CHANGED=$(git status --porcelain 2>/dev/null| egrep "^(M| M)" | wc -l) +# #local NEW=$(git status --porcelain 2>/dev/null| grep "^??" | wc -l) +# echo "[${BRANCH}:${ALLCHANGED}]" +#} + +# Clears local merged branches and tracking branches that aren't on the server +#git_prune() { +# find . -type dir -name .git -exec sh -c " +# cd {}/..; +# echo Found repo: $(pwd); +# git branch --merged | +# grep -v -P '^(\*| ) master$' | +# xargs -n 1 git branch -d; +# git remote prune origin; +# " \; +#} + +randomizelines() { + awk 'BEGIN {srand()} {print int(rand()*1000000) "\t" $0}' $1 | + sort -n | cut -f 2- +} + +#memoize() { +# local CACHETIME=$1 +# [[ "$CACHETIME" =~ ^[0-9]+$ ]] && shift || CACHETIME=1 +# local SHA=$( shasum<<<$@ | cut -f1 -d' ' ) +# local MEMODIR=/tmp/bash_memoized/$USER +# local MEMOFILE=${MEMODIR}/${SHA} +# +# [ -d $MEMODIR ] || mkdir -p $MEMODIR +# ( [ ! -f $MEMOFILE ] || ( test $(find $MEMOFILE -mmin +${CACHETIME})) ) && $@ | tee ${MEMOFILE} || cat $MEMOFILE +#} + +# Show what is on a certain port +port() { lsof -i :"$1" ; } +# Create an executable file with the specified shebang line +shebang() { if i=$(which $1); then printf '#!%s\n\n' $i > $2 && chmod +x $2 && $EDITOR + $2 ; else echo "'which' could not find $1, is it in your \$PATH?"; fi; } +# Get stock quote +#stock() { curl -s "http://download.finance.yahoo.com/d/quotes.csv?s=$1&f=l1" ; } + +fur() { curl -sL 'http://www.commandlinefu.com/commands/random/plaintext' | grep -v "^# commandlinefu" ; } +#alias funfacts='wget http://www.randomfunfacts.com -O - 2>/dev/null | grep \ | sed "s;^.*\(.*\).*$;\1;";' +nicemount() { (echo "DEVICE PATH TYPE FLAGS" && mount | awk '$2=$4="";1') | column -t ; } +wiki() { dig +short txt $1.wp.dg.cx; } + +#clip() { +# if [[ $THISOS == darwin ]]; then +# pbcopy $@ +# else +# xclip -sel clip $@ +# fi +#} + +_setpath +_setldpath +_setldrunpath +_setaliases +_setlocalaliases +_setprompt 2line +_sethistory +_moreless +_manpagecolor + +export EDITOR=vim + +# Correct minor spelling errors in cd commands +shopt -s cdspell +# Enable egrep-style pattern matching +shopt -s extglob +shopt -s checkwinsize + +export CLICOLOR=1 +export LSCOLORS=ExFxCxDxBxegedabagacad +#export TERM=ansi +export TERM=xterm-256color +#export PIP_REQUIRE_VIRTUALENV=true + +export GOPATH=${HOME}/dev/go + +_sources +# Mac likes to discard ctl-o +if [[ $THISOS == darwin ]]; then + stty discard undef +fi + +export ANSIBLE_STDOUT_CALLBACK=yaml +export GPODDER_HOME=~/DocumentsPodcasts/config +export GPODDER_DOWNLOAD_DIR=~/DocumentsPodcasts/downloads + +PATH=${PATH}:.local/bin ; export PATH +export SIGNAL_PHONE_NUMBER=+447761475272 +