# ~/.bashrc: executed by bash(1) for non-login shells. export TZ='America/Detroit' memoize_retval() { local var="$1" func="$2" if [ -z "${!var}" ]; then eval "$func" eval "$var=$?" fi return ${!var} } ### utility functions ### quiet() { "$@" >/dev/null 2>&1; } match_glob() { eval "case \"$2\" in $1) true ;; *) false ;; esac"; } match_path() { match_glob "*:$1:*|$1:*|*:$1" "$PATH"; } if match_glob "*zsh" "$SHELL"; then have() { for c in "$@"; do quiet whence -p "$c" || return 1; done; } else have() { for c in "$@"; do quiet type -P "$c" || return 1; done; } fi add_path() { if [ "$1" = "-a" ]; then local after=1 shift else local after= fi for p in "$@"; do if [ -d "$p" ] && ! match_path "$p" ]; then [ -n "$after" ] && PATH="$PATH:$p" [ -z "$after" ] && PATH="$p:$PATH" fi done } add_stack_binpath() { [ "$STACK_PATH_HAS_BEEN_SET" ] && return local result="$( stack path 2>&1 | while read k v do case "$k" in bin-path:) printf 'PATH=%q:%q\n' "$PATH" "${v%:$PATH}" # add to _end_ of PATH ;; ghc-package-path:) printf 'GHC_PACKAGE_PATH=%q\n' "$v" echo 'export GHC_PACKAGE_PATH' ;; esac done )" [ "$result" ] && eval "$result" && export STACK_PATH_HAS_BEEN_SET=y } ### bash settings, general environment ### add_path -a /usr/games add_path "$HOME/.cabal/bin" "$HOME/.local/bin" "$HOME/bin" if have stack; then add_stack_binpath fi if match_glob "*zsh" "$SHELL"; then autoload -U select-word-style select-word-style bash # WORDCHARS='*?_-[]~\!#$%^(){}<>|`@#$%^*()+:?' fi if match_glob "*bash" "$SHELL"; then export PS1='\u@\h:\w\$ ' fi if have sea; then eval `sea` # sets PS1 and PROMPT_COMMAND # must come before dynamic titles section, below fi case $SHELL in bash) shopt -s checkwinsize ;; *) ;; esac umask 002 if have vim; then alias vi=vim export EDITOR=vim elif have vi; then export EDITOR=vi fi if have less; then export PAGER=less export LESS=-XSr have lesspipe && eval "$(lesspipe)" elif have w3m; then export PAGER=w3m elif have more; then export PAGER=more fi ### dynamic titles for xterm & screen ### function set_xterm_title () { # This is unneeded since my .screenrc is configured to set the xterm # title to the hardstatus line, which is configured to include the # current screen title... and a good thing too, or xterm titles # wouldn't change when screen windows were switched... echo -ne "\033]0;$*\007" >&2 } function set_screen_title () { echo -ne "\033k$*\033\\" >&2 } function xterm_preexec () { set_xterm_title ${PREEXEC_CMD[@]} } function screen_preexec () { set_screen_title ${PREEXEC_CMD[@]} } function screen_postexec () { set_screen_title "${PWD/$HOME/~}" } function xterm_postexec () { set_xterm_title "$USER@$HOST:${PWD/$HOME/~}" } if [ -n "$STY" ]; then PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }screen_postexec" PREEXEC_COMMAND=screen_preexec elif match_glob "xterm*" "$TERM"; then HOST=$(hostname) PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }xterm_postexec" PREEXEC_COMMAND=xterm_preexec fi ### program settings and aliases ### alias ip=/sbin/ip alias ipaddr='ip addr' if have ps && match_glob 'procps*' $(ps -V 2>/dev/null); then export PS_FORMAT=pid,user:6,tty,\%mem,\%cpu,start,cmd alias p='ps x -H' have less && alias pp='p a |grep -v " \[[^] ]\+\]\$"| less -RSeX' # have less && alias pp='p a |sed -ne '\''1,/^[^ ]* *1 /!p;/^[^ ]* *1 /p'\''| less -RSeX' fi export PARINIT='rTbgqR B=.,?_A_a Q=_s>|' export JACK_START_SERVER=1; if have irssi; then alias anet='irssi -c Afternet' alias freenode='irssi -c Freenode' fi if have Xvnc; then alias startvnc='xinit -- `which Xvnc` :1 -geometry 800x600' fi if have xemacs; then alias gnus='DISPLAY= xemacs -f gnus' alias emacs='DISPLAY= xemacs' fi if have firefox; then alias ff='killall firefox-bin; firefox' fi if quiet ls -d -sCF --color=tty /; then alias ls='ls -sCF --color=tty'; lss () { command ls -sCF --color "$@" | less -RSeX; }; elif quiet ls -d -sCF /; then alias ls='ls -sCF'; lss () { command ls -sCF "$@" | less -RSeX; }; fi mkcd() { if [ $# -gt 1 ]; then echo 'mkcd: usage: mkcd ' fi mkdir -p "$1" && cd "$1"; } alias m-a='m-a -t' alias jf='ssh -tX bucky ' alias jfs='ssh -tX bucky screen -x' alias ll='ls -l'; alias lls='lss -l'; alias pd=pushd alias sudo='sudo ' alias s='screen ' alias csi='csi -q' alias bc='bc -q' alias apt='sudo aptitude' alias df='df -x fuse' alias mtr='mtr --curses' doc () { pushd /usr/share/doc/$1; } lddsize() { ldd "$@"|while read lib _x file addr; do [ -f "$file" ] || continue; echo -en "$file\0"; done | xargs -0 du -cshD; } ### w3m bookmarks ### if have w3m; then alias sd='w3m http://www.slashdot.org' alias blog='w3m http://insoul.net/blogdate.php?plain=yes' alias news='w3m http://news.google.com/?ned=tus' alias cl='w3m hartford.craigslist.org' fi if ! have srfi; then srfi () { w3m http://srfi.schemers.org/srfi-"$1"/srfi-"$1".html } fi # if have nvim; then # alias vim=nvim # fi if have emacsclient; then alias vi='emacsclient -c' fi ### array stack interface ### pusha () { local arr="$1"; shift; for t in "$@"; do eval $arr'[${#'$arr'[@]}]='"\"$t\"" done; } popa () { eval unset $1'[${#'$1'[@]}-1]'; } topa () { eval echo '${'$1'[${#'$1'[@]}-1]}'; } echoa () { eval echo '${'$1'[@]}'; } alias irc='jfx jerkface.net screen -xRR irc' alias code='jfx jerkface.net screen -xRR code' alias grep='grep --exclude-dir=.git' dorner () { DOOMWADDIR=$HOME/src/zdoom/release LD_LIBRARY_PATH=$HOME/src/zdoom/fmodapi42636linux/api/lib/ $HOME/src/zdoom/release/zdoom -file \$HOME/Dorners\ Last\ Stand Skins/DoRnerLastStand.wad } avahi_hosts () { avahi-browse -trap | ( IFS=';'; while read _ _ _ _ _ _ x _; do [ "$x" ] && echo $x; done ) | sort -u }