Workflow: How I Blog


The Beginning Of A Series Of Posts

Something that people who use Linux love to go on about is their workflow. What does that mean? According to IBM :

A workflow is a system for managing repetitive processes and tasks which occur in a particular order. They are the mechanism by which people and enterprises accomplish their work, whether manufacturing a product, providing a service, processing information or any other value-generating activity.

This might seem technical, nebulous, and dodgy. That’s because it is. I hate when people say they “Use Gnome’s Workflow”. What does that mean? What are you doing on a computer that you can only do with Gnome?

This isn’t calling out Gnome or it’s users, or even passing judgement on Gnome. People who use KDE tend to say the same things. I’m just pointing out that “Workflows” are vast and task-specific. I do happen to work on a computer for a living, but I’m sure the things I do with my computer are different than what other people are doing. So just saying “I use i3 window manager for my workflow” doesn’t really say anything. Why am I using it? What does it enable other DE’s / WM’s don’t enable? etc. etc.

This thought process has led me to the decision to begin a series of posts on workflows in general. Whenever I feel like going into detail about a specific thing I do, or how I do it, I’ll write about it here.

How I Blog

So let’s start this out with the most obvious “Workflow” that I perform - writing the posts that you’re seeing now!

As of the time I’m posting this article, this site has been up for almost 1 month straight. This is my most “successful” site I’ve created, as in I don’t find writing for it to be a pain. So I think that I finally figured out something great for managing my site.

The Site - Hugo

There’s a million ways to make a blog. From Wordpress to Github Pages (Jekyll). I decided to go with the tried and true Hugo static site. This was not an easy decision, but I reached it because of the following:

  1. I can control my site as a git repo
    1. I want to be able to work on my site offline on multiple computers synced together
    2. This is easy to do with git
    3. Combined with git lfs, you can add images easily to the repo and not clutter things too bad.
  2. The site it generates is just static files
    1. For the non-nerds: Instead of relying on Wordpress and their entire web setup, or any other site creator, I just upload some files to a server and - bam that’s it. The site is ready.
  3. Active Community
    1. Hugo is a very active platform. Chances are whether you know it or not, you’ve read hugo blogs in the wild.
    2. It’s still being developed.
  4. Easy To Migrate Posts Away
    1. Let’s say the next hottest new site system comes out next week, and I want to test it out. The way Hugo works, I’m just turning markdown files into html files. So i can take the same markdown files to the new platform, or just copy / paste the contents as needed.
    2. I’m not bound to this website or interface - everything is just text files.

The Editor - Obsidian

Linux users love to trash talk when it comes to their text editors. This might surprise some people reading this that I’m using Obsidian . I used to be a die hard emacs user, and I was in the middle of moving my workflow to Vim. Then Obsidian hit.

Obsidian is emacs for humans using typescript instead of lisp. Obsidian has over 1k community plugins. What’s more important than the plugins is the compatibility of these plugins. The same plugin you install inside of your vault on one device can be loaded on another - no matter the OS or platform. For example, the same plugins I use on my laptop are also available on my phone.

The plugins are synced across all my devices with git. The same git repo controlling my website also controls my editors layout for the site. So my entire writing environment is defined as a git repo that’s compatible with all my devices.

The Server - Nginx and Linux

There’s not much to go into here due to how simple the site setup is, but it completes the picture. Whenever I generate my site from the markdown files, I just copy the files to my linux server with the rsync command. In fact it’s so easy I have a one line bash script for it.

#!/bin/sh
hugo && rsync -avz --delete public/ [email protected]:/var/www/html/

That’s it! Whenever I finish writing & editing my posts I just type bash deploy.sh and then the blog gets updated.