This is a port of the HPSTR theme to Hugo. All the original features are intact and described below. Credit for the theme goes entirely to Michael Rose.


They say three times the charm, so here is another free responsive Jekyll blog theme for you. I’ve learned a ton since open sourcing my first two themes on Github, and wanted to try a few new things this time around.

If you’ve used any of my other themes most of this should be familiar territory…

HPSTR Features:

  • Responsive templates for post, page, and post index layouts. Looks great on mobile, tablet, and desktop devices.
  • Gracefully degrades in older browsers. Compatible with Internet Explorer 8+ and all modern browsers.
  • Sweet animated menu.
  • Background image support.
  • Support for large images to call out your favorite posts.
  • Optional Disqus comments.
  • Simple and clear permalink structure1.
  • Open Graph and Twitter Cards support for a better social sharing experience.
  • Custom 404 page to get you started.
  • Syntax highlighting stylesheets to make your code examples look snazzy.
Theme Setup Download HPSTR

  1. Example: domain.com/category-name/post-title [return]

Here be a sample post with a custom background image. To utilize this “feature” just add the following YAML to a post’s front matter.

background: /images/filename.png

This little bit of YAML makes the assumption that your background image asset is in the /images folder. If you place it somewhere else or are hotlinking from the web, just include the full http(s):// URL. Either way you should have a background image that is tiled.

If you want to set a background image for the entire site just add background: /images/filename.png as a param in your config and BOOM — background images on every page!

Background images from Subtle Patterns (Subtle Patterns) / CC BY-SA 3.0
Syntax Highlighting Post

Syntax highlighting is a feature that displays source code, in different colors and fonts according to the category of terms. This feature facilitates writing in a structured language such as a programming language or a markup language as both structures and syntax errors are visually distinct. Highlighting does not affect the meaning of the text itself; it is intended only for human readers.1

Highlighted Code Blocks

To modify styling and highlight colors edit /static/css/_sass/_syntax.scss.

#container { float: left; margin: 0 -240px 0 0; width: 100%; } module Jekyll class TagIndex < Page def initialize(site, base, dir, tag) @site = site @base = base @dir = dir @name = 'index.html' self.process(@name) self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') self.data['tag'] = tag tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: ' tag_title_suffix = site.config['tag_title_suffix'] || '–' self.data['title'] = "#{tag_title_prefix}#{tag}" self.data['description'] = "An archive of posts tagged #{tag}." end end end

Standard Code Block

<nav class="pagination" role="navigation">
    {% if page.previous %}
        <a href="{{ site.url }}{{ page.previous.url }}" class="btn" title="{{ page.previous.title }}">Previous article</a>
    {% endif %}
    {% if page.next %}
        <a href="{{ site.url }}{{ page.next.url }}" class="btn" title="{{ page.next.title }}">Next article</a>
    {% endif %}
</nav><!-- /.pagination -->

Fenced Code Blocks

To modify styling and highlight colors edit /static/css/_sass/_coderay.scss.

#container { float: left; margin: 0 -240px 0 0; width: 100%; } module Jekyll class TagIndex < Page def initialize(site, base, dir, tag) @site = site @base = base @dir = dir @name = 'index.html' self.process(@name) self.read_yaml(File.join(base, '_layouts'), 'tag_index.html') self.data['tag'] = tag tag_title_prefix = site.config['tag_title_prefix'] || 'Tagged: ' tag_title_suffix = site.config['tag_title_suffix'] || '–' self.data['title'] = "#{tag_title_prefix}#{tag}" self.data['description'] = "An archive of posts tagged #{tag}." end end end

GitHub Gist Embed

An example of a Gist embed below.