Monoholic

Github license GitHub release Ruby Gem Version GitHub Pages

A minimal, monochrome dark Jekyll theme🧪

Try the demo out!

Screenshot of homepage

Features

  • Minimalist dark monochrome design
  • Data-driven menu via _data/menu.yml
  • Optional grayscale image filter
  • SEO & RSS support

Installation

Using RubyGems

  1. Add this line to your Jekyll site's Gemfile:
gem "monoholic"
  1. Add this line to your Jekyll site's _config.yml:
theme: monoholic
  1. Execute:
$ bundle install

Manual Installation

If you're running Jekyll without RubyGems or prefer to use GitHub Pages remote themes, update your _config.yml:

remote_theme: stiermid/monoholic

Or, simply fork this repository, adapt the _config.yml according to your needs, and you're good to go!

Usage

Basic Setup

Once installed, build your site using the provided layouts (default, home, page, post).

Configuration

Override the default settings in your _config.yml. Key theme configuration options:

theme_config:
  back: ".." # Text for backlink on post pages
  date_format: "%Y%m%d" # Date format for post metadata
  monochrome_images: true # Apply grayscale filter to images (default: true)
  footer: true # Show/hide site footer (default: true)

Analytics

Monoholic has built-in support for GoatCounter, a privacy-friendly analytics platform. Add your GoatCounter subdomain to _config.yml:

goatcounter: your-subdomain

This injects the GoatCounter tracking script on every page. Remove the key entirely to disable analytics.

Monoholic uses a data-driven approach to its menu. Create or edit _data/menu.yml to define your site's navigation structure.

Example _data/menu.yml:

entries:
  - title: about
    content: |
      <p>Your about me text here.</p>

  - title: all posts
    post_list: true
  • title: The section header.
  • content: Custom HTML or text for the menu section.
  • content_file: Path to an external markdown file (e.g., about.md) to load content from your root directory.
  • post_list: Set to true to auto-generate a list of your Jekyll posts under this section.

Nested Menu Sections

Menu entries can contain nested entries to create recursive sub-sections:

entries:
  - title: projects
    entries:
      - title: web
        content: |
          <p>Web projects here.</p>
      - title: archive
        post_list: true

Nesting can go as deep as needed — menu.html includes itself recursively for each entries array it encounters.

Using External Content Files

You can reference external markdown files instead of inline content:

entries:
  - title: about
    content_file: about.md

This will load and render the content from about.md in your site's root directory.

Per-Page JavaScript

To load custom JavaScript files on a specific page, add a custom_js list to the page's front matter:

---
layout: post
custom_js:
  - my-script
  - chart
---

Each entry is a filename (without .js) relative to assets/js/. The example above loads assets/js/my-script.js and assets/js/chart.js at the bottom of the page body.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/stiermid/monoholic. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

This theme is available as open source under the terms of the GNU General Public License v3.0 only (GPL-3.0-only).