Skip to content

Instantly share code, notes, and snippets.

@djfrsn
Last active October 15, 2015 16:37
Show Gist options
  • Select an option

  • Save djfrsn/21e55d254404123c6afe to your computer and use it in GitHub Desktop.

Select an option

Save djfrsn/21e55d254404123c6afe to your computer and use it in GitHub Desktop.
bash profile
# ---------------------------------------------------------------------------
#
# Description: This file holds all my BASH configurations and aliases
#
# Sections:
# 1. Environment Configuration
# 2. Make Terminal Better (remapping defaults and adding functionality)
# 3. File and Folder Management
# 4. Searching
# 5. Process Management
# 6. Networking
# 7. System Operations & Information
# 8. Web Development
# 9. Reminders & Notes
# 10. Planets Scripts
# ---------------------------------------------------------------------------
# -------------------------------
# 1. ENVIRONMENT CONFIGURATION
# -------------------------------
alias trip='shopt -s checkwinsize'
# Change Prompt
# ------------------------------------------------------------
export PS1='________________________________________________________________________________\n| \[\e[0;35m\w\[\e[m \[\e[1;33m@ \[\e[m\[\e[0;31m\h\[\e[m \[\e[0;30m(\[\e[m\[\e[0;35m\u\[\e[m\[\e[0;30m)\[\e[m \n| \[\e[0;33m [ \[\e[m\[\e[1;34m\W\[\e[m\[\e[0;36m$ \[\e[0;33m] \[\e[m \[\e[1;36m∆ \[\e[m '
# Default export PS1="________________________________________________________________________________\n| \w @ \h (\u) \n| => "
# buggy one... export PS1='________________________________________________________________________________\n| \[\e[0;35m\w\[\e[m \[\e[1;33m@ \[\e[m\[\e[0;31m\h\[\e[m \[\e[0;30m(\[\e[m\[\e[0;35m\u\[\e[m\[\e[0;30m)\[\e[m \n| \[\e[0;33m [ \[\e[m\[\e[1;34m\W\[\e[m\[\e[0;36m$(" (\[\e[m\[\e[1;33m%s\[\e[m\[\e[0;36m)\[\e[m") \[\e[0;33m] \[\e[m \[\e[1;36m∆ \[\e[m '
export PS2="| => "
# Set Paths
# ------------------------------------------------------------
export PATH="$PATH:/usr/local/bin/"
export PATH="/usr/local/git/bin:/sw/bin/:/usr/local/bin:/usr/local/:/usr/local/sbin:/usr/local/mysql/bin:$PATH"
# Set Default Editor (change 'Nano' to the editor of your choice)
# ------------------------------------------------------------
export EDITOR=/usr/bin/nano
# Set default blocksize for ls, df, du
# from this: http://hints.macworld.com/comment.php?mode=view&cid=24491
# ------------------------------------------------------------
export BLOCKSIZE=1k
# Add color to terminal
# (this is all commented out as I use Mac Terminal Profiles)
# from http://osxdaily.com/2012/02/21/add-color-to-the-terminal-in-mac-os-x/
# ------------------------------------------------------------
# export CLICOLOR=1
# export LSCOLORS=ExFxBxDxCxegedabagacad
# -----------------------------
# 2. MAKE TERMINAL BETTER
# -----------------------------
alias cp='cp -iv' # Preferred 'cp' implementation
alias mv='mv -iv' # Preferred 'mv' implementation
alias mkdir='mkdir -pv' # Preferred 'mkdir' implementation
alias ll='ls -FGlAhp' # Preferred 'ls' implementation
alias less='less -FSRXc' # Preferred 'less' implementation
cd() { builtin cd "$@"; ll; } # Always list directory contents upon 'cd'
alias cd..='cd ../' # Go back 1 directory level (for fast typers)
alias .='cd ../' # Go back 1 directory level
alias ..='cd ../../' # Go back 2 directory levels
alias .3='cd ../../../' # Go back 3 directory levels
alias .4='cd ../../../../' # Go back 4 directory levels
alias .5='cd ../../../../../' # Go back 5 directory levels
alias .6='cd ../../../../../../' # Go back 6 directory levels
alias edit='subl' # edit: Opens any file in sublime editor
alias f='open -a Finder ./' # f: Opens current directory in MacOS Finder
alias ~="cd ~" # ~: Go Home
alias c='clear' # c: Clear terminal display
alias which='type -all' # which: Find executables
alias path='echo -e ${PATH//:/\\n}' # path: Echo all executable Paths
alias show_options='shopt' # Show_options: display bash options settings
alias fix_stty='stty sane' # fix_stty: Restore terminal settings when screwed up
alias cic='set completion-ignore-case On' # cic: Make tab-completion case-insensitive
mcd () { mkdir -p "$1" && cd "$1"; } # mcd: Makes new Dir and jumps inside
trash () { command mv "$@" ~/.Trash ; } # trash: Moves a file to the MacOS trash
ql () { qlmanage -p "$*" >& /dev/null; } # ql: Opens any file in MacOS Quicklook Preview
alias DT='tee ~/Desktop/terminalOut.txt' # DT: Pipe content to file on MacOS Desktop
# lr: Full Recursive Directory Listing
# ------------------------------------------
alias lr='ls -R | grep ":$" | sed -e '\''s/:$//'\'' -e '\''s/[^-][^\/]*\//--/g'\'' -e '\''s/^/ /'\'' -e '\''s/-/|/'\'' | less'
# mans: Search manpage given in agument '1' for term given in argument '2' (case insensitive)
# displays paginated result with colored search terms and two lines surrounding each hit. Example: mans mplayer codec
# --------------------------------------------------------------------
mans () {
man $1 | grep -iC2 --color=always $2 | less
}
# showa: to remind yourself of an alias (given some part of it)
# ------------------------------------------------------------
showa () { /usr/bin/grep --color=always -i -a1 $@ ~/Library/init/bash/aliases.bash | grep -v '^\s*$' | less -FSRXc ; }
# -------------------------------
# 3. FILE AND FOLDER MANAGEMENT
# -------------------------------
zipf () { zip -r "$1".zip "$1" ; } # zipf: To create a ZIP archive of a folder
alias numFiles='echo $(ls -1 | wc -l)' # numFiles: Count of non-hidden files in current dir
alias make1mb='mkfile 1m ./1MB.dat' # make1mb: Creates a file of 1mb size (all zeros)
alias make5mb='mkfile 5m ./5MB.dat' # make5mb: Creates a file of 5mb size (all zeros)
alias make10mb='mkfile 10m ./10MB.dat' # make10mb: Creates a file of 10mb size (all zeros)
alias ducks='du -cks *|sort -rn|head -11' # List top ten largest files/directories in current directory
# Go back x directories
# ------------------------------------------------------
goback() {
str=""
count=0
while [ "$count" -lt "$1" ];
do
str=$str"../"
let count=count+1
done
cd $str
}
# cdf: 'Cd's to frontmost window of MacOS Finder
# ------------------------------------------------------
cdf () {
currFolderPath=$( /usr/bin/osascript <<" EOT"
tell application "Finder"
try
set currFolder to (folder of the front window as alias)
on error
set currFolder to (path to desktop folder as alias)
end try
POSIX path of currFolder
end tell
EOT
)
echo "cd to \"$currFolderPath\""
cd "$currFolderPath"
}
# extract: Extract most know archives with one command
# ---------------------------------------------------------
extract () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $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 extract()" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# ---------------------------
# 4. SEARCHING
# ---------------------------
alias qfind="find . -name " # qfind: Quickly search for file
ff () { /usr/bin/find . -name "$@" ; } # ff: Find file under the current directory
ffs () { /usr/bin/find . -name "$@"'*' ; } # ffs: Find file whose name starts with a given string
ffe () { /usr/bin/find . -name '*'"$@" ; } # ffe: Find file whose name ends with a given string
# spotlight: Search for a file using MacOS Spotlight's metadata
# -----------------------------------------------------------
spotlight () { mdfind "kMDItemDisplayName == '$@'wc"; }
# ---------------------------
# 5. PROCESS MANAGEMENT
# ---------------------------
# findPid: find out the pid of a specified process
# -----------------------------------------------------
# Note that the command name can be specified via a regex
# E.g. findPid '/d$/' finds pids of all processes with names ending in 'd'
# Without the 'sudo' it will only find processes of the current user
# -----------------------------------------------------
findPid () { lsof -t -c "$@" ; }
# memHogsTop, memHogsPs: Find memory hogs
# -----------------------------------------------------
alias memHogsTop='top -l 1 -o rsize | head -20'
alias memHogsPs='ps wwaxm -o pid,stat,vsize,rss,time,command | head -10'
# cpuHogs: Find CPU hogs
# -----------------------------------------------------
alias cpu_hogs='ps wwaxr -o pid,stat,%cpu,time,command | head -10'
# topForever: Continual 'top' listing (every 10 seconds)
# -----------------------------------------------------
alias topForever='top -l 9999999 -s 10 -o cpu'
# ttop: Recommended 'top' invocation to minimize resources
# ------------------------------------------------------------
# Taken from this macosxhints article
# http://www.macosxhints.com/article.php?story=20060816123853639
# ------------------------------------------------------------
alias ttop="top -R -F -s 10 -o rsize"
# my_ps: List processes owned by my user:
# ------------------------------------------------------------
my_ps() { ps $@ -u $USER -o pid,%cpu,%mem,start,time,bsdtime,command ; }
# ---------------------------
# 6. NETWORKING
# ---------------------------
alias myip='curl ip.appspot.com' # myip: Public facing IP Address
alias netCons='lsof -i' # netCons: Show all open TCP/IP sockets
alias flushDNS='dscacheutil -flushcache' # flushDNS: Flush out the DNS Cache
alias lsock='sudo /usr/sbin/lsof -i -P' # lsock: Display open sockets
alias lsockU='sudo /usr/sbin/lsof -nP | grep UDP' # lsockU: Display only open UDP sockets
alias lsockT='sudo /usr/sbin/lsof -nP | grep TCP' # lsockT: Display only open TCP sockets
alias ipInfo0='ipconfig getpacket en0' # ipInfo0: Get info on connections for en0
alias ipInfo1='ipconfig getpacket en1' # ipInfo1: Get info on connections for en1
alias openPorts='sudo lsof -i | grep LISTEN' # openPorts: All listening connections
alias showBlocked='sudo ipfw list' # showBlocked: All ipfw rules inc/ blocked IPs
# ii: display useful host related informaton
# -------------------------------------------------------------------
ii() {
echo -e "\nYou are logged on ${RED}$HOST"
echo -e "\nAdditionnal information:$NC " ; uname -a
echo -e "\n${RED}Users logged on:$NC " ; w -h
echo -e "\n${RED}Current date :$NC " ; date
echo -e "\n${RED}Machine stats :$NC " ; uptime
echo -e "\n${RED}Current network location :$NC " ; scselect
echo -e "\n${RED}Public facing IP Address :$NC " ;myip
#echo -e "\n${RED}DNS Configuration:$NC " ; scutil --dns
echo
}
# ---------------------------------------
# 7. SYSTEMS OPERATIONS & INFORMATION
# ---------------------------------------
alias mountReadWrite='/sbin/mount -uw /' # mountReadWrite: For use when booted into single-user
# cleanupDS: Recursively delete .DS_Store files
# -------------------------------------------------------------------
alias cleanupDS="find . -type f -name '*.DS_Store' -ls -delete"
# finderShowHidden: Show hidden files in Finder
# finderHideHidden: Hide hidden files in Finder
# -------------------------------------------------------------------
alias finderShowHidden='defaults write com.apple.finder ShowAllFiles TRUE'
alias finderHideHidden='defaults write com.apple.finder ShowAllFiles FALSE'
# cleanupLS: Clean up LaunchServices to remove duplicates in the "Open With" menu
# -----------------------------------------------------------------------------------
alias cleanupLS="/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user && killall Finder"
# screensaverDesktop: Run a screensaver on the Desktop
# -----------------------------------------------------------------------------------
alias screensaverDesktop='/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background'
# ---------------------------------------
# 8. WEB DEVELOPMENT
# ---------------------------------------
alias apacheEdit='sudo edit /etc/httpd/httpd.conf' # apacheEdit: Edit httpd.conf
alias apacheRestart='sudo apachectl graceful' # apacheRestart: Restart Apache
alias editHosts='sudo edit /etc/hosts' # editHosts: Edit /etc/hosts file
alias herr='tail /var/log/httpd/error_log' # herr: Tails HTTP error logs
alias apacheLogs="less +F /var/log/apache2/error_log" # Apachelogs: Shows apache error logs
httpHeaders () { /usr/bin/curl -I -L $@ ; } # httpHeaders: Grabs headers from web page
# httpDebug: Download a web page and show info on what took time
# -------------------------------------------------------------------
httpDebug () { /usr/bin/curl $@ -o /dev/null -w "dns: %{time_namelookup} connect: %{time_connect} pretransfer: %{time_pretransfer} starttransfer: %{time_starttransfer} total: %{time_total}\n" ; }
# Marks: Mark folders for quick jumps
# -------------------------------------------------------------------
export MARKPATH=$HOME/.marks
function jump {
cd -P "$MARKPATH/$1" 2>/dev/null || echo "No such mark: $1"
}
function mark {
mkdir -p "$MARKPATH"; ln -s "$(pwd)" "$MARKPATH/$1"
}
function unmark {
rm -i "$MARKPATH/$1"
}
function marks {
\ls -l "$MARKPATH" | tail -n +2 | sed 's/ / /g' | cut -d' ' -f9- | awk -F ' -> ' '{printf "%-10s -> %s\n", $1, $2}'
}
_completemarks() {
local curw=${COMP_WORDS[COMP_CWORD]}
local wordlist=$(find $MARKPATH -type l -printf "%f\n")
COMPREPLY=($(compgen -W '${wordlist[@]}' -- "$curw"))
return 0
}
complete -F _completemarks jump unmark
# ---------------------------------------
# 9. REMINDERS & NOTES
# ---------------------------------------
# remove_disk: spin down unneeded disk
# ---------------------------------------
# diskutil eject /dev/disk1s3
# to change the password on an encrypted disk image:
# ---------------------------------------
# hdiutil chpass /path/to/the/diskimage
# to mount a read-only disk image as read-write:
# ---------------------------------------
# hdiutil attach example.dmg -shadow /tmp/example.shadow -noverify
# mounting a removable drive (of type msdos or hfs)
# ---------------------------------------
# mkdir /Volumes/Foo
# ls /dev/disk* to find out the device to use in the mount command)
# mount -t msdos /dev/disk1s1 /Volumes/Foo
# mount -t hfs /dev/disk1s1 /Volumes/Foo
# to create a file of a given size: /usr/sbin/mkfile or /usr/bin/hdiutil
# ---------------------------------------
# e.g.: mkfile 10m 10MB.dat
# e.g.: hdiutil create -size 10m 10MB.dmg
# the above create files that are almost all zeros - if random bytes are desired
# then use: ~/Dev/Perl/randBytes 1048576 > 10MB.dat,
# Open github web page of current git repo
alias github="chrome \`git remote -v | grep github.com | grep fetch | head -1 | field 2 | sed 's/git:/http:/g'\`"
# Customizing Bash Prompt
# enable the git bash completion commands
function mkdircd () { mkdir -p "$@" && cd "$@"; }
function cmanm () { git commit -v -a -m "$*"; }
function cmnm () { git commit -v -m "$*"; }
function srchrpc () { ack "$1" -la --print0 | xargs -0 -n 1 sed -i "s/$1/$2/"; }
function git_current_branch () { git symbolic-ref --short HEAD 2> /dev/null; }
function todohere () { TODO=$PWD/todo.md; }
function mvallup () { mv -- * .[^.] .??* ..; }
function mvallups () {(shopt -s dotglob; mv -- * ..)}
function gi() { curl http://gitignore.io/api/"$@" ;}
# config edit quickly -- ^o^ meow
alias sbashp='subl -w ~/.bash_profile && source ~/.bash_profile'
alias shosts='subl -w /etc/hosts'
alias sgitcg='subl -w ~/.gitconfig'
alias sgitcl='subl -w ./.git/config'
alias sbp='source ~/.bash_profile'
alias cgrep="grep --color=always"
alias gp='git push master'
alias grebmp='git rebase -p master'
alias grebm='git rebase master'
alias grb='git rebase -p'
alias gpaat='git push all --all && g push all --tags'
alias gup='git fetch origin && grb origin/$(git_current_branch)'
alias gpt='git push && g push --tags'
alias tdir='ls -R | grep ":$" | sed -e "s/:$//" -e "s/[^-][^\/]*\//--/g" -e "s/^/ /" -e "s/-/|/"'
alias dir='dir --color'
alias g='git'
alias catnap='pmset sleepnow'
#
# History
#
shopt -s histappend # Append to history file instead of overwriting
shopt -s cmdhist # store multiline commands as 1 line
shopt -s checkwinsize # check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
export HISTCONTROL="ignoreboth" # store duplicate lines once, ignore lines beginning with a space
export HISTIGNORE="&:ls:[bf]g:exit:%[0-9]" # ignore simple commands
unset HISTFILESIZE # keep unlimited history
__define_git_completion () {
eval "
_git_$2_shortcut () {
COMP_LINE=\"git $2\${COMP_LINE#$1}\"
let COMP_POINT+=$((4+${#2}-${#1}))
COMP_WORDS=(git $2 \"\${COMP_WORDS[@]:1}\")
let COMP_CWORD+=1
local cur words cword prev
_get_comp_words_by_ref -n =: cur words cword prev
_git_$2
}
"
}
__git_shortcut () {
type _git_$2_shortcut &>/dev/null || __define_git_completion $1 $2
alias $1="git $2 $3"
complete -o default -o nospace -F _git_$2_shortcut $1
}
__git_shortcut gcb checkout -b
__git_shortcut gmg merge
__git_shortcut gm merge --no-ff
__git_shortcut gbr branch
__git_shortcut gco checkout
__git_shortcut ga add
__git_shortcut gbr branch
__git_shortcut gba branch -a
__git_shortcut gbd branch -d
__git_shortcut gco checkout
__git_shortcut gci commit -v
__git_shortcut gcv commit '-a -v'
__git_shortcut gd diff
__git_shortcut gdc diff --cached
__git_shortcut gds diff --stat
__git_shortcut gfc fetch
__git_shortcut gl log
__git_shortcut glp log -p
__git_shortcut gls log --stat
# These are the color definitions used by gitprompt.sh
GIT_PROMPT_PREFIX="[ " # start of the git info string
GIT_PROMPT_SUFFIX=" ]" # the end of the git info string
GIT_PROMPT_SEPARATOR=" | " # separates each item
GIT_PROMPT_BRANCH="\[\033[0;96m\]" # the git branch that is active in the current directory
GIT_PROMPT_STAGED="${Red}● " # the number of staged files/directories
GIT_PROMPT_CONFLICTS="${Red}✖ " # the number of files in conflict
GIT_PROMPT_CHANGED="${Blue}✚ " # the number of changed files
GIT_PROMPT_REMOTE=" " # the remote branch name (if any)
GIT_PROMPT_UNTRACKED="${Magenta}… " # the number of untracked files/dirs
GIT_PROMPT_STASHED="${BoldBlue}⚑ " # the number of stashed files/dir
GIT_PROMPT_CLEAN="${BoldGreen}✔ " # a colored flag indicating a "clean" repo
# # colors ^o^
# # regular colors
# $K="\[\033[0;30m\]" # black
# $R="\[\033[0;31m\]" # red
# $G="\[\033[0;32m\]" # green
# $Y="\[\033[0;33m\]" # yellow
# $B="\[\033[0;34m\]" # blue
# $M="\[\033[0;35m\]" # magenta
# $C="\[\033[0;36m\]" # cyan
# $W="\[\033[0;37m\]" # white
# # emphasized (bolded) colors
# $BK="\[\033[1;30m\]"
# $BR="\[\033[1;31m\]"
# $BG="\[\033[1;32m\]"
# $BY="\[\033[1;33m\]"
# $BB="\[\033[1;34m\]"
# $BM="\[\033[1;35m\]"
# $BC="\[\033[1;36m\]"
# $BW="\[\033[1;37m\]"
# # reset
# $RESET="\[\033[0;37m\]"
# example usage
# PS1="\t $BY\$(__name_and_server)$Y\W$G\$(__rvm_prompt)$G\$(__git_prompt)$RESET$ "
# export GIT_PS1_SHOWDIRTYSTATE=1
# export GIT_PS1_SHOWSTASHSTATE=1
# export GIT_PS1_SHOWUNTRACKEDFILES=1
# export GIT_PS1_SHOWUPSTREAM="auto verbose"
# export PS1='\[\033[01;32m\]\u\[\033[01;34m\] \w\[\033[31m\]$(__git_ps1 " (%s)")\n\[\033[01;34m\] ^o^ \[\033[00m\]\[\033[01;33m\]meow \[\033[01;34m\] \$\[\033[00m\]\[\033[0;37m\] '
# ---------------------------------------
# studi˚
# ---------------------------------------
# drop
alias drop="mkdir newStudio; cd newStudio;"
function studio {
git clone https://github.com/djfrsn/studio.git .
# this runs through pkg.json's listed dependencies & downloads them
npm install
gulp
printf "Welcome to Studi˚, enjoy your stay!"
}
# run with 'drop studio' in console
# utils
alias deletefolder="cd ..; rm -rf --"
alias purgefolder="rm -rfv"
# ssh
alias wtr="ssh -p 2222 broadway@192.232.218.170;"
# Gulp
alias g="gulp"
alias gs="gulp styles"
alias gjs="gulp script"
alias gh="gulp scaffold"
alias gw="gulp watch"
#
### Git
#
# git general
alias g="git"
alias s="git status;"
alias a="git add -A :/;"
alias l="git log;"
# git around
alias ccreate="git checkout creating;"
alias cmstr="git checkout master;"
alias cdev="git checkout dev;"
alias mmstr="git merge master;"
alias mcreate="git merge creating;"
alias mdev="git merge dev;"
alias gs="git stash;"
alias gitc="git commit -m"
alias agitc="a git commit -m"
alias grh="git revert head -m"
alias gitamend="git commit --amend -m"
# git utils
alias fix="git config core.autocrlf false;"
alias fixuntrk='git rm -r --cached .; git add .; git commit -m "Fixed untracked files";'
# git studi˚
alias pushstu="git push studio master;"
alias pullstu="git pull studio master;"
alias saves="clive mdev cmstr mlive pushstu cdev s"
alias ps="git push studio master"
# save studi˚ to GitHub
function psa
{
git checkout dev
git merge creating
git checkout master
git merge dev
git push studio master
git checkout creating
s
printf "Great Job! Keep going!"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment