#!/bin/bash
#.bashrc
#Copyright (C) 2006 by gwern
#Author: Gwern Branwen
#License: Public domain
#Where:
#When: Time-stamp: "2007-06-12 21:30:11 gwern"
#Keywords: local,customization,shell,bash
#Commentary
## There are a number of useful things here. Applications are often protected against
## system crashes by utility functions A number of utilities automate some things -
## 'pg' is polymorphic on what it is accessing, 'typo' aids in the quick recording of
## aliases to permanently fix typos, there is integration into darcs, GHC, screen, Tor etc.
#######################
# ##### GENERAL ##### #
#######################
#umask 0700 #keep private things private
declare -x USER="gwern"
##Let's not have absurdly generous resource permissions.
#ulimit -c 0 -e 0 -t 10000 -d 536870912 -i 10000 -m 5368709120 -q 536870912 -v 536870912 -x 10000 #Bastille handles some options
ulimit -c 0 -e 0 -t 10000 -d 536870912 -m 5368709120 -v 536870912 -x 10000
#Let's have neat fancy completions!
. /etc/bash_completion
#####################################
# ##### ENVIRONMENT VARIABLES ##### #
#####################################
#Yay for anonymous browsing through Tor!
declare -x http_proxy="http://127.0.0.1:8118/"
declare -x HTTP_PROXY="${http_proxy}"
#Test once and only once for the presence of screen and a terminal which can use it.
#Check for 'linux' because Screen/Linux console is set to claim to be 'linux'
#We set the default to off, just to be safe.
#This variable will be used later.
declare -x SCREENP=True #default
if [[ $TERM = "dumb" || $TERM = "screen" ]]; then
declare -x SCREENP=False
fi
#if a shell is open a ridiculously long time, close it. Given in seconds.
declare -x TMOUT=9000
#Give subshells all variables
set -o allexport
#generated by dircolors
declare -x LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;32:*.rar=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.mp4=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35:*.ogg=01;35:*.wav=01;35:*.el=01;32:*.txt=03;32:*.xml=03;6:*.pdf=02;36:*.ps=02;36:*.wiki=02;36:*.xhtml=02;36:*.html=02;36:*.torrent=01;37:*.exe=01;32:*.lisp=01;32:*.dat=01;35:*.py=01;32:*.pyo=02;32:*.pyc=02;32:*.log=02;36:*.data=02;36:*.mkv=01;35:*.ogm=01;35:*.hs=01;32';
#Default editor- I am an emacs man
declare -x EDITOR="emacs -nw"
declare -x CVSEDITOR=$EDITOR
#Tweaking the fc command via the FCEDIT variable; before it started up
#the full-blown Emacs - this version starts up a really fast Emacs minus
#a bunch of functionality.
declare -x FCEDIT="emacsclient"
#Following variable is used by emacsclient, so if no emacs is running,
#emacsclient will make one!
declare -x ALTERNATE_EDITOR="${FCEDIT}"
declare -x VISUAL="${EDITOR}"
declare -x PAGER='less'
declare -x LESS="~eimwC"
declare -x PATH='/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/usr/games/bin:/usr/sbin:/sbin:/usr/share/surfraw:/home/$USER/bin:/opt/ghc/bin'
#
export CVS_RSH=ssh
export MAILCHECK=0
#This forces man pages to be served at a terminal width of 80; the reason is
#because this way the catman and mandb commands will reveal their benefits.
declare -x MANDWIDTH=80
#History configuration
declare -x HISTFILE=~/.history
declare -x HISTCONTROL=ignoreboth
declare -x HISTFILESIZE=1000
declare -x HISTSIZE=1000
declare -x HISTCONTROL=ignoredups
declare -x HISTIGNORE="top:cd /home/*:emacs:sync:update:ls:ll:la:l:pwd:exit:mc:su:df:clear:fg:bg:&:exit:df:cd:h:la:au:ad:mounthd:htop:screen:mc"
#Thanks to
shopt -s histappend #makes bash append to history rather than overwrite
PROMPT_COMMAND='history -a' #write to history whenever"
#Prevent certain directory names from showing up in completion
declare -x FIGNORE=CVS:RCS:_darcs
declare -x LC_ALL="en_US.utf8"
###############################
# ##### SHELL VARIABLES ##### #
###############################
set -o hashall #Make sure the hash table gets used.
set -o noclobber
set -o physical
shopt -s cdable_vars
shopt -s cdspell
shopt -s checkhash
shopt -s checkwinsize
shopt -s cmdhist
shopt -s dotglob
shopt -s expand_aliases
shopt -s extglob
shopt -s histreedit
shopt -s histverify
shopt -s hostcomplete
shopt -s interactive_comments
shopt -s lithist
shopt -s no_empty_cmd_completion
shopt -s progcomp
shopt -s promptvars
# disable XON/XOFF flow control (^s/^q)
stty -ixon
###########################
# ##### COMPLETIONS ##### #
###########################
complete -A setopt set
complete -A user groups id
complete -A binding bind
complete -A helptopic help
complete -A alias alias unalias
complete -A signal -P '-' kill
complete -A stopped -P '%' fg bg
complete -A job -P '%' jobs disown
complete -A variable readonly unset
complete -A file -A directory ln chmod
complete -A user -A hostname finger pinky
complete -A directory find cd c pushd "`pwd`" mkdir rmdir mkd mkdirs rmd mvd
complete -A file -A directory -A user chown
complete -A file -A directory -A group chgrp
complete -o default -W 'Makefile' -P '-o ' qmake
complete -A command man which whatis whereis info apropos
complete -A file cat zcat pico nano vi vim view gvim gview rgvim rgview evim eview rvim rview vimdiff elvis emacs edit emacsclient sudoedit red e ex joe jstar jmacs rjoe jpico less zless more zmore p pg zip unzip rar unrar mplayer mp m
##############################
# ##### PROMPT SECTION ##### #
##############################
# Commented out because not needed, but retained in case I ever want them.
rgb_restore='\[\033[00m\]'
# rgb_black='\[\033[00;30m\]'
# rgb_firebrick='\[\033[00;31m\]'
rgb_red='\[\033[01;31m\]'
# rgb_forest='\[\033[00;32m\]'
rgb_green='\[\033[01;32m\]'
# rgb_brown='\[\033[00;33m\]'
# gb_yellow='\[\033[01;33m\]'
# rgb_navy='\[\033[00;34m\]'
# rgb_blue='\[\033[01;34m\]'
# rgb_purple='\[\033[00;35m\]'
# rgb_magenta='\[\033[01;35m\]'
# rgb_cadet='\[\033[00;36m\]'
# rgb_cyan='\[\033[01;36m\]'
# rgb_gray='\[\033[00;37m\]'
rgb_white='\[\033[01;37m\]'
rgb_std="${rgb_white}"
if [ `id -u` -eq 0 ]
then
rgb_usr="${rgb_red}"
else
rgb_usr="${rgb_green}"
fi
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
[ -n "$PS1" ] && PS1="${rgb_usr}`whoami`${rgb_std} \W \!${rgb_usr}\\\$${rgb_restore}"
unset rgb_restore \
rgb_black \
rgb_firebrick \
rgb_red \
rgb_forest \
rgb_green \
rgb_brown \
rgb_yellow \
rgb_navy \
rgb_blue \
rgb_purple \
rgb_magenta \
rgb_cadet \
rgb_cyan \
rgb_gray \
rgb_white \
rgb_std \
rgb_usr
#####################
# Aliases & Functions
#####################
alias +="pushd ."
alias _="popd"
alias a="amarok &"
alias apt-get="sudo apt-get"
if [[ $SCREENP = True ]]; then
alias aptitude="sudo screen -S "aptitude" aptitude"
alias apt="sudo screen -S "aptitude" aptitude"
fi
function gentoo_update () { (sudo sh -c 'emerge --sync && layman -S; emerge -f --newuse --update world && ntpd -q && emerge --newuse --update world && revdep-rebuild -v -X -i'; update_kernel_nonsafe); }
function pywikipedia_update () { cd ~/bin/pywikipedia && cvs update & }
function roguestar_update () { cd ~/bin/roguestar && make update && make && sudo make install; }
function system_update () { gentoo_update && sudo updatedb; prelink; firefox-prelink; mandb; dload; fc-cache -fsv; }
function system_information () { environment_validate; findsuid & ii; }
function update_kernel_unsafe () { sudo sh -c 'cd /usr/src/linux && mount /dev/hda1 /boot; make oldconfig && make & make modules; make install & make modules_install'; }
function time_update () { sudo ntpd -q; } #sudo ntpdate north-america.pool.ntp.org
alias update_kernel="(update_kernel_unsafe)"
##package management stuff
declare -x pm="sudo nice emerge" #default to Gentoo or Debian
#declare -x pm="sudo nice apt-get"
if [[ $SCREENP = True ]]; then
#alias check="sudo screen -S "check" $pm check"
alias autoclean="$pm autoclean"
alias clean="sudo screen -S "clean" $pm --clean"
alias update="sudo screen -S "update" $pm --sync && sudo layman --sync ALL; sudo emerge --update world"
alias upgrade="system_information; (pywikipedia_update); (roguestar_update); (gentoo_update); (system_update); logout; exit"
alias install="sudo screen -S "install" $pm"
alias remove="sudo screen -S "remove" $pm -C"
fi
#alias show="apt-cache show"
#alias search="apt-cache search"
alias search="emerge --search --"
#a replacement for sudo ifconfig eth0
function bandwidth () {
usage=`grep eth0 /proc/net/dev | cut -d ':' -f 2 | cut -d " " -f 2`;
echo $(( usage / 1000000000 )) gigabytes used.
}
alias band="bandwidth"
alias bzip="bzip2"
alias bzip2="nice bzip2 -v -v"
alias bunzip2="nice bunzip2 -v"
#alias cd="c"
alias ..="c ../"
alias ...="c ../ && c ../"
alias ....="c ../ && c ../ && c ../"
#This provides a function which will list contents
#of a directory upon cd'ing into it. Also, cd will be aliased to this,
#so it always works, but it will be aliased later in the file, so we
#don't get a endless naming loop.
function c () { cd -- "$@"; ls -q --color=auto; }
alias cdrom="mcdrom"
alias mcdrom="mount -t iso9660 -o ro /dev/hdc /mnt/cdrom; mount -t iso9660 -o ro /dev/hdc /mnt/cdrom; pushd .; cd /mnt/cdrom && ls -al"
alias umcdrom="popd; umount /mnt/cdrom; eject"
alias cliv="clive -y -q -N -m -L --"
alias clr="clear"
function compress () {
#!/bin/sh
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
# bestcompress - given a file, try compressing it with all the available
# compression tools and keep the compressed file that's smallest, reporting
# the result to the user. If '-a' isn't specified, it skips compressed
# files in the input stream.
Z="zip"
gz="gzip"
bz="bzip2"
Zout="/tmp/bestcompress.$$.zip"
gzout="/tmp/bestcompress.$$.gz"
bzout="/tmp/bestcompress.$$.bz"
skipcompressed=1
if [ "$1" = "-a" ]
then
skipcompressed=0 ;
shift
fi
if [ $# -eq 0 ]
then
echo "Usage: $0 [-a] file or files to optimally compress" >&2;
fi
trap "/bin/rm -f -- $Zout $gzout $bzout" EXIT
for name
do
if [ ! -f "$name" ] ; then
echo "$0: file $name not found. Skipped." >&2
continue
fi
if [ "$(echo $name | egrep '(\.zip$|\.gz$|\.bz2$)')" != "" ] ; then
if [ $skipcompressed -eq 1 ] ; then
echo "Skipped file ${name}: it's already compressed."
continue
else
echo "Warning: Trying to double-compress $name"
fi
fi
$Z < "$name" > $Zout &
$gz < "$name" > $gzout &
$bz < "$name" > $bzout &
wait # run compressions in parallel for speed. Wait until all are done
smallest="$(ls -l "$name" $Zout $gzout $bzout | \
awk '{print $5"="NR}' | sort -n | cut -d= -f2 | head -1)"
case "$smallest" in
1 ) echo "No space savings by compressing $name. Left as-is."
;;
2 ) echo Best compression is with compress. File renamed ${name}.zip
mv $Zout "${name}.zip" ; rm -f -- "$name"
;;
3 ) echo Best compression is with gzip. File renamed ${name}.gz
mv $gzout "${name}.gz" ; rm -f -- "$name"
;;
4 ) echo Best compression is with bzip2. File renamed ${name}.bz2
mv $bzout "${name}.bz2" ; rm -f -- "$name"
esac
done
}
alias cp="cp -v"
alias copy="cp --"
alias cruft="sudo cruft && sudo cruft -k"
#Ask darcs whether there have been any unrecorded edits to important revision controlled stuff.
#If there have been, then record that fact in a text file. The text file will be stored, and updated by
#.bash_logout
function changes () {
if [[ -n `which darcs` ]] #this is pointless if Darcs isn't even installed
then
if [[ `darcs whatsnew` != 'No changes!' ]]
then
echo "There are unrecorded changes.";
fi
fi
}
function defrag () {
# defrag v0.06 by Con Kolivas /dev/null
abort ()
{
echo -e "\nAborting"
rm -f -- tmpfile dirlist
exit 1
}
fail ()
{
echo -e "\nFailed"
abort
}
declare -i filesize=0
declare -i numfiles=0
#The maximum size of a file we can easily cache in ram
declare -i maxsize=`awk '/MemTotal/ {print $2}' /proc/meminfo`
(( maxsize-= `awk '/Mapped/ {print $2}' /proc/meminfo` ))
(( maxsize/= 2))
if [[ -a tmpfile || -a dirlist ]] ; then
echo dirlist or tmpfile exists
exit 1
fi
# Sort in the following order:
# 1) Depth of directory
# 2) Size of directory descending
# 3) Filesize descending
echo "Creating list of files..."
#stupid script to find max directory depth
find -xdev -type d -printf "%d\n" | sort -n | uniq > dirlist
#sort directories in descending size order
cat dirlist | while read d;
do
find -maxdepth $d -xdev -type d -mindepth $d -printf "\"%p\"\n" | \
xargs --max-procs=0 du -bS --max-depth=0 | \
sort -k 1,1nr -k 2 |\
cut -f2 >> tmpfile
if (( $? )) ; then
fail
fi
done
rm -f -- dirlist
#sort files in descending size order
cat tmpfile | while read d;
do
find "$d" -maxdepth 1 -xdev -type f -printf "%s\t%p\n" | \
sort -k 1,1nr | \
cut -f2 >> dirlist
if (( $? )) ; then
fail
fi
done
rm -f -- tmpfile
numfiles=`wc -l dirlist | awk '{print $1}'`
echo -e "$numfiles files will be reordered\n"
#copy to temp file, check the file hasn't changed and then overwrite original
cat dirlist | while read i;
do
(( --numfiles ))
if [[ ! -f $i ]]; then
continue
fi
#We could be this paranoid but it would slow it down 1000 times
#if [[ `lsof -f -- "$i"` ]]; then
# echo -e "\n File $i open! Skipping"
# continue
#fi
filesize=`find "$i" -printf "%s"`
# read the file first to cache it in ram if possible
if (( filesize < maxsize ))
then
echo -e "\r $numfiles files left \c"
cat "$i" > /dev/null
else
echo -e "\r $numfiles files left - Reordering large file sized $filesize ... \c"
fi
datestamp=`find "$i" -printf "%s"`
cp -a -f "$i" tmpfile
if (( $? )) ; then
fail
fi
# check the file hasn't been altered since we copied it
if [[ `find "$i" -printf "%s"` != $datestamp ]] ; then
continue
fi
mv -f tmpfile "$i"
if (( $? )) ; then
fail
fi
done
echo -e "\nSucceeded"
rm -f -- dirlist;
}
alias dpkg="sudo dpkg --force-all"
if [[ $SCREENP = True ]]; then
alias debfoster="sudo screen -S "debfoster" debfoster"
fi
#dload finds and caches in the home directory a list of all directories.
#Then one requests to go to a directory like 'd bin' and it presents a numbered list - by typing a number
#you can go anywhere!
#
function d () {
if [ $# -ne 1 ]
then
echo "usage: c pattern";
return
fi
set "foo" `egrep $1$ $HOME/.dload-dirs`
if [ $# -eq 1 ]
then
echo "No matches";
elif [ $# -eq 2 ]
then
cd "$2";
ls;
else
shift
for x in "$@"; do
echo $x
done | nl -n ln
echo -n "Number: ";
read C;
if [ "$C" = "0" -o -z "$C" ]
then
return
fi
eval D="\${$C}";
if [ -n "$D" ]
then
cd "$D";
ls;
fi
fi
unset foo
}
alias dload="rm -- ~/.dload-dirs; find / -type d >> ~/.dload-dirs"
alias add="darcs add"
alias initialize="darcs initialize"
alias whatsnew="darcs whatsnew"
alias record="darcs record --verbose --ignore-times --author=gwern0@gmail.com"
alias pull="darcs pull"
alias get="darcs get"
alias dat="date +%_I:%M:%S%p--%e-%a"
alias defcon="defcon &"
#Remove the first n lines from a given file.
function deletelines () { sed -i -- "1,$2d" "$1"; }
alias df="df -h"
alias dub="du -sclb --"
alias duk="du -sclk --"
alias dum="du -sclm --"
alias duh="du -sclh --"
alias dfk="df -PTak --"
alias dfm="df -PTam --"
alias dfh="df -PTah --"
alias dfi="df -PTai --"
alias dir="ls -al" #DOS compatibility
alias dhclient="sudo killall dhclient; sudo dhclient -e "
alias dmsg="dmesg | pg"
function du_extra () {
for dir in `find . -maxdepth 1 -type d`; do
if [ $dir != "." ]
then
echo "-----------";
du "$dir";
fi
done
echo "-----------";
}
alias e="${EDITOR}"
alias electric-sheep="sheep"
if [[ $SCREENP = True ]]; then
alias sheep="screen -S "electric-sheep" -d -m electricsheep --nick `whoami` --frame-rate 10 --anim-only 1 --mplayer 1 --nice 19 --nrepeats 1 --reset-fuse 100 --zoom 1 --root 1"
fi
alias eject="pushd . && cd && eject -v || sudo eject -v; popd"
alias emerg="sudo emerge"
alias env-update="sudo env-update"
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
function environment_validate () {
#!/bin/sh
# VALIDATOR - Checks to ensure that all environment variables are valid
# looks at SHELL, HOME, PATH, EDITOR, MAIL, and PAGER
errors=0
in_path ()
{ # given a command and the PATH, try to find the command. Returns
# 1 if found, 0 if not. Note that this temporarily modifies the
# the IFS input field seperator, but restores it upon completion.
cmd=$1 path=$2 retval=0
oldIFS=$IFS; IFS=":"
for directory in $path
do
if [ -x $directory/$cmd ]
then
retval=1; # if we're here, we found $cmd in $directory
fi
done
IFS=$oldIFS
return $retval
}
validate ()
{
varname=$1 varvalue=$2
if [ ! -z $varvalue ]
then
if [ "${varvalue%${varvalue#?}}" = "/" ]
then
if [ ! -x $varvalue ]
then
echo "** $varname set to $varvalue, but I cannot find executable.";
errors=$(( $errors + 1 ));
fi
else
if in_path $varvalue $PATH
then
echo "** $varname set to $varvalue, but I cannot find it in PATH."
errors=$(( $errors + 1 ))
fi
fi
fi
}
####### Beginning of actual shell script #######
if [ ! -x ${SHELL:?"Cannot proceed without SHELL being defined."} ]
then
echo "** SHELL set to $SHELL, but I cannot find that executable.";
errors=$(( $errors + 1 ));
fi
if [ ! -d ${HOME:?"You need to have your HOME set to your home directory"} ]
then
echo "** HOME set to $HOME, but it's not a directory."
errors=$(( $errors + 1 ))
fi
# Our first interesting test: are all the paths in PATH valid?
oldIFS=$IFS; IFS=":" # IFS is the field separator. We'll change to ':'
for directory in $PATH
do
if [ ! -d $directory ]
then
echo "** PATH contains invalid directory $directory";
errors=$(( $errors + 1 ))
fi
done
IFS=$oldIFS # restore value for rest of script
# The following can be undefined, and they can also be a progname, rather
# than a fully qualified path. Add additional variables as necessary for
# your site and user community.
validate "EDITOR" $EDITOR
validate "MAILER" $MAILER
validate "PAGER" $PAGER
# and, finally, a different ending depending on whether errors > 0
if [ $errors -gt 0 ]
then
echo "Errors encountered. Please notify sysadmin for help.";
else
echo "Your environment checks out fine.";
fi
}
#Let's try using Emacs from the terminal for a while.
alias emacs="enw"
alias enw="emacs -nw"
alias eselect="sudo eselect"
alias etc-update="sudo etc-update"
alias etcupdate="etc-update"
#Using functions rather than aliases to avoid format problems and naming clashes.
#There must be a better way besides hardwiring things.
function fe () { /usr/bin/feh -FD10 -F --zoom --auto-zoom -A "rm %f" -- *.png & }
function feh () { /usr/bin/feh -FD10 -F --zoom --auto-zoom -A "rm %f" -- *.jpg & }
alias fetch="torify fetchmail -v -m \"/usr/bin/procmail -d %T\""
alias file="file -k -p -z --"
alias findhog="du -ks * | sort -nr"
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
function findsuid () {
#!/bin/sh
# findsuid - find all SUID files or programs on the system other than those
# that live in /bin and /usr/bin, and output the matches in a useful format.
mtime="7" # how far back (in days) to check for modified cmds
verbose=1 # by default, let's be quiet about things
if [ "$1" = "-v" ]
then
verbose=1;
fi
for match in $(find /bin /usr/bin -type f -perm +4000 -print)
do
if [ -x $match ]
then
owner="$(ls -ld $match | awk '{print $3}')";
perms="$(ls -ld $match | cut -c5-10 | grep 'w')";
if [ ! -z $perms ]
then
echo "**** $match (writeable and setuid $owner)";
elif [ ! -z $(find $match -mtime -$mtime -print) ]
then
echo "**** $match (modified within $mtime days and setuid $owner)";
elif [ $verbose -eq 1 ]
then
lastmod="$(ls -ld $match | awk '{print $6, $7, $8}')";
echo " $match (setuid $owner, last modified $lastmod)";
fi
fi
done
}
alias firefox-prelink="sudo prelink --random --black-list /home -q --verbose --ld-library-path=/usr/lib/firefox/ --conserve-memory --libs-only /usr/lib/firefox/ && sudo /usr/sbin/prelink --random --black-list /home -q --verbose --ld-library-path=/usr/lib/firefox/ --conserve-memory /usr/lib/firefox --"
alias fmt="space -- *; lower -- *; brackets -- *; characters -- * &"
function brackets () {
for file in "$@"
do
mv "$1" `echo "$1" | tr --delete '(,)' | tr --delete '[,]'` 2>/dev/null;
shift;
done; }
function characters () {
for file in "$@"
do
new=`echo "$1" | tr --delete \" |tr --delete \' | tr --delete '~' | tr --delete '/,\' | tr --delete [:cntrl:] | tr --delete [:blank:] | tr --delete [:space:] | tr --delete '&' | tr --delete \! | tr --delete \# | tr --delete \;`;
mv "$1" $new 2>/dev/null;
shift;
done; }
function lower () {
for file in "$@"
do
mv "$1" `echo "$1" | tr [:upper:] [:lower:] | tr --delete /` 2>/dev/null;
shift;
done; }
function space () {
for file in "$@";
do
mv "$1" "${file// /-}" 2>/dev/null;
shift;
done; }
alias fortune="nice fortune -a &"
#Color grepping, yay!
export GREP_COLOR=31
alias grep='grep --color=auto'
alias g="grep"
alias ghci="ghci -v -Wall -fglasgow-exts"
alias ghc="ghc -v -Wall -fglasgow-exts -O2"
#
if `which ghc >/dev/null`
then
function hmap () { ghc -e "interact ($*)"; }
function hmapl () { hmap "unlines.($*).lines" ; }
function hmapw () { hmapl "map (unwords.($*).words)" ; }
fi
alias gq="gqview -t &"
alias gqv="gqview"
alias gqview="gqview"
alias h="history"
alias help="man"
alias hibernate="sudo hibernate --kill --verbosity=3"
alias hml2txt="html2text -ascii -nobs -style pretty --"
alias h2t="html2txt"
alias ifconfig="sudo ifconfig"
alias ii="this_ip 2>&-; echo -e '\nYou are logged on ${RED}$HOSTNAME${NCOL} ( `echo ${THIS_IP:-\'Not connected\'}` )'; echo -e '\n${RED}Additional information:${NCOL} '; uname -a; echo -e '\n${RED}Users logged on:${NCOL} '; w -h; echo -e '\n${RED}Current date :${NCOL} '; date; echo -e '\n${RED}Machine stats :${NCOL} '; uptime;echo -e '\n${RED}Memory stats :${NCOL} '; free"
#currently irssi is my IRC client
alias irc="irssi"
#Alias for irssi IRC client. First, get a list of running screens from screen, then grep it for the string 'irssi'
#If irssi is not running, then run irssi in a screen
if [[ $SCREENP = True ]]; then
function irssi () {
if [ -n "$(screen -list | grep irssi)" ]
then
screen -wipe;
screen -raAdO irssi
else
killall irssi;
if [[ -n `which torify` ]]
then
screen -O -S "irssi" torify irssi --nick=$USER; ls;
else
screen -O -S "irssi" irssi --connect=irc.freenode.net --nick=$USER; ls;
fi
fi
}
fi
alias jc="javac -verbose -g -deprecation *.java"
alias j="java"
alias kernfs="pg /proc/filesystems"
alias l="ls -q --color=auto" #This isn't visible in functions.
alias la="ls --color=auto -AFq --"
alias ll="find . -maxdepth 1 -user `whoami` ! -type d -ls -execdir file -b '{}' \;;"
alias ls="ls --color=auto --file-type"
alias lsd="ls --color=auto -d ./*/ --"
alias layman="sudo layman"
alias length="wc -m --"
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
alias line-fmt="line_format"
function line_format () {
#!/bin/sh
# A version of fmt, using nroff. Adds two useful flags: -w X for line width
# and -h to enable hyphenation for better fills.
while getopts "hw:" opt; do
case $opt in
h) hyph=1 ;;
w) width="$OPTARG" ;;
esac
done
shift $(($OPTIND - 1))
nroff << EOF
.ll ${width:-72}
.na
.hy ${hyph:-0}
.pl 1
$(cat "$@")
EOF
}
alias load="uptime | cut -d ' ' -f 9- --" #extract the system load information from uptime
alias logout="clear & sync && logout"
alias md="mkd"
alias mkd="mkdir -p"
alias mkdirs="mkd"
alias mvd="mv"
function miso () { mount -t iso9660 -o ro,loop -- "$@" /mnt/iso; }
alias umiso="umount -- /mnt/iso"
alias mk="make"
#Base configuration for mplayer.
alias mp="mplayer -framedrop -nojoystick -nolirc -nocache -idx -identify -cache 8192 -cache-min 2"
#If screen is available, use it
if [[ $SCREENP = True ]]; then
function m () {
screen -S "mplayer" mplayer -hardframedrop -nojoystick -nolirc -nocache -idx -identify -autosync 30 -vf scale -cache 8192 -cache-min 2 -- "$@";
ls --color=auto ./; }
else #use a normal alias
alias m="mp"
fi
alias modprobe="sudo modprobe"
#less is more. :)
alias more="pager"
alias mount="sudo mount"
alias move="mv"
if [[ $SCREENP = True ]]; then
alias mp32ogg="screen -S "mp32ogg" nice mp32ogg --delete -- *.mp3"
else
alias mp32ogg="nice mp32ogg --delete"
fi
alias mvsget="mvs update [^.]*.wiki" #Exclude anything starting with '.', include all ending with '.wiki'
alias mvs_login="mvs login -d wikipedia.org -l en -u User:$USER; mvsget"
alias mvscommit="mvsget; mvs commit -m"
alias n="nano"
if [[ $SCREENP = True ]]; then
alias normalize-ogg="screen -S "normalize" nice normalize-ogg --ogg -v -- *.ogg"
fi
if [[ $SCREENP = True ]]; then
alias oggdec="screen -S "oggdec" nice oggdec -- *.ogg && l"
alias oggenc="screen -S "oggenc" nice oggenc -q 10 -- *.wav && rm -- *.wav && l"
fi
alias openoffice="ooffice"
alias optipng="nice optipng -o9 -fix"
alias p="pager"
function pager () {
#first, let's handle the case of stuff being piped here.
if [ $# = 0 ] #If there are no arguments, then just run less on stdin
then
less --;
else
for argument in "$@"; #loop over arguments
do
length=`ls -s "$1" | cut -d " " -f 1`
if [[ $((length > 4)) = 1 ]] #0 is false, 1 is true; the 4 is a heuristic
then
less "$1"; #If it is too long, then...
else
if [[ -n `echo "$1" | grep ".bz\|.gz\|.bz2"` ]]
#we need to know whether it is compressed. less can handle compressed.
then
less "$1";
else
cat "$1"; #If it is short, than cat suffices.
fi
fi
shift;
done;
fi }
#Recurse down from current directory, convert everything to png, and optimize.
#Current bugs: doesn't delete converted files.
#find . -name "*.jpg" -execdir echo {} \; | sed 's/\.[^.]*$//'
alias recurse_picture="picture_convert"
alias picture_convert="(picture_convert_to_png &)"
function picture_convert_to_png () {
for directory in `find . -name "*.jpg" -exec dirname "{}" \; | sort | uniq`
do
pushd .;
cd $directory;
fmt
popd;
done
find . -name "*.jpg" -exec sh -c "convert -- {} {}.png && rm -- {} " \;;
find . -name "*.jpeg" -exec sh -c "convert -- {} {}.png && rm -- {} " \;;
find . -name "*.gif" -exec sh -c "convert -- {} {}.png && rm -- {} " \;;
find . -name "*.bmp" -exec sh -c "convert -- {} {}.png && rm -- {} " \;;
find . "*.png" -mmin -500 -exec nice optipng -o9 -- {} +;
for file in `find . -name "*.jpg.png"`
do
# remove everything starting with last '.'
base=`echo "$file" | sed 's/\.[^.]*$//' | sed 's/\.[^.]*$//'`;
mv -- $file $base.png;
done
}
#Display current $PATH variable:
alias path='echo "$PATH"'
alias pg="pager"
alias ping="sudo nice ping -A -l 5 -c 1000 --"
alias plan="$EDITOR .plan"
alias privoxy="sudo privoxy /etc/privoxy/config"
alias py="python -O -O -t"
if [[ $SCREENP = True ]]
then
alias prelink="sudo screen -S "prelink" prelink --all -m --dereference --no-exec-shield"
else
alias prelink="prelink --all -m --dereference --no-exec-shield"
fi
alias preload="sudo preload --nice -19"
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
function printdir () {
#!/bin/sh
# formatdir - output a directory listing in a friendly and useful format
gmk ()
{
# given input in Kb, output in Kb, Mb or Gb for best output format
if [ $1 -ge 1000000 ]
then
echo "$(scriptbc -p 2 $1 / 1000000)Gb";
elif [ $1 -ge 1000 ]
then
echo "$(scriptbc -p 2 $1 / 1000)Mb";
else
echo "${1}Kb"
fi
}
dir=`pwd` #save our spot
if [ $# -gt 1 ]
then
echo "Usage: $0 [dirname]" >&2;
elif [ $# -eq 1 ]
then
cd -- "$@";
fi
for file in *
do
if [ -d "$file" ]
then
size=$(l -d "$file" | wc -l | sed 's/[^[:digit:]]//g');
if [ $size -eq 1 ]
then
echo "$file ($size entry)|";
else
echo "$file ($size entries)|";
fi
else
size="$(l -dsk "$file" | awk '{print $1}')";
echo "$file ($(gmk $size))|";
fi
done | \
sed 's/ /^^^/g' | \
xargs --max-procs=0 -n 2 | \
sed 's/\^\^\^/ /g' | \
awk -F\| '{ printf "%-39s %-39s\n", $1, $2 }'
cd $dir;
}
#Use xsetbg to select a random file from one's picture directory and set it as the root window.
#This is copied in .xinitrc
alias random_picture="random_picture_on_root &"
function random_picture_on_root () {
cd ~/pics; #where we store pictures.
files=(*.png); # Or *.gif, or *
n=${#files[@]}; # For aesthetics
random="${files[RANDOM %n]}" # Choose a random element
xsetbg -border black -fork -brighten 60 -type png -fit -onroot -fullscreen $random
} #'
alias ps="ps -A -j -H v"
alias q="exit; logout"
alias revdep-rebuild="sudo revdep-rebuild -v -X -i"
alias rc-update="sudo rc-update"
#Create rc-foo shortcuts rather than lengthy /etc/init.d/ stuff.
#Is it efficient for this to be here?
#
for service in `cd /etc/init.d/; ls`
do
alias "rc-${service}"="/etc/init.d/${service}"
done
alias reboot="sudo nice reboot -n -i -h; sync & logout"
#Remove a directory and contents; handles multiple arguments
function rmd () {
if [ -d "$1" ] #remove only directories!
then
rm --force --recursive --verbose -- "$@";
ls --color=auto;
else
echo "$@" "is not a directory";
fi
shift #we've deleted the first argument, so scrap it
#and let's process the next argument.
if [ $# -eq 1 ] #if there are no more arguments, we will
#quietly end the function.
then
rmd "$@";
fi; }
alias rm="rm -v"
alias root-tail='sudo root-tail'
if [[ $SCREENP = True ]]; then
alias rtorrent="(rtorrent_unsafe)"
function rtorrent_unsafe () {
if [ -n "$(screen -list | grep rtorrent)" ]
then
screen -wipe;
screen -raAdO rtorrent;
else
killall rtorrent; mv *.torrent ~/torrent/;
cd ~/torrent/; http_proxy="" screen -S "rtorrent" nice rtorrent -- *.torrent;
ls;
fi
}
fi
alias s="screen -O"
alias sbcl="sbcl --noinform --dynamic-space-size 42 -eval '(declare (optimize (speed 3) (safety 0) (space 3) (compilation-speed 0)))'"
#Thanks to "Wicked Cool Shell Scripts: 101 Scripts for Linux, Mac OS X, and Unix Systems"
function scriptbc () {
#!/bin/sh
#scriptbc - wrapper for 'bc' that returns the value of a formula
if [ $1 = "-p" ] ; then
precision=$2
shift 2
else
precision=2 # default
fi
bc -q -l << EOF
scale=$precision
$*
quit
EOF
}
alias shutdown="sudo nice shutdown now"
#Following complex TOR-stuff from the Tor aliases project.
if [[ -n `which torify` ]]; then
function ssh () {
unset cmd
cmd="ssh"
while [ -n "${1}" ] ; do
if [ "${1:0:1}" == "-" ] ; then
found=0
for white in -1 -2 -4 -6 -A -a -C -f -g \
-k -N -n -q -s -T -t -V -v -X -x \
-Y \ ; do
[ "${1}" == "${white}" ] && found=1
done
if [ "${found}" == "0" ] ; then
cmd="${cmd} \"${1}\" \"${2}\""
shift # the second shift happens below
else
cmd="${cmd} \"${1}\""
fi
else
if [ "${1//@}" != "${1}" ] ; then
cmd="${cmd} \"${1%%@*}@"
ip="$(tor_resolve "${1##*@}")"
cmd="${cmd}${ip}\""
else
ip="$(tor_resolve "${1}")"
cmd="${cmd} \"${ip}\""
fi
fi
shift
done
eval torify ${cmd}
}
function scp() {
unset cmd
cmd="scp"
while [ -n "${1}" ] ; do
if [ "${1:0:1}" == "-" ] ; then
for white in -1 -2 -4 -6 -B -C -p -q -r -v \ ; do
[ "${1}" == "${white}" ] && found=1
done
if [ "${found}" == "0" ] ; then
cmd="${cmd} \"${1}\" \"${2}\""
shift # the second shift happens below
else
cmd="${cmd} \"${1}\""
fi
else
if [ "${1//:}" != "${1}" ] ; then
cmd="${cmd} \""
host="${1}"
if [ "${1//@}" != "${1}" ] ; then
cmd="${cmd}${1%%@*}@"
host="${1#*@}"
fi
ip="$(tor_resolve "${host%%:*}")"
cmd="${cmd}${ip}:${host#*:}\""
else
cmd="${cmd} \"${1}\""
fi
fi
shift
done
eval torify ${cmd}
}
fi
alias shred="shred -n 31337 -z -u"
# subversion
if [[ -n `which torify` ]]; then
alias svn="torify svn"
fi
alias sud="sudo"
alias t="typo"
#
function this_ip() {
THIS_IP=$(/sbin/ifconfig eth0 | awk '/inet/ { print $2 } ' | sed -e s/addr://)
}
alias top="nice top -c -d 1.5 --"
alias tor="sudo tor"
function tor_resolve () {
# This function first tries /etc/hosts for the name
# then tries tor. echos either the parameter or the IP address
# return value 0 for success (resolved or hosts), 1 otherwise
if egrep -q "[[:blank:]]${1}|[[:blank:]]${1}[[:blank:]]" /etc/hosts ; then
echo "${1}"
return 0
else
echo -n "Resolving ${1} through tor... " >&2
ip="$( tor-resolve ${1} 2>/dev/null )"
if [ -z "${ip}" ] ; then
echo "FAILED! Passing ${1} to program" >&2; echo ${1};
return 1
else
echo ${ip} >&2; echo ${ip};
return 0
fi; fi
}
alias tgz='tar -cvvzf'
alias tbz2='tar -cvvjf'
alias mktar='tar -cvvf'
alias untar='tar -xvvf'
alias utgz='tar -xvvzf'
alias utbz2='tar -xvvjf'
function typo () { (typo_unsafe "$@"); alias $1=$2; }
function typo_unsafe () {
##So often I make little stupid typos while firing away
##in the shell. They are very annoying, but it is too
##much trouble to fire up Emacs or nano to manually
##add an alias that would fix the problem. And typing
##the appropriate echo and append command is tedious and
##error prone. So, I whipped up a quick shell script which
##reads the two arguments provided, and constructs the appropriate
##echo command to create an alias that solves that typo.
cd; #we need to be in a repository directory, which is ~/
echo alias $1='"'$2'"' >> ~/.bashrc; #It goes typo wrong-command right-command
tail -n 1 ~/.bashrc; #Verify that bashrc was written, with the right thing.
$2;
record --skip-long-comment --all --patch-name="alias $1="$2"";
}
alias umount="sudo umount"
alias unmount="sudo umount"
alias rar="unrar x"
alias xmon="(xmonad_upgrade)"
alias xmonad_upgrade="cd ~/bin/xmonad/; darcs pull -a; runhaskell Setup configure --user --prefix=$HOME && runhaskell Setup build && ln -sf $PWD/dist/build/xmonad/xmonad $HOME/bin/xmonad-bin"
if [[ $SCREENP = True ]]; then
alias updatedb="screen -S "updatedb" sudo nice updatedb"
else
alias updatedb="sudo nice updatedb"
fi
if [[ $SCREENP = True ]]
then
alias visualboy="screen -S "gba" VisualBoyAdvance --rtc"
else
alias visualboy="VisualBoyAdvance --rtc"
fi
alias gba="visualboy"
alias visualboyadvance="visualboy"
alias VisualBoy="visualboy"
function warnswap () {
min_space=100
swap_free=$(free -mo | grep Swap | { read a b c d; echo $d; })
if (( $swap_free < $min_space ))
then
# write message to terminal and ring a bell
echo -e \\a Swap is running low! Less then ${1}Mb left.
fi
}
if [[ $SCREENP = True ]]; then
alias wget="screen -S "wget" nice wget"
fi
function wmaconvert () {
#Convert all the WMA files to wav in a loop, then delete the WMA
#and encode the wavs to oggs.
for file in *.wma
do
nice mplayer -vc null -vo null -ao pcm:fast -- `echo "$file" | tr .wma .wav` "$file";
mv -- audiodump.wav `echo "$file" | tr .wma .wav`;
echo "$file";
done
rm -- *.wma; #remove the old WMAs only after all conversions finish succcessfully.
oggenc; #All the WMAs are now gone. Turn things over to oggenc.
}
alias x="pushd .; startx -- -layout XineramaLayout; popd"
alias xargs="xargs --max-procs=0"
function xpdf () { `which xpdf` "$@" & }
alias z="suspend"
#########################################
# Pywikipediabot
#########################################
if [[ $SCREENP = True ]]; then
function disambig_pywikipedia () {
pywikipedia_update && cd ~/bin/pywikipedia;
http_proxy="" HTTP_PROXY="" screen -O -S "disambig" python solve_disambiguation.py -main -- "$@";
}
alias disambig="(disambig_pywikipedia)"
fi
if [[ $SCREENP = True ]]; then
function followlive_pywikipedia () {
pywikipedia_update && cd ~/bin/pywikipedia && HTTP_PROXY="" http_proxy="" screen -S "followlive" nice python followlive.py; }
else
alias followlive_pywikipedia="cd ~/bin/pywikipedia && python followlive.py"
fi
alias followlive="(followlive_pywikipedia)"
if [[ $SCREENP = True ]]; then
alias checker="(pywikipedia_checker)"
function pywikipedia_checker () { #now let's define the function
alpha="abcdefghijklmnopqrstuvwxyz"
if [ -n "$(screen -list | grep link-checker)" ]; then
screen -wipe;
screen -raAdO link-checker;
else
pywikipedia_update; cd ~/bin/pywikipedia/ && screen -O -S "link-checker" sh -c 'while true; do http_proxy="" HTTP_PROXY="" nice -n 19 python weblinkchecker.py -start:${alpha:RANDOM%26:1}; done;'
fi
}
else
alias checker="cd ~/bin/pywikipedia/ && nice python weblinkchecker.py -start:F;"
fi
######################
# Commands run on startup #
echo "Logged in on $(tty), as $(whoami) in directory $(pwd).";
ls;
##Surfraw stuff
### Added by surfraw. To remove use surfraw-update-path -remove
###Surfraw environment variables
declare -x SURFRAW_debian_release="all"
declare -x SURFRAW_debian_distro="all"
### End surfraw addition.
####Typo aliases.
alias ,,=".."
alias 1killall="killall"
alias 3m="m"
alias 8irss="irssi"
alias ano="nano"
alias atsnew="whatsnew"
alias ca="cat"
alias cat="ca"
alias ~c="c"
alias C="c"
alias conver="convert"
alias convrt="convert"
alias dacs="darcs"
alias da="darcs"
alias darc="darcs"
alias dff="df"
alias disambi="disambig"
alias emcs="emacs"
alias emrege="emerge"
alias emrge="emerge"
alias feg="feh"
alias fetchmai="fetchmail"
alias finmdhog="findhog"
alias ~fmt="fmt"
alias freee="free"
alias ghic="ghci"
alias gunzup="gunzip"
alias h2txt="h2t"
alias hci="ghci"
alias hdparm="sudo hdparm"
alias i9rssirss="irssi"
alias ifconfige="ifconfig"
alias imrar="unrar"
alias inrar="unrar"
alias instal="install"
alias intall="install"
alias iorss="irssi"
alias ipgrade="upgrade"
alias irs="irssi"
alias irss="irssi"
alias irsss="irssi"
alias isntall="install"
alias iurss="irssi"
alias kiall="killall"
alias kiillall="killlall"
alias kilall="killall"
alias kilalll="killall"
alias kil="kill"
alias killlall="killall"
alias klillall="killall"
alias ks="ls"
alias les="less"
alias link_0c="link_checker"
alias link_c="link_checker"
alias link_="link_checker"
alias lionk_checker="link_checker"
alias lmutt="mutt"
alias loate="locate"
alias locat="locate"
alias ~ls="ls"
alias lsw="ls"
alias lw="ls"
alias lynx="elinks"
alias md5="md5sum"
alias mitt="mutt"
alias mkdr="mkdir"
alias mmv="mv"
alias mna="man"
alias mn="man"
alias mplaer="mplayer"
alias mplater="mplayer"
alias mplauyer="mplayer"
alias mplyaer="mplayer"
alias mqake="make"
alias mu="mutt"
alias mut="mutt"
alias ~mutt="mutt"
alias muut="mutt"
alias naon="nano"
alias natilus="nautilus"
alias nautlius="natilus"
alias ncie="nice"
alias nv="mv"
alias oo="ooffice"
alias ooptpng="optipng"
alias opitpng="optipng"
alias op="top"
alias orss="irssi"
alias os="ps"
alias oython="python"
alias pa="ps"
alias pdf2text="pdftotext"
alias pdf="xpdf"
alias piing="ping"
alias pkg="dpkg"
alias podf="pdf"
alias pps="ps"
alias psps="ps"
alias pt_get="apt-get"
alias pushd.="pushd ."
alias pythong="python"
alias rboot="reboot"
alias recored="record"
alias recor="record"
alias recrd="record"
alias remopve="remove"
alias restart="reboot"
alias revert="darcs revert"
alias rexord="record"
alias rirss="irssi"
alias rmdd="rmd"
alias rmds="rmd"
alias rmeove="remove"
alias r,m="rm"
alias rotorrent="rtorrent"
alias rotrrent="rtorrent"
alias rrebnoot="reboot"
alias rrm="rm"
alias rtorr="rtorrent"
alias rtor="rtorrent"
alias rtprrent="rtorrent"
alias rtrorrent="rtorrent"
alias sarch="search"
alias screeen="screen"
alias scree="screen"
alias seach="search"
alias seaerch="search"
alias searcg="search"
alias searcj="search"
alias searhc="search"
alias searh="search"
alias sear="search"
alias searxh="search"
alias seearch="search"
alias serch="search"
alias sgow="show"
alias sheeo="sheep"
alias shiow="show"
alias showv="show"
alias shsheep="sheep"
alias shw="show"
alias sl="ls"
alias sreen="screen"
alias sudedit="sudoedit"
alias sudeodit="sudoedit"
alias sudochmod="sudo chmod"
alias sudodit="sudoedit"
alias sudoedi="sudoedit"
alias sudoeit="sudoedit"
alias sudoiedt="sudoedit"
alias sudpedot="sudoedit"
alias sudp="sudo"
alias sydoedit="sudoedit"
alias sydo="sudo"
alias tiop="top"
alias tio="top"
alias toop="top"
alias top]="top"
alias to="top"
alias tpo="top"
alias tp="top"
alias ttop="top"
alias tup="top"
alias tyo="typo"
alias typoe="typo"
alias typpo="typo"
alias udoedit="sudoedit"
alias udo="sudo"
alias udpdate="update"
alias ugrade="upgrade"
alias ]umount="umount"
alias unarar="unrar"
alias unar="unrar"
alias unIp="unzip"
alias unraru="unrar"
alias unsip="unzip"
alias unxip="unzip"
alias unziop="unzip"
alias unzipo="unzip"
alias unzi="unzip"
alias unziup="unzip"
alias unzoip="unzip"
alias unzp="unzip"
alias unzuip="unzip"
alias unzuo="unzip"
alias unzup="unzip"
alias uograde="upgrade"
alias upgdare="upgrade"
alias upgradew="upgrade"
alias upgradfe="upgrade"
alias upgrad="upgrade"
alias upgradwe="upgrade"
alias upgrde="upgrade"
alias upgr="upgrade"
alias uphrade="upgrade"
alias uprade="upgrade"
alias uptume="uptime"
alias utnar="untar"
alias uttt="mut"
alias uzip="unzip"
alias uznip="unzip"
alias whastnew="whatsnew"
alias whgatsnew="whatsnew"
alias whjatsnew="whatsnew"
alias whtsnew="whatsnew"
alias ~wine="wine"
alias wtop="top"
alias xmonad_update="xmonad_upgrade"
alias xmonad_up="xmonad_upgrade"
alias xmonad_="xmonad_upgrade"
alias xmond_update="xmonad_update"
alias xmon_="xmonad_upgrade"
alias xterm="urxvt"
alias x~="x"
alias xxpdf="xpdf"
alias ymutt="mutt"
alias findho0g="findhog"
alias touc="touch"
alias emac="emacs"
alias enacs="emacs"
alias sea="search"
alias seaa="search"
alias ekject="eject"
alias shread="shred"
alias equeryy="equery"
alias 4mutt="mutt"
alias emrg="emerg"
alias muttt="mutt"
alias mmutmutt="mutt"
alias runhaskel="runhaskell"
alias xnon="xmon"