A Jekyll theme for personal blogs with a bold homepage grid, archive views, tags/categories, a search overlay, theme toggle, and optional Disqus comments.
Features
- Responsive post grid with featured images.
- Search overlay powered by elasticlunr (no external services).
- Archives, categories, tags, and featured posts pages.
- Light/dark theme toggle.
- Optional Disqus comments and share buttons.
- Sidebar navigation driven by
_config.yml.
Requirements
- Ruby and Bundler installed locally.
- Jekyll (installed via Bundler).
Using the theme gem
- Add the theme to your site's
Gemfile:gem "jekyll-theme-systemhalted" - Update your site's
_config.yml:theme: jekyll-theme-systemhalted- Update
title,tagline,description,url,baseurl,sidebar.items - Plugins:
plugins: - jekyll-paginate - jekyll-gist - jekyll-seo-tag - jekyll-sitemap - jekyll-feed
- Install and run:
bundle installbundle exec jekyll serve --livereload
Theme development / demo site
The demo site lives in example/. To preview the theme locally:
- Install dependencies:
bundle config set --local path vendor/bundlebundle install - Run the demo site:
bundle exec jekyll serve --source example --destination example/_site --livereload
Jekyll outputs to _site/ in the source directory. Do not edit generated files directly.
Tests
Run the test suite:
bundle exec ruby -Itest -Ilib test/*_test.rb
Writing posts
In the demo site, posts live in example/collections/_posts/ and use the filename format YYYY-MM-DD-title.md.
In your own site, follow your configured collections_dir.
Front matter example:
---
layout: post
title: Sample Post
date: 2025-12-31
categories: [Tech]
tags: [jekyll, notes]
comments: true
featured: true
featured_image: assets/images/2025-12-hero.jpg
featured_image_alt: Brief alt text for the image
featured_image_caption: Photo credit or context
description: One-line summary for previews.
---
Drafts live in example/collections/_drafts/ for the demo site. Preview drafts with:
bundle exec jekyll serve --source example --destination example/_site --livereload --drafts
Featured Images
You can save your images anywhere. Just provide the correct link. For demo example, we have created an assets/images folder where demo images are currently saved.
Pages
The demo site's pages live under example/. In your own site, create pages at your site root.
Use layout: page for standard content pages or layout: default if you want a fully custom layout.
The theme provides layouts for the common archive pages, so you only need a front-matter stub (no HTML):
# index.html
---
layout: index
title: Home
---
# archives.md
---
layout: archives
title: Archives
---
# categories.md
---
layout: categories
title: Categories
permalink: /categories/
---
# tags.md
---
layout: tags
title: Tags
---Key layouts included in the theme:
-
layout: index: paginated home grid. -
layout: archives: year-grouped archive with client-side sorting. -
layout: categories: category taxonomy grouped by theme. -
layout: tags: tag archive. -
layout: about: standard about page (markdown content goes in the page file). -
layout: page,layout: default: generic pages.
Featured posts and error pages are still demo templates you can copy:
-
example/featured.html: posts withfeatured: true. -
example/404.md: not found page.
Collections
Collections live under example/collections/ in the demo site (see collections_dir in example/_config.yml).
To add a collection:
- Define it in your site's
_config.ymlundercollections:withoutput: true. - Add docs in
collections/_<name>/(relative to yourcollections_dir). - Create a listing page using
layout: collectionsandcollection_name: <name>.
Any collection with output: true is included in search (see Search below).
Search
Search is fully client-side and uses elasticlunr.
-
assets/js/search-data.jsis generated at build time via Liquid. -
assets/js/script.jsbuilds the elasticlunr index in the browser. - Data includes posts and any output collections (excluding
/404.html).
To exclude a document from search, add this to its front matter:
search_exclude: true
If you change which fields should be indexed or displayed, edit:
-
assets/js/search-data.js(document fields and snippets) -
assets/js/script.js(elasticlunr fields and rendering)
Sidebar navigation
Edit sidebar.items in your site's _config.yml:
sidebar:
items:
- title: "Home"
url: "/"
The sidebar also includes an "Annotate me" toggle that loads Hypothes.is on demand. Remove it from _includes/sidebar.html if you do not want annotation support.
Categories and tags
Category themes are defined in _data/taxonomy.yml and used on the categories layout and in related-post logic.
Tags are generated from post front matter and listed on the tags layout.
Comments and analytics
Disqus comments are supported:
- Set
disqus_shortnamein_config.yml. - Enable per post with
comments: true.
Google Analytics:
- Set
google_analytics_idin_config.ymlto enablegtag.js.
Assets and styling
- Main CSS:
assets/css/nord.css - JS bundle:
assets/js/script.js - Search data:
assets/js/search-data.js - Fonts and icons are loaded in
_includes/head.html(Google Fonts and Font Awesome CDN). - Favicons live in
assets/
Deployment
Build the site:
JEKYLL_ENV=production bundle exec jekyll build
For the demo site:
JEKYLL_ENV=production bundle exec jekyll build --source example --destination example/_site
Then deploy the _site/ folder to any static host.
If deploying to GitHub Pages:
- For
username.github.io, seturl: https://username.github.ioandbaseurl: "". - For
username.github.io/repo, seturl: https://username.github.ioandbaseurl: "/repo".
Notes
- Use relative URLs (
| relative_url) for internal links and assets. - Keep filenames kebab-case and asset names short.





