Configuration Reference — _config.yml
Complete annotated reference for every option in jekyll-infops-theme's _config.yml.
Table of Contents
All theme behaviour is driven by a single file: _config.yml at the repo root. This post documents every key.
Jekyll does not watch _config.yml for changes. Restart jekyll serve (or docker compose restart) after every edit.
Site identity
title: "My InfOps Blog"
tagline: "DevOps · SysOps · Infrastructure"
description: "A short description used for SEO and the footer."
url: "https://your-username.github.io" # no trailing slash
baseurl: "" # leave empty for root sites; use "/repo-name" for project sites
lang: "en"
timezone: "Europe/Paris" # any tz database name
url + baseurl together form the absolute base of every link. For a GitHub Pages user site (your-username.github.io), both url: "https://your-username.github.io" and baseurl: "" are correct.
Author
author:
name: "Your Name" # used in post meta and footer
email: "you@example.com" # never displayed publicly
bio: "Short bio text." # shown on the About page
avatar: "/assets/images/avatar.jpg"
github: "your-username"
twitter: "yourhandle" # without @
linkedin: "your-slug"
mastodon: "https://fosstodon.org/@you" # full URL
Social links with empty values are hidden. The footer reads from _data/social.yml first; these author.* fields are the fallback.
Analytics
analytics:
goatcounter_code: "" # your-code → https://your-code.goatcounter.com
google_analytics_id: "" # G-XXXXXXXXXX
plausible_domain: "" # yourdomain.com (no https://)
umami_website_id: "" # UUID from your Umami instance
umami_src: "" # https://umami.yourdomain.com/script.js
Scripts are injected only when JEKYLL_ENV=production. Running jekyll serve locally never fires any tracker. Multiple providers can be active simultaneously.
GoatCounter is free (up to 100k pageviews/month), open-source, requires no cookie banner, and exposes a public JSON API that the sidebar widget reads to display a live visitor count.
Comments
comments:
provider: "utterances" # utterances | disqus | none
utterances_repo: "your-username/repo" # GitHub repo for issue threads
utterances_theme: "github-dark" # github-dark | github-light | preferred-color-scheme
disqus_shortname: "" # Disqus site shortname
Utterances maps each post URL to a GitHub Issue in the specified repo. Visitors need a GitHub account to comment. Disable comments on a specific post with comments: false in its front matter.
Terminal
theme_config:
terminal_user: "user@infops" # label in the terminal header bar
terminal_boot:
user: "YOUR_USER" # shown as user@host in neofetch
host: "YOUR_HOST"
os: "YOUR_OS" # e.g. "Jekyll 4.3 · AlmaLinux 10"
shell: "YOUR_SHELL" # e.g. "bash 5.2"
role: "YOUR_ROLE" # e.g. "SysOps · Infrastructure"
line1: "" # extra info line (leave empty to hide)
line2: ""
motd: "Type /help for commands."
ascii: | # custom ASCII art (leave empty for Ubuntu logo)
██╗███╗ ██╗███████╗
██║████╗ ██║██╔════╝
██║██╔██╗ ██║█████╗
██║██║╚██╗██║██╔══╝
██║██║ ╚████║██║
╚═╝╚═╝ ╚═══╝╚═╝
All terminal_boot fields accept empty strings to hide that line. The ascii block (9 lines max, ~32 chars wide) replaces the default Ubuntu-style logo at boot. Generate art at patorjk.com/software/taag.
Particle canvas
canvas:
enabled: true
particle_count: 80 # 20–150 recommended
max_distance: 130 # px — max distance for inter-particle lines
cursor_distance: 160 # px — cursor attraction radius
Set enabled: false to disable the canvas entirely (good for accessibility or battery-conscious deploys).
Sidebar widgets
show_stats: true # Site Stats card (articles, tags, visitors, words)
show_system_status: true # 4 live browser metrics
show_recent_posts: true # Recent Posts list
show_categories: true # Categories tag cloud
show_tags: true # Tags cloud
recent_posts_count: 5 # how many posts to show
Post-level options
reading_time: true # "X min read" in post header
word_count: true # word count in post header
show_toc: true # inline table of contents
toc_min_headings: 2 # minimum headings before TOC appears
code_copy_button: true # Copy button on every code block
show_share_buttons: true # Twitter / LinkedIn / Email / Copy link
show_post_nav: true # prev / next post navigation
show_related_posts: true # related posts section at bottom
show_reading_progress: true # progress bar at top of viewport
All of these can be overridden per post in front matter:
---
title: "My Post"
toc: false
comments: false
---
Navigation
navigation:
- title: "Home"
url: "/"
icon: "fas fa-home"
- title: "GitHub"
url: "https://github.com/your-username"
icon: "fab fa-github"
external: true # opens in new tab + shows ↗ icon
Icons are Font Awesome 6 class strings. Free solid icons use fas, brand icons use fab.
Pagination
paginate: 8 # posts per page on the homepage
paginate_path: "/page:num/"
With 10 posts and paginate: 8, the homepage shows 8 posts and a /page2/ link appears automatically.
Defaults
defaults:
- scope: { path: "", type: "posts" }
values:
layout: "post"
author: "50bvd"
comments: true
toc: true
Front matter values on individual posts override these defaults. Use defaults to avoid repeating boilerplate across every post file.
Comments