diff --git a/functions/base.bash b/functions/base.bash
new file mode 100644
index 0000000..c7dc909
--- /dev/null
+++ b/functions/base.bash
@@ -0,0 +1,34 @@
+function rh {
+  history | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
+}
+  
+function ips {
+  ifconfig | grep "inet " | awk '{ print $2 }'
+}
+
+
+# View man documentation in Preview
+pman () {
+   man -t "${1}" | open -f -a /Applications/Preview.app/
+}
+
+
+pcurl() {
+  curl "${1}" | open -f -a /Applications/Preview.app/
+}
+
+pri() {
+  ri -T "${1}" | open -f -a /Applications/Preview.app/
+}
+
+
+# disk usage per directory
+usage ()
+{
+  if [ $1 ]
+  then
+    du -hd $1
+  else
+    du -hd 1
+  fi
+}
\ No newline at end of file
diff --git a/functions/git.bash b/functions/git.bash
new file mode 100644
index 0000000..17e8a70
--- /dev/null
+++ b/functions/git.bash
@@ -0,0 +1,13 @@
+function git_remote {
+  echo "Running: git remote add origin ${GIT_HOSTING}:$1.git"
+  git remote add origin $GIT_HOSTING:$1.git
+}
+
+function git_first_push {
+  echo "Running: git push origin master:refs/heads/master"
+  git push origin master:refs/heads/master
+}
+
+function git_remove_missing_files() {
+  git ls-files -d -z | xargs -0 git update-index --remove
+}
\ No newline at end of file
diff --git a/functions/javascript.bash b/functions/javascript.bash
new file mode 100644
index 0000000..9f1d52e
--- /dev/null
+++ b/functions/javascript.bash
@@ -0,0 +1,11 @@
+function rails_jquery {
+  curl -o public/javascripts/rails.js http://github.com/rails/jquery-ujs/raw/master/src/rails.js
+}
+
+function jquery_install {
+  curl -o public/javascripts/jquery.js http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
+}
+
+function  jquery_ui_install {
+  curl -o public/javascripts/jquery_ui.js http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.min.js
+}
\ No newline at end of file
diff --git a/functions/nginx.bash b/functions/nginx.bash
new file mode 100644
index 0000000..702c0d8
--- /dev/null
+++ b/functions/nginx.bash
@@ -0,0 +1,48 @@
+function nginx_reload() {
+  FILE="${NGINX_PATH}/logs/nginx.pid"
+  if [ -e $FILE ]; then
+    echo "Reloading NGINX..."
+    PID=`cat $NGINX_PATH/logs/nginx.pid`
+    sudo kill -HUP $PID
+  else
+    echo "Nginx pid file not found"
+    return 0
+  fi
+}
+
+function nginx_stop() {
+  FILE="${NGINX_PATH}/logs/nginx.pid"
+  if [ -e $FILE ]; then
+    echo "Stopping NGINX..."
+    PID=`cat $NGINX_PATH/logs/nginx.pid`
+    sudo kill -INT $PID
+  else
+    echo "Nginx pid file not found"
+    return 0
+  fi
+}
+
+function nginx_start() {
+  FILE="${NGINX_PATH}/sbin/nginx"
+  if [ -e $FILE ]; then
+    echo "Starting NGINX..."
+    sudo $NGINX_PATH/sbin/nginx
+  else
+    echo "Couldn't start nginx"
+  fi
+}
+
+function nginx_restart() {
+  FILE="${NGINX_PATH}/logs/nginx.pid"
+  if [ -e $FILE ]; then
+    echo "Stopping NGINX..."
+    PID=`cat $NGINX_PATH/logs/nginx.pid`
+    sudo kill -INT $PID
+    sleep 1
+    echo "Starting NGINX..."
+    sudo $NGINX_PATH/sbin/nginx
+  else
+    echo "Nginx pid file not found"
+    return 0
+  fi
+}
\ No newline at end of file
