Building overhaul

Apart from the switch to a more night friendly site style-sheet I’ve also now switch to a new build system for my not-a-blog. Full script at the bottom. Repo link.

The nice thing about this new script? Way more features, more unixy so it ends up being really straight forward to use, oh and it has a nice name now gensite. The only major dependency it has is pandoc but I’m slowly going to phase that out for another script which accomplishes the same thing so far; it just can’t do tables yet.

Anyway I’ve been messing about with more shell scripting things as I’ve been ded for nearly 3 weeks on account of a really epic eye infection which has left me needing glasses.

#!/bin/bash
# Uses pandoc to turn markdown into html for my personal blog

mirror=.mirror/

assert_arg() {
    [ -z $1 ] && echo No argument provided && exit 1
}

mirror_scaffold() {
    # Setup mirror directory so that we can later truck through building new posts and pages
    mkdir -p $mirror/
    cp -r media/ $mirror/media/
    cp partials/style.css $mirror/
}

fix_tables_imgs_pure() {
    sed -i "s/quick-update/<title>$(basename --suffix=.html 1)<\/title>/g" "$1"
    sed -i 's/<img/<img class="pure-img"/g' "$1"
    sed -i 's/<table>/<table class="pure-table">/g' "$1"
}

create_post() {
    fname=$(basename --suffix=.md $1).html
    mkdir -p $mirror/post/
    pandoc $1 | cat partials/header.html - partials/footer.html \
        > $mirror/post/$fname

    fix_tables_imgs_pure $mirror/post/$fname
}

build_root_page() {
    fname=$(basename --suffix=.md $1).html
    mkdir -p $mirror/
    if [ ${1: -5} = ".html" ];then
        cat partials/header.html $1 partials/footer.html > $mirror/$fname
    else
        pandoc $1 | cat partials/header.html - partials/footer.html \
            > $mirror/$fname
    fi
    fix_tables_imgs_pure $mirror/$fname
}

refresh_root_src() {
    cp root/* $mirror
}

copy_media() {
    mkdir -p $mirror/media/
    cp root/style.css $mirror/
    cp -r media/ $mirror/
}

new_project() {
    mkdir -p "$1"
    cd "$1"
    mkdir -p media/fonts/ media/img/
    mkdir partials/ posts/ pages/ root/
    touch partials/header.html partials/footer.html
    echo Project \""$1"\" created.
}

_help_prompt() {
cat <<EOF
Options:
   new project_path: Create a new project folder
   P|page file.path: Build the root level page
   p|post file.path: Build that one post into the site mirror folder's posts directory
   r|root file.path: Build that root page, these live like /index.html /about.html etc.
   R|roots: Copy over the new/updated root resources
   m|media: Copy over the media folder contents
   s|scaffold: Build mirror directory
   server: Run python live server 
EOF
}

[ -z $1 ] && _help_prompt && exit 0

opt=`echo $1 | tr -d '-'`
case $opt in
    new) assert_arg $2;new_project $2;;
    P|page) assert_arg $2; build_root_page $2;;
    p|post) assert_arg $2;create_post $2;;
    r|root) assert_arg $2;build_root_page $2;;
    R|roots) refresh_root_src;;
    m|media) copy_media;;
    s|scaffold) mirror_scaffold;;
    server) cd $mirror && python -m SimpleHTTPServer 8080;;
    *) _help_prompt;;
esac