# Setting up a Journal

Journaling has many benefits. Although conventional wisdom dictates jotting ideas down on paper is more liberating since you can juxtapose doodles, diagrams, and charts having a digital media allows for sweet searching methods years from now.

# Setting up vimwiki

First let's set up vimwiki, an extension for vim that does a few things:

  • provides syntax highlighting for markdown
  • makes navigating links between files work with enter key, and other shortcuts (opens new window)
  • keeps the journal within easy reach, (<Leader>ww from anywhere)

To set up, add this to ~/.config/nvim/init.vim:

Plug 'vimwiki/vimwiki'

let g:vimwiki_list = [{'path': '~/journal/', 'index': 'README',
                     \ 'syntax': 'markdown', 'ext': '.md'}]

# Setting up vuepress

~ $ yarn create vuepress journal

Then it'll ask you a bunch of questions. The first one is important: Select the boilerplate type. Choose doc, since the blog version is not as nice. After you answer the rest of the questions it'll generate boilerplate code as well as some example files.

Let's do some cleanup. We'll want to keep the .vuepress boilerplate code, but delete the example files. Since vuepress was actually designed for documentation it keeps to the docs/ folder by default, so that you can use the rest of the repo for product development. Let's promote the content of docs/.vuepress/ up one level and delete the example files that remain behind in docs/

~ $ cd journal
~/journal $ mv docs/.vuepress/ ./
~/journal $ rm -rf docs/

Now modify the package.json to no longer point its scripts to a docs file, like so:

  "scripts": {
    "dev": "vuepress dev",
    "build": "vuepress build"
  },

The configuration file .vuepress/config.js is where site-wide modifications such navigation menu are done, as per the vuepress documentation (opens new window). That can be done later, but for now the first line must be updated as shown below:

const { description } = require('../package')

Now the site should "compile" with the command yarn build. However, I prefer to use the development server (yarn dev) since it auto-reloads anytime the files change. Running yarn dev will end with an address like http://localhost:8080/ type it your browser and enjoy your new page. Simultaneously edit ~/journal/README.md, save, and confirm that it auto-reloads the updates.

# Version Control

Now is a good time to get things version controlled with the ultimate goal of getting it on Github. git init, git add ., git commit should take care of everything. Create a new repo on github.com with the privacy setting set to private. Even though the intent is to publish the master branch of the journal publicly, we don't want articles that are still being drafted on other branches showing up as well.

# Free Publisher/Host

If you don't already have one, create an account with netlify (opens new window). Log in and click on New site from Git. It's a 3-step process, the first is to connect Github. Then select the repo. Finally set the specific settings:

You can go further and buy a custom domain and set up SSL. Up to you.

# Workflow

It is best to keep the checked out branch to drafts and only move things to the master branch once you are ready to publish. Don't forget to do git rebase so that only specific changes are transferred over to master. Finally before doing git push -u origin master make sure you double-check what it is going to look like since netlify will promptly get those changes, compile them, and publish them. Happy writing!