# ---------------------------------------------------------------------- # file: ~/.bashrc # author: Thayer Williams - http://cinderwick.ca # modified: June 2009 # vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=sh: # ---------------------------------------------------------------------- source ~/.bash_private # for my eyes only eval $(dircolors -b ~/.dircolors) # bash options --------------------------------------------------------- shopt -s cdspell # autocorrects cd misspellings shopt -s checkwinsize # update value of LINES and COLUMNS if altered after command shopt -s cmdhist # save multi-line commands in history as single line shopt -s extglob # enable extended pattern-matching features shopt -s histappend # append to (not overwrite) the history file shopt -s no_empty_cmd_completion # don't search completions in PATH on an empty line #set -o noclobber # don't overwrite files with > redirection #shopt -u promptvars # don't expand prompt strings after decoded # bash prompt styles --------------------------------------------------- PS1="\[\033[37;1m\][\[\033[m\]\u\[\033[37;1m\]@\[\033[m\]\h\[\033[37;1m\]:\[\033[m\]\w\[\033[37;1m\]]\[\033[m\]$ " #PS1="[\[\033[33;1m\]\u\[\033[m\]@\[\033[33;1m\]\h\[\033[m\]:\[\033[34;1m\]\w\[\033[m\]]\[\033[37;1m\]$\[\033[m\] " #PS1="\[\033[36m\]\u\[\033[37m\]@\[\033[#32m\]\h:\[\033[33;1m\]\w\[\033[m\]$ " #PS1="\[\033[35m\]\u\[\033[37m\]@\[\033[31m\]\h:\[\033[34;1m\]\w\[\033[m\]$ " #PS1='[\[\e[37m\]\u\[\e[31m\]@\[\e[37m\]\h\[\e[0m\]:\[\e[33m\]\w\[\e[0m\]] \$ ' #PS1='\[\033[31m\]\u@\h:\w\$\[\e[0m\] ' #PS1="[\[\033[36m\]\u\[\033[37m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]]$ " #PS1="\[\033[36m\]\u\[\033[37m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]$ " #PS1="\[\033[35m\]\u\[\033[37m\]@\[\033[31m\]\h:\[\033[34;1m\]\w\[\033[m\]$ " #PS1='[\u@\h \W]\$ ' # default prompt # disable ^S/^Q flow control ------------------------------------------- if tty -s ; then stty -ixon # disable XON/XOFF flow control stty -ixoff # disable sending of start/stop characters fi # env vars ------------------------------------------------------------- export PATH=$PATH:~/bin # add ~/bin to PATH export HISTIGNORE="\&:fg:bg:exit" # don't append consecutive duplicates of these export HISTCONTROL=ignoreboth # ingore duplicates and spaces (ignoreboth|ignoredups|ignorespace) export HISTSIZE=10000 # bash history will save N commands export HISTFILESIZE=${HISTSIZE} # bash will remember N commands export INPUTRC=/etc/inputrc # input prefs export LC_COLLATE="en_CA.utf8" # sort [a-Z] instead of [A-Z] export MOZ_DISABLE_PANGO=1 # disable PANGO in Firefox export OOO_FORCE_DESKTOP=gnome # openoffice gui style export EDITOR=vim # editor prefs export VISUAL=vim # visual editor prefs export BROWSER="links '%s' &" # browser prefs export PAGER=less # pager prefs export MANPAGER=less # pager prefs export MAIL=~/.mail # dummy path for local mail export MAILCHECK=0 # don't check local mail export IGNOREEOF=3 # don't log out on Ctrl-D # bash sudo completion ------------------------------------------------- #complete -cf sudo if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi # when connecting to SSH, start or reattach screen session ------------- if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then export SCREEN_EXIST=1 screen -DR fi # aliases (aka the Junk Drawer!) --------------------------------------- alias ls="ls --color=auto -F" alias ll="ls -lh" alias la="ls -a" alias lla="ls -alh" alias vi="vim" alias sv="sudo vim" alias grep="grep -n --color=auto" alias hist="history | grep $1" # search cmd history alias df="df -h" # human-readable sizes alias du="du -h" # disk hog alias ducks="du -cks * |sort -rn |head -11" # disk hog alias free="free -m" # show sizes in MB alias f="find | grep -i" # quick search alias sps="ps aux | grep -v grep | grep" # search process alias fixres="xrandr --size 1024x600" # reset resolution alias ntp="sudo /usr/bin/ntpdate time-a.nist.gov" # update time alias xp='xprop | grep "WM_WINDOW_ROLE\|WM_CLASS" && echo "WM_CLASS(STRING) = \"NAME\", \"CLASS\""' # get xprop CLASS and NAME alias getip="wget http://checkip.dyndns.org/ -O - -o /dev/null | cut -d: -f 2 | cut -d\< -f 1" alias psm="echo '%CPU %MEM PID COMMAND' && ps hgaxo %cpu,%mem,pid,comm | sort -nrk1 | head -n 10 | sed -e 's/-bin//' | sed -e 's/-media-play//'" alias timer='time read -p "Press enter to stop"' alias bb="bashburn" alias blankcd="wodim -v dev=/dev/cdrw -blank=fast -eject" alias dwc="vim ~/dev/abs/dwm-hg/config.h" alias dwmmake="cd ~/dev/abs/dwm-hg/ && makepkg -efi && killall dwm && cd -" alias stripx="find . -type f -print0 | xargs -0 chmod a-x" alias t="todo.sh -d ~/.todo" # pacman aliases ------------------------------------------------------- alias abs="sudo abs" alias pacup="sudo pacman -Syu" # sync and update alias pacin="sudo pacman -S" # install pkg alias pacout="sudo pacman -Rns" # remove pkg and the deps it installed alias pq="pacman -Qi" alias pacs="pacman -Sl | cut -d' ' -f2 | grep " # search pkgname by keyword #alias pacleanup="sudo pacman -Rs $(pacman -Qtdq)" alias pac="pacsearch" # colorize pacman (pacs) pacsearch() { echo -e "$(pacman -Ss $@ | sed \ -e 's#core/.*#\\033[1;31m&\\033[1;30m#g' \ -e 's#extra/.*#\\033[1;34m&\\033[1;30m#g' \ -e 's#community/.*#\\033[0;32m&\\033[1;30m#g' \ -e 's#^.*/.* [0-9].*#\\033[0;36m&\\033[1;30m#g' )" } # pkgbuild aliases ----------------------------------------------------- alias vp="vim PKGBUILD" alias clean="rm -rf pkg/ src/ *~" # clean up the build dir alias svnid="svn propset svn:keywords Id PKGBUILD" # LESS man page colors ------------------------------------------------- export GROFF_NO_SGR=1 # output ANSI color escape sequences in raw form 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' # linux console colors (ala phrak) ------------------------------------- if [ "$TERM" = "linux" ]; then echo -en "\e]P0000000" #black echo -en "\e]P8555753" #darkgrey echo -en "\e]P1ff6565" #darkred echo -en "\e]P9ff8d8d" #red echo -en "\e]P293d44f" #darkgreen echo -en "\e]PAc8e7a8" #green echo -en "\e]P3eab93d" #brown echo -en "\e]PBffc123" #yellow echo -en "\e]P4204a87" #darkblue echo -en "\e]PC3465a4" #blue echo -en "\e]P5ce5c00" #darkmagenta echo -en "\e]PDf57900" #magenta echo -en "\e]P689b6e2" #darkcyan echo -en "\e]PE46a4ff" #cyan echo -en "\e]P7cccccc" #lightgrey echo -en "\e]PFffffff" #white clear # bring us back to default input colours fi # functions ------------------------------------------------------------ function nh() { nohup "$@" &>/dev/null & } function mkcd() { mkdir "$1" && cd "$1"; } function calc() { echo "$*" | bc; } function mktar() { tar czf "${1%%/}.tar.gz" "${1%%/}/"; } function hex2dec { awk 'BEGIN { printf "%d\n",0x$1}'; } function dec2hex { awk 'BEGIN { printf "%x\n",$1}'; } # search the vim reference manual for a keyword # usage: :h function :h() { vim --cmd ":silent help $@" --cmd "only"; } # mkmine - recursively change ownership to $USER:$USER # usage: mkmine [filename] [dir] function mkmine() { sudo chown -R ${USER} ${1:-.}; } # remindme - a simple reminder # usage: remindme 10m function remindme() { sleep $1 && zenity --info --text "Time's Up!" & } # s - gnu screen function # usage: lists screen sessions, otherwise # s reattaches to , otherwise # s creates a new session . s() { if [[ $1 ]]; then screen -dRR -S $HOSTNAME.$1 else screen -ls fi } # x - archive extractor # usage: x x() { if [ -f $1 ] ; then case $1 in *.tar.bz2) tar xjf $1 ;; *.tar.gz) tar xzf $1 ;; *.bz2) bunzip2 $1 ;; *.rar) rar x $1 ;; *.gz) gunzip $1 ;; *.tar) tar xf $1 ;; *.tbz2) tar xjf $1 ;; *.tgz) tar xzf $1 ;; *.zip) unzip $1 ;; *.Z) uncompress $1;; *.7z) 7z x $1 ;; *) echo "'$1' cannot be extracted via ex()" ;; esac else echo "'$1' is not a valid file" fi } # roll - archive wrapper # usage: roll ./foo ./bar roll() { FILE=$1 case $FILE in *.tar.bz2) shift && tar cjf $FILE $* ;; *.tar.gz) shift && tar czf $FILE $* ;; *.tgz) shift && tar czf $FILE $* ;; *.zip) shift && zip $FILE $* ;; *.rar) shift && rar $FILE $* ;; *) echo "'$1' is not a valid archive type" esac } # define - fetch word defnition from google # usage: define define() { lynx -dump "http://www.google.com/search?hl=en&q=define%3A+${1}&btnG=Google+Search" | grep -m 5 -w "*" | sed 's/;/ -/g' | cut -d- -f5 > /tmp/templookup.txt if [[ -s /tmp/templookup.txt ]] ;then until ! read response do echo "${response}" done < /tmp/templookup.txt else echo "Sorry $USER, I can't find the term \"${1} \"" fi rm -f /tmp/templookup.txt } # absbuild - quickly build and upgrade a pkg from ABS # usage: absbuild absbuild() { ABSPATH=`find /var/abs -type d -name $1` mkdir -p ~/dev/abs/$1 || return 1 cp -R $ABSPATH/* ~/dev/abs/$1 cd ~/dev/abs/$1 $EDITOR PKGBUILD } # absfind - quickly locate and cat an ABS PKGBUILD # usage: absfind absfind() { ABSPATH=`find /var/abs -type d -name $1` echo -e "\n ==> $ABSPATH\n" cat $ABSPATH/PKGBUILD } # send public key to remote server # usage: sendkey sendkey() { if [ $# -ne 1 ]; then ssh $1 'cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_dsa.pub fi } # start, stop, restart, reload - simple daemon management # usage: start start() { for arg in $*; do sudo /etc/rc.d/$arg start done } stop() { for arg in $*; do sudo /etc/rc.d/$arg stop done } restart() { for arg in $*; do sudo /etc/rc.d/$arg restart done }