Skip to main content
Settings
Color Mode
Theme Skin
Background

Appearance preferences are saved in this browser only.

Environment
Current Environment Production

Built with JEKYLL_ENV=production. Changes require deployment.

Theme & Build
Jekyll v3.10.0
Last Build Jul 08, 20:42
Page Location
Page Info
Layout admin
Collection about
Path _about/settings/config.md
URL /about/config/
Date 2026-07-08

Configuration Utility

View, manage, and update your Jekyll theme configuration from one place.

Updated Apr 04, 2026
https://zer0-mistakes.com
Site URL
bamr87/zer0-mistakes
Repository
Air
Theme Skin
9
Collections

title zer0-mistakes
founder Amr Abdel-Motaleb
email amr@zer0-mistakes.com
description "Jekyll and Bootstrap 5 theme for perfectionists. Step-by-step instructions to build your blog, portfolio, and documentation site with no mistakes, unless you're a n00b."
name Amr
level n00b
locale en-US

github_user bamr87
repository_name zer0-mistakes
branch main
local_repo zer0-mistakes
repo_map /sitemap/

url https://zer0-mistakes.com
baseurl
remote_theme bamr87/zer0-mistakes
port 4000
permalink pretty
public_folder assets

locale en-US
logo /assets/images/gravatar-small.png
teaser /assets/images/favicon_gpt_computer_retro.png
og_image /assets/images/wizard-on-journey.png
theme_skin air
breadcrumbs true
words_per_minute 200

google_analytics G-ZBDKNMC168
posthog.enabled true
posthog.api_host https://us.i.posthog.com
posthog.respect_dnt true
posthog.session_recording false

Collection Output Items
about yes 29
docs yes 89
hobbies yes 0
notebooks yes 5
notes yes 5
pages yes 0
posts yes 37
quests yes 0
quickstart yes 5

  • github-pages
  • jekyll-remote-theme
  • jekyll-feed
  • jekyll-sitemap
  • jekyll-seo-tag
  • jekyll-paginate
  • jekyll-relative-links
  • jekyll-redirect-from
  • jekyll-include-cache
  • jekyll-mermaid
  • jekyll-coffeescript
  • jekyll-commonmark-ghpages
  • jekyll-gist
  • jekyll-github-metadata
  • jekyll-optional-front-matter
  • jekyll-readme-index
  • jekyll-default-layout
  • jekyll-titles-from-headings
  • jekyll-remote-theme

markdown kramdown
collections_dir pages
paginate 10
paginate_path /pages/:num/
kramdown.input GFM
kramdown.toc_levels 1..6

main
#007bff
secondary
#6c757d
red
#a11111
yellow
#ffe900
teal
#376986
blue
#007bff
green
#28a745
purple
#6f42c1
pink
#e83e8c
orange
#fd7e14
brown
#795548
cyan
#17a2b8
indigo
#6610f2
lime
#cddc39
amber
#ffc107
deep_orange
#ff5722
deep_purple
#673ab7
light_blue
#03a9f4
light_green
#8bc34a
light_purple
#9c27b0
light_red
#f44336
light_yellow
#ffeb3b
light_teal
#009688
Site Identity
0/160 characters
GitHub
URLs & Deployment
Production URL. For GitHub Pages: https://USERNAME.github.io
Leave empty for apex domains
Personalization
Analytics
Live Preview
Loading…
_config.yml

# Welcome to the configuration file for Jekyll.
# Full docs at: http://jekyllrb.com/docs/configuration/
# YAML docs at: https://yaml.org/spec/1.2.2/
# ---------------------------------------------------------------------------------
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server.
#
# If you need help with YAML syntax, here are some quick references for you: 
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# You can find config options at: https://jekyllrb.com/docs/configuration/options/
#
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.


# Site Settings ###################################################################

site_configured          : true   # Tells the theme this site has been personalised

founder                  : "Amr Abdel-Motaleb"
remote_theme             : "bamr87/zer0-mistakes"
gem                      : &gem "jekyll-theme-zer0"
# theme                    : "jekyll-theme-zer0"

## Github Information
github_user              : &github_user "bamr87"
repository_name          : &github_repository "zer0-mistakes"
repository               : [*github_user, "/", *github_repository] # GitHub username/repo-name
local_repo               : &local_repo "zer0-mistakes"
branch                   : &branch "main"
repo_map                 : "/sitemap/"
portfolio                : &portfolio [*github_user, '.', 'github.io']

## Site Information ---------------------------------------------------------------

title                    : &title "zer0-mistakes"
title_url                : "/"
title_icon               : "robot"
subtitle                 : ""
subtitle_url             : "localhost"
subtitle_icon            : "code"
title_separator          : "|" # Appears in the web browser tab name
domain                   : &domain "zer0-mistakes"
domain_ext               : &domain_ext "com"
baseurl                  : &baseurl "" # the subpath of your site, e.g. /blog - Use this if you want this whole repo to be a domain branch
url_test                 : &url_test [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext ] # the base hostname & protocol for your site, e.g. http://example.com
domain_url               : &domain_url [ 'https', '://', *domain, '.', *domain_ext ]
github_io_url            : &github_io_url [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext, '/', *github_repository ]
url                      : &url https://zer0-mistakes.com
public_folder            : assets # path to the public folder
port                     : 4000 # Jekyll Serve Dev port
dg_port                  : 4001 # TODO: Doppelganger site. Use this if you want to switch between parallel deployments
og_image                 : '/assets/images/wizard-on-journey.png'

### Owner Information -------------------------------------------------------------

name                     : &name "Amr"
email                    : "amr@zer0-mistakes.com"
description              : >- # this means to ignore newlines until the next variable
  "Jekyll and Bootstrap 5 theme for perfectionists.
  Step-by-step instructions to build your blog, portfolio,
  and documentation site with no mistakes, unless you're a n00b."
level                    : 'n00b'

## Maintainer Information----------------------------------------------------------

maintainers:
  - name: *name
    profile: ["https://github.com", "/", *github_user]
  - name: "Vacant"
    profile: "/github.com"

## Personalization ----------------------------------------------------------------

locale                   : "en-US"
home_dir                 : &home '/Users/bamr87/'
local_git                : [ *home, 'github' ]
logo                     : /assets/images/gravatar-small.png  # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
logo_link                : [ *url, *baseurl ] # URL to link the logo to, e.g. "/"

teaser                   : '/assets/images/favicon_gpt_computer_retro.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"
info_banner              : '/assets/images/info-banner-mountain-wizard.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"

## Preview Image Generation (AI-powered) #####################################
# Settings for automatic preview image generation using AI
# Used by: scripts/generate-preview-images.sh
#
# Per-author override: a post's `author:` may point at an entry in
# _data/authors.yml that defines a `preview:` block (style, style_modifiers,
# size, quality, model). Those values WIN over the settings below for that
# post's banner — giving each AI author persona (e.g. cassandra, vega) a
# distinct art style. See pages/_docs/customization/author-profiles.md § 6.

preview_images:
  enabled                : true
  provider               : 'openai'           # openai, stability, local
  model                  : 'gpt-image-2'      # gpt-image-2, dall-e-3, dall-e-2, stable-diffusion
  size                   : '1536x1024'        # Landscape for GPT Image banners; DALL-E 3 also supports 1792x1024
  quality                : 'auto'             # auto for GPT Image models; standard/hd for DALL-E 3
  style                  : 'retro pixel art, 8-bit video game aesthetic, vibrant colors, nostalgic, clean pixel graphics'
  output_dir             : 'assets/images/previews'
  # Path normalization: allows omitting /assets/ prefix in frontmatter
  # e.g., preview: /images/previews/my-image.png becomes /assets/images/previews/my-image.png
  assets_prefix          : '/assets'          # Prefix to prepend to relative preview paths
  auto_prefix            : true               # Auto-add assets_prefix if path doesn't start with it
  # Additional style modifiers applied to all prompts
  style_modifiers        : 'pixelated, retro gaming style, CRT screen glow effect, limited color palette'

# Content statistics
# _data/content_statistics.yml is committed and read directly by templates
# (site.data.content_statistics). The _plugins/content_statistics_generator.rb
# hook re-derives it from a full content scan on EVERY `jekyll build` (~12x per
# CI run) — pure waste when content hasn't changed, plus it dirties a tracked
# file. Keep it off by default; refresh explicitly with `rake stats:generate`
# (or _data/generate_statistics.sh) when content changes.
content_statistics:
  auto_generate          : false

breadcrumbs              : true # true, false (default)
words_per_minute         : 200
_posts_file_structure    : "year-month-day-title.md"

# UI navigation behaviour --------------------------------------------------
# Optional consolidation of the mobile sidebar + main-menu offcanvases into
# a single tabbed drawer (Browse / Menu / Settings). Default false to avoid
# disrupting existing forks. See _includes/navigation/unified-drawer.html.
navigation:
  unified_mobile_drawer  : false  # true to opt into the single-drawer pattern

# Left sidebar defaults -----------------------------------------------------
# Site-wide defaults for the docs sidebar panel. Pages override via the
# `sidebar:` front-matter hash; collections via `sidebar:` metadata under
# `collections:` below. Resolution: page → collection → site (this block).
# Full reference: /docs/features/sidebar-navigation/
sidebar:
  title                  : "Browse docs"        # panel heading text
  icon                   : "bi-journal-bookmark" # Bootstrap Icons class for the heading
  # nav                  : auto  # optional site-wide fallback nav mode for pages
  #                              # that set none. Modes: auto | collection |
  #                              # categories | tags | <_data/navigation/*.yml name>

# Opt-in user override hooks. When true, the theme loads:
#   - assets/css/user-overrides.css  (after main.css, wins over theme rules)
#   - assets/js/user-overrides.js    (after the theme JS bundle)
# Ship these files in your fork; they are not bundled with the theme.
user_overrides           : false

# Default color mode for new visitors (before any localStorage preference is set).
# Values: dark | light | auto
#   dark  — always start in dark mode (Bootstrap data-bs-theme="dark")
#   light — always start in light mode (Bootstrap data-bs-theme="light")
#   auto  — follow the visitor's OS/browser prefers-color-scheme (default)
# The user can still override this at any time with the Appearance panel.
# An inline script in <head> applies the correct mode before CSS loads, preventing FOUC.
color_mode_default       : auto

# Runtime Appearance panel inside the Settings offcanvas (Track 6).
# Adds light/dark/auto color-mode buttons + a primary-color picker that
# writes to localStorage["zer0-appearance"] and updates --zer0-color-primary
# without a page reload. Falls back gracefully when disabled.
appearance_panel         : true

## Identity #####################################################################

author:
  name                   : *name # *name is a YAML reference pointing to the &anchor earlier
  avatar                 : "/assets/images/gravatar-small.png"
  email_hash             : &email_hash '71d7a4fc9712df49e13d606e620f89c7' # https://en.gravatar.com/site/check/{ site.email }
  gravatar               : [ 'https://s.gravatar.com/avatar/', *email_hash, '?s=80' ]
  bio                    : "IT nerd trying to be an IT hero"
  location               : "Denver, CO"
  twitter_username       : "bamr87"
  github_username        : *github_user

## Site Analytics #############################################################

google_analytics         : 'G-ZBDKNMC168'

# PostHog Analytics Configuration
# https://posthog.com/docs/libraries/js
posthog:
  enabled                : true
# [redacted]
  api_host               : 'https://us.i.posthog.com'
  person_profiles        : 'identified_only'  # Options: 'always', 'identified_only', 'never'
  autocapture            : true   # Automatically capture clicks, form submissions, etc.
  capture_pageview       : true   # Track page views
  capture_pageleave      : true   # Track when users leave pages
  session_recording      : false  # Enable session recordings (privacy consideration)
  disable_cookie         : false  # Set to true for cookieless tracking
  respect_dnt            : true    # Respect Do Not Track browser setting
  cross_subdomain_cookie : false  # Enable if you have multiple subdomains
  secure_cookie          : true   # Use secure cookies in production
  persistence            : 'localStorage+cookie'  # Options: 'localStorage+cookie', 'cookie', 'memory'
  custom_events:
    track_downloads      : true   # Track PDF, ZIP, etc. downloads
    track_external_links : true   # Track clicks to external websites
    track_search         : true   # Track search queries
    track_scroll_depth   : true   # Track how far users scroll
  privacy:
    mask_all_text        : false  # Mask all text in session recordings
    mask_all_inputs      : true   # Mask form inputs in session recordings
    ip_anonymization     : false  # Anonymize IP addresses

# Nanobar - Page Loading Progress Bar #############################################
# Visual loading indicator shown on every page load.
# Library: https://github.com/jacoborus/nanobar
nanobar:
  enabled       : true              # Master switch — set false to disable entirely
  # Visual styling (any valid CSS values; CSS variables / var() are supported)
  color         : "var(--bs-primary)" # Bar (progress) color
  background    : "transparent"      # Track background behind the bar
  height        : "3px"              # Bar thickness (e.g. 2px, 4px, 0.25rem)
  # Placement
  position      : "navbar"           # top | bottom | navbar (under header)
  z_index       : 9999               # Stacking order
  # Loading simulation — percentages applied in order on DOMContentLoaded.
  # With step_delay_ms = 0 the bar fills instantly and is essentially invisible
  # on fast pages. Increase to slow / make the animation perceivable.
  steps         : [20, 55, 85, 100]
  step_delay_ms : 180                # Delay between steps in ms (0 = instant burst)
  # Advanced (rarely needs changing)
  classname     : "nanobar"          # Class added to the injected element
  id            : "top-progress-bar" # DOM id of the injected element
  target        : ""                 # CSS selector to mount inside; "" = fixed to viewport

## AI Chat Configuration #####################################################
# Frontend chatbot that provides AI-powered assistance with page context
# [redacted]
# [redacted]
#
# Security Note: For production use, consider routing requests through a
# server-side proxy to avoid exposing the API key in client-side code.

ai_chat:
  enabled                : true
  provider               : 'anthropic'        # AI provider (Claude Messages API)
  auth_mode              : 'proxy'            # 'proxy' (recommended) or 'direct'
  proxy_ready            : false              # Set true only when your proxy endpoint is deployed
  model                  : 'claude-opus-4-8'  # Claude model to use
# [redacted]
# [redacted]
# [redacted]
# [redacted]
  endpoint               : '/api/chat'        # Proxy endpoint (same-origin) for production safety.
                                               # Direct mode talks to https://api.anthropic.com/v1/messages
  anthropic_version      : '2023-06-01'       # Anthropic API version header
# [redacted]
  strict_context         : true               # Ground answers to current page context only
  out_of_scope_message   : "I can only answer from the content on this page."
  system_prompt          : >-
    You are a helpful assistant for the Zer0-Mistakes website,
    a Jekyll theme and developer blog. Answer questions about the
    current page content and help users navigate the site.
    Be concise and friendly.
  welcome_message        : "Hi! I'm the Zer0 assistant. Ask about this page, report a problem, or suggest an improvement."
  placeholder            : "Ask about this page..."
  context_max_length     : 2000               # Max chars of page content sent as context
  icon                   : 'bi-robot'         # Bootstrap icon for chat button
  local_edit             : false              # DEV ONLY: let the assistant write the current page's
                                              # source file via the dev proxy (never enable in production)
  local_edit_endpoint    : '/api/page'        # dev proxy base for reading/writing the local source file
  github:                                     # GitHub actions exposed to the assistant (tool use)
    enabled              : true               # Offer issue/PR tools in the chat
# [redacted]
                                              # 'proxy' = real issues + PRs via the proxy's GitHub routes
                                              #           (see templates/deploy/chat-proxy/)
    endpoint             : '/api/github'      # Proxy base path for GitHub actions (proxy mode)
    base_branch          : 'main'             # Branch sources are read from / PRs are based on
    default_labels       : ['from-chat']      # Labels added to issues created from the chat
    pr_branch_prefix     : 'chat/'            # Prefix for PR branches created by the proxy

## Page Feedback — "Improve this page" capture #################################
# Runtime capture widget: _includes/components/page-feedback.html +
# assets/js/page-feedback.js. Turns what a reader is looking at into a
# well-formed GitHub issue — request type + description + live page context +
# captured console/error logs — filed with labels that actually exist.
#
# Two layers:
# [redacted]
#     github.com/issues/new form. Works on any fork of the theme.
#   - AI enrichment (optional): when the chat proxy is deployed
#     (ai_chat.proxy_ready), the capture is sent to Claude — via Claude Code
#     OAuth, server-side — to clarify, vet, prioritize, and recommend before
#     the issue is filed. Reuses templates/deploy/chat-proxy/.

page_feedback:
  enabled            : true               # Master switch for the widget
  fab                : true               # Show the global floating feedback button
  fab_icon           : 'bi-megaphone'     # Bootstrap icon for the FAB
  fab_label          : 'Improve this page'
  capture_logs       : true               # Capture console/error logs (previewed before submit)
  log_limit          : 40                 # Max console/error entries kept in the ring buffer
# [redacted]
                                          # 'proxy' = file real issues via the chat proxy
  endpoint           : '/api/feedback'    # Proxy triage/analysis route (AI layer)
  issue_endpoint     : '/api/github/issue' # Proxy real-issue route (proxy mode)
  default_labels     : ['page-feedback']  # Marker label added to every issue (MUST exist in repo)
  assignee           : 'copilot'          # Assignee for agent-actionable types ('' to disable)
  ai:
    enabled          : true               # Offer AI clarify/vet/prioritize (needs the proxy deployed)
    auto             : false              # false = user taps "Analyze with AI"; true = on open
    model            : 'claude-opus-4-8'  # Model for the triage call
# [redacted]

## Site verification #############################################################

google_site_verification : null
bing_site_verification   : null
alexa_site_verification  : null
yandex_site_verification : null
aver_site_verification   : null
baidu_site_verification  : null

## Affiliations ##############################################################

default_icon: "bi" ## Bootstrap Icons https://icons.getbootstrap.com/

links:
  - label: "Portfolio"
    url: [ 'https://', *github_user, '.github.io/']
    icon: "bi-link"
  - label: "X"
    icon: "bi-twitter-x"
    url: "https://x.com/bamr87"
  - label: "GitHub"
    icon: "bi-github"
    url: [ 'https://github.com/' , *github_user ]
  - label: "Instagram"
    icon: "bi-instagram"
    url: "https://instagram.com/bamr42"

youtube:
  - label: "YouTube"
    icon: "bi-youtube"
    url: "https://www.youtube.com/channel/UCO0j3Opg3J9i2iWnDwHUsXQ"

## Build Framework ##############################################################

powered_by:
  - name: "Ruby"
    version: "3.3"
    url: "https://www.ruby-lang.org/"
    icon: "bi-gem"
  - name: "Jekyll"
    version: "3.10"
    url: "https://jekyllrb.com/"
    icon: "bi-joystick"
  - name: "Bootstrap"
    version: "5.3.3"
    url: "https://getbootstrap.com/"
    icon: "bi-bootstrap"
  - name: "MathJax"
    url: "https://www.mathjax.org/"
    icon: "bi-calculator"
  - name: "GitHub Pages"
    version: "232"
    url: "https://pages.github.com/"
    icon: "bi-github"
  - name: "Docker"
    url: "https://www.docker.com/"
    icon: "bi-docker"

### Plugins  #####################################################################

# https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll#plugins
# http://jekyllrb.com/docs/plugins/

# All plugins are enabled by default for GitHub Pages. https://pages.github.com/versions/

plugins:
  - github-pages
  - jekyll-remote-theme
  - jekyll-feed
  - jekyll-sitemap
  - jekyll-seo-tag
  - jekyll-paginate
  - jekyll-relative-links
  # jekyll-redirect-from is on the GitHub Pages whitelist and powers Obsidian
  # `aliases:` → URL redirects (see pages/_docs/obsidian/syntax-reference.md).
  - jekyll-redirect-from
  # jekyll-include-cache (on the GitHub Pages whitelist) provides the
  # {% include_cached %} tag used by setup-banner.html and other includes to
  # collapse per-page renders of stable content into a single cached render.
  - jekyll-include-cache
  # Note: jekyll-mermaid is NOT in GitHub Pages whitelist - it only provides {% mermaid %} Liquid tag
  # Mermaid diagrams work without this plugin via client-side JavaScript (see _includes/components/mermaid.html)
  - jekyll-mermaid

# Project resource links (used by landing page and includes)
resources:
  github_repo: [ 'https://github.com/', *github_user, '/', *github_repository ]
  github_fork: [ 'https://github.com/', *github_user, '/', *github_repository, '/fork' ]
  contributing: [ 'https://github.com/', *github_user, '/', *github_repository, '/blob/', *branch, '/CONTRIBUTING.md' ]
  rubygems:
    name: *gem
    url: [ 'https://rubygems.org/gems/', *gem ]
  docker:
    image: [ *github_user, '/', *github_repository ]
    hub_url: [ 'https://hub.docker.com/r/', *github_user, '/', *github_repository ]

## Giscus Comments (GitHub Discussions) #########################################
# Powered by https://giscus.app/ — comments are stored as GitHub Discussions.
# The theme reads exactly three keys: enabled, data-repo-id, data-category-id.
# data-repo is filled automatically from `repository` above.
# Docs: pages/_docs/features/giscus-comments.md
# NOTE: the key MUST be `giscus` — layouts/includes read `site.giscus.*`.

giscus:
  enabled: true
  # IDs below belong to bamr87/zer0-mistakes (Announcements category).
  # Regenerate for a fork at https://giscus.app/ or run:
  #   ./scripts/bin/giscus-discussions categories
  data-repo-id: "R_kgDOMFgJHQ"
  data-category-id: "DIC_kwDOMFgJHc4C52bX"

## Mermaid Diagram Configuration #################################################
# Mermaid diagrams support both native markdown code blocks and div syntax
# Usage: 
#   1. Add 'mermaid: true' to page front matter
#   2. Use ```mermaid ... ``` code blocks OR <div class="mermaid">...</div>
# 
# GitHub Pages Compatible: Yes (client-side; script bundled under assets/vendor/)
# Update file: npm install && npm run vendor:mermaid (copies from node_modules/mermaid, not jsDelivr)
# Plugin: jekyll-mermaid is OPTIONAL (not needed for GitHub Pages)
# Documentation: https://mermaid.js.org/

mermaid:
  src: '/assets/vendor/mermaid/mermaid.min.js'

## Conversion
# Markdown Options https://jekyllrb.com/docs/configuration/markdown/
# https://github.com/github/jekyll-commonmark-ghpages

markdown: kramdown
# highlighter: rouge
# lsi: false
# excerpt_separator: "\n\n"
# incremental: false

# Markdown Processing https://jekyllrb.com/docs/configuration/markdown/
kramdown: # https://kramdown.gettalong.org/options.html
  input: GFM
  header_offset: 0
  # hard_wrap: false
  # auto_ids: true
  # footnote_nr: 1
  # entity_output: as_char
  toc_levels: 1..6
  # smart_quotes: lsquo,rsquo,ldquo,rdquo
  # enable_coderay: false

# Collections: https://jekyllrb.com/docs/collections/
  # Permalinks: https://jekyllrb.com/docs/permalinks/

collections_dir: &collections_dir pages
local_repo_path: [ *collections_dir, '/', *local_repo ]

# Collection metadata used by the sidebar's "collection" mode:
#   title   — heading shown above the collection tree (default: label)
#   icon    — Bootstrap Icons class for the heading
#   sidebar — per-collection sidebar defaults, e.g.
#             sidebar: { nav: collection, title: "Guides" }
#             (page front matter still wins; see sidebar-config.html)
collections:
  pages:
    output: true
    permalink: /:collection/:name/
  posts:
    output: true
    permalink: /:collection/:year/:month/:day/:slug/
  docs:
    output: true
    title: Documentation
    icon: bi-journal-text
    permalink: /:collection/:categories/:name/
  quests:
    output: true
    permalink: /:collection/:categories/:name/
  hobbies:
    output: true
    permalink: /:collection/:categories/:name/
  notebooks:
    output: true
    title: Notebooks
    icon: bi-journal-code
    permalink: /:collection/:path/:name/
  notes:
    output: true
    title: Notes
    icon: bi-journal-richtext
    permalink: /:collection/:path/:name/
  quickstart:
    output: true
    title: Quick Start
    icon: bi-rocket-takeoff
    permalink: /:collection/:name/
  about:
    output: true
    title: About
    icon: bi-person-badge
    permalink: /:collection/:categories/:name/

permalink: pretty

#  pagination https://jekyllrb.com/docs/pagination/

paginate: 10
paginate_path: "/pages/:num/"

# Defaults https://jekyllrb.com/docs/configuration/front-matter-defaults/

defaults:
  # ALL
  # No sidebar nav here on purpose: root-level pages (landing README, 404)
  # use layouts without the #bdSidebar panel, so a resolvable site-wide nav
  # would put a dead toggle in their navbar. Collections opt in below.
  -
    scope:
      path: ""
    values:
      layout: root
      author_profile: false
      read_time: true
      comments: false # true
      share: true
      related: true
    permalink: /:collection/:name/

  # pages
  - 
    scope:
      path: pages
    values:
      layout: &pages default
      author_profile: true
      read_time: true
      comments: # true
      share: true
      related: true
      toc_sticky: true
      sidebar:
        nav: categories
    permalink: /:path/:name/

  # pages/_about
  - 
    scope:
      path: pages/_about
    values:
      layout: *pages
      collection: about
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_quickstart
  - 
    scope:
      path: pages/_quickstart
    values:
      layout: default
      collection: quickstart
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_posts
  - 
    scope:
      path: pages/_posts
    values:
      layout: article
      post_type: standard
      index: false
      sidebar: true
      author_profile: true
      read_time: true
      comments: true # blog posts show Giscus comments (override per-page with `comments: false`)
      share: true
      related: true
      # permalink: /:collection/:name/

  # pages/_docs
  - 
    scope:
      path: pages/_docs
    values:
      layout: *pages
      # category: docs
      author_profile: true
      read_time: true
      sidebar:
        nav: auto
      comments: # true
      share: true
      related: true
    # permalink: /docs/:category/:name/

  # pages/_notes
  - 
    scope:
      path: pages/_notes
      type: notes
    values:
      layout: note
      collection: notes
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_notebooks
  - 
    scope:
      path: pages/_notebooks
      type: notebooks
    values:
      layout: notebook
      collection: notebooks
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
      jupyter_metadata: true
      sidebar:
        nav: auto

# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
# NOTE: When _config_dev.yml is layered on top (--config _config.yml,_config_dev.yml),
# the dev file MUST repeat this full list — Jekyll replaces, not merges, the exclude key.

exclude:
  # ── Jekyll cache ─────────────────────────────────────────────────────────
  - .sass-cache/
  - .jekyll-cache/

  # ── Obsidian vault working files ─────────────────────────────────────────
  - .obsidian/
  - "*.canvas"
  - "*.excalidraw.md"

  # ── IDE / editor config (dot-prefix dirs hidden by default; listed for clarity) ─
  - .cursor/
  - .devcontainer/
  - .frontmatter/
  - .github/
  - .vscode/

  # ── Ruby / Bundler ────────────────────────────────────────────────────────
  - Gemfile
  - Gemfile.lock
  - gemfiles/
  - jekyll-theme-zer0.gemspec
  - lib/
  - pkg/
  - vendor/bundle/
  - vendor/cache/
  - vendor/gems/
  - vendor/ruby/

  # ── Node.js ───────────────────────────────────────────────────────────────
  - node_modules/
  - package.json
  - package-lock.json

  # ── Shell scripts and automation ──────────────────────────────────────────
  - scripts/
  - "*.sh"

  # ── Docker configuration ──────────────────────────────────────────────────
  - docker/
  - docker-compose.yml
  - docker-compose.test.yml

  # ── Build / task runners ──────────────────────────────────────────────────
  - Makefile
  - Rakefile

  # ── Project tooling metadata ──────────────────────────────────────────────
  - AGENTS.md
  - docs/
  - frontmatter.json
  - logs/
  - templates/
  - vendor-manifest.json
  - "*.code-workspace"

  # ── Submodules, tests, and authoring scaffolding ──────────────────────────
  - submodules/
  - test/
  - tests/
  - MERMAID-*.md
  - MERMAID-*/
  - pages/_notes/_templates/

# Sass/SCSS
# Production default: minified output, no sourcemaps. main.css is render-blocking
# on every page, so we ship it compressed (~182KB expanded -> ~140KB minified)
# and skip the .css.map files. _config_dev.yml overrides this back to expanded +
# sourcemaps for local debugging.
sass:
  sass_dir: _sass
  style: compressed
  sourcemap: never

#  TODO: Fix bootstrap plugin
  # load_paths:
  #   - /usr/local/bundle/gems/bootstrap-5.3.3/assets/stylesheets


## Style Settings -------------------------------------------------------------

# theme                  : "zer0-mistakes-jekyll"
# remote_theme           : "bamr87/zer0-mistakes"
theme_skin               : "air" # "air", "aqua", "dirt", "neon", "mint", "plum", "sunrise"

# SVG background layers (fffuel.co style) — gradient, pattern, noise per skin
theme_background:
  enabled: true           # Master toggle for SVG backgrounds
  gradient_opacity: 0.6   # Hero/header gradient layer opacity
  texture_opacity: 0.04   # Body noise texture overlay opacity
  pattern_opacity: 0.08   # Surface/card pattern overlay opacity
  blend_mode: overlay     # CSS mix-blend-mode for all layers

# style                  : "default" # "default", "dark", "light", "solarized-dark", "solarized-light"
# remote_style           : "bamr87/zer0-mistakes"

# NOTE: Hex codes MUST be quoted — unquoted `#007bff` is parsed as a YAML
# comment and the key resolves to null. These values feed
# [redacted]
theme_color:
  main:         "#007bff"
  secondary:    "#6c757d"
  red:          "#a11111"
  yellow:       "#ffe900"
  teal:         "#376986"
  blue:         "#007bff"
  green:        "#28a745"
  purple:       "#6f42c1"
  pink:         "#e83e8c"
  orange:       "#fd7e14"
  brown:        "#795548"
  cyan:         "#17a2b8"
  indigo:       "#6610f2"
  lime:         "#cddc39"
  amber:        "#ffc107"
  deep_orange:  "#ff5722"
  deep_purple:  "#673ab7"
  light_blue:   "#03a9f4"
  light_green:  "#8bc34a"
  light_purple: "#9c27b0"
  light_red:    "#f44336"
  light_yellow: "#ffeb3b"
  light_teal:   "#009688"

## Copyright Settings --------------------------------------------------------------

cr_year: 2024
cr_entity: *name
cr_lisense: "MIT"

## Sitemap Settings --------------------------------------------------------------

# sitemap_include: A list of file extensions that should be included in the sitemap. By default, HTML files and any files with sitemap: true in their front matter are included.
# sitemap_exclude: A list of files or directories that should be excluded from the sitemap.

sitemap_include: ["html", "xml"]
# [redacted]
Regenerate Config

Copy the live _config.yml into this settings directory for documentation purposes.

Bash
```bash cd ~/github/zer0-mistakes # Wraps the copy in Liquid raw markers so config comments that mention # Liquid tags render literally (scripts/bin/validate checks for drift). # The awk string-splits keep this page itself Liquid-safe. awk 'BEGIN{print "{" "% raw %" "}"} {print} END{print "{" "% endraw %" "}"}' \ _config.yml > pages/_about/settings/_config.yml ```
PowerShell
```powershell cd ~/github/zer0-mistakes $raw = "{" + "% raw %" + "}"; $end = "{" + "% endraw %" + "}" $body = Get-Content _config.yml -Raw Set-Content -Encoding UTF8 pages/_about/settings/_config.yml ` -Value ($raw + "`n" + $body + $end + "`n") ```
Environment
jekyll.environment production
site.url https://zer0-mistakes.com
site.baseurl (empty)
site.remote_theme bamr87/zer0-mistakes
site.port 4000
site.collections_dir pages
# Welcome to the configuration file for Jekyll.
# Full docs at: http://jekyllrb.com/docs/configuration/
# YAML docs at: https://yaml.org/spec/1.2.2/
# ---------------------------------------------------------------------------------
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'bundle exec jekyll serve'. If you change this file, please restart the server.
#
# If you need help with YAML syntax, here are some quick references for you: 
# https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
# https://learnxinyminutes.com/docs/yaml/
#
# You can find config options at: https://jekyllrb.com/docs/configuration/options/
#
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.


# Site Settings ###################################################################

site_configured          : true   # Tells the theme this site has been personalised

founder                  : "Amr Abdel-Motaleb"
remote_theme             : "bamr87/zer0-mistakes"
gem                      : &gem "jekyll-theme-zer0"
# theme                    : "jekyll-theme-zer0"

## Github Information
github_user              : &github_user "bamr87"
repository_name          : &github_repository "zer0-mistakes"
repository               : [*github_user, "/", *github_repository] # GitHub username/repo-name
local_repo               : &local_repo "zer0-mistakes"
branch                   : &branch "main"
repo_map                 : "/sitemap/"
portfolio                : &portfolio [*github_user, '.', 'github.io']

## Site Information ---------------------------------------------------------------

title                    : &title "zer0-mistakes"
title_url                : "/"
title_icon               : "robot"
subtitle                 : ""
subtitle_url             : "localhost"
subtitle_icon            : "code"
title_separator          : "|" # Appears in the web browser tab name
domain                   : &domain "zer0-mistakes"
domain_ext               : &domain_ext "com"
baseurl                  : &baseurl "" # the subpath of your site, e.g. /blog - Use this if you want this whole repo to be a domain branch
url_test                 : &url_test [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext ] # the base hostname & protocol for your site, e.g. http://example.com
domain_url               : &domain_url [ 'https', '://', *domain, '.', *domain_ext ]
github_io_url            : &github_io_url [ 'https', '://', *github_user, '.', *domain, '.', *domain_ext, '/', *github_repository ]
url                      : &url https://zer0-mistakes.com
public_folder            : assets # path to the public folder
port                     : 4000 # Jekyll Serve Dev port
dg_port                  : 4001 # TODO: Doppelganger site. Use this if you want to switch between parallel deployments
og_image                 : '/assets/images/wizard-on-journey.png'

### Owner Information -------------------------------------------------------------

name                     : &name "Amr"
email                    : "amr@zer0-mistakes.com"
description              : >- # this means to ignore newlines until the next variable
  "Jekyll and Bootstrap 5 theme for perfectionists.
  Step-by-step instructions to build your blog, portfolio,
  and documentation site with no mistakes, unless you're a n00b."
level                    : 'n00b'

## Maintainer Information----------------------------------------------------------

maintainers:
  - name: *name
    profile: ["https://github.com", "/", *github_user]
  - name: "Vacant"
    profile: "/github.com"

## Personalization ----------------------------------------------------------------

locale                   : "en-US"
home_dir                 : &home '/Users/bamr87/'
local_git                : [ *home, 'github' ]
logo                     : /assets/images/gravatar-small.png  # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
logo_link                : [ *url, *baseurl ] # URL to link the logo to, e.g. "/"

teaser                   : '/assets/images/favicon_gpt_computer_retro.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"
info_banner              : '/assets/images/info-banner-mountain-wizard.png' # path of fallback teaser image, e.g. "/assets/images/500x300.png"

## Preview Image Generation (AI-powered) #####################################
# Settings for automatic preview image generation using AI
# Used by: scripts/generate-preview-images.sh
#
# Per-author override: a post's `author:` may point at an entry in
# _data/authors.yml that defines a `preview:` block (style, style_modifiers,
# size, quality, model). Those values WIN over the settings below for that
# post's banner — giving each AI author persona (e.g. cassandra, vega) a
# distinct art style. See pages/_docs/customization/author-profiles.md § 6.

preview_images:
  enabled                : true
  provider               : 'openai'           # openai, stability, local
  model                  : 'gpt-image-2'      # gpt-image-2, dall-e-3, dall-e-2, stable-diffusion
  size                   : '1536x1024'        # Landscape for GPT Image banners; DALL-E 3 also supports 1792x1024
  quality                : 'auto'             # auto for GPT Image models; standard/hd for DALL-E 3
  style                  : 'retro pixel art, 8-bit video game aesthetic, vibrant colors, nostalgic, clean pixel graphics'
  output_dir             : 'assets/images/previews'
  # Path normalization: allows omitting /assets/ prefix in frontmatter
  # e.g., preview: /images/previews/my-image.png becomes /assets/images/previews/my-image.png
  assets_prefix          : '/assets'          # Prefix to prepend to relative preview paths
  auto_prefix            : true               # Auto-add assets_prefix if path doesn't start with it
  # Additional style modifiers applied to all prompts
  style_modifiers        : 'pixelated, retro gaming style, CRT screen glow effect, limited color palette'

# Content statistics
# _data/content_statistics.yml is committed and read directly by templates
# (site.data.content_statistics). The _plugins/content_statistics_generator.rb
# hook re-derives it from a full content scan on EVERY `jekyll build` (~12x per
# CI run) — pure waste when content hasn't changed, plus it dirties a tracked
# file. Keep it off by default; refresh explicitly with `rake stats:generate`
# (or _data/generate_statistics.sh) when content changes.
content_statistics:
  auto_generate          : false

breadcrumbs              : true # true, false (default)
words_per_minute         : 200
_posts_file_structure    : "year-month-day-title.md"

# UI navigation behaviour --------------------------------------------------
# Optional consolidation of the mobile sidebar + main-menu offcanvases into
# a single tabbed drawer (Browse / Menu / Settings). Default false to avoid
# disrupting existing forks. See _includes/navigation/unified-drawer.html.
navigation:
  unified_mobile_drawer  : false  # true to opt into the single-drawer pattern

# Left sidebar defaults -----------------------------------------------------
# Site-wide defaults for the docs sidebar panel. Pages override via the
# `sidebar:` front-matter hash; collections via `sidebar:` metadata under
# `collections:` below. Resolution: page → collection → site (this block).
# Full reference: /docs/features/sidebar-navigation/
sidebar:
  title                  : "Browse docs"        # panel heading text
  icon                   : "bi-journal-bookmark" # Bootstrap Icons class for the heading
  # nav                  : auto  # optional site-wide fallback nav mode for pages
  #                              # that set none. Modes: auto | collection |
  #                              # categories | tags | <_data/navigation/*.yml name>

# Opt-in user override hooks. When true, the theme loads:
#   - assets/css/user-overrides.css  (after main.css, wins over theme rules)
#   - assets/js/user-overrides.js    (after the theme JS bundle)
# Ship these files in your fork; they are not bundled with the theme.
user_overrides           : false

# Default color mode for new visitors (before any localStorage preference is set).
# Values: dark | light | auto
#   dark  — always start in dark mode (Bootstrap data-bs-theme="dark")
#   light — always start in light mode (Bootstrap data-bs-theme="light")
#   auto  — follow the visitor's OS/browser prefers-color-scheme (default)
# The user can still override this at any time with the Appearance panel.
# An inline script in <head> applies the correct mode before CSS loads, preventing FOUC.
color_mode_default       : auto

# Runtime Appearance panel inside the Settings offcanvas (Track 6).
# Adds light/dark/auto color-mode buttons + a primary-color picker that
# writes to localStorage["zer0-appearance"] and updates --zer0-color-primary
# without a page reload. Falls back gracefully when disabled.
appearance_panel         : true

## Identity #####################################################################

author:
  name                   : *name # *name is a YAML reference pointing to the &anchor earlier
  avatar                 : "/assets/images/gravatar-small.png"
  email_hash             : &email_hash '71d7a4fc9712df49e13d606e620f89c7' # https://en.gravatar.com/site/check/{ site.email }
  gravatar               : [ 'https://s.gravatar.com/avatar/', *email_hash, '?s=80' ]
  bio                    : "IT nerd trying to be an IT hero"
  location               : "Denver, CO"
  twitter_username       : "bamr87"
  github_username        : *github_user

## Site Analytics #############################################################

google_analytics         : 'G-ZBDKNMC168'

# PostHog Analytics Configuration
# https://posthog.com/docs/libraries/js
posthog:
  enabled                : true
# [redacted]
  api_host               : 'https://us.i.posthog.com'
  person_profiles        : 'identified_only'  # Options: 'always', 'identified_only', 'never'
  autocapture            : true   # Automatically capture clicks, form submissions, etc.
  capture_pageview       : true   # Track page views
  capture_pageleave      : true   # Track when users leave pages
  session_recording      : false  # Enable session recordings (privacy consideration)
  disable_cookie         : false  # Set to true for cookieless tracking
  respect_dnt            : true    # Respect Do Not Track browser setting
  cross_subdomain_cookie : false  # Enable if you have multiple subdomains
  secure_cookie          : true   # Use secure cookies in production
  persistence            : 'localStorage+cookie'  # Options: 'localStorage+cookie', 'cookie', 'memory'
  custom_events:
    track_downloads      : true   # Track PDF, ZIP, etc. downloads
    track_external_links : true   # Track clicks to external websites
    track_search         : true   # Track search queries
    track_scroll_depth   : true   # Track how far users scroll
  privacy:
    mask_all_text        : false  # Mask all text in session recordings
    mask_all_inputs      : true   # Mask form inputs in session recordings
    ip_anonymization     : false  # Anonymize IP addresses

# Nanobar - Page Loading Progress Bar #############################################
# Visual loading indicator shown on every page load.
# Library: https://github.com/jacoborus/nanobar
nanobar:
  enabled       : true              # Master switch — set false to disable entirely
  # Visual styling (any valid CSS values; CSS variables / var() are supported)
  color         : "var(--bs-primary)" # Bar (progress) color
  background    : "transparent"      # Track background behind the bar
  height        : "3px"              # Bar thickness (e.g. 2px, 4px, 0.25rem)
  # Placement
  position      : "navbar"           # top | bottom | navbar (under header)
  z_index       : 9999               # Stacking order
  # Loading simulation — percentages applied in order on DOMContentLoaded.
  # With step_delay_ms = 0 the bar fills instantly and is essentially invisible
  # on fast pages. Increase to slow / make the animation perceivable.
  steps         : [20, 55, 85, 100]
  step_delay_ms : 180                # Delay between steps in ms (0 = instant burst)
  # Advanced (rarely needs changing)
  classname     : "nanobar"          # Class added to the injected element
  id            : "top-progress-bar" # DOM id of the injected element
  target        : ""                 # CSS selector to mount inside; "" = fixed to viewport

## AI Chat Configuration #####################################################
# Frontend chatbot that provides AI-powered assistance with page context
# [redacted]
# [redacted]
#
# Security Note: For production use, consider routing requests through a
# server-side proxy to avoid exposing the API key in client-side code.

ai_chat:
  enabled                : true
  provider               : 'anthropic'        # AI provider (Claude Messages API)
  auth_mode              : 'proxy'            # 'proxy' (recommended) or 'direct'
  proxy_ready            : false              # Set true only when your proxy endpoint is deployed
  model                  : 'claude-opus-4-8'  # Claude model to use
# [redacted]
# [redacted]
# [redacted]
# [redacted]
  endpoint               : '/api/chat'        # Proxy endpoint (same-origin) for production safety.
                                               # Direct mode talks to https://api.anthropic.com/v1/messages
  anthropic_version      : '2023-06-01'       # Anthropic API version header
# [redacted]
  strict_context         : true               # Ground answers to current page context only
  out_of_scope_message   : "I can only answer from the content on this page."
  system_prompt          : >-
    You are a helpful assistant for the Zer0-Mistakes website,
    a Jekyll theme and developer blog. Answer questions about the
    current page content and help users navigate the site.
    Be concise and friendly.
  welcome_message        : "Hi! I'm the Zer0 assistant. Ask about this page, report a problem, or suggest an improvement."
  placeholder            : "Ask about this page..."
  context_max_length     : 2000               # Max chars of page content sent as context
  icon                   : 'bi-robot'         # Bootstrap icon for chat button
  local_edit             : false              # DEV ONLY: let the assistant write the current page's
                                              # source file via the dev proxy (never enable in production)
  local_edit_endpoint    : '/api/page'        # dev proxy base for reading/writing the local source file
  github:                                     # GitHub actions exposed to the assistant (tool use)
    enabled              : true               # Offer issue/PR tools in the chat
# [redacted]
                                              # 'proxy' = real issues + PRs via the proxy's GitHub routes
                                              #           (see templates/deploy/chat-proxy/)
    endpoint             : '/api/github'      # Proxy base path for GitHub actions (proxy mode)
    base_branch          : 'main'             # Branch sources are read from / PRs are based on
    default_labels       : ['from-chat']      # Labels added to issues created from the chat
    pr_branch_prefix     : 'chat/'            # Prefix for PR branches created by the proxy

## Page Feedback — "Improve this page" capture #################################
# Runtime capture widget: _includes/components/page-feedback.html +
# assets/js/page-feedback.js. Turns what a reader is looking at into a
# well-formed GitHub issue — request type + description + live page context +
# captured console/error logs — filed with labels that actually exist.
#
# Two layers:
# [redacted]
#     github.com/issues/new form. Works on any fork of the theme.
#   - AI enrichment (optional): when the chat proxy is deployed
#     (ai_chat.proxy_ready), the capture is sent to Claude — via Claude Code
#     OAuth, server-side — to clarify, vet, prioritize, and recommend before
#     the issue is filed. Reuses templates/deploy/chat-proxy/.

page_feedback:
  enabled            : true               # Master switch for the widget
  fab                : true               # Show the global floating feedback button
  fab_icon           : 'bi-megaphone'     # Bootstrap icon for the FAB
  fab_label          : 'Improve this page'
  capture_logs       : true               # Capture console/error logs (previewed before submit)
  log_limit          : 40                 # Max console/error entries kept in the ring buffer
# [redacted]
                                          # 'proxy' = file real issues via the chat proxy
  endpoint           : '/api/feedback'    # Proxy triage/analysis route (AI layer)
  issue_endpoint     : '/api/github/issue' # Proxy real-issue route (proxy mode)
  default_labels     : ['page-feedback']  # Marker label added to every issue (MUST exist in repo)
  assignee           : 'copilot'          # Assignee for agent-actionable types ('' to disable)
  ai:
    enabled          : true               # Offer AI clarify/vet/prioritize (needs the proxy deployed)
    auto             : false              # false = user taps "Analyze with AI"; true = on open
    model            : 'claude-opus-4-8'  # Model for the triage call
# [redacted]

## Site verification #############################################################

google_site_verification : null
bing_site_verification   : null
alexa_site_verification  : null
yandex_site_verification : null
aver_site_verification   : null
baidu_site_verification  : null

## Affiliations ##############################################################

default_icon: "bi" ## Bootstrap Icons https://icons.getbootstrap.com/

links:
  - label: "Portfolio"
    url: [ 'https://', *github_user, '.github.io/']
    icon: "bi-link"
  - label: "X"
    icon: "bi-twitter-x"
    url: "https://x.com/bamr87"
  - label: "GitHub"
    icon: "bi-github"
    url: [ 'https://github.com/' , *github_user ]
  - label: "Instagram"
    icon: "bi-instagram"
    url: "https://instagram.com/bamr42"

youtube:
  - label: "YouTube"
    icon: "bi-youtube"
    url: "https://www.youtube.com/channel/UCO0j3Opg3J9i2iWnDwHUsXQ"

## Build Framework ##############################################################

powered_by:
  - name: "Ruby"
    version: "3.3"
    url: "https://www.ruby-lang.org/"
    icon: "bi-gem"
  - name: "Jekyll"
    version: "3.10"
    url: "https://jekyllrb.com/"
    icon: "bi-joystick"
  - name: "Bootstrap"
    version: "5.3.3"
    url: "https://getbootstrap.com/"
    icon: "bi-bootstrap"
  - name: "MathJax"
    url: "https://www.mathjax.org/"
    icon: "bi-calculator"
  - name: "GitHub Pages"
    version: "232"
    url: "https://pages.github.com/"
    icon: "bi-github"
  - name: "Docker"
    url: "https://www.docker.com/"
    icon: "bi-docker"

### Plugins  #####################################################################

# https://docs.github.com/en/pages/setting-up-a-github-pages-site-with-jekyll/about-github-pages-and-jekyll#plugins
# http://jekyllrb.com/docs/plugins/

# All plugins are enabled by default for GitHub Pages. https://pages.github.com/versions/

plugins:
  - github-pages
  - jekyll-remote-theme
  - jekyll-feed
  - jekyll-sitemap
  - jekyll-seo-tag
  - jekyll-paginate
  - jekyll-relative-links
  # jekyll-redirect-from is on the GitHub Pages whitelist and powers Obsidian
  # `aliases:` → URL redirects (see pages/_docs/obsidian/syntax-reference.md).
  - jekyll-redirect-from
  # jekyll-include-cache (on the GitHub Pages whitelist) provides the
  # {% include_cached %} tag used by setup-banner.html and other includes to
  # collapse per-page renders of stable content into a single cached render.
  - jekyll-include-cache
  # Note: jekyll-mermaid is NOT in GitHub Pages whitelist - it only provides {% mermaid %} Liquid tag
  # Mermaid diagrams work without this plugin via client-side JavaScript (see _includes/components/mermaid.html)
  - jekyll-mermaid

# Project resource links (used by landing page and includes)
resources:
  github_repo: [ 'https://github.com/', *github_user, '/', *github_repository ]
  github_fork: [ 'https://github.com/', *github_user, '/', *github_repository, '/fork' ]
  contributing: [ 'https://github.com/', *github_user, '/', *github_repository, '/blob/', *branch, '/CONTRIBUTING.md' ]
  rubygems:
    name: *gem
    url: [ 'https://rubygems.org/gems/', *gem ]
  docker:
    image: [ *github_user, '/', *github_repository ]
    hub_url: [ 'https://hub.docker.com/r/', *github_user, '/', *github_repository ]

## Giscus Comments (GitHub Discussions) #########################################
# Powered by https://giscus.app/ — comments are stored as GitHub Discussions.
# The theme reads exactly three keys: enabled, data-repo-id, data-category-id.
# data-repo is filled automatically from `repository` above.
# Docs: pages/_docs/features/giscus-comments.md
# NOTE: the key MUST be `giscus` — layouts/includes read `site.giscus.*`.

giscus:
  enabled: true
  # IDs below belong to bamr87/zer0-mistakes (Announcements category).
  # Regenerate for a fork at https://giscus.app/ or run:
  #   ./scripts/bin/giscus-discussions categories
  data-repo-id: "R_kgDOMFgJHQ"
  data-category-id: "DIC_kwDOMFgJHc4C52bX"

## Mermaid Diagram Configuration #################################################
# Mermaid diagrams support both native markdown code blocks and div syntax
# Usage: 
#   1. Add 'mermaid: true' to page front matter
#   2. Use ```mermaid ... ``` code blocks OR <div class="mermaid">...</div>
# 
# GitHub Pages Compatible: Yes (client-side; script bundled under assets/vendor/)
# Update file: npm install && npm run vendor:mermaid (copies from node_modules/mermaid, not jsDelivr)
# Plugin: jekyll-mermaid is OPTIONAL (not needed for GitHub Pages)
# Documentation: https://mermaid.js.org/

mermaid:
  src: '/assets/vendor/mermaid/mermaid.min.js'

## Conversion
# Markdown Options https://jekyllrb.com/docs/configuration/markdown/
# https://github.com/github/jekyll-commonmark-ghpages

markdown: kramdown
# highlighter: rouge
# lsi: false
# excerpt_separator: "\n\n"
# incremental: false

# Markdown Processing https://jekyllrb.com/docs/configuration/markdown/
kramdown: # https://kramdown.gettalong.org/options.html
  input: GFM
  header_offset: 0
  # hard_wrap: false
  # auto_ids: true
  # footnote_nr: 1
  # entity_output: as_char
  toc_levels: 1..6
  # smart_quotes: lsquo,rsquo,ldquo,rdquo
  # enable_coderay: false

# Collections: https://jekyllrb.com/docs/collections/
  # Permalinks: https://jekyllrb.com/docs/permalinks/

collections_dir: &collections_dir pages
local_repo_path: [ *collections_dir, '/', *local_repo ]

# Collection metadata used by the sidebar's "collection" mode:
#   title   — heading shown above the collection tree (default: label)
#   icon    — Bootstrap Icons class for the heading
#   sidebar — per-collection sidebar defaults, e.g.
#             sidebar: { nav: collection, title: "Guides" }
#             (page front matter still wins; see sidebar-config.html)
collections:
  pages:
    output: true
    permalink: /:collection/:name/
  posts:
    output: true
    permalink: /:collection/:year/:month/:day/:slug/
  docs:
    output: true
    title: Documentation
    icon: bi-journal-text
    permalink: /:collection/:categories/:name/
  quests:
    output: true
    permalink: /:collection/:categories/:name/
  hobbies:
    output: true
    permalink: /:collection/:categories/:name/
  notebooks:
    output: true
    title: Notebooks
    icon: bi-journal-code
    permalink: /:collection/:path/:name/
  notes:
    output: true
    title: Notes
    icon: bi-journal-richtext
    permalink: /:collection/:path/:name/
  quickstart:
    output: true
    title: Quick Start
    icon: bi-rocket-takeoff
    permalink: /:collection/:name/
  about:
    output: true
    title: About
    icon: bi-person-badge
    permalink: /:collection/:categories/:name/

permalink: pretty

#  pagination https://jekyllrb.com/docs/pagination/

paginate: 10
paginate_path: "/pages/:num/"

# Defaults https://jekyllrb.com/docs/configuration/front-matter-defaults/

defaults:
  # ALL
  # No sidebar nav here on purpose: root-level pages (landing README, 404)
  # use layouts without the #bdSidebar panel, so a resolvable site-wide nav
  # would put a dead toggle in their navbar. Collections opt in below.
  -
    scope:
      path: ""
    values:
      layout: root
      author_profile: false
      read_time: true
      comments: false # true
      share: true
      related: true
    permalink: /:collection/:name/

  # pages
  - 
    scope:
      path: pages
    values:
      layout: &pages default
      author_profile: true
      read_time: true
      comments: # true
      share: true
      related: true
      toc_sticky: true
      sidebar:
        nav: categories
    permalink: /:path/:name/

  # pages/_about
  - 
    scope:
      path: pages/_about
    values:
      layout: *pages
      collection: about
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_quickstart
  - 
    scope:
      path: pages/_quickstart
    values:
      layout: default
      collection: quickstart
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_posts
  - 
    scope:
      path: pages/_posts
    values:
      layout: article
      post_type: standard
      index: false
      sidebar: true
      author_profile: true
      read_time: true
      comments: true # blog posts show Giscus comments (override per-page with `comments: false`)
      share: true
      related: true
      # permalink: /:collection/:name/

  # pages/_docs
  - 
    scope:
      path: pages/_docs
    values:
      layout: *pages
      # category: docs
      author_profile: true
      read_time: true
      sidebar:
        nav: auto
      comments: # true
      share: true
      related: true
    # permalink: /docs/:category/:name/

  # pages/_notes
  - 
    scope:
      path: pages/_notes
      type: notes
    values:
      layout: note
      collection: notes
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
      sidebar:
        nav: auto

  # pages/_notebooks
  - 
    scope:
      path: pages/_notebooks
      type: notebooks
    values:
      layout: notebook
      collection: notebooks
      author_profile: true
      read_time: true
      comments: true
      share: true
      related: true
      jupyter_metadata: true
      sidebar:
        nav: auto

# Exclude from processing.
# The following items will not be processed, by default.
# Any item listed under the `exclude:` key here will be automatically added to
# the internal "default list".
#
# Excluded items can be processed by explicitly listing the directories or
# their entries' file path in the `include:` list.
#
# NOTE: When _config_dev.yml is layered on top (--config _config.yml,_config_dev.yml),
# the dev file MUST repeat this full list — Jekyll replaces, not merges, the exclude key.

exclude:
  # ── Jekyll cache ─────────────────────────────────────────────────────────
  - .sass-cache/
  - .jekyll-cache/

  # ── Obsidian vault working files ─────────────────────────────────────────
  - .obsidian/
  - "*.canvas"
  - "*.excalidraw.md"

  # ── IDE / editor config (dot-prefix dirs hidden by default; listed for clarity) ─
  - .cursor/
  - .devcontainer/
  - .frontmatter/
  - .github/
  - .vscode/

  # ── Ruby / Bundler ────────────────────────────────────────────────────────
  - Gemfile
  - Gemfile.lock
  - gemfiles/
  - jekyll-theme-zer0.gemspec
  - lib/
  - pkg/
  - vendor/bundle/
  - vendor/cache/
  - vendor/gems/
  - vendor/ruby/

  # ── Node.js ───────────────────────────────────────────────────────────────
  - node_modules/
  - package.json
  - package-lock.json

  # ── Shell scripts and automation ──────────────────────────────────────────
  - scripts/
  - "*.sh"

  # ── Docker configuration ──────────────────────────────────────────────────
  - docker/
  - docker-compose.yml
  - docker-compose.test.yml

  # ── Build / task runners ──────────────────────────────────────────────────
  - Makefile
  - Rakefile

  # ── Project tooling metadata ──────────────────────────────────────────────
  - AGENTS.md
  - docs/
  - frontmatter.json
  - logs/
  - templates/
  - vendor-manifest.json
  - "*.code-workspace"

  # ── Submodules, tests, and authoring scaffolding ──────────────────────────
  - submodules/
  - test/
  - tests/
  - MERMAID-*.md
  - MERMAID-*/
  - pages/_notes/_templates/

# Sass/SCSS
# Production default: minified output, no sourcemaps. main.css is render-blocking
# on every page, so we ship it compressed (~182KB expanded -> ~140KB minified)
# and skip the .css.map files. _config_dev.yml overrides this back to expanded +
# sourcemaps for local debugging.
sass:
  sass_dir: _sass
  style: compressed
  sourcemap: never

#  TODO: Fix bootstrap plugin
  # load_paths:
  #   - /usr/local/bundle/gems/bootstrap-5.3.3/assets/stylesheets


## Style Settings -------------------------------------------------------------

# theme                  : "zer0-mistakes-jekyll"
# remote_theme           : "bamr87/zer0-mistakes"
theme_skin               : "air" # "air", "aqua", "dirt", "neon", "mint", "plum", "sunrise"

# SVG background layers (fffuel.co style) — gradient, pattern, noise per skin
theme_background:
  enabled: true           # Master toggle for SVG backgrounds
  gradient_opacity: 0.6   # Hero/header gradient layer opacity
  texture_opacity: 0.04   # Body noise texture overlay opacity
  pattern_opacity: 0.08   # Surface/card pattern overlay opacity
  blend_mode: overlay     # CSS mix-blend-mode for all layers

# style                  : "default" # "default", "dark", "light", "solarized-dark", "solarized-light"
# remote_style           : "bamr87/zer0-mistakes"

# NOTE: Hex codes MUST be quoted — unquoted `#007bff` is parsed as a YAML
# comment and the key resolves to null. These values feed
# [redacted]
theme_color:
  main:         "#007bff"
  secondary:    "#6c757d"
  red:          "#a11111"
  yellow:       "#ffe900"
  teal:         "#376986"
  blue:         "#007bff"
  green:        "#28a745"
  purple:       "#6f42c1"
  pink:         "#e83e8c"
  orange:       "#fd7e14"
  brown:        "#795548"
  cyan:         "#17a2b8"
  indigo:       "#6610f2"
  lime:         "#cddc39"
  amber:        "#ffc107"
  deep_orange:  "#ff5722"
  deep_purple:  "#673ab7"
  light_blue:   "#03a9f4"
  light_green:  "#8bc34a"
  light_purple: "#9c27b0"
  light_red:    "#f44336"
  light_yellow: "#ffeb3b"
  light_teal:   "#009688"

## Copyright Settings --------------------------------------------------------------

cr_year: 2024
cr_entity: *name
cr_lisense: "MIT"

## Sitemap Settings --------------------------------------------------------------

# sitemap_include: A list of file extensions that should be included in the sitemap. By default, HTML files and any files with sitemap: true in their front matter are included.
# sitemap_exclude: A list of files or directories that should be excluded from the sitemap.

sitemap_include: ["html", "xml"]
# [redacted]