HugoBlog

styx — Hugo Blog Template

By vulkoingim

Styx is a minimal personal blog theme for Hugo, derived from ezhil, offering a fixed left sidebar, switchable ink color schemes, self-hosted fonts and icons, and support for Giscus comments and optional PostHog analytics.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

1 previews
Author preview
Author-provided previewTop of page

Preview provided in the project README.

One original preview is available. Open the full image to inspect the design.

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-12View source

What stands out

A quick read of the recorded project description.

01

Fixed left sidebar integrates site title, menu, in-page table of contents, social links, and light/dark toggle

02

Four ink color schemes (Vermilion, Sepia, Shibui, Kabuki) independent of light/dark mode, with choices saved in localStorage

03

Fonts and icons are self-hosted, with no requests to Google Fonts or icon CDNs

04

Giscus comments based on GitHub Discussions, can be disabled per page or content type

05

Optional PostHog analytics; if no key is provided, no tracking script is loaded

06

Supports tags, RSS, Open Graph / Twitter cards, custom CSS/JS, and single-page wide layout

Template Details

Styx is a Hugo theme for personal blogs, forked from vividvilla/ezhil. It uses a fixed left sidebar layout containing the site title, menu, in-page table of contents for posts, social links, light/dark mode toggle, and color scheme switcher; the main content area maintains a single reading column width. The theme bundles iA Writer Quattro and IBM Plex Mono fonts, with fonts and icons self-hosted, not relying on Google Fonts or icon CDNs.

In terms of features, Styx provides four ink color schemes (Vermilion, Sepia, Shibui, Kabuki) independent of light/dark mode, with reader choices stored in localStorage. Comments use Giscus (based on GitHub Discussions), requiring configuration to enable and fill in the repository and category ID; analytics use optional PostHog, and if no key is provided, no tracking script is loaded. The theme also supports tags, RSS, Open Graph / Twitter cards, custom CSS/JS, and allows enabling wide layout on a single page via wideContent: true.

Usage limitations: requires Hugo 0.111 or higher; Giscus and PostHog depend on external services and require configuring the corresponding parameters; third-party assets such as demo images, fonts, and icons should be checked separately for licensing, and cannot be judged solely based on the code's MIT license.

HugoBlog

Is it right for your project?

Use Cases

  • Building a text-focused personal blog that needs a clean left navigation and reading column
  • Wanting readers to switch ink color schemes and light/dark mode themselves, and preferring not to rely on external font/icon CDNs
  • Using GitHub Discussions as the comment system and wanting to control comment display per page or content type
  • Needing optional analytics but not wanting to load tracking scripts by default, or wanting to integrate PostHog
  • Occasionally inserting full-width utility pages (such as a calculator) in the blog, enabling wide layout separately via wideContent

Suitable For

  • Developers or writers building personal blogs with Hugo
  • Users who prefer minimal, editorial-style typography and self-hosted static assets
  • Sites that need Giscus comments and optional PostHog analytics
  • Projects that want to switch color schemes, light/dark mode, and social links via configuration without modifying the theme source code

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Requires Hugo 0.111 or higher; clone the theme into themes/styx and set theme = "styx" in the site configuration.

  2. 2

    Configure basic items such as subtitle, mainSections, favicon, mode (dark/light/auto) in [params].

  3. 3

    To enable Giscus, set giscus = true and fill in giscusRepo, giscusRepoId, giscusCategory, giscusCategoryId; can be disabled with giscus: false or disableGiscusTypes.

  4. 4

    To enable PostHog, set posthogKey, with optional posthogHost and posthogDefaults; omitting the key means no tracking script is loaded.

  5. 5

    Custom CSS/JS is included via the customCSS and customJS parameters; social icons currently support bluesky, mastodon, github, rss.

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • Permits free use, modification, commercial use, and distribution of this version's code.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked under their respective licenses and cannot be judged solely based on the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
  • Using this theme requires Hugo 0.111 or higher; Hugo versions below this cannot build properly.
  • The comment feature depends on the external service Giscus (based on GitHub Discussions) and will only load after setting giscus = true and filling in the repository and category ID.
  • The analytics feature depends on the external service PostHog and is enabled only when posthogKey is set; omitting the key means no tracking script is loaded.
  • Enabling Giscus comments requires first generating the repository and category ID at giscus.app, which is an external service configuration step.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Requires Hugo 0.111 or later.

Original README

Comments use [Giscus](https://giscus.app): GitHub Discussions, loaded only when `giscus = true` and the repo IDs are set.

Original README

Set `posthogKey` to enable. Use `posthogHost = "https://eu.i.posthog.com"` for EU cloud.

Original README

Generate repo/category IDs at https://giscus.app

Original README
https://github.com/vulkoingim/styx/blob/master/LICENSE.mdhttps://github.com/vulkoingim/styx/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-12. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 80 / 100
Technologies
Hugo
Website type
Blog
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-08-15
Screenshot last checked
2026-10-12

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Hugo as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: 0b530c7146e54b6778c2eb8551d535c447101c6083007ae2f826cfaf88a71453

2026-10-12T06:58:04.145Z

Source file / repository
# Styx

Minimal Hugo blog theme with a sticky left rail, switchable ink palettes, and a reading column. Fonts and icons are self-hosted. No Google Fonts, no icon CDN.

Forked from [vividvilla/ezhil](https://github.com/vividvilla/ezhil).

## Demo

![Screenshot](images/screenshot-light.jpg "Styx light theme")
![Screenshot](images/screenshot-dark.jpg "Styx dark theme")

## Features

- Left rail: site title, menu, on-this-page TOC on posts, social, light/dark, palettes
- Palettes: Vermilion, Sepia, Shibui, Kabuki (independent of light/dark)
- iA Writer Quattro (regular body, bold titles) and IBM Plex Mono (code)
- [Giscus](https://giscus.app) comments (GitHub Discussions)
- Optional [PostHog](https://posthog.com) analytics
- Tags, RSS, Open Graph / Twitter cards
- Custom CSS / JS
- Wide layout opt-in per page (`wideContent: true`)

## Installation

```sh
cd themes
git clone https://github.com/vulkoingim/styx.git styx
```

Requires Hugo 0.111 or later. See the [Hugo install guide](https://gohugo.io/installation/).

## Configuration

```toml
baseURL = "https://example.com/"
languageCode = "en-us"
title = "My personal blog"
theme = "styx"

copyright = "© Copyright notice"

[markup.highlight]
    noClasses = false
    guessSyntax = true

[markup.tableOfContents]
    startLevel = 2
    endLevel = 3
    ordered = false

[params]
    # Subtitle under the site title. Supports markdown.
    subtitle = "stuff and things"

    mainSections = ["posts"]
    favicon = "icons/myicon.png"

    # "dark", "light", or "auto" (follow the OS).
    mode = "auto"

    # PostHog. Omit posthogKey to disable.
    # posthogKey = "phc_..."
    # posthogHost = "https://eu.i.posthog.com"   # default: https://us.i.posthog.com
    # posthogDefaults = "2026-05-30"

    # Giscus. Generate repo/category IDs at https://giscus.app
    # giscus = true
    # giscusRepo = "owner/repo"
    # giscusRepoId = "..."
    # giscusCategory = "Comments"
    # giscusCategoryId = "..."
    # Optional (defaults shown):
    # giscusMapping = "pathname"
    # giscusTheme = "preferred_color_scheme"
    # giscusLang = "en"
    disableGiscusTypes = ["page"]

    # customCSS = "css/custom.css"
    # customJS = ["js/extra.js"]

[[menu.main]]
name = "Home"
url = "/"
weight = 1

[[menu.main]]
name = "All posts"
url = "/posts"
weight = 2

[[menu.main]]
name = "About"
url = "/about/"
weight = 3

[[menu.main]]
name = "Tags"
url = "/tags"
weight = 4

# Supported icons: bluesky, mastodon, github, rss.
[[params.social]]
name = "BlueSky"
icon = "bluesky"
url = "https://bsky.app/profile/example"

[[params.social]]
name = "Mastodon"
icon = "mastodon"
url = "https://mastodon.social/@example"

[[params.social]]
name = "Github"
icon = "github"
url = "https://github.com/example"

[taxonomies]
    tag = "tags"
```

## Palettes

Readers can switch palettes in the rail. Choice is stored in `localStorage` and is independent of Auto / Light / Dark.

| Palette   | `data-palette` | Light paper     |
| --------- | -------------- | --------------- |
| Vermilion | _(default)_    | near-white, red |
| Sepia     | `sepia`        | parchment       |
| Shibui    | `shibui`       | dusty blue      |
| Kabuki    | `kabuki`       | green wash      |

## Giscus

Comments use [Giscus](https://giscus.app): GitHub Discussions, loaded only when `giscus = true` and the repo IDs are set.

Disable on one page:

```md
---
title: "No comments"
giscus: false
---
```

Disable for a content type with `disableGiscusTypes` (see config above).

## PostHog

Set `posthogKey` to enable. Use `posthogHost = "https://eu.i.posthog.com"` for EU cloud. `posthogDefaults` follows the [current snippet](https://posthog.com/docs/libraries/js/config) (`2026-05-30`). Omit the key to ship no tracker.

## Content types

Set `type` in front matter. `page` is a typical static page (about). Control home-page posts with `mainSections`.

```md
---
title: "About"
type: "page"
---
```

For a full-width tool (for example a calculator), set `wideContent: true`.

## Credits

- Original [ezhil](https://github.com/vividvilla/ezhil) by [Vivek R](https://vivekr.net)
- [iA Writer Quattro](https://github.com/iaolo/iA-Fonts) (SIL OFL 1.1)
- [IBM Plex Mono](https://github.com/IBM/plex) (SIL OFL 1.1)
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.