about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorDavid Morgan <david.morgan@gmail.com>2016-04-11 08:29:41 -0400
committerDavid Morgan <david.morgan@gmail.com>2016-04-11 08:29:41 -0400
commitbc8d66d1476c59957b8152358ff9b0f3d84936bd (patch)
tree305c74dd3b63569bb0daa163f562f524a16e04d9
parent15fa3489c8da1099085b1601f9ecc47b5c61c636 (diff)
downloaddotfiles-bc8d66d1476c59957b8152358ff9b0f3d84936bd.tar.gz
Add bashrc
-rw-r--r--.bashrc515
1 files changed, 515 insertions, 0 deletions
diff --git a/.bashrc b/.bashrc
new file mode 100644
index 0000000..8e86ebe
--- /dev/null
+++ b/.bashrc
@@ -0,0 +1,515 @@
+## This is a mess, and needs tidying up. Hopefully it works on linux and (free)bsd, and can be sourced repeatedly without making PATH grow each time.
+
+export LANG=en_GB.UTF-8
+
+if [[ $- != *i* ]]; then
+    # Non-interactive shell
+    return
+fi
+
+export HOSTNAME=${HOSTNAME:-$(hostname -s)}
+export HOST=$HOSTNAME
+export USER=${USER:-$(whoami)}
+
+#if [[ x$SCRIPT == x ]]
+#then
+#    script -q typescripts/script-`date +%Y%m%d%H%M%S``tty|tr / -`-$$
+#    exit
+#fi
+
+## use _ for "internal" functions, and - for those intended to be used
+## interactively
+
+do_interesting_prompt() {
+    prompt_choice=$1
+    # col for colour, not column
+    reset_col='\[\e[0m\]'
+
+    sif_col='\[\e[0;35m\]'
+    tyr_col='\[\e[0;36m\]'
+    basil_col='\[\e[0;33m\]'
+    gendros_col='\[\e[1;37m\]'
+
+    host_col=$reset_col
+    # TODO make all of these unique again
+    [[ "x$HOST" == "xsif" ]] && host_col=$sif_col
+    [[ "x$HOST" == "xtyr" ]] && host_col=$tyr_col
+    [[ "x$HOST" == "xsagacity" ]] && host_col=$tyr_col
+    [[ "x$HOST" == "xwolfman" ]] && host_col=$tyr_col
+    [[ "x$HOST" == "xbasil" ]] && host_col=$basil_col
+    [[ "x$HOST" == "xgendros" ]] && host_col=$gendros_col
+    [[ "x$HOST" == "xCHESTER" ]] && host_col=$gendros_col
+    [[ "x$HOST" == "xtriton" ]] && host_col=$gendros_col
+
+    djm_col='\[\e[0;32m\]'
+    wiz_col='\[\e[1;32m\]'
+    deejayem_col='\[\e[1;32m\]'
+
+    user_col=$reset_col
+    [[ "x$USER" == "xdjm" ]] && user_col=$djm_col
+    [[ "x$USER" == "xwizard" ]] && user_col=$wiz_col
+    [[ "x$USER" == "xdeejayem" ]] && user_col=$deejayem_col
+    [[ "x$USER" == "xdavidmo" ]] && user_col=$deejayem_col
+
+    at_col='\[\e[0;37m\]'
+    [[ -n "$SSH_CLIENT" ]] && at_col='\[\e[1;33m\]'
+
+    time_col='\[\e[0;36m\]'
+    # don't clash with host_col
+    [[ "x$HOST" == "xtyr" ]] && time_col='\[\e[1;33m\]'
+    [[ "x$HOST" == "xsagacity" ]] && time_col='\[\e[1;33m\]'
+    [[ "x$HOST" == "xwolfman" ]] && time_col='\[\e[1;33m\]'
+
+    dir_col='\[\e[1;34m\]'
+    sb_col=$reset_col # Square brackets
+    rb_col='\[\e[0;32m\]' # Round brackets
+    cb_col='\[\e[0;32m\]' # Curly brackets
+    cn_col='\[\e[0;35m\]' # Command numbers
+
+    # Should vaguely correspond to user_col, but emphasise whether or not
+    # we're using ssh (shutting down the wrong machine is not cool)
+    prompt_col='\[\e[0;32m\]'
+    [[ -n "$SSH_CLIENT" ]] && prompt_col='\[\e[1;32m\]'
+
+    # col for colour, not column (still)
+    # \h on first line as well as the second, because ^R obscures the second
+    if [[ $prompt_choice -eq 1 ]]; then
+        export PS1="$time_col\d \t $cb_col{$host_col\h$cb_col}\n$sb_col[$user_col\u$at_col@$host_col\h $dir_col\w$sb_col]$rb_col($cn_col\#:\j:"'$?'"$rb_col)$prompt_col\$$reset_col "
+    elif [[ $prompt_choice -eq 2 ]]; then
+        export PS1="$sb_col[$user_col\u$at_col@$host_col\h $dir_col\w$sb_col] $time_col\d \t $rb_col($cn_col\#:\j:"'$?'"$rb_col)\n$prompt_col\$$reset_col "
+    elif [[ $prompt_choice -eq 3 ]]; then
+        export PS1="$sb_col[$user_col\u$at_col@$host_col\h $dir_col\w$sb_col]$rb_col($cn_col\#:\j:"'$?'"$rb_col)$prompt_col\$$reset_col "
+    else
+        do_interesting_prompt 2
+    fi
+}
+
+do_boring_prompt() {
+    export PS1='\n\d \t {\h}\n[\u@\h \w](\#)\$ '
+}
+
+if ! [ -x "$(command -v gdircolors)" ]; then
+    dircolors=`type -p gdircolors`
+else
+    dircolors=`type -p dircolors`
+fi
+
+if [ -z ${dircolors+x} ]; then
+    if [[ -f ~/.dir_colors ]]; then
+        eval `$dircolors -b ~/.dir_colors`
+    else
+        eval `$dircolors -b /etc/DIR_COLORS`
+    fi
+fi
+#alias ls="ls --color=no"
+
+
+## PATH - TODO reduce duplication with a function
+if [[ -n "${PATH/*\/usr\/local\/mpi\/openmpi\/bin:*/}" ]] ; then
+    export PATH="/usr/local/mpi/openmpi/bin:$PATH"
+fi
+
+if [[ -n "${PATH/*\/usr\/local\/texlive\/2009\/bin\/i386-freebsd8:*/}" ]] ; then
+    export PATH="/usr/local/texlive/2009/bin/i386-freebsd8:$PATH"
+fi
+
+if [[ -n "${PATH/*$HOME\/local\/bin:*/}" ]] ; then
+    export PATH="$HOME/local/bin:$PATH"
+fi
+
+if [[ -n "${PATH/*$HOME\/.local\/bin:*/}" ]] ; then
+    export PATH="$HOME/.local/bin:$PATH"
+fi
+
+if [[ -n "${PATH/*$HOME\/games:*/}" ]] ; then
+    export PATH="$HOME/games:$PATH"
+fi
+
+if [[ -n "${PATH/*$HOME\/bin:*/}" ]] ; then
+    export PATH="$HOME/bin:$PATH"
+fi
+
+## MANPATH
+if [[ -n "${MANPATH/*\/usr\/local\/mpi\/openmpi\/man:*/}" ]] ; then
+    export PATH="/usr/local/mpi/openmpi/man:$PATH"
+fi
+
+if [[ -n "${MANPATH/*$HOME\/local\/man:*/}" ]] ; then
+    export PATH="$HOME/local/man:$PATH"
+fi
+
+if [[ -n "${MANPATH/*$HOME\/local\/share\/man:*/}" ]] ; then
+    export PATH="$HOME/local/share/man:$PATH"
+fi
+
+
+# Should test to see if we're capable of being interesting or not (TODO)
+do_interesting_prompt 2
+#do_boring_prompt
+
+# Change the window title of X terminals 
+case $TERM in
+    xterm*|rxvt*|Eterm)
+        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
+        ;;
+#    screen) # don't want this with tmux...
+#        PROMPT_COMMAND='echo -ne "\033k${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
+#        ;;
+esac
+
+[ -f /etc/bash_completion ] && source /etc/bash_completion
+#[ -f /usr/local/etc/bash_completion ] && source /usr/local/etc/bash_completion
+[ -f /usr/local/share/bash-completion/bash_completion.sh ] && source /usr/local/share/bash-completion/bash_completion.sh
+set -C
+
+#export PATH=${HOME}/bin:${HOME}/local/bin:${HOME}/.local/bin:$PATH
+#export PATH=/usr/local/games/:$PATH
+#export MPD_HOST=redacted@localhost
+#export MPD_PORT=6600
+#export NNTPSERVER=news.btopenworld.com
+#export NNTPSERVER=news.individual.net
+#export NNTPSERVER=public.teranews.com
+#export NNTPSERVER=reader.news4all.se
+export HOSTNAME=`hostname -s`
+export HOST=$HOSTNAME
+[ -f /usr/bin/vim ] && export EDITOR=/usr/bin/vim
+[ -f /usr/local/bin/vim ] && export EDITOR=/usr/local/bin/vim
+export PAGER=/usr/bin/less
+#export PERL5LIB="${HOME}/perl/share/perl/:${HOME}/lib/perl/:${HOME}/perl5/"
+export MOZ_NO_PANGO=1
+
+alias y=yes
+alias s="sudo"
+alias svi="sudo vim"
+alias gvi=gvim
+alias vi=vim
+alias viclean="rm *~"
+alias vidotclean="rm .*~"
+alias vibinclean="rm ~/bin/*~"
+alias trunc="colrm 80"
+
+alias pc="${HOME}/bin/pocket-cli.py"
+
+[ -x "$(command -v wget)" ] || alias fetch="wget"
+[ -f /etc/debian_version ] && alias psearch="apt-cache search"
+
+#alias esv='diatheke -b ESV -k'
+alias esv="bible esv"
+alias asv="diatheke -b ASV -k"
+alias niv="diatheke -b NIV -k"
+alias tniv="diatheke -b TNIV -k"
+alias kjv="diatheke -b KJV -k"
+alias nkjv="diatheke -b NKJV -k"
+alias nasb="diatheke -b NASB -k"
+alias amp="diatheke -b Amp -k"
+alias ylt="diatheke -b YLT -k"
+alias nlt="diatheke -b NLT -k"
+alias Geneva="diatheke -b Geneva1599 -k"
+alias hcsb="diatheke -b HCSB -k"
+alias net="diatheke -b NETfree -k"
+
+#alias host=hostx
+#alias cc_="gcc -ansi -pedantic-errors -Wall -W -Werror -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wbad-function-cast -Wredundant-decls -Wcast-qual -Wundef -Winline -Wpointer-arith -Wcast-align -Wchar-subscripts -Wshadow -Wwrite-strings"
+#alias noxbell=LD_PRELOAD=$HOME/noxbell/libnoxbell.so
+
+alias m='mpc'
+alias madd='mpc add'
+alias mcl='mpc clear'
+alias mp='mpc play'
+alias mls='mpc playlist'
+alias msearch='mpc search'
+# individual aliases so they can be tab completed
+alias msearchalbum='mpc search album'
+alias msearchartist='mpc search artist'
+alias msearchcomposer='mpc search composer'
+alias msearchfile='mpc search filename'
+alias msearchtitle='mpc search title'
+alias msearchfilename='mpc search filename'
+alias mupdate='mpc update'
+
+#source ~/bashmp.sh
+keychain ~/.ssh/id_dsa
+keychain ~/.ssh/id_rsa
+#. ~/.keychain/${HOSTNAME}-sh-gpg
+. ~/.keychain/${HOSTNAME}-sh
+
+
+#if ! type tac &>/dev/null; then
+if ! [ -x "$(command -v tac)" ]; then
+    alias tac="sed -n '1!G;\$p;h'"
+fi
+
+shopt -s extglob
+
+set -o noclobber
+set -o vi
+bind '"\e."':yank-last-arg
+bind -m vi-command ".":insert-last-argument
+bind -m vi-insert "\C-l.":clear-screen
+bind -m vi-insert "\C-a.":beginning-of-line
+bind -m vi-insert "\C-e.":end-of-line
+bind -m vi-insert "\C-w.":backward-kill-word
+
+export HISTSIZE=2000
+export HISTFILESIZE=2000
+export HISTCONTROL=ignorespace:ignoredups
+
+# easily done with tail and head, but where's the fun in that?
+nth-from-end() {
+    n=$1
+    sed -n -e :a -e "\${P;q;};N;$((n+1)),\$D;ba" ${2}
+}
+
+most-recent() {
+    ls -t|head -1
+}
+
+function google () {
+    w3m http://www.google.co.uk/search?q="$@";
+}
+
+function swap-lines() {
+    sed -n "${1}h;${2}{p;x;p};2,3!p" ${3}
+}
+
+function maths()
+{
+     echo "scale=6;${@/x/*}"|bc
+}
+
+function title()
+{
+    wget --quiet -O- "${1}" | sed -n 's/<title>\([^<]*\)<\/title>.*/\1/p'
+}
+
+alias set_last_dir='last_dir=$(expr "`history -p !$`" : "\(.*/\)");'
+
+# Run commands on files in the same directory as the file in !$ (old = on last directory)
+old() {
+    args=($@)
+    command=${args[@]:0:${#args[@]}-1}
+    file=${args[${#args[@]}-1]}
+    last_dir=$(expr "`history -p !$`" : "\(.*/\)")
+    echo ${command} ${last_dir}${file}
+    ${command} ${last_dir}${file}
+}
+
+old2() {
+    command=$1
+    shift
+    last_dir=$(expr "`history -p !$`" : "\(.*/\)")
+    echo ${command} ${last_dir}${file}
+    for file in $@
+    do
+        echo \$ ${command} ${last_dir}${file}
+        ${command} ${last_dir}${file}
+        echo
+    done
+}
+
+#get_default_net_if()
+#{
+#    sudo route -n get -inet default
+#}
+
+# for use with keyboard shortcuts
+x()
+{
+    xclip -o
+}
+xspeak()
+{
+    echo "`x`"|festival --tts
+    #espeak "`x`"
+}
+
+function ag_less()
+{
+    ag  --color "${@}"|less -r
+}
+
+function java_run()
+{
+    javac "${@}"
+    java "${@/.java/}"
+}
+
+# useful for aliases
+function chdir()
+{
+
+    if [ $# -eq 0 ]; then
+        cd -
+    else
+        cd $@
+        pwd
+    fi
+}
+
+function run_cmd()
+{
+    echo "${@}"
+    "${@}"
+}
+
+alias gitlog="git log --since=yesterday --name-only"
+alias gitlog1="git log -p -1"
+alias gitfp1="git format-patch --stdout -1"
+alias gitdiff="git diff origin/develop"
+alias hadd='run_cmd $(history -p ^diff^add)'
+
+alias dogs='run_cmd docker ps; run_cmd docker logs -f $(docker ps|sed 1d|awk '"'"'{print $1;}'"'"')'
+alias undock='sudo umount `mount|grep -o "/var/lib/docker/aufs/mnt/[a-z0-9]*"`'
+alias gp="chdir ${VIEW_DIR} ; run_cmd git pull ; chdir"
+
+
+function esvapi()
+{
+    ref=${@// /%20}
+    #wget --quiet -O- "http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=$ref"|lynx -dump -stdin|sed -n 's/\[[0-9]\+\] \?//g;/^Footnotes\|References/q;p'
+    wget --quiet -O- "http://www.esvapi.org/v2/rest/passageQuery?key=IP&passage=$ref"|lynx -dump -stdin|sed -n '/^\s*$/d;s/\[[0-9]\+\] \?//g;p;/(ESV)$/q'
+}
+
+function bgw()
+{
+    bv=${1}
+    shift
+    ref=${@// /%20}
+    wget --quiet -O- "http://www.biblegateway.com/passage/?search=${ref}&version=${bv}"|lynx -dump -stdin|sed -n "/^$@.*${bv}/,/^Footnotes/p"|grep -v "^Footnotes"
+}
+
+function dl()
+{
+    DAILY_LIGHT_URL="http://www.gnpcb.org/esv/mobile/devotions/daily.light/"
+    #wget --quiet -O- "${DAILY_LIGHT_URL}"|lynx -dump -stdin|sed -n '/Morning/,/^\s*\[[0-9]/p'|sed -n '/^\s*\[[0-9]/q;p'|less
+    if [ `date +%P` == "am" ]
+    then
+        wget --quiet -O- "${DAILY_LIGHT_URL}"|lynx -dump -stdin|sed -n '/^Morning$/,/^Evening$/p'|sed -n '/^\s*\[[0-9]/q;p'|head -n -2|less
+    elif [ `date +%P`  == "pm" ]
+    then
+        wget --quiet -O- "${DAILY_LIGHT_URL}"|lynx -dump -stdin|sed -n '/^Evening$/,/^\s*\[[0-9]/p'|sed -n '/^\s*\[[0-9]/q;p'|head -n -1|less
+    else
+        echo "Neither AM nor PM!"
+    fi
+}
+
+function pmp()
+{
+    #sed -n "/`date +'%B %-d.%p'|sed 's,AM,Morning,;s,PM,Evening,'`/,/`date --date=tomorrow +'%B %-d'`/p" rh_pmp.txt | head -n -1 | less
+    if [ `date +%P` == "am" ]
+    then
+        #sed -n "/`date +'%B %-d.Morning'`/,/`date +'%B %-d.Evening'`/p" rh_pmp.txt | head -n -1 | tr -d '\f' | less
+        xzcat rh_pmp.txt.xz | sed -n "/`date +'%B %-d.Morning'`/,/`date +'%B %-d.Evening'`/p" | head -n -1 | tr -d '\f' | less
+    elif [ `date +%P` == "pm" ]
+    then
+        #sed -n "/`date +'%B %-d.Evening'`/,/`date --date=tomorrow +'%B %-d.Morning'`/p" rh_pmp.txt | head -n -1 | tr -d '\f' | less
+        xzcat rh_pmp.txt.xz | sed -n "/`date +'%B %-d.Evening'`/,/`date --date=tomorrow +'%B %-d.Morning'`/p" | head -n -1 | tr -d '\f' | less
+    else
+        echo "Neither AM nor PM!"
+    fi
+}
+
+function wsc()
+{
+    grep ^[QA]$1: wsc.txt | fold -s | col -b
+}
+function wscq()
+{
+    grep ^Q$1: wsc.txt | fold -s | col -b
+}
+function wsca()
+{
+    grep ^A$1: wsc.txt | fold -s | col -b
+}
+
+function wlc()
+{
+    grep ^[QA]$1: wlc.txt | fold -s | col -b
+}
+function wlcq()
+{
+    grep ^Q$1: wlc.txt | fold -s | col -b
+}
+function wlca()
+{
+    grep ^A$1: wlc.txt | fold -s | col -b
+}
+
+bible() {
+    book=$1
+    shift
+    case $book in
+    esv|niv|tniv|nasb|kjv|nkjv|nlt|hcsb|ylt|asv)
+      book=${book^^*}
+      ;;
+    amp)
+      book=${book^*}
+      ;;
+    net)
+      book=NETfree
+      ;;
+    esac
+    diatheke -b "${book}" -k "${*}"|grep -v '^$'|sed -e :a -e '/[0-9]: $/N;s/\([0-9][0-9]*\): \n/\1: /;ta'
+}
+
+pll() {
+    bible esv $@
+    bible niv $@
+    bible tniv $@
+    bible kjv $@
+    bible nkjv $@
+    bible nasb $@
+    bible net $@
+    bible hcsb $@
+}
+
+
+# cricinfo functions (check, replace_urls, add_urls, remove_urls count_urls)
+function check()
+{
+    while read i ; do
+        #wget --quiet -O- "${i}" | sed -n 's/<title>\([^|]*\).*/\1/p'
+        wget --quiet -O- "${i}" | sed -n 's/<title>\([^|<]*\).*/\1/p'
+    done < ${HOME}/urls.txt
+}
+
+function replace_urls()
+{
+    if [ $# -eq 0 ]; then
+        cat >| ${HOME}/urls.txt
+    else
+        : >| ${HOME}/urls.txt
+        for url in "$@"; do
+            echo $url >> ${HOME}/urls.txt
+        done
+    fi
+}
+
+function add_urls()
+{
+    if [ $# -eq 0 ]; then
+        cat >> ${HOME}/urls.txt
+    else
+        for url in "$@"; do
+            echo $url >> ${HOME}/urls.txt
+        done
+    fi
+}
+
+function remove_urls()
+{
+    sed -i ${1}d ${HOME}/urls.txt
+}
+
+function count_urls()
+{
+    wc -l ${HOME}/urls.txt
+}
+
+#pgrep -f raven || screen -S rav -d -m ssh -X -R 6728:localhost:22221 wadh2045@raven.linux.ox.ac.uk
+#pgrep -f ecs || screen -S ecs -d -m ssh -X -R 6728:localhost:22221 m04dm@booth1.ecs.ox.ac.uk
+#pgrep -f crow || screen -S crow -d -m ssh -X -D 8080 wadh2045@crow.linux.ox.ac.uk
+
+true
+
+# vim: set et ts=4 tw=120 :