diff --git a/bash/aliases b/bash/aliases new file mode 100644 index 0000000..b86e5ca --- /dev/null +++ b/bash/aliases @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +pods_dir='~/podcasts' +# Aliases for OS X +if [[ `uname` == 'Darwin' ]]; then + alias ls='ls -G' + alias grep='grep --color' + alias fgrep='fgrep --color' + alias egrep='egrep --color' + + music_dir='~/Music' + desktop_dir='~/Desktop' + docs_dir='~/Documents' +fi + +# enable color support of ls and also add handy aliases +if [ -x /usr/bin/dircolors ]; then + test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" + alias ls='ls --color=auto' + alias dir='dir --color=auto' + alias vdir='vdir --color=auto' + + alias grep='grep --color=auto' + alias fgrep='fgrep --color=auto' + alias egrep='egrep --color=auto' + + music_dir='~/music' + desktop_dir='~/desktop' + docs_dir='~/documents' +fi + +# Some common aliases +alias ll='ls -alF' +alias df='df -h' +alias du='du -h' +alias curl='curl -s ' + +# Shorthand helpers +alias 644='chmod 644 ' +alias 755='chmod 755 ' +alias 600='chmod 600 ' +alias 700='chmod 500 ' +alias +x='chmod +x ' +alias ..='cd .. ' + +# Some specialty aliases +alias wget-opendir='wget -r -l 0 -c -nc -np -e robots=off --random-wait --limit-rate=800000k --reject=html,htm,index' +alias youtube-dl='youtube-dl -t ' +alias rsync-win='rsync --recursive --verbose --times --modify-window=1 ' +alias can-upgrade='sudo apt-get update && sudo apt-get upgrade -y ' +alias can-find='aptitude search ' +alias can-haz='sudo apt-get install ' +alias curl-headers='curl -s -v -I ' +alias take='sudo chown `whoami`:`whoami` ' +alias simple-http-server='python -m SimpleHTTPServer' +alias numfiles='find . -maxdepth 1 -type f | wc -l' +alias deepgrep='find . -type f | sed "s/$/\"/g" | sed "s/^/\"/g" | xargs grep --color ' + +# Move around to common locations +alias desktop="cd $desktop_dir" +alias podcasts="cd $pods_dir" +alias code='cd ~/code/ ' +alias music="cd $music_dir" +alias documents="cd $docs_dir" + +# Will add these scripts later +#alias podcasts-play-playlist="cd $pods_dir && mkpodcastplaylist ./ > pods.m3u && vlc pods.m3u 2>/dev/null &" + diff --git a/bash/colors b/bash/colors new file mode 100644 index 0000000..5cd4e6a --- /dev/null +++ b/bash/colors @@ -0,0 +1,75 @@ +#!/usr/bin/env bash + +# Reset +color_off='\e[0m' # Text Reset + +# Regular Colors +black='\e[0;30m' # Black +red='\e[0;31m' # Red +green='\e[0;32m' # Green +yellow='\e[0;33m' # Yellow +blue='\e[0;34m' # Blue +purple='\e[0;35m' # Purple +cyan='\e[0;36m' # Cyan +white='\e[0;37m' # White + +# Bold +bblack='\e[1;30m' # Black +bred='\e[1;31m' # Red +bgreen='\e[1;32m' # Green +byellow='\e[1;33m' # Yellow +bblue='\e[1;34m' # Blue +bpurple='\e[1;35m' # Purple +bcyan='\e[1;36m' # Cyan +bwhite='\e[1;37m' # White + +# Underline +ublack='\e[4;30m' # Black +ured='\e[4;31m' # Red +ugreen='\e[4;32m' # Green +uyellow='\e[4;33m' # Yellow +ublue='\e[4;34m' # Blue +upurple='\e[4;35m' # Purple +ucyan='\e[4;36m' # Cyan +uwhite='\e[4;37m' # White + +# Background +on_black='\e[40m' # Black +on_red='\e[41m' # Red +on_green='\e[42m' # Green +on_yellow='\e[43m' # Yellow +on_blue='\e[44m' # Blue +on_purple='\e[45m' # Purple +on_cyan='\e[46m' # Cyan +on_white='\e[47m' # White + +# High Intensty +iblack='\e[0;90m' # Black +ired='\e[0;91m' # Red +igreen='\e[0;92m' # Green +iyellow='\e[0;93m' # Yellow +iblue='\e[0;94m' # Blue +ipurple='\e[0;95m' # Purple +icyan='\e[0;96m' # Cyan +iwhite='\e[0;97m' # White + +# Bold High Intensty +biblack='\e[1;90m' # Black +biRed='\e[1;91m' # Red +biGreen='\e[1;92m' # Green +biYellow='\e[1;93m' # Yellow +biBlue='\e[1;94m' # Blue +biPurple='\e[1;95m' # Purple +biCyan='\e[1;96m' # Cyan +biWhite='\e[1;97m' # White + +# High Intensty backgrounds +on_iblack='\e[0;100m' # Black +on_ired='\e[0;101m' # Red +on_igreen='\e[0;102m' # Green +on_iyellow='\e[0;103m' # Yellow +on_iblue='\e[0;104m' # Blue +on_ipurple='\e[10;95m' # Purple +on_icyan='\e[0;106m' # Cyan +on_iwhite='\e[0;107m' # White + diff --git a/bash/environment b/bash/environment new file mode 100644 index 0000000..402ba13 --- /dev/null +++ b/bash/environment @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# don't put duplicate lines in the history. See bash(1) for more options +# ... or force ignoredups and ignorespace +HISTCONTROL=ignoredups:ignorespace + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=10000 +HISTFILESIZE=20000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +if [ "$TERM" == "xterm" ]; then + export TERM=xterm-256color +fi + +function _add-path { + dir="$1" + if [[ -d $dir ]]; then + PATH=$dir:$PATH + fi +} + +_add-path /var/lib/gems/1.8/bin +_add-path ~/opt/bin +_add-path /opt/local/bin +_add-path /opt/local/sbin +_add-path /opt/bin +_add-path ~/bin +_add-path ~/code/cli/bin +_add-path ~/code/ci/phpunit-git-deploy/bin + +export EDITOR='vim' + +# python virtualenvwrapper +export WORKON_HOME="$HOME/.virtualenvs" +if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then + source /usr/local/bin/virtualenvwrapper.sh +fi + diff --git a/bash/functions b/bash/functions new file mode 100644 index 0000000..c382937 --- /dev/null +++ b/bash/functions @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +# Taken from: http://www.commandlinefu.com/commands/view/4873/google-spell-checker +function spellcheck () { + typeset y=$@;curl -sd "$y" https://www.google.com/tbproxy/spell|sed -n '/s="[0-9]"/{s/<[^>]*>/ /g;s/\t/ /g;s/ *\(.*\)/Suggestions: \1\n/g;p}'|tee >(grep -Eq '.*'||echo -e "OK"); +} + +function min-jpg { + tmpfile=`mktemp` + ogfile="$1" + jpegtran -optimize -perfect -outfile $tmpfile $ogfile + mv $tmpfile $ogfile +} + +function min-png { + tmpfile=`mktemp` + ogfile="$1" + pngcrush -rem alla -reduce -brute $ogfile $tmpfile + mv $tmpfile $ogfile +} + +function parse_git_status { + if [[ $(git status 2> /dev/null | wc -l) -eq 0 ]]; then + return + fi + if [[ $(git status 2> /dev/null | grep "working directory clean" | wc -l) -eq 0 ]]; then + echo '∓' + fi +} + +function parse_git_branch { + git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' +} + +function get-create-date { + date=`date -r "$1" +"%F"` + echo $date +} + +function add-date-prefix { + DIR=`dirname "$1"` + FILE=`basename "$1"` + DATE=`date -r "$1" +"%F"` + + mv "$1" "$DIR/$DATE_$FILE" +} + +function get-bitrate { + echo `exiftool -AudioBitrate "$1" | awk '{print $4}'`": $1" +} + diff --git a/bash/git-flow-completion b/bash/git-flow-completion new file mode 100644 index 0000000..e6c8cd3 --- /dev/null +++ b/bash/git-flow-completion @@ -0,0 +1,197 @@ +#!bash +# +# git-flow-completion +# =================== +# +# Bash completion support for [git-flow](http://github.com/nvie/gitflow) +# +# The contained completion routines provide support for completing: +# +# * git-flow init and version +# * feature, hotfix and release branches +# * remote feature, hotfix and release branch names +# +# +# Installation +# ------------ +# +# To achieve git-flow completion nirvana: +# +# 0. Install git-completion. +# +# 1. Install this file. Either: +# +# a. Place it in a `bash-completion.d` folder: +# +# * /etc/bash-completion.d +# * /usr/local/etc/bash-completion.d +# * ~/bash-completion.d +# +# b. Or, copy it somewhere (e.g. ~/.git-flow-completion.sh) and put the following line in +# your .bashrc: +# +# source ~/.git-flow-completion.sh +# +# 2. If you are using Git < 1.7.1: Edit git-completion.sh and add the following line to the giant +# $command case in _git: +# +# flow) _git_flow ;; +# +# +# The Fine Print +# -------------- +# +# Copyright (c) 2011 [Justin Hileman](http://justinhileman.com) +# +# Distributed under the [MIT License](http://creativecommons.org/licenses/MIT/) + +_git_flow () +{ + local subcommands="init feature release hotfix help version" + local subcommand="$(__git_find_on_cmdline "$subcommands")" + if [ -z "$subcommand" ]; then + __gitcomp "$subcommands" + return + fi + + case "$subcommand" in + init) + __git_flow_init + return + ;; + feature) + __git_flow_feature + return + ;; + release) + __git_flow_release + return + ;; + hotfix) + __git_flow_hotfix + return + ;; + *) + COMPREPLY=() + ;; + esac +} + +__git_flow_init () +{ + local subcommands="help" + local subcommand="$(__git_find_on_cmdline "$subcommands")" + if [ -z "$subcommand" ]; then + __gitcomp "$subcommands" + return + fi +} + +__git_flow_feature () +{ + local subcommands="list start finish publish track diff rebase checkout pull help" + local subcommand="$(__git_find_on_cmdline "$subcommands")" + if [ -z "$subcommand" ]; then + __gitcomp "$subcommands" + return + fi + + case "$subcommand" in + pull) + __gitcomp "$(__git_remotes)" + return + ;; + checkout|finish|diff|rebase) + __gitcomp "$(__git_flow_list_branches 'feature')" + return + ;; + publish) + __gitcomp "$(comm -23 <(__git_flow_list_branches 'feature') <(__git_flow_list_remote_branches 'feature'))" + return + ;; + track) + __gitcomp "$(comm -23 <(__git_flow_list_remote_branches 'feature') <(__git_flow_list_branches 'feature'))" + return + ;; + *) + COMPREPLY=() + ;; + esac +} + +__git_flow_release () +{ + local subcommands="list start finish track publish help" + local subcommand="$(__git_find_on_cmdline "$subcommands")" + if [ -z "$subcommand" ]; then + __gitcomp "$subcommands" + return + fi + + case "$subcommand" in + finish) + __gitcomp "$(__git_flow_list_branches 'release')" + return + ;; + publish) + __gitcomp "$(comm -23 <(__git_flow_list_branches 'release') <(__git_flow_list_remote_branches 'release'))" + return + ;; + track) + __gitcomp "$(comm -23 <(__git_flow_list_remote_branches 'release') <(__git_flow_list_branches 'release'))" + return + ;; + *) + COMPREPLY=() + ;; + esac + +} + +__git_flow_hotfix () +{ + local subcommands="list start finish help" + local subcommand="$(__git_find_on_cmdline "$subcommands")" + if [ -z "$subcommand" ]; then + __gitcomp "$subcommands" + return + fi + + case "$subcommand" in + finish) + __gitcomp "$(__git_flow_list_branches 'hotfix')" + return + ;; + *) + COMPREPLY=() + ;; + esac +} + +__git_flow_prefix () +{ + case "$1" in + feature|release|hotfix) + git config "gitflow.prefix.$1" 2> /dev/null || echo "$1/" + return + ;; + esac +} + +__git_flow_list_branches () +{ + local prefix="$(__git_flow_prefix $1)" + git branch 2> /dev/null | tr -d ' |*' | grep "^$prefix" | sed s,^$prefix,, | sort +} + +__git_flow_list_remote_branches () +{ + local prefix="$(__git_flow_prefix $1)" + local origin="$(git config gitflow.origin 2> /dev/null || echo "origin")" + git branch -r 2> /dev/null | sed "s/^ *//g" | grep "^$origin/$prefix" | sed s,^$origin/$prefix,, | sort +} + +# alias __git_find_on_cmdline for backwards compatibility +if [ -z "`type -t __git_find_on_cmdline`" ]; then + alias __git_find_on_cmdline=__git_find_subcommand +fi diff --git a/bash/prompt b/bash/prompt new file mode 100644 index 0000000..4a45e65 --- /dev/null +++ b/bash/prompt @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# display hostname +PS1="\[$blue\]«\h»" +# display separator +PS1="$PS1\[$yellow\]⚡" +# display current path +PS1="$PS1\[$green\]\w " +# display git branch +PS1="$PS1\[$bblack\]"'$(parse_git_branch)' +# display git status +PS1="$PS1\[$yellow\]"'$(parse_git_status) ' +# display date +PS1="$PS1\[$black\]\D{%F %I:%M%P} " +# display date +PS1="$PS1\[$color_off\]\n⚓ " + diff --git a/bashrc b/bashrc new file mode 100644 index 0000000..d804424 --- /dev/null +++ b/bashrc @@ -0,0 +1,38 @@ +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +if [ -f ~/.bash/environment ]; then + source ~/.bash/environment +fi + +if [ -f ~/.bash/colors ]; then + source ~/.bash/colors +fi + +if [ -f ~/.bash/functions ]; then + source ~/.bash/functions +fi + +if [ -f ~/.bash/aliases ]; then + source ~/.bash/aliases +fi + +if [ -f ~/.bash/git-flow-completion ]; then + source ~/.bash/git-flow-completion +fi + +if [ -f ~/.bash/prompt ]; then + source ~/.bash/prompt +fi + +# enable programmable completion features (you don't need to enable +# this, if it's already enabled in /etc/bash.bashrc and /etc/profile +# sources /etc/bash.bashrc). +if [ -f /etc/bash_completion ] && ! shopt -oq posix; then + source /etc/bash_completion +fi + +if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then + source /opt/local/etc/profile.d/bash_completion.sh +fi +