Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
This branch is 19 commits ahead, 33 commits behind jbub:master.

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Enhanced port of the Ghost "ghostwriter" theme to the Hugo site generator.

My tweaks

I have changed the font of all the body text from Open Sans to Merriweather (a serif font), mainly for better readability (I must say I was inspired by the look of

To make the post TOC visually distinct, I have set it to sans font with italic style. I'm not sure I'm completely happy with the TOC (it still takes too much space, I think). Ideally, the TOC would be floating in the sidebar, or else collapsible by the user. But those changes require fiddling with blogdown and/or Javascript, so later, I suppose.


Inside the folder of your Hugo site run:

$ mkdir themes
$ cd themes
$ git clone

For more information read the official setup guide of Hugo.


After installing the theme you need to install javascript dependencies. You can use npm or yarn to install them from package.json. We are using webpack to build and package styles. In order to develop with realtime reloading in the browser you can use this powerful combo:

hugo server
yarn run watch

To update theme styles edit the styles/style.scss file. You can then either use the watch command or run build to compile the styles:

yarn run build

Example config.toml

To customize your theme you can use following params:

baseurl = ""
title = "mytitle"
theme = "ghostwriter"
languageCode = "en-us"
copyright = "My Name"
googleAnalytics = "XXX"
disqusShortname = "XXX"


    disable = true

    anonymizeIP = true
    respectDoNotTrack = true
    useSessionStorage = false

    name = "My Name"
    profile = ""

    tag = "tags"

    mainSections = ["post"]
    intro = true
    headline = "My headline"
    description = "My description"
    github = ""
    gitlab = ""
    linkedin = ""
    gplus = ""
    twitter = ""
    stackoverflow = ""
    facebook = ""
    email = ""
    opengraph = true
    shareTwitter = true
    shareFacebook = true
    shareGooglePlus = true
    shareLinkedIn = false
    dateFormat = "Mon, Jan 2, 2006"
    highlightJsUrl = ""
    highlightJsLocalUrl = ""
    exponeaJsUrl = ""
    exponeaTarget = ""
    exponeaToken = ""
    exponeaTrackVisits = false
    readingTime = true
    readingTimeText = "Estimated reading time:"
    fathomUrl = ""
    fathomSiteId = ""

    post = "/:year/:month/:day/:filename/"

    name = "Blog"
    url = "/"
    weight = 1

    name = "Projects"
    url = "/project/"
    weight = 2

    name = "Contact"
    url = "/page/contact/"
    weight = 3

    name = "About"
    url = "/page/about/"
    weight = 4

You can also inject arbitrary HTML into <head> simply by overriding the extra-in-head.html partial, which is meant for that purpose.


Ghostwriter theme for Hugo blog at







No packages published


  • HTML 85.0%
  • JavaScript 15.0%