Add support for multiple Jekyll sites
authorMark Szymanski <mrman208@me.com>
Fri, 24 Jun 2011 22:49:19 +0000 (17:49 -0500)
committerMark Szymanski <mrman208@me.com>
Fri, 24 Jun 2011 22:49:19 +0000 (17:49 -0500)
bash_it.sh
plugins/available/jekyll.plugins.bash

index a030069..7734c10 100644 (file)
@@ -56,6 +56,13 @@ PREVIEW="less"
 [ -s /usr/bin/gloobus-preview ] && PREVIEW="gloobus-preview"
 [ -s /Applications/Preview.app ] && PREVIEW="/Applications/Preview.app"
 
+# Load all the Jekyll stuff
+
+if [ -e $HOME/.jekyllconfig ]
+then
+  . $HOME/.jekyllconfig
+fi
+
 
 #
 # Custom Help
index aebe69b..8efdd11 100644 (file)
 #!/bin/bash
 
 editpost() {
-       builtin cd "$JEKYLL_LOCAL_ROOT/_posts"
-
-       COUNTER=1
-       NUMBER="$RANDOM"
-       TMPFILE="/tmp/editpost-$NUMBER"
-
-       for POST in *
-       do
-               DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
-               TITLE=`cat $POST | grep -oE "title: (.+)"`
-               TITLE=`echo $TITLE | sed 's/title: //'`
-               echo "$COUNTER)         $DATE   $TITLE" >> "$TMPFILE"   
-               POSTS[$COUNTER]=$POST
-               COUNTER=`expr $COUNTER + 1`
-       done
-       less $TMPFILE   
-       read -p "Number of post to edit: " POST_TO_EDIT
-       if [ -z "$EDITOR" ]
-       then
-               nano "${POSTS[$POST_TO_EDIT]}"
-       else
-               "$EDITOR" "${POSTS[$POST_TO_EDIT]}"
-       fi
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd "$SITE/_posts"
+
+  COUNTER=1
+  NUMBER="$RANDOM"
+  TMPFILE="/tmp/editpost-$NUMBER"
+
+  for POST in *
+  do
+    DATE=`echo $POST | grep -oE "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"`
+    TITLE=`cat $POST | grep -oE "title: (.+)"`
+    TITLE=`echo $TITLE | sed 's/title: //'`
+    echo "$COUNTER)    $DATE   $TITLE" >> "$TMPFILE"   
+    POSTS[$COUNTER]=$POST
+    COUNTER=`expr $COUNTER + 1`
+  done
+  less $TMPFILE        
+  read -p "Number of post to edit: " POST_TO_EDIT
+  if [ -z "$EDITOR" ]
+  then
+    nano "${POSTS[$POST_TO_EDIT]}"
+  else
+    "$EDITOR" "${POSTS[$POST_TO_EDIT]}"
+  fi
 }
 
 newpost() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
 
-       # 'builtin cd' into the local jekyll root
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
 
-       builtin cd "$JEKYLL_LOCAL_ROOT/_posts"
+  loc=0
 
-       # Get the date for the new post's filename
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      JEKYLL_FORMATTING=${MARKUPS[$loc]}
+      break
+    fi
+    loc=$(($loc+1))
+  done
 
-       FNAME_DATE=$(date "+%Y-%m-%d")
+  # 'builtin cd' into the local jekyll root
 
-       # If the user is using markdown formatting, let them choose what type of post they want. Sort of like Tumblr. 
+  builtin cd "$SITE/_posts"
 
-       OPTIONS="Text Quote Image Audio Video Link"
-       
-       if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
-       then
-               select OPTION in $OPTIONS
-               do
-                       if [[ $OPTION = "Text" ]] 
-                       then
-                               POST_TYPE="Text"
-                               break
-                       fi
+  # Get the date for the new post's filename
 
-                       if [[ $OPTION = "Quote" ]]
-                       then
-                               POST_TYPE="Quote"
-                               break
-                       fi
-               
-                       if [[ $OPTION = "Image" ]]
-                       then
-                               POST_TYPE="Image"
-                               break
-                       fi
+  FNAME_DATE=$(date "+%Y-%m-%d")
 
-                       if [[ $OPTION = "Audio" ]]
-                       then
-                               POST_TYPE="Audio"
-                               break
-                       fi
+  # If the user is using markdown or textile formatting, let them choose what type of post they want. Sort of like Tumblr.
 
-                       if [[ $OPTION = "Video" ]]
-                       then
-                               POST_TYPE="Video"
-                               break
-                       fi
+  OPTIONS="Text Quote Image Audio Video Link"
 
-                       if [[ $OPTION = "Link" ]]
-                       then
-                               POST_TYPE="Link"
-                               break
-                       fi
-               done
-       fi
+  if [ $JEKYLL_FORMATTING = "markdown" -o $JEKYLL_FORMATTING = "textile" ]
+  then
+    select OPTION in $OPTIONS
+    do
+      if [[ $OPTION = "Text" ]] 
+      then
+        POST_TYPE="Text"
+        break
+      fi
 
-       # Get the title for the new post
+      if [[ $OPTION = "Quote" ]]
+      then
+        POST_TYPE="Quote"
+        break
+      fi
 
-       read -p "Enter title of the new post: " POST_TITLE
+      if [[ $OPTION = "Image" ]]
+      then
+        POST_TYPE="Image"
+        break
+      fi
 
-       # Convert the spaces in the title to hyphens for use in the filename
+      if [[ $OPTION = "Audio" ]]
+      then
+        POST_TYPE="Audio"
+        break
+      fi
 
-       FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"`
+      if [[ $OPTION = "Video" ]]
+      then
+        POST_TYPE="Video"
+        break
+      fi
 
-       # Now, put it all together for the full filename
+      if [[ $OPTION = "Link" ]]
+      then
+        POST_TYPE="Link"
+        break
+      fi
+    done
+  fi
 
-       FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING"
+  # Get the title for the new post
 
-       # And, finally, create the actual post file. But we're not done yet...
+  read -p "Enter title of the new post: " POST_TITLE
 
-       touch "$FNAME"
+  # Convert the spaces in the title to hyphens for use in the filename
 
-       # Write a little stuff to the file for the YAML Front Matter
-
-       echo "---" >> $FNAME
+  FNAME_POST_TITLE=`echo $POST_TITLE | tr ' ' "-"`
 
-       # Now we have to get the date, again. But this time for in the header (YAML Front Matter) of
-       # the file
+  # Now, put it all together for the full filename
 
-       YAML_DATE=$(date "+%B %d %Y %X")
+  FNAME="$FNAME_DATE-$FNAME_POST_TITLE.$JEKYLL_FORMATTING"
 
-       # Echo the YAML Formatted date to the post file
+  # And, finally, create the actual post file. But we're not done yet...
 
-       echo "date: $YAML_DATE" >> $FNAME
+  touch "$FNAME"
+
+  # Write a little stuff to the file for the YAML Front Matter
+
+  echo "---" >> $FNAME
+
+  # Now we have to get the date, again. But this time for in the header (YAML Front Matter) of
+  # the file
 
-       # Echo the original post title to the YAML Front Matter header
+  YAML_DATE=$(date "+%B %d %Y %X")
 
-       echo "title: $POST_TITLE" >> $FNAME
+  # Echo the YAML Formatted date to the post file
 
-       # And, now, echo the "post" layout to the YAML Front Matter header
+  echo "date: $YAML_DATE" >> $FNAME
 
-       echo "layout: post" >> $FNAME
+  # Echo the original post title to the YAML Front Matter header
 
-       # Close the YAML Front Matter Header
+  echo "title: $POST_TITLE" >> $FNAME
 
-       echo "---" >> $FNAME
-       echo >> $FNAME
+  # And, now, echo the "post" layout to the YAML Front Matter header
 
-       # Generate template text based on the post type
+  echo "layout: post" >> $FNAME
 
-       if [[ $JEKYLL_FORMATTING = "markdown" ]]
-       then
-               if [[ $POST_TYPE = "Text" ]]
-               then
-                       true
-               fi
-
-               if [[ $POST_TYPE = "Quote" ]]
-               then
-                       echo "> Quote" >> $FNAME
-                       echo >> $FNAME
-                       echo "&mdash; Author" >> $FNAME
-               fi
-
-               if [[ $POST_TYPE = "Image" ]]
-               then
-                       echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
-               fi
-
-               if [[ $POST_TYPE = "Audio" ]]
-               then
-                       echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
-               fi
-
-               if [[ $POST_TYPE = "Video" ]]
-               then
-                       echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
-               fi
-       
-               if [[ $POST_TYPE = "Link" ]]
-               then
-                       echo "[link][1]" >> $FNAME
-                       echo >> $FNAME
-                       echo "> Quote" >> $FNAME
-                       echo >> $FNAME
-                       echo "[1]: url" >> $FNAME
-               fi
-       fi
+  # Close the YAML Front Matter Header
 
-       if [[ $JEKYLL_FORMATTING = "textile" ]]
-       then
-               if [[ $POST_TYPE = "Text" ]]
-               then
-                       true
-               fi
+  echo "---" >> $FNAME
+  echo >> $FNAME
 
-               if [[ $POST_TYPE = "Quote" ]]
-               then
-                       echo "bq. Quote" >> $FNAME
-                       echo >> $FNAME
-                       echo "&mdash; Author" >> $FNAME
-               fi
+  # Generate template text based on the post type
 
-               if [[ $POST_TYPE = "Image" ]]
-               then
-                       echo "!url(alt text)" >> $FNAME
-               fi
+  if [[ $JEKYLL_FORMATTING = "markdown" ]]
+  then
+    if [[ $POST_TYPE = "Text" ]]
+    then
+      true
+    fi
 
-               if [[ $POST_TYPE = "Audio" ]]
-               then
-                       echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
-               fi
+    if [[ $POST_TYPE = "Quote" ]]
+    then
+      echo "> Quote" >> $FNAME
+      echo >> $FNAME
+      echo "&mdash; Author" >> $FNAME
+    fi
 
-               if [[ $POST_TYPE = "Video" ]]
-               then
-                       echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
-               fi
+    if [[ $POST_TYPE = "Image" ]]
+    then
+      echo "![Alternate Text](/path/to/image/or/url)" >> $FNAME
+    fi
 
-               if [[ $POST_TYPE = "Link" ]]
-               then
-                       echo "\"Site\":url" >> $FNAME
-                       echo >> $FNAME
-                       echo "bq. Quote" >> $FNAME
-               fi
-       fi
-
-       # Open the file in your favorite editor
-
-       "$EDITOR" $FNAME
+    if [[ $POST_TYPE = "Audio" ]]
+    then
+      echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Video" ]]
+    then
+      echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Link" ]]
+    then
+      echo "[link][1]" >> $FNAME
+      echo >> $FNAME
+      echo "> Quote" >> $FNAME
+      echo >> $FNAME
+      echo "[1]: url" >> $FNAME
+    fi
+  fi
+
+  if [[ $JEKYLL_FORMATTING = "textile" ]]
+  then
+    if [[ $POST_TYPE = "Text" ]]
+    then
+      true
+    fi
+
+    if [[ $POST_TYPE = "Quote" ]]
+    then
+      echo "bq. Quote" >> $FNAME
+      echo >> $FNAME
+      echo "&mdash; Author" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Image" ]]
+    then
+      echo "!url(alt text)" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Audio" ]]
+    then
+      echo "<html><audio src=\"/path/to/audio/file\" controls=\"controls\"></audio></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Video" ]]
+    then
+      echo "<html><video src=\"/path/to/video\" controls=\"controls\"></video></html>" >> $FNAME
+    fi
+
+    if [[ $POST_TYPE = "Link" ]]
+    then
+      echo "\"Site\":url" >> $FNAME
+      echo >> $FNAME
+      echo "bq. Quote" >> $FNAME
+    fi
+  fi
+
+  # Open the file in your favorite editor
+
+  "$EDITOR" $FNAME
+}
+
+function testsite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  jekyll --server --auto
+}
+
+function buildsite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      break
+    fi
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  rm -rf _site
+  jekyll --no-server
+}
+
+function deploysite() {
+  unset SITE
+  if [ -z "$1" ]
+  then
+    echo "Error: no site specified."
+    echo "The site is the name of the directory your project is in."
+    return 1
+  fi
+
+  loc=0
+
+  for site in ${SITES[@]}
+  do
+    if [ "$(basename $site)" = "$1" ]
+    then
+      SITE=$site
+      REMOTE=${REMOTES[$loc]}
+      break
+    fi
+    loc=$(($loc+1))
+  done
+
+  if [ -z "$SITE" ]
+  then
+    echo "No such site."
+    return 1
+  fi
+
+  builtin cd $SITE
+  rsync -rz $REMOTE
 }