Full Code of thegeeklab/hugo-geekdoc for AI

main f0794c7aadbe cached
206 files
267.4 KB
81.6k tokens
22 symbols
1 requests
Download .txt
Showing preview only (314K chars total). Download the full file or copy to clipboard to get everything.
Repository: thegeeklab/hugo-geekdoc
Branch: main
Commit: f0794c7aadbe
Files: 206
Total size: 267.4 KB

Directory structure:
gitextract_qte0gx_s/

├── .cspell.json
├── .github/
│   └── settings.yaml
├── .gitignore
├── .gitsv/
│   └── config.yaml
├── .htmlvalidate.json
├── .jsbeautifyrc
├── .lighthouserc.yaml
├── .lycheeignore
├── .markdownlint.yaml
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── .tarignore
├── .woodpecker/
│   ├── build-package.yaml
│   ├── docs.yaml
│   └── static.yaml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── archetypes/
│   ├── docs.md
│   └── posts.md
├── assets/
│   └── search/
│       ├── config.json
│       └── data.json
├── eslint.config.js
├── exampleSite/
│   ├── config/
│   │   └── _default/
│   │       ├── hugo.yaml
│   │       ├── languages.yaml
│   │       └── params.yaml
│   ├── content/
│   │   └── en/
│   │       ├── _includes/
│   │       │   ├── _index.md
│   │       │   └── include-page.md
│   │       ├── _index.md
│   │       ├── asciidoc/
│   │       │   ├── admonition-icons.adoc
│   │       │   └── admonitions.adoc
│   │       ├── collapse/
│   │       │   ├── _index.md
│   │       │   ├── level-1/
│   │       │   │   ├── _index.md
│   │       │   │   ├── level-1-1.md
│   │       │   │   └── level-1-2.md
│   │       │   └── level-2/
│   │       │       ├── _index.md
│   │       │       ├── level-2-1.md
│   │       │       └── level-2-2.md
│   │       ├── features/
│   │       │   ├── _index.md
│   │       │   ├── code-blocks.md
│   │       │   ├── dark-mode/
│   │       │   │   └── _index.md
│   │       │   ├── icon-sets.md
│   │       │   ├── multilingual/
│   │       │   │   └── _index.md
│   │       │   └── theming/
│   │       │       └── _index.md
│   │       ├── posts/
│   │       │   ├── _index.md
│   │       │   ├── hello_geekdoc.md
│   │       │   └── initial-release.md
│   │       ├── shortcodes/
│   │       │   ├── _index.md
│   │       │   ├── audio/
│   │       │   │   └── _index.md
│   │       │   ├── avatar/
│   │       │   │   └── _index.md
│   │       │   ├── buttons.md
│   │       │   ├── columns.md
│   │       │   ├── expand.md
│   │       │   ├── hints.md
│   │       │   ├── icons.md
│   │       │   ├── images/
│   │       │   │   └── _index.md
│   │       │   ├── includes.md
│   │       │   ├── katex.md
│   │       │   ├── mermaid.md
│   │       │   ├── progress.md
│   │       │   ├── propertylist.md
│   │       │   ├── tabs.md
│   │       │   ├── toc-tree.md
│   │       │   └── toc.md
│   │       ├── toc-tree/
│   │       │   ├── _index.md
│   │       │   ├── level-1/
│   │       │   │   ├── _index.md
│   │       │   │   ├── level-1-1.md
│   │       │   │   ├── level-1-2.md
│   │       │   │   └── level-1-3/
│   │       │   │       ├── _index.md
│   │       │   │       └── level-1-3-1.md
│   │       │   └── level-2/
│   │       │       ├── _index.md
│   │       │       ├── level-2-1.md
│   │       │       └── level-2-2.md
│   │       └── usage/
│   │           ├── _index.md
│   │           ├── configuration.md
│   │           ├── customization.md
│   │           ├── getting-started.md
│   │           └── menus.md
│   ├── data/
│   │   ├── menu/
│   │   │   ├── extra.yaml
│   │   │   ├── main.yaml
│   │   │   └── more.yaml
│   │   └── properties/
│   │       ├── demo.yaml
│   │       ├── shortcode-audio.yaml
│   │       ├── shortcode-avatar.yaml
│   │       ├── shortcode-buttons.yaml
│   │       ├── shortcode-columns.yaml
│   │       ├── shortcode-hints.yaml
│   │       ├── shortcode-images.yaml
│   │       ├── shortcode-includes.yaml
│   │       ├── shortcode-katex.yaml
│   │       ├── shortcode-mermaid.yaml
│   │       ├── shortcode-progress.yaml
│   │       ├── shortcode-propertylist.yaml
│   │       ├── shortcode-toc-tree.yaml
│   │       └── shortcode-toc.yaml
│   ├── layouts/
│   │   └── shortcodes/
│   │       └── sprites.html
│   └── static/
│       ├── .htaccess
│       ├── _includes/
│       │   ├── example.html.part
│       │   └── example.md.part
│       ├── custom.css
│       └── custom.css.example
├── i18n/
│   ├── am.yaml
│   ├── cs.yaml
│   ├── da.yaml
│   ├── de.yaml
│   ├── en.yaml
│   ├── es.yaml
│   ├── fr.yaml
│   ├── it.yaml
│   ├── ja.yaml
│   ├── nl.yaml
│   ├── oc.yaml
│   └── zh-cn.yaml
├── layouts/
│   ├── 404.html
│   ├── _default/
│   │   ├── _markup/
│   │   │   ├── render-codeblock-mermaid.html
│   │   │   ├── render-heading.html
│   │   │   ├── render-image.html
│   │   │   └── render-link.html
│   │   ├── baseof.html
│   │   ├── list.html
│   │   ├── single.html
│   │   ├── taxonomy.html
│   │   └── terms.html
│   ├── partials/
│   │   ├── foot.html
│   │   ├── head/
│   │   │   ├── custom.html
│   │   │   ├── favicons.html
│   │   │   ├── meta.html
│   │   │   ├── microformats.html
│   │   │   ├── others.html
│   │   │   └── rel-me.html
│   │   ├── language.html
│   │   ├── menu-bundle-np.html
│   │   ├── menu-bundle.html
│   │   ├── menu-extra.html
│   │   ├── menu-filetree-np.html
│   │   ├── menu-filetree.html
│   │   ├── menu.html
│   │   ├── microformats/
│   │   │   ├── opengraph.html
│   │   │   ├── schema.html
│   │   │   └── twitter_cards.html
│   │   ├── page-header.html
│   │   ├── page-metadata.html
│   │   ├── pagination.html
│   │   ├── posts/
│   │   │   └── metadata.html
│   │   ├── search.html
│   │   ├── site-footer.html
│   │   ├── site-header.html
│   │   ├── svg-icon-symbols.html
│   │   └── utils/
│   │       ├── content.html
│   │       ├── description.html
│   │       ├── featured.html
│   │       └── title.html
│   ├── posts/
│   │   ├── list.html
│   │   └── single.html
│   ├── robots.txt
│   └── shortcodes/
│       ├── audio.html
│       ├── avatar.html
│       ├── button.html
│       ├── columns.html
│       ├── expand.html
│       ├── gist.html
│       ├── hint.html
│       ├── icon.html
│       ├── img.html
│       ├── include.html
│       ├── katex.html
│       ├── mermaid.html
│       ├── progress.html
│       ├── propertylist.html
│       ├── tab.html
│       ├── tabs.html
│       ├── toc-tree.html
│       └── toc.html
├── package.json
├── renovate.json
├── src/
│   ├── js/
│   │   ├── accessibility.js
│   │   ├── colorTheme.js
│   │   ├── config.js
│   │   ├── index.js
│   │   ├── katex.js
│   │   ├── mermaid.js
│   │   └── search.js
│   ├── sass/
│   │   ├── _asciidoc.scss
│   │   ├── _base.scss
│   │   ├── _chroma_base.scss
│   │   ├── _chroma_dark.scss
│   │   ├── _chroma_light.scss
│   │   ├── _color_mode.scss
│   │   ├── _defaults.scss
│   │   ├── _fonts.scss
│   │   ├── _markdown.scss
│   │   ├── _mobile.scss
│   │   ├── _normalize.css
│   │   ├── _print.scss
│   │   ├── _shortcodes.scss
│   │   ├── _utils.scss
│   │   ├── main.scss
│   │   ├── mobile.scss
│   │   └── print.scss
│   └── static/
│       └── custom.css
├── svgsprite.config.json
├── theme.toml
├── webpack.config.js
└── webpack.plugins.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .cspell.json
================================================
{
  "version": "0.2",
  "language": "en",
  "dictionaries": ["en_us", "softwareTerms", "companies", "bash", "html", "css", "typescript"],
  "words": [
    "geekdoc",
    "katex",
    "flexsearch",
    "pygments",
    "Geekdocs",
    "goldmark",
    "THEMEDIR",
    "gohugo",
    "canonify",
    "codecopy",
    "lstore",
    "lntable",
    "lastmod",
    "Preproc",
    "lntd",
    "Emph",
    "anchorwrap",
    "languagecode",
    "relref",
    "linenos",
    "admonitionblock",
    "uuidv4",
    "cfworker",
    "readmore",
    "editpage",
    "codecontainer",
    "necolas",
    "Shpak",
    "Kaussow"
  ],
  "ignorePaths": [
    ".woodpecker",
    ".cspell.json",
    ".git",
    ".gitignore",
    ".vscode",
    "*.svg",
    "renovate.json",
    "package.json",
    ".lighthouserc.yaml",
    "config.yaml",
    "hugo.yaml",
    "webpack.config.js",
    "theme.toml",
    "svgsprite.config.json",
    "i18n/*"
  ],

  "ignoreRegExpList": ["&\\S+;", "{{.+}}"]
}


================================================
FILE: .github/settings.yaml
================================================
repository:
  name: hugo-geekdoc
  description: Hugo theme made for documentation
  homepage: https://geekdocs.de
  topics: hugo, theme, hugo-theme, documentation

  private: false
  has_issues: true
  has_projects: false
  has_wiki: false
  has_downloads: true

  default_branch: main

  allow_squash_merge: true
  allow_merge_commit: true
  allow_rebase_merge: true

labels:
  - name: bug
    color: d73a4a
    description: Something isn't working
  - name: documentation
    color: 0075ca
    description: Improvements or additions to documentation
  - name: duplicate
    color: cfd3d7
    description: This issue or pull request already exists
  - name: enhancement
    color: a2eeef
    description: New feature or request
  - name: good first issue
    color: 7057ff
    description: Good for newcomers
  - name: help wanted
    color: 008672
    description: Extra attention is needed
  - name: invalid
    color: e4e669
    description: This doesn't seem right
  - name: question
    color: d876e3
    description: Further information is requested
  - name: wontfix
    color: ffffff
    description: This will not be worked on

branches:
  - name: main
    protection:
      required_pull_request_reviews: null
      required_status_checks:
        strict: false
        contexts:
          - ci/woodpecker/pr/static
          - ci/woodpecker/pr/build-package
          - ci/woodpecker/pr/docs
      enforce_admins: false
      required_linear_history: true
      restrictions: null


================================================
FILE: .gitignore
================================================
# local environments
.swp
.env*
/dist/
/build/
/node_modules/
/lhci_reports/
/exampleSite/themes/
/exampleSite/public/
/exampleSite/config/development/
CHANGELOG.md
VERSION

# translation envs
exampleSite/content/de

# auto-generated files
/data/
/static/
/assets/sprites/
/resources/
/exampleSite/resources/
/exampleSite/data/sprites/
VERSION

# hugo
.hugo_build.lock

# testing
.lighthouseci/


================================================
FILE: .gitsv/config.yaml
================================================
---
version: "1.1"

versioning:
  update-major: []
  update-minor: [feat]
  update-patch: [fix, perf, refactor, chore, test, ci, docs]

tag:
  pattern: "v%d.%d.%d"

release-notes:
  sections:
    - name: Features
      commit-types: [feat]
      section-type: commits
    - name: Bug Fixes
      commit-types: [fix]
      section-type: commits
    - name: Performance Improvements
      commit-types: [perf]
      section-type: commits
    - name: Code Refactoring
      commit-types: [refactor]
      section-type: commits
    - name: Others
      commit-types: [chore]
      section-type: commits
    - name: Testing
      commit-types: [test]
      section-type: commits
    - name: CI Pipeline
      commit-types: [ci]
      section-type: commits
    - name: Documentation
      commit-types: [docs]
      section-type: commits
    - name: BREAKING CHANGES
      section-type: breaking-changes

commit-message:
  footer:
    issue:
      key: issue
      add-value-prefix: "#"
  issue:
    regex: "#?[0-9]+"


================================================
FILE: .htmlvalidate.json
================================================
{
  "extends": ["html-validate:standard"],
  "rules": {
    "element-required-content": "off",
    "element-permitted-content": "off",
    "no-raw-characters": "off",
    "attribute-misuse": "warn"
  }
}


================================================
FILE: .jsbeautifyrc
================================================
{
    "indent_size": 4,
    "indent_char": " ",
    "preserve_newlines": false,
    "unformatted": ["svg"],
    "content_unformatted": ["pre"],
    "extra_liners": ["head", "body", "html", "main", "header", "footer", "section"]
}


================================================
FILE: .lighthouserc.yaml
================================================
---
ci:
  collect:
    numberOfRuns: 3
    staticDistDir: exampleSite/public
    url:
      - http://localhost/
      - http://localhost/404.html
      - http://localhost/usage/getting-started/
    settings:
      chromeFlags: "--no-sandbox --headless --disable-dev-shm-usage"
      onlyCategories: ["performance", "accessibility", "best-practices", "seo"]
      skipAudits:
        [
          "color-contrast",
          "uses-long-cache-ttl",
          "csp-xss",
          "bf-cache",
          "is-crawlable",
          "image-size-responsive",
          "render-blocking-resources",
          "largest-contentful-paint",
          "unused-css-rules",
          "network-dependency-tree-insight",
          "legacy-javascript",
          "errors-in-console",
          "max-potential-fid",
          "interactive",
          "dom-size",
          "forced-reflow-insight",
          "unused-javascript",
          "cls-culprits-insight",
          "cache-insight",
          "render-blocking-insight"
        ]
  assert:
    preset: "lighthouse:no-pwa"
    assertions:
      color-contrast: off
      uses-long-cache-ttl: off
      csp-xss: off
      # FIXME: https://github.com/GoogleChrome/lighthouse/issues/14957
      bf-cache: off
      is-crawlable: off
      image-size-responsive: off
      render-blocking-resources: off
      largest-contentful-paint: off
      unused-css-rules: off
      network-dependency-tree-insight: off
      cls-culprits-insight: off
      cache-insight: off
      render-blocking-insight: off
      legacy-javascript: off
      errors-in-console: off
      max-potential-fid: off
      interactive: off
      dom-size: off
      forced-reflow-insight: off
      unused-javascript: off
      total-byte-weight: warn
      identical-links-same-purpose: warn
      tap-targets: off
      unsized-images: warn
      # FIXME: https://github.com/GoogleChrome/lighthouse/issues/11460
      categories:performance:
        - warn
        - minScore: 0.95
      categories:accessibility:
        - error
        - minScore: 1
      categories:seo:
        - error
        - minScore: 0.95
  upload:
    target: filesystem
    outputDir: lhci_reports


================================================
FILE: .lycheeignore
================================================
https://github.com/thegeeklab/.+/edit/main/.*
https://unsplash.com.*
https://www.color-hex.com.*
https://geekdocs.de/


================================================
FILE: .markdownlint.yaml
================================================
---
default: True
MD013: False
MD041: False
MD042: False
MD004:
  style: dash
MD010:
  code_blocks: False


================================================
FILE: .npmrc
================================================
loglevel=error
fund=false
engine-strict=true


================================================
FILE: .nvmrc
================================================
lts/*


================================================
FILE: .prettierignore
================================================
_normalize.css
list.json.json
/.lighthouseci/
/themes/
/static/js/
/src/favicon/
LICENSE
**/*.html


================================================
FILE: .prettierrc
================================================
{
  "printWidth": 99,
  "singleQuote": false,
  "semi": false,
  "trailingComma": "none"
}


================================================
FILE: .tarignore
================================================
.envrc
.nvmrc
.npmrc
.tarignore
.git*
.woodpecker*
.lighthouse*
.markdownlint*
.jsbeautify*
.prettier*
.htmlvalidate*
.lycheeignore*
.cspell*
eslint*
example*
webpack*
svgsprite*
package*
node*
local*
dist
src
build
renovate*
resources
CONTRIBUTING.md


================================================
FILE: .woodpecker/build-package.yaml
================================================
---
when:
  - event: [pull_request, tag]
  - event: [push, manual]
    branch:
      - ${CI_REPO_DEFAULT_BRANCH}

steps:
  - name: assets
    image: docker.io/library/node:lts
    commands:
      - npm install --quiet --no-progress
      - npm run build
      - cat VERSION
    environment:
      FORCE_COLOR: "true"

  - name: package
    image: docker.io/library/node:lts
    commands:
      - npm run pack
    environment:
      FORCE_COLOR: "true"

  - name: checksum
    image: quay.io/thegeeklab/alpine-tools
    commands:
      - cd dist/ && sha256sum * > ../sha256sum.txt

  - name: changelog
    image: quay.io/thegeeklab/git-sv
    commands:
      - git sv current-version
      - git sv release-notes -t ${CI_COMMIT_TAG:-next} -o CHANGELOG.md
      - cat CHANGELOG.md

  - name: publish-github
    image: docker.io/plugins/github-release
    settings:
      api_key:
        from_secret: github_token
      files:
        - dist/*
        - sha256sum.txt
      note: CHANGELOG.md
      overwrite: true
      title: ${CI_COMMIT_TAG}
    when:
      - event: [tag]

depends_on:
  - static


================================================
FILE: .woodpecker/docs.yaml
================================================
---
when:
  - event: [pull_request, tag]
  - event: [push, manual]
    branch:
      - ${CI_REPO_DEFAULT_BRANCH}

steps:
  - name: assets
    image: docker.io/library/node:lts
    commands:
      - npm install --quiet --no-progress
      - npm run svg-sprite-list
      - mkdir -p exampleSite/themes/${CI_REPO_NAME}
      - curl -sSL https://github.com/${CI_REPO}/releases/latest/download/${CI_REPO_NAME}.tar.gz | tar -xz -C exampleSite/themes/${CI_REPO_NAME}/ --strip-components=1
    when:
      - event: [tag]
      - event: [push, manual]
        branch:
          - ${CI_REPO_DEFAULT_BRANCH}

  - name: assets-main
    image: docker.io/library/node:lts
    commands:
      - npm install --quiet --no-progress
      - npm run build
      - npm run svg-sprite-list
      - mkdir -p exampleSite/themes/ && ln -s $(pwd)/ exampleSite/themes/${CI_REPO_NAME}
    environment:
      FORCE_COLOR: "true"
    when:
      - event: [pull_request]

  - name: build
    image: quay.io/thegeeklab/hugo:0.160
    commands:
      - hugo --panicOnWarning -s exampleSite/

  - name: beautify
    image: quay.io/thegeeklab/alpine-tools
    commands:
      - html-beautify -r -f 'exampleSite/public/**/*.html'
    environment:
      FORCE_COLOR: "true"

  - name: publish
    image: quay.io/thegeeklab/wp-s3-action
    settings:
      access_key:
        from_secret: s3_access_key
      bucket: geekdocs-root
      delete: true
      endpoint:
        from_secret: s3_endpoint
      path_style: true
      secret_key:
        from_secret: s3_secret_access_key
      source: exampleSite/public/
      strip_prefix: exampleSite/public/
    when:
      - event: [tag]
      - event: [push, manual]
        branch:
          - ${CI_REPO_DEFAULT_BRANCH}
        status: [success, failure]

depends_on:
  - build-package


================================================
FILE: .woodpecker/static.yaml
================================================
---
when:
  - event: [pull_request, tag]
  - event: [push, manual]
    branch:
      - ${CI_REPO_DEFAULT_BRANCH}

steps:
  - name: eslint
    image: docker.io/library/node:lts
    depends_on: []
    commands:
      - npm install --quiet --no-progress
      - npm run lint:js
    environment:
      FORCE_COLOR: "true"

  - name: markdownlint
    image: quay.io/thegeeklab/markdownlint-cli
    depends_on: []
    commands:
      - markdownlint 'exampleSite/content/**/*.md' 'README.md' 'CONTRIBUTING.md'

  - name: spellcheck
    image: ghcr.io/streetsidesoftware/cspell
    depends_on: []
    commands:
      - cspell-cli lint . --gitignore --color

  - name: assets
    image: docker.io/library/node:lts
    depends_on: []
    commands:
      - npm install --quiet --no-progress
      - npm run build
    environment:
      FORCE_COLOR: "true"

  - name: testbuild
    image: quay.io/thegeeklab/hugo:0.160
    depends_on: [assets]
    commands:
      - mkdir -p exampleSite/themes/ && ln -s $(pwd)/ exampleSite/themes/${CI_REPO_NAME}
      - hugo --panicOnWarning -s exampleSite/

  - name: link-validation
    image: docker.io/lycheeverse/lychee:0.23
    depends_on: [testbuild]
    commands:
      - lychee --no-progress --format detailed README.md
      - lychee --no-progress --format detailed --root-dir "$(pwd)/exampleSite/public" "exampleSite/public/**/*.html"
    environment:
      GITHUB_TOKEN:
        from_secret: github_token_ro

  - name: html-validation
    image: docker.io/library/node:lts
    depends_on: [testbuild]
    commands:
      - npm install --quiet --no-progress
      - npm run lint:html
    environment:
      FORCE_COLOR: "true"

  - name: page-validation
    image: quay.io/thegeeklab/lhci:0.15
    depends_on: [testbuild]
    commands:
      - lhci autorun
    environment:
      LHCI_SERVER_URL: https://ci-artifact.rknet.org/${CI_REPO_NAME}/


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

## Security

If you think you have found a **security issue**, please do not mention it in this repository.
Instead, send an email to `security@thegeeklab.de` with as many details as possible so it can be handled confidential.

## Bug Reports and Feature Requests

If you have found a **bug** or have a **feature request** please use the search first to see if a similar issue already exists.
If not, please create an issue in this repository

## Code

If you would like to fix a bug or implement a feature, please fork the repository and create a Pull Request.

Before you start any Pull Request, it is recommended that you create an issue to discuss first if you have any
doubts about requirement or implementation. That way you can be sure that the maintainer(s) agree on what to change and how,
and you can hopefully get a quick merge afterwards.

Pull Requests can only be merged once all status checks are green.

## Do not force push to your Pull Request branch

Please do not force push to your Pull Requests branch after you have created your Pull Request, as doing so makes it harder for us to review your work.
Pull Requests will always be squashed by us when we merge your work. Commit as many times as you need in your Pull Request branch.

## Re-requesting a review

Please do not ping your reviewer(s) by mentioning them in a new comment. Instead, use the re-request review functionality.
Read more about this in the [GitHub docs, Re-requesting a review](https://docs.github.com/en/free-pro-team@latest/github/collaborating-with-issues-and-pull-requests/incorporating-feedback-in-your-pull-request#re-requesting-a-review).


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2022 Robert Kaussow <mail@thegeeklab.de>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice (including the next
paragraph) shall be included in all copies or substantial portions of the
Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: README.md
================================================
# Geekdoc

[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/hugo-geekdoc/status.svg)](https://ci.thegeeklab.de/repos/thegeeklab/hugo-geekdoc)
[![Hugo Version](https://img.shields.io/badge/hugo-0.156-blue.svg)](https://gohugo.io)
[![GitHub release](https://img.shields.io/github/v/release/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/releases/latest)
[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors)
[![License: MIT](https://img.shields.io/github/license/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE)

Geekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme and may not fit the requirements of complex projects. If a more feature-complete theme is required there are a lot of great alternatives out there. You can find a demo and the full documentation at [https://geekdocs.de](https://geekdocs.de).

![Desktop and mobile preview](https://raw.githubusercontent.com/thegeeklab/hugo-geekdoc/main/images/readme.png)

## Build and release process

This theme is subject to a CI driven build and release process common for software development. During the release build, all necessary assets are automatically built by [webpack](https://webpack.js.org/) and bundled in a release tarball. You can download the latest release from the GitHub [release page](https://github.com/thegeeklab/hugo-geekdoc/releases).

Due to the fact that `webpack` and `npm scripts` are used as pre-processors, the theme cannot be used from the main branch by default. If you want to use the theme from a cloned branch instead of a release tarball you'll need to install `webpack` locally and run the build script once to create all required assets.

```shell
# install required packages from package.json
npm install

# run the build script to build required assets
npm run build

# build release tarball
npm run pack
```

See the [Getting Started Guide](https://geekdocs.de/usage/getting-started/) for details about the different setup options.

## Contributors

Special thanks to all [contributors](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors). If you would like to contribute, please see the [instructions](https://github.com/thegeeklab/hugo-geekdoc/blob/main/CONTRIBUTING.md).

Geekdoc is inspired and partially based on the [hugo-book](https://github.com/alex-shpak/hugo-book) theme, thanks [Alex Shpak](https://github.com/alex-shpak/) for your work.

## License

This project is licensed under the MIT License - see the [LICENSE](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE) file for details.

The used SVG icons and generated icon fonts are licensed under the license of the respective icon pack:

- Font Awesome: [CC BY 4.0 License](https://github.com/FortAwesome/Font-Awesome#license)
- IcoMoon Free Pack: [GPL/CC BY 4.0](https://icomoon.io/#icons-icomoon)
- Material Icons: [Apache License 2.0](https://github.com/google/material-design-icons/blob/main/LICENSE)


================================================
FILE: archetypes/docs.md
================================================
---
title: "{{ .Name | humanize | title }}"
weight: 1
# geekdocFlatSection: false
# geekdocToc: 6
# geekdocHidden: false
---


================================================
FILE: archetypes/posts.md
================================================
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
---


================================================
FILE: assets/search/config.json
================================================
{{- $searchDataFile := printf "search/%s.data.json" .Language.Lang -}}
{{- $searchData := resources.Get "search/data.json" | resources.ExecuteAsTemplate $searchDataFile . | resources.Minify -}}
{
  "dataFile": {{ $searchData.RelPermalink | jsonify }},
  "indexConfig": {{ .Site.Params.geekdocSearchConfig | jsonify }},
  "showParent": {{ if .Site.Params.geekdocSearchShowParent }}true{{ else }}false{{ end }},
  "showDescription": {{ if .Site.Params.geekdocSearchShowDescription }}true{{ else }}false{{ end }}
}


================================================
FILE: assets/search/data.json
================================================
[
  {{ range $index, $page := (where .Site.Pages "Params.geekdocProtected" "ne" true) }}
    {{ if ne $index 0 }},{{ end }}
    {
      "id": {{ $index }},
      "href": "{{ $page.RelPermalink }}",
      "title": {{ (partial "utils/title" $page) | jsonify }},
      "parent": {{ with $page.Parent }}{{ (partial "utils/title" .) | jsonify }}{{ else }}""{{ end }},
      "content": {{ $page.Plain | jsonify }},
      "description": {{ $page.Summary | plainify | jsonify }}
    }
  {{ end }}
]


================================================
FILE: eslint.config.js
================================================
import eslint from "@eslint/js"
import globals from "globals"
import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"

export default [
  eslint.configs.recommended,
  {
    languageOptions: {
      globals: {
        ...globals.browser
      },
      ecmaVersion: "latest",
      sourceType: "module"
    },
    rules: {
      "no-var": "error",
      "prefer-const": "error",
      "prefer-arrow-callback": "error",
      "prefer-template": "error",
      "object-shorthand": "error",
      "no-loop-func": "error",
      "no-new-object": "error",
      "no-array-constructor": "error",
      "no-prototype-builtins": "error",
      "prefer-spread": "error",
      "prefer-rest-params": "error",
      "default-param-last": "error",
      "no-useless-constructor": "error",
      "no-duplicate-imports": "error",
      "prefer-destructuring": ["error", {
        "VariableDeclarator": {
          "array": true,
          "object": true
        },
        "AssignmentExpression": {
          "array": false,
          "object": false
        }
      }]
    }
  },
  eslintPluginPrettierRecommended
]


================================================
FILE: exampleSite/config/_default/hugo.yaml
================================================
---
baseURL: https://geekdocs.de/
title: Geekdocs
theme: hugo-geekdoc

pygmentsUseClasses: true
pygmentsCodeFences: true
timeout: "180000s"
pluralizeListTitles: false

defaultContentLanguage: en

disablePathToLower: true
enableGitInfo: true

enableRobotsTXT: true

markup:
  goldmark:
    renderer:
      unsafe: true
  tableOfContents:
    startLevel: 1
    endLevel: 9

taxonomies:
  tag: tags

outputs:
  home:
    - HTML
  page:
    - HTML
  section:
    - HTML
  taxonomy:
    - HTML
  term:
    - HTML

security:
  exec:
    allow:
      - "^git$"
      - "^asciidoctor$"


================================================
FILE: exampleSite/config/_default/languages.yaml
================================================
---
en:
  languageName: "English"
  contentDir: "content/en"
  weight: 10


================================================
FILE: exampleSite/config/_default/params.yaml
================================================
---
# cspell:ignore socialmedia2

description: >
  Geekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme
  and may not fit the requirements of complex projects. If a more feature-complete theme is required
  there are a lot of good alternatives out there.
images:
  - "socialmedia2.png"

geekdocToC: 3
geekdocTagsToMenu: true

geekdocRepo: https://github.com/thegeeklab/hugo-geekdoc
geekdocEditPath: edit/main/exampleSite
geekdocPageLastmod: false

geekdocSearch: true
geekdocSearchShowParent: true
geekdocSearchShowDescription: true

geekdocLegalNotice: https://thegeeklab.de/legal-notice/#contact-information
geekdocPrivacyPolicy: https://thegeeklab.de/legal-notice/#privacy-policy

geekdocImageLazyLoading: true
geekdocDarkModeDim: true


================================================
FILE: exampleSite/content/en/_includes/_index.md
================================================
---
geekdocHidden: true
---


================================================
FILE: exampleSite/content/en/_includes/include-page.md
================================================
_**Example page include**_

{{< hint type=note >}}
**Example Shortcode**\
Shortcode used in an include page.
{{< /hint >}}

| Head 1 | Head 2 | Head 3 |
| ------ | ------ | ------ |
| 1      | 2      | 3      |


================================================
FILE: exampleSite/content/en/_index.md
================================================
---
title: Welcome to the documentation
geekdocNav: false
geekdocAlign: center
geekdocAnchor: false
---

<!-- markdownlint-capture -->
<!-- markdownlint-disable MD033 -->

<span class="badge-placeholder">[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/hugo-geekdoc/status.svg)](https://ci.thegeeklab.de/repos/thegeeklab/hugo-geekdoc)</span>
<span class="badge-placeholder">[![Hugo Version](https://img.shields.io/badge/hugo-0.156-blue.svg)](https://gohugo.io)</span>
<span class="badge-placeholder">[![GitHub release](https://img.shields.io/github/v/release/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/releases/latest)</span>
<span class="badge-placeholder">[![GitHub contributors](https://img.shields.io/github/contributors/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/graphs/contributors)</span>
<span class="badge-placeholder">[![License: MIT](https://img.shields.io/github/license/thegeeklab/hugo-geekdoc)](https://github.com/thegeeklab/hugo-geekdoc/blob/main/LICENSE)</span>

<!-- markdownlint-restore -->

Geekdoc is a simple Hugo theme for documentations. It is intentionally designed as a fast and lean theme and may not fit the requirements of complex projects. If a more feature-complete theme is required there are a lot of great alternatives out there.

{{< button size="large" relref="usage/getting-started/" >}}Getting Started{{< /button >}}

## Feature overview

{{< columns >}}

### Clean and simple design

Stay focused on exploring the content and don't get overwhelmed by a complex design.

<--->

### Light and mobile-friendly

The theme is powered by less than 1 MB and looks impressive on mobile devices as well as on a regular Desktop.

<--->

### Easy customization

The look and feel can be easily customized by CSS custom properties (variables), features can be adjusted by Hugo parameters.

{{< /columns >}}

{{< columns >}}

### Zero initial configuration

Getting started in minutes. The theme is shipped with a default configuration and works out of the box.

<--->

### Handy shortcodes

We included some (hopefully) useful custom shortcodes so you don't have to and can focus on writing amazing docs.

<--->

### Dark mode

Powerful dark mode that detects your system preferences or can be controlled by a toggle switch.

{{< /columns >}}


================================================
FILE: exampleSite/content/en/asciidoc/admonition-icons.adoc
================================================
+++
title = "Admonition Icons"
+++

:icons: font

By default, the admonition is rendered with a plain text label. To enable font icons the document attribute `:icons: font` need to be set.

== Example

[NOTE]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[TIP]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[IMPORTANT]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[CAUTION]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[WARNING]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.


================================================
FILE: exampleSite/content/en/asciidoc/admonitions.adoc
================================================
+++
title = "Admonitions"
+++

// cspell:ignore toclevels

:toc:
:toclevels: 2

{{< toc >}}

== Admonition types

There are certain statements you may want to draw attention to by taking them out of the content's flow and labeling them with a priority. These are called admonitions.

```tpl
[NOTE|TIP|IMPORTANT|CAUTION|WARNING]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
```

=== Example

[NOTE]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[TIP]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[IMPORTANT]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[CAUTION]
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

[WARNING]
====
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

Romanesque acclimates investiture.
====

== Admonition icons

Icons can be added by setting a unicode glyph or a character reference to the `tip-caption` attribute:

```text
:tip-caption: 💡

[TIP]
It's possible to use Unicode glyphs as admonition icons.
```

```text
:tip-caption: pass:[&#128293;]

[TIP]
It's possible to use Unicode glyphs as admonition icons.
```

=== Example

:tip-caption: 💡

[TIP]
It's possible to use Unicode glyphs as admonition icons.


:tip-caption: pass:[&#128293;]

[TIP]
It's possible to use Unicode glyphs as admonition icons.


================================================
FILE: exampleSite/content/en/collapse/_index.md
================================================
---
title: Collapse
geekdocCollapseSection: true
---

Demo collapsible menu entries.


================================================
FILE: exampleSite/content/en/collapse/level-1/_index.md
================================================
Level 1

<!-- cspell:disable -->

{{< toc-tree >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/collapse/level-1/level-1-1.md
================================================
---
title: Level 1.1
---

Level 1.1


================================================
FILE: exampleSite/content/en/collapse/level-1/level-1-2.md
================================================
---
title: Level 1.2
---

Level 1.2


================================================
FILE: exampleSite/content/en/collapse/level-2/_index.md
================================================
---
geekdocCollapseSection: true
---

Level-2


================================================
FILE: exampleSite/content/en/collapse/level-2/level-2-1.md
================================================
---
title: Level 2.1
---

Level 2.1


================================================
FILE: exampleSite/content/en/collapse/level-2/level-2-2.md
================================================
---
title: Level 2.2
---

Level 2.2


================================================
FILE: exampleSite/content/en/features/_index.md
================================================
---
title: Features
weight: -15
---


================================================
FILE: exampleSite/content/en/features/code-blocks.md
================================================
---
title: Code Blocks
---

There are several ways to add code blocks. Most of them work out of the box, only the Hugo shortcode `<highlight>` needs to be configured to work properly. The theme also provides some additional features like a copy button and an option to set the maximum length of code blocks. Both of these functions and the dependent formatting rely on the `.highlight` CSS class. You must ensure that you always assign a language to your code blocks if you want to use these functions. If you do not want to apply syntax highlighting, you can also specify `plain` or `text` as the language.

{{< toc >}}

## Inline code

To display an inline shortcode use single quotes:

```plain
`some code`
```

**Example:** `some code` with a [`link`](#)

## Code blocks

Code blocks can be uses without language specification:

````markdown
```plain
some code
```
````

**Example:**

```plain
some code
```

... or if you need language specific syntax highlighting:

````markdown
```shell
# some code
echo "Hello world"
```
````

**Example:**

```shell
# some code
echo "Hello World"
```

## Highlight shortcode

Hugo has a build-in shortcode for syntax highlighting. To work properly with this theme, you have to set following options in your site configuration:

{{< tabs "uniqueid" >}}
{{< tab "TOML" >}}

```toml
pygmentsUseClasses=true
pygmentsCodeFences=true
```

{{< /tab >}}
{{< tab "YAML" >}}

```yaml
pygmentsUseClasses: true
pygmentsCodeFences: true
```

{{< /tab >}}
{{< /tabs >}}

You can use it like every other shortcode:

<!-- prettier-ignore -->
```markdown
{{</* highlight Shell "linenos=table" */>}}
# some code
echo "Hello World"
{{</* /highlight */>}}
```

**Example:**

<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
{{< highlight Shell "linenos=table" >}}
# some code
echo "Hello World"
{{< /highlight >}}
<!-- markdownlint-restore -->
<!-- prettier-ignore-end-->

## Gist Shortcode

The Gist shortcode is a built-in Hugo shortcode to load GitHub gists. For details usage information please check the Hugo [documentation](https://gohugo.io/content-management/shortcodes/#gist).

<!-- prettier-ignore -->
```markdown
{{</* gist spf13 7896402 */>}}
```

**Example:**

{{< gist spf13 7896402 >}}


================================================
FILE: exampleSite/content/en/features/dark-mode/_index.md
================================================
---
title: Dark Mode
---

Say hello to the dark mode of the Geekdoc theme!

[![Geekdoc in dark mode](images/geekdoc-dark.png)](images/geekdoc-dark.png)

The dark mode can be used in two different ways. If you have JavaScript disabled in your browser, the dark mode automatically detects the preferred system settings via the `prefers-color-scheme` parameter. Depending on the value, the theme will automatically switch between dark and light mode if this feature is supported by your operating system and browser.

The second mode requires JavaScript and is controlled by a dark mode switch in the upper right corner. You can switch between three modes: Auto, Dark and Light. Auto mode works the same as the first method mentioned above and automatically detects the system setting. Dark and Light modes allow you to force one of them for your Geekdoc page only, regardless of the system setting. This works even if your browser or operating system does not support the system setting. The current selection is stored locally via the Web Storage API.

To avoid very bright spots often caused by images while using the dark mode we have added an optional auto-dim feature that can be enabled with the site parameter `geekdocDarkModeDim` (see [Configuration](/usage/configuration/)). As this may have an impact on the quality of the images it is disabled by default.


================================================
FILE: exampleSite/content/en/features/icon-sets.md
================================================
---
title: Icon Sets
# cSpell:ignore svgsprit.es
---

{{< toc >}}

## Custom icon sets

The only supported source for custom icons are SVG sprites. Some icon frameworks provides ready to use sprites e.g. FontAwesome. If the framework don't provide sprites, you can create your own from raw SVG icons. There are a lot of tools available to create sprites, please choose one that fits your need. One solution could be [svgsprit.es](https://svgsprit.es/).

Regardless of which tool (or existing sprite) you choose, there are a few requirements that must be met:

1. The sprite must be a valid **SVG** file.
2. You have to ensure to **hide the sprite**. Apply the predefined class `svg-sprite` or `hidden` to the root element of your sprite or add a small piece of inline CSS e.g. `style="display: none;"`.
3. Save the sprite to the folder `assets/sprites` right beside your `content` folder.

The result of a valid minimal SVG sprite file could look like this:

```xml
<svg class="svg-sprite" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <symbol viewBox="-2.29 -2.29 28.57 28.57" id="arrow_back" xmlns="http://www.w3.org/2000/svg">
        <path d="M24 10.526v2.947H5.755l8.351 8.421-2.105 2.105-12-12 12-12 2.105 2.105-8.351 8.421H24z"/>
    </symbol>
</svg>
```

**Example:**

FontAwesome provides three pre-build sprites included in the regular Web download pack, `sprites/brands.svg`, `sprites/regular.svg` and `sprites/solid.svg`. Choose your sprite to use and copy it to your project's root directory into `assets/sprites`, right beside your `content` folder:

```bash
my_project/
├── assets
│   └── sprites
│       └── regular.svg
├── hugo.toml
├── content
│   ├── _index.md
│   ├── ...
```

That's it! The theme will auto-load all available SVG sprites provided in the assets folder. To use the icons e.g. in the [bundle menu](/usage/menus/#bundle-menu), you need to lookup the id of the icon. An example would be `thumbs-up` {{< icon "thumbs-up" >}}. There is also a [shortcode](/shortcodes/icons/) available.

## Build-in icons

The theme bundles just a small set of hand crafted icons.

{{< sprites >}}


================================================
FILE: exampleSite/content/en/features/multilingual/_index.md
================================================
---
title: Multilingual
# cSpell:ignore Veröffentlichung
---

{{< toc >}}

Hugo supports the creation of websites with multiple languages. In this post we will explain how to get configure Multilingual Mode with this theme.

## Configuration

### Languages

You need to set a default language and configure at least two different languages used by your site to your configuration file at `hugo.toml`:

```toml
defaultContentLanguage = "en"

[languages.en]
languageName = "English"
contentDir = "content/en"
weight = 10

[languages.de]
languageName = "German"
contentDir = "content/de"
weight = 20
```

### Translation Strings

To customize translation strings used by the theme you can create a file `i18n/<languagecode>.toml` for every language you want to use e.g. `i18n/en.toml`. You can lookup all used strings in the [default](https://github.com/thegeeklab/hugo-geekdoc/blob/main/i18n/en.yaml) translation file.

### Menus

For the [Bundle Menu](/usage/menus/#bundle-menu) as well as for the [Extra Header Menu](/usage/menus/#extra-header-menu) you can translate the name within the data file of the menu:

```yaml
---
more:
  # If `name` is a text, this text will be used as name for each language.
  - name: News
    ref: "/#"
    icon: "gdoc_notification"
  # To translate the name you can add a sub-item per language. Important: If you miss a language key
  # that is configured in the languages list of your `hugo.toml` the name will be empty for this language!
  - name:
      en: Releases
      de: Veröffentlichung
    ref: "https://github.com/thegeeklab/hugo-geekdoc/releases"
    external: true
    icon: "gdoc_download"
```

## Add Content

To translate your content you need to create a directory `content/<languagecode>/` for each language you want to use e.g. `content/en/`. This language directories will hold the translated pages for the particular language.

## Switch Content

If you have configured at least two different languages, the language switcher will be enabled in the UI automatically. The switcher is as part of the header menu and displayed on all pages.

{{< columns >}}

[![Beach Color Palette](images/translation-available.png)](images/translation-available.png)

On pages for which a translation is available it will be displayed in the selection list and links to the translated page.

<--->

[![Beach Color Palette](images/translation-not-available.png)](images/translation-not-available.png)

Pages without a translation will be displayed in the selection list as well but are marked with an asterisk and link to the start page of the respective language.

{{< /columns >}}


================================================
FILE: exampleSite/content/en/features/theming/_index.md
================================================
---
title: Theming
# cspell:ignore msapplication
---

{{< toc >}}

## Color Scheme

If you want to customize the theme's color scheme to give it your individual touch, you are only a few lines of CSS away. Generally, you need to override the default settings. The easiest way to do this is to create a file named `static/custom.css` right at the root of your site.

All the necessary CSS customization properties are listed below. If you want to customize elements that don't use these properties, you can always look up the class name and override it directly. For inspiration, you can also take a look at [https://www.color-hex.com](https://www.color-hex.com/color-palettes/). In this simple example, we'll use the [_Beach_](https://www.color-hex.com/color-palette/895) color palette.

[![Beach Color Palette](images/theme-example.png)](images/theme-example.png)

**Custom CSS:**

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< include file="/static/custom.css.example" language="CSS" options="linenos=table" >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Favicons

The Theme is shipped with a set of default Favicons in various formats generated by the [Favicon Generator](https://realfavicongenerator.net/). All files can be found in the `static/favicon` folder of the release tarball. To make the replacement of the default Favicons as simple as possible, the theme loads only a very small subset of the Favicon formats.

<!-- prettier-ignore -->
```tpl
<link rel="icon" type="image/svg+xml" href="{{ "favicon/favicon.svg" | relURL }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon/favicon-32x32.png" | relURL }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon/favicon-16x16.png" | relURL }}">
```

### Simple replacement

The minimal steps to load a custom Favicon is to overwrite the three default Favicon files. Therefore place these files into your projects root folder:

- `static/favicon/favicon.svg`
- `static/favicon/favicon-32x32.png`
- `static/favicon/favicon-16x16.png`

### Full replacement

If you want to add more Favicon formats you have to [overwrite](https://gohugo.io/templates/lookup-order/) the default partial that is used to load the files. In the next step you have to place the required files in the `static` folder of your project as well.

**Example:**

<!-- prettier-ignore -->
```tpl
<!-- layouts/partials/head/favicons.html -->
<link rel="icon" type="image/svg+xml" href="{{ "favicon/favicon.svg" | relURL }}">
<link rel="apple-touch-icon" sizes="180x180" href="{{ "favicon/apple-touch-icon.png" | relURL }}">
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon/favicon-32x32.png" | relURL }}">
<link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon/favicon-16x16.png" | relURL }}">
<link rel="manifest" href="{{ "favicon/site.webmanifest" | relURL }}">
<link rel="mask-icon" href="{{ "favicon/safari-pinned-tab.svg" | relURL }}" color="#efefef">
<meta name="msapplication-TileColor" content="#efefef">
<meta name="theme-color" content="#efefef">
```

## Fonts

To use a custom font, it needs to be specified first. While there are many ways to do this, we recommend to use `@font-face` as it supports local as well as remote fonts. If you want to serve the fonts from your own server, you have to place them in the `static/fonts` folder of your project.

The font registration is done in the `custom.css` file. There are also a few custom CSS properties available to simplify the usage of custom fonts.

**Example:**

<!-- prettier-ignore -->
```css
@font-face {
  font-family: "DancingScript";
  src:
    url("fonts/DancingScript.woff2") format("woff2"),
    url("fonts/DancingScript.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}

:root {
  --code-max-height: 60rem;

  --header-font-family: "DancingScript";
  --body-font-family: "DancingScript";
  --code-font-family: "DancingScript";
}
```

Happy customizing!


================================================
FILE: exampleSite/content/en/posts/_index.md
================================================
---
title: News
type: posts
weight: 10
geekdocHidden: true
---


================================================
FILE: exampleSite/content/en/posts/hello_geekdoc.md
================================================
---
title: Hello Geekdoc
type: posts
date: 2020-01-06
tags:
  - Documentation
  - Updates
---

This is the first release of the Geekdoc theme.

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.

Amalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram. Que no rota alters, ad sea sues exercise main rum, cu diam mas facility sea.


================================================
FILE: exampleSite/content/en/posts/initial-release.md
================================================
---
title: Initial release
type: posts
date: 2020-01-08
---

This is the first release of the Geekdoc theme.

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.


================================================
FILE: exampleSite/content/en/shortcodes/_index.md
================================================
---
title: Shortcodes
weight: -10
---


================================================
FILE: exampleSite/content/en/shortcodes/audio/_index.md
================================================
---
title: Audio
resources:
  - name: diamonds-trap
    src: "diamonds-trap.mp3"
    title: Diamonds Trap
    params:
      credits: "[Jakob Eglmeier on openmusic.academy CC0-1.0](https://openmusic.academy/media-library/b9do2E2ZwVCfppyBf2yuej)"
# cspell:ignore Jakob Eglmeier openmusic
---

The audio shortcode allows you to embed audio files.

## Usage

Define your resources in the page front matter, custom parameter `params.credits` is optional.

<!-- cspell:disable -->

```md
---
resources:
  - name: diamonds-trap
    src: "diamonds-trap.mp3"
    title: Diamonds Trap
    params:
      credits: "[Jakob Eglmeier on openmusic.academy CC0-1.0](https://openmusic.academy/media-library/b9do2E2ZwVCfppyBf2yuej)"
---

{{</* audio name="diamonds-trap" */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-audio sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

<!-- cspell:enable -->

## Example

<!-- cspell:disable -->

{{< audio name="diamonds-trap" >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/shortcodes/avatar/_index.md
================================================
---
title: Avatar
resources:
  - name: avatar
    src: "avatar.jpg"
    title: "Avatar"
---

The avatar shortcode is another custom image shortcode.

<!--more-->

## Usage

Define a resource in the page front matter.

<!-- cspell:disable -->

```md
---
resources:
  - name: avatar
    src: "images/avatar.jpg"
    title: "Avatar"
---

{{</* avatar name="avatar" */>}}
```

<!-- cspell:enable -->

## Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-avatar sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- cspell:disable -->

{{< avatar name=avatar size="small" >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/shortcodes/buttons.md
================================================
---
title: Buttons
---

Buttons are styled links that can lead to local page or external link.

## Usage

<!-- prettier-ignore -->
```tpl
{{</* button relref="/" [class="...", size="large|regular"] */>}}Get Home{{</* /button */>}}
{{</* button href="https://github.com/thegeeklab/hugo-geekdoc" */>}}Contribute{{</* /button */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-buttons sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- prettier-ignore-start -->
<!-- markdownlint-capture -->
<!-- markdownlint-disable -->
{{< button relref="/" >}}Get Home{{< /button >}}
{{< button href="https://github.com/thegeeklab/hugo-geekdoc" >}}Contribute{{< /button >}}
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->


================================================
FILE: exampleSite/content/en/shortcodes/columns.md
================================================
---
title: Columns
---

The Columns shortcode can be used to organize content side-by-side (horizontally) for better readability.

## Usage

```html
{{</* columns */>}} <!-- begin columns block -->
## Left Content
Dolor sit, sumo unique argument um no ...

<---> <!-- magic separator, between columns -->

## Mid Content
Dolor sit, sumo unique argument um no ...

<---> <!-- magic separator, between columns -->

## Right Content
Dolor sit, sumo unique argument um no ...
{{</* /columns */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-columns sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

{{< columns >}}

### Left

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<--->

### Mid Content

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re.

<--->

### Right Content

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.
{{< /columns >}}


================================================
FILE: exampleSite/content/en/shortcodes/expand.md
================================================
---
title: Expand
---

Expand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by clicking on it.

## Usage

```tpl
{{</* expand */>}}
### Markdown content
Dolor sit, sumo unique ...
{{</* /expand */>}}
```

It is also possible to use a custom label and symbol.

<!-- prettier-ignore-start -->

```tpl
{{</* expand "Custom Label" "..." */>}}
### More markdown
Dolor sit, sumo unique ...
{{</* /expand */>}}
```

## Example

{{< expand >}}

### Markdown content

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /expand >}}

{{< expand "Custom Label" "..." >}}

### More markdown

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.
{{< /expand >}}


================================================
FILE: exampleSite/content/en/shortcodes/hints.md
================================================
---
title: Hints
---

Hint shortcode can be used as hint/alerts/notification block.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* hint type=[note|tip|important|caution|warning] (icon=gdoc_github) (title=GitHub) */>}}
**Markdown content**\
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
 Ornateness bland it ex enc, est yeti am bongo detract re.
{{</* /hint */>}}
```
<!-- prettier-ignore-end -->

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-hints sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

{{< hint type=note >}}
**Markdown content**\
Dolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /hint >}}

{{< hint type=tip >}}
**Markdown content**\
Dolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /hint >}}

{{< hint type=important >}}
**Markdown content**\
Dolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /hint >}}

{{< hint type=caution >}}
**Markdown content**\
Dolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /hint >}}

{{< hint type=warning >}}
**Markdown content**\
Dolor sit, sumo unique `argument um no`. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.

Romanesque acclimates investiture.
{{< /hint >}}

Example with a custom icon and title:

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< hint type=note icon=gdoc_github title=GitHub >}}
**Markdown content**\
Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture.
Ornateness bland it ex enc, est yeti am bongo detract re.
{{< /hint >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->


================================================
FILE: exampleSite/content/en/shortcodes/icons.md
================================================
---
title: Icons
---

Simple shortcode to include icons from SVG sprites outside of menus.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* icon "thumbs-up" */>}}
```
<!-- prettier-ignore-end -->

## Example

| Output                     | Code                             |
| -------------------------- | -------------------------------- |
| {{< icon "thumbs-up" >}}   | `{{</* icon "thumbs-up" */>}}`   |
| {{< icon "thumbs-down" >}} | `{{</* icon "thumbs-down" */>}}` |
| {{< icon "laugh" >}}       | `{{</* icon "laugh" */>}}`       |
| {{< icon "lemon" >}}       | `{{</* icon "lemon" */>}}`       |
| {{< icon "moon" >}}        | `{{</* icon "moon" */>}}`        |


================================================
FILE: exampleSite/content/en/shortcodes/images/_index.md
================================================
---
title: Images
resources:
  - name: forest-1
    src: "forest-1.jpg"
    title: Forest (1)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-2
    src: "forest-2.jpg"
    title: Forest (2)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-3
    src: "forest-3.jpg"
    title: Forest (3)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-4
    src: "forest-4.jpg"
    title: Forest (4)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-5
    src: "forest-5.jpg"
    title: Forest (5)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-6
    src: "forest-6.jpg"
    title: Forest (6)
    params:
      credits: "[Asher Ward](https://unsplash.com/@the_asher_ward) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-7
    src: "forest-7.jpg"
    title: Forest (7)
    params:
      credits: "[Asher Ward](https://unsplash.com/@the_asher_ward) on [Unsplash](https://unsplash.com/s/photos/forest)"
  - name: forest-8
    src: "forest-8.svg"
    title: Forest (8)
    params:
      credits: "SVG Repo"
# cspell:ignore Mantri
---

If you need more flexibility for your embedded images, you could use the `img` shortcode. It is using Hugo's
[page resources](https://gohugo.io/content-management/page-resources/) and supports lazy loading of your images.

## Usage

Define your resources in the page front matter, custom parameter `params.credits` is optional.

<!-- cspell:disable -->

```md
---
resources:
  - name: forest-1
    src: "forest-1.jpg"
    title: Forest (1)
    params:
      credits: "[Jay Mantri](https://unsplash.com/@jaymantri) on [Unsplash](https://unsplash.com/s/photos/forest)"
---

{{</* img name="forest-1" size="large" lazy=false */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-images sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

<!-- cspell:enable -->

## Example

<!-- cspell:disable -->

{{< img name="forest-1" lazy=false >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-2" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-3" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-4" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-5" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-6" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-7" lazy=true >}}

<!-- cspell:enable -->

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts
feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious
copious quo ad. Stet probates in duo.

<!-- cspell:disable -->

{{< img name="forest-8" size=small lazy=true >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/shortcodes/includes.md
================================================
---
title: Includes
---

Include shortcode can include files of different types. By specifying a language, the included file will have syntax highlighting.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* include file="relative/path/from/hugo/root" language="go" */>}}
```
<!-- prettier-ignore-end -->

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-includes sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

### Example 1: Markdown file (default)

If no other options are specified, files will be rendered as Markdown using the `RenderString` [function](https://gohugo.io/functions/renderstring/).

{{< hint type=important >}}
**Location of markdown files**\
If you include markdown files that should not get a menu entry, place them outside the content folder or exclude them otherwise.
{{< /hint >}}

<!-- prettier-ignore -->
```tpl
{{</* include file="/static/_includes/example.md.part" */>}}
```

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< include file="/static/_includes/example.md.part" >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

### Example 2: Language files

This method can be used to include source code files and keep them automatically up to date.

<!-- prettier-ignore -->
```tpl
{{</* include file="config/_default/hugo.yaml" language="yaml" options="linenos=table,hl_lines=5-6,linenostart=100" */>}}
```

Result:

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< include file="config/_default/hugo.yaml" language="yaml" options="linenos=table,hl_lines=5-6,linenostart=100" >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

### Example 3: HTML

HTML content will be filtered by the `safeHTML` filter and added to the rendered page output.

<!-- prettier-ignore -->
```tpl
{{</* include file="/static/_includes/example.html.part" type="html" */>}}
```

{{< include file="/static/_includes/example.html.part" type="html" >}}

### Example 4: Hugo Pages

In some situations, it can be helpful to include Markdown files that also contain shortcodes. While the [default method](#example-1-markdown-file-default) works fine to render plain Markdown, shortcodes are not parsed. The only way to get this to work is to use Hugo pages. There are several ways to structure these include pages, so whatever you do, keep in mind that Hugo needs to be able to render and serve these files as regular pages! How it works:

1. First you need to create a directory **within** your content directory. For this example site `_includes` is used.
2. To prevent the theme from embedding the page in the navigation, create a file `_includes/_index.md` and add `geekdocHidden: true` to the front matter.
3. Place your Markdown files within the `_includes` folder e.g. `/_includes/include-page.md`. Make sure to name it `*.md`.
4. Include the page using `{{</* include file="/_includes/include-page.md" type="page" */>}}`.

Resulting structure should look like this:

```shell
_includes/
 ├── include-page.md
 └── _index.md
```

{{< include file="/_includes/include-page.md" type="page" >}}


================================================
FILE: exampleSite/content/en/shortcodes/katex.md
================================================
---
title: KaTeX
# cspell:ignore infty
---

[KaTeX](https://katex.org/) shortcode let you render math typesetting in markdown document.

## Usage

```latex
{{</* katex [display] [class="text-center"] */>}}
f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
{{</* /katex */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-katex sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- cspell:disable -->
<!-- prettier-ignore -->
{{< katex display >}}
f(x) = \int_{-\infty}^\infty\hat f(\xi)\,e^{2 \pi i \xi x}\,d\xi
{{< /katex >}}

<!-- cspell:enable -->

KaTeX can be used inline, for example {{< katex >}}\pi(x){{< /katex >}} or used with the `display` parameter as above.


================================================
FILE: exampleSite/content/en/shortcodes/mermaid.md
================================================
---
title: Mermaid
---

[Mermaid](https://mermaidjs.github.io/) is library for generating SVG charts and diagrams from text.

## Usage

<!-- prettier-ignore -->
```tpl
{{</* mermaid class="text-center" */>}}
sequenceDiagram
    Alice->>Bob: Hello Bob, how are you?
    alt is sick
        Bob->>Alice: Not so good :(
    else is well
        Bob->>Alice: Feeling fresh like a daisy
    end
    opt Extra response
        Bob->>Alice: Thanks for asking
    end
{{</* /mermaid */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-mermaid sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- cspell:disable -->
<!-- prettier-ignore -->
{{< mermaid class="text-center" >}}
sequenceDiagram
    Alice->>Bob: Hello Bob, how are you?
    alt is sick
        Bob->>Alice: Not so good :(
    else is well
        Bob->>Alice: Feeling fresh like a daisy
    end
    opt Extra response
        Bob->>Alice: Thanks for asking
    end
{{< /mermaid >}}

<!-- cspell:enable -->

As an alternative to shortcodes, code blocks can be used for markdown as well.

{{< columns >}}

<!-- prettier-ignore -->
````tpl
```mermaid
flowchart LR
A[Hard] -->|Text| B(Round)
B --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
```
````

<--->

<!-- cspell:disable -->
<!-- prettier-ignore -->
```mermaid
flowchart LR
A[Hard] -->|Text| B(Round)
B --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
```

<!-- cspell:enable -->

{{< /columns >}}


================================================
FILE: exampleSite/content/en/shortcodes/progress.md
================================================
---
title: Progress
---

A progress bar shows how far a process has progressed.

## Usage

<!-- prettier-ignore -->
```tpl
{{</* progress title=Eating value=65 icon=gdoc_heart */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-progress sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< progress title=Eating value=65 icon=gdoc_heart >}}

{{< progress title="Type: note" value=10 icon=gdoc_heart type=note >}}

{{< progress title="Type: tip" value=70 icon=gdoc_heart type=tip >}}

{{< progress title="Type: important" value=30 icon=gdoc_heart type=important >}}

{{< progress title="Type: caution" value=90 icon=gdoc_heart type=caution >}}

{{< progress title="Type: warning" value=80 icon=gdoc_heart type=warning >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->


================================================
FILE: exampleSite/content/en/shortcodes/propertylist.md
================================================
---
title: Properties
---

The property list shortcode creates a custom HTML description list that can be used to display properties or variables and general dependent information. The shortcode requires a data file in `data/properties/`, e.g. `data/properties/demo.yaml`.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* propertylist name=demo (sort=name) (order=[asc|desc]) */>}}
```
<!-- prettier-ignore-end -->

The supported attributes can be taken from the following example:

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< include file="/data/properties/demo.yaml" language="Yaml" options="linenos=table" >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-buttons sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=demo sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->


================================================
FILE: exampleSite/content/en/shortcodes/tabs.md
================================================
---
title: Tabs
---

Tabs let you organize content by context, for example installation instructions for each supported platform.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* tabs "uniqueid" */>}}
{{</* tab "macOS" */>}} # macOS Content {{</* /tab */>}}
{{</* tab "Linux" */>}} # Linux Content {{</* /tab */>}}
{{</* tab "Windows" */>}} # Windows Content {{</* /tab */>}}
{{</* /tabs */>}}
```
<!-- prettier-ignore-end -->

## Example

{{< tabs "uniqueid" >}}
{{< tab "macOS" >}}

## macOS

This is tab **macOS** content.

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad
prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim
fastidious copious quo ad. Stet probates in duo.
{{< /tab >}}

{{< tab "Linux" >}}

## Linux

This is tab **Linux** content.

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad
prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim
fastidious copious quo ad. Stet probates in duo.
{{< /tab >}}

{{< tab "Windows" >}}

## Windows

This is tab **Windows** content.

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates
investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad
prompts feud gait, quid exercise emeritus bis e. In pro quints consequent.
{{< /tab >}}
{{< /tabs >}}


================================================
FILE: exampleSite/content/en/shortcodes/toc-tree.md
================================================
---
title: ToC-Tree
---

The `toc-tree` shortcode will generate a Table of Content from a section file tree of your content directory. The root of the resulting ToC will be the page on which you define the shortcode.

## Usage

<!-- prettier-ignore-start -->
```tpl
{{</* toc-tree [sortBy="title"] */>}}
```
<!-- prettier-ignore-end -->

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-toc-tree sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

As said, the root will be the site on which the shortcode was used, you can see a demo including nesting in the [ToC Tree](/toc-tree/) section.


================================================
FILE: exampleSite/content/en/shortcodes/toc.md
================================================
---
title: ToC
---

Simple wrapper to generate a page Table of Content from a shortcode.

## Usage

<!-- prettier-ignore -->
```tpl
{{</* toc (format=[html|raw]) */>}}
```

### Attributes

<!-- prettier-ignore-start -->
<!-- cspell:disable -->
{{< propertylist name=shortcode-toc sort=name order=asc >}}
<!-- cspell:enable -->
<!-- prettier-ignore-end -->

## Example

{{< toc >}}

## Level 1

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e. In pro quints consequent, denim fastidious copious quo ad. Stet probates in duo.

## Level 2

Amalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.

### Level 2.1

Amalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.

#### Level 2.1.1

Amalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim.

##### Level 2.1.1.1

In pro quints consequent, denim fastidious copious quo ad.

###### Level 2.1.1.1.1

In pro quints consequent, denim fastidious copious quo ad.

### Level 2.2

Dolor sit, sumo unique argument um no. Gracie nominal id xiv. Romanesque acclimates investiture. Ornateness bland it ex enc, est yeti am bongo detract re. Pro ad prompts feud gait, quid exercise emeritus bis e.

Amalia id per in minimum facility, quid facet modifier ea ma. Ill um select ma ad, en ferric patine sentient vim. Per expendable foreordained interpretations cu, maxim sole pertinacity in ram.


================================================
FILE: exampleSite/content/en/toc-tree/_index.md
================================================
---
title: ToC-Tree
geekdocFlatSection: true
---

This is just a demo section for the <!-- cspell:disable -->[toc-tree](/shortcodes/toc-tree/)<!-- cspell:enable --> shortcode.

<!-- cspell:disable -->

{{< toc-tree >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/toc-tree/level-1/_index.md
================================================
---
geekdocCollapseSection: true
---

Level 1

<!-- cspell:disable -->

{{< toc-tree >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/toc-tree/level-1/level-1-1.md
================================================
---
title: Level 1.1
---

Level 1.1


================================================
FILE: exampleSite/content/en/toc-tree/level-1/level-1-2.md
================================================
---
title: Level 1.2
---

Level 1.2


================================================
FILE: exampleSite/content/en/toc-tree/level-1/level-1-3/_index.md
================================================
---
title: Level 1.3
---

Level 1.3

<!-- cspell:disable -->

{{< toc-tree >}}

<!-- cspell:enable -->


================================================
FILE: exampleSite/content/en/toc-tree/level-1/level-1-3/level-1-3-1.md
================================================
---
title: Level 1.3.1
---

Level 1.3.1


================================================
FILE: exampleSite/content/en/toc-tree/level-2/_index.md
================================================
Level-2


================================================
FILE: exampleSite/content/en/toc-tree/level-2/level-2-1.md
================================================
---
title: Level 2.1
---

Level 2.1


================================================
FILE: exampleSite/content/en/toc-tree/level-2/level-2-2.md
================================================
---
title: Level 2.2
---

Level 2.2


================================================
FILE: exampleSite/content/en/usage/_index.md
================================================
---
title: Usage
weight: -20
---


================================================
FILE: exampleSite/content/en/usage/configuration.md
================================================
---
title: Configuration
weight: -10
# cspell:ignore expirydate linktitle publishdate
---

{{< toc >}}

## Site configuration

{{< tabs "site-config" >}}
{{< tab "TOML" >}}

```toml
baseURL = "http://localhost"
title = "Geekdocs"
theme = "hugo-geekdoc"

# Required to get well formatted code blocks
pygmentsUseClasses = true
pygmentsCodeFences = true
disablePathToLower = true
enableGitInfo = true

# Required if you want to render robots.txt template
enableRobotsTXT = true

[markup]
  [markup.goldmark.renderer]
    # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within
    # columns or tabs)
    unsafe = true
  [markup.tableOfContents]
    startLevel = 1
    endLevel = 9

[taxonomies]
  tag = "tags"

[params]
  # (Optional, default none) Set a subtitle used in the page header.
  geekdocSubtitle = "A Hugo theme for documentation"

  # (Optional, default 6) Set how many table of contents levels to be showed on page.
  # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)
  # You can also specify this parameter per page in front matter.
  geekdocToC = 3

  # (Optional, default static/brand.svg) Set the path to a logo for the Geekdoc
  # relative to your 'static/' folder.
  geekdocLogo = "logo.png"

  # (Optional, default false) Render menu from data file in 'data/menu/main.yaml'.
  # See also https://geekdocs.de/usage/menus/#bundle-menu.
  geekdocMenuBundle = true

  # (Optional, default false) Collapse all menu entries, cannot be overwritten
  # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.
  geekdocCollapseAllSections = true

  # (Optional, default true) Show page navigation links at the bottom of each docs page.
  geekdocNextPrev = false

  # (Optional, default true) Show a breadcrumb navigation bar at the top of each docs page.
  # You can also specify this parameter per page in front matter.
  geekdocBreadcrumb = false

  # (Optional, default none) Set source repository location. Used for 'Edit page' links.
  # You can also specify this parameter per page in front matter.
  geekdocRepo = "https://github.com/thegeeklab/hugo"

  # (Optional, default none) Enable 'Edit page' links. Requires 'geekdocRepo' param
  # and the path must point to the parent directory of the 'content' folder.
  # You can also specify this parameter per page in front matter.
  geekdocEditPath = "edit/main/exampleSite"

  # (Optional, default false) Show last modification date of the page in the header.
  # Keep in mind that last modification date works best if `enableGitInfo` is set to true.
  geekdocPageLastmod = true

  # (Optional, default true) Enables search function with flexsearch.
  # Index is built on the fly and might slow down your website.
  geekdocSearch = false

  # (Optional, default false) Display search results with the parent folder as prefix. This
  # option allows you to distinguish between files with the same name in different folders.
  # NOTE: This parameter only applies when 'geekdocSearch = true'.
  geekdocSearchShowParent = true

  # (Optional, default none) Add a link to your Legal Notice page to the site footer.
  # It can be either a remote url or a local file path relative to your content directory.
  geekdocLegalNotice = "https://blog.example.com/legal"

  # (Optional, default none) Add a link to your Privacy Policy page to the site footer.
  # It can be either a remote url or a local file path relative to your content directory.
  geekdocPrivacyPolicy = "/privacy"

  # (Optional, default true) Add an anchor link to headlines.
  geekdocAnchor = true

  # (Optional, default true) Copy anchor url to clipboard on click.
  geekdocAnchorCopy = true

  # (Optional, default true) Enable or disable image lazy loading for images rendered
  # by the 'img' shortcode.
  geekdocImageLazyLoading = true

  # (Optional, default false) Set HTMl <base> to .Site.Home.Permalink if enabled. It might be required
  # if a subdirectory is used within Hugo's BaseURL.
  # See https://developer.mozilla.org/de/docs/Web/HTML/Element/base.
  geekdocOverwriteHTMLBase = false

  # (Optional, default true) Enable or disable the JavaScript based color theme toggle switch. The CSS based
  # user preference mode still works.
  geekdocDarkModeToggle = false

  # (Optional, default false) Auto-decrease brightness of images and add a slightly grayscale to avoid
  # bright spots while using the dark mode.
  geekdocDarkModeDim = false

  # (Optional, default false) Enforce code blocks to always use the dark color theme.
  geekdocDarkModeCode = false

  # (Optional, default true) Display a "Back to top" link in the site footer.
  geekdocBackToTop = true

  # (Optional, default false) Enable or disable adding tags for post pages automatically to the navigation sidebar.
  geekdocTagsToMenu = true

  # (Optional, default 'title') Configure how to sort file-tree menu entries. Possible options are 'title', 'linktitle',
  # 'date', 'publishdate', 'expirydate' or 'lastmod'. Every option can be used with a reverse modifier as well
  # e.g. 'title_reverse'.
  geekdocFileTreeSortBy = "title"

  # (Optional, default none) Adds a "Content licensed under <license>" line to the footer.
  # Could be used if you want to define a default license for your content.
  [params.geekdocContentLicense]
    name = "CC BY-SA 4.0"
    link = "https://creativecommons.org/licenses/by-sa/4.0/"
```

{{< /tab >}}
{{< tab "YAML" >}}

```yaml
---
baseURL: "http://localhost"
title: "Geekdocs"
theme: "hugo-geekdoc"

# Required to get well formatted code blocks
pygmentsUseClasses: true
pygmentsCodeFences: true
disablePathToLower: true
enableGitInfo: true

# Required if you want to render robots.txt template
enableRobotsTXT: true

markup:
  goldmark:
    # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within
    # columns or tabs)
    renderer:
      unsafe: true
  tableOfContents:
    startLevel: 1
    endLevel: 9

taxonomies:
  tag: tags

params:
  # (Optional, default none) Set a subtitle used in the page header.
  geekdocSubtitle: "A Hugo theme for documentation"

  # (Optional, default 6) Set how many table of contents levels to be showed on page.
  # Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)
  # You can also specify this parameter per page in front matter.
  geekdocToC: 3

  # (Optional, default static/brand.svg) Set the path to a logo for the Geekdoc
  # relative to your 'static/' folder.
  geekdocLogo: logo.png

  # (Optional, default false) Render menu from data file in 'data/menu/main.yaml'.
  # See also https://geekdocs.de/usage/menus/#bundle-menu.
  geekdocMenuBundle: true

  # (Optional, default false) Collapse all menu entries, cannot be overwritten
  # per page if enabled. Can be enabled per page via 'geekdocCollapseSection'.
  geekdocCollapseAllSections: true

  # (Optional, default true) Show page navigation links at the bottom of each docs page.
  geekdocNextPrev: false

  # (Optional, default true) Show a breadcrumb navigation bar at the top of each docs page.
  # You can also specify this parameter per page in front matter.
  geekdocBreadcrumb: false

  # (Optional, default none) Set source repository location. Used for 'Edit page' links.
  # You can also specify this parameter per page in front matter.
  geekdocRepo: "https://github.com/thegeeklab/hugo-geekdoc"

  # (Optional, default none) Enable 'Edit page' links. Requires 'geekdocRepo' param
  # and the path must point to the parent directory of the 'content' folder.
  # You can also specify this parameter per page in front matter.
  geekdocEditPath: edit/main/exampleSite

  # (Optional, default false) Show last modification date of the page in the header.
  # Keep in mind that last modification date works best if `enableGitInfo` is set to true.
  geekdocPageLastmod: true

  # (Optional, default true) Enables search function with flexsearch.
  # Index is built on the fly and might slow down your website.
  geekdocSearch: false

  # (Optional, default false) Display search results with the parent folder as prefix. This
  # option allows you to distinguish between files with the same name in different folders.
  # NOTE: This parameter only applies when 'geekdocSearch: true'.
  geekdocSearchShowParent: true

  # (Optional, default none) Add a link to your Legal Notice page to the site footer.
  # It can be either a remote url or a local file path relative to your content directory.
  geekdocLegalNotice: "https://blog.example.com/legal"

  # (Optional, default none) Add a link to your Privacy Policy page to the site footer.
  # It can be either a remote url or a local file path relative to your content directory.
  geekdocPrivacyPolicy: "/privacy"

  # (Optional, default true) Add an anchor link to headlines.
  geekdocAnchor: true

  # (Optional, default true) Copy anchor url to clipboard on click.
  geekdocAnchorCopy: true

  # (Optional, default true) Enable or disable image lazy loading for images rendered
  # by the 'img' shortcode.
  geekdocImageLazyLoading: true

  # (Optional, default false) Set HTMl <base> to .Site.Home.Permalink if enabled. It might be required
  # if a subdirectory is used within Hugo's BaseURL.
  # See https://developer.mozilla.org/de/docs/Web/HTML/Element/base.
  geekdocOverwriteHTMLBase: false

  # (Optional, default true) Enable or disable the JavaScript based color theme toggle switch. The CSS based
  # user preference mode still works.
  geekdocDarkModeToggle: false

  # (Optional, default false) Auto-decrease brightness of images and add a slightly grayscale to avoid
  # bright spots while using the dark mode.
  geekdocDarkModeDim: false

  # (Optional, default false) Enforce code blocks to always use the dark color theme.
  geekdocDarkModeCode: false

  # (Optional, default true) Display a "Back to top" link in the site footer.
  geekdocBackToTop: true

  # (Optional, default false) Enable or disable adding tags for post pages automatically to the navigation sidebar.
  geekdocTagsToMenu: true

  # (Optional, default 'title') Configure how to sort file-tree menu entries. Possible options are 'title', 'linktitle',
  # 'date', 'publishdate', 'expirydate' or 'lastmod'. Every option can be used with a reverse modifier as well
  # e.g. 'title_reverse'.
  geekdocFileTreeSortBy: "title"

  # (Optional, default none) Adds a "Content licensed under <license>" line to the footer.
  # Could be used if you want to define a default license for your content.
  geekdocContentLicense:
    name: CC BY-SA 4.0
    link: https://creativecommons.org/licenses/by-sa/4.0/
```

{{< /tab >}}
{{< /tabs >}}

## Page configuration

{{< tabs "page-config" >}}
{{< tab "TOML" >}}

```toml
# Set type to 'posts' if you want to render page as blogpost
type = "posts"

# Hugo predefined front matter variable, to re-arrange items in file-tree menu
# See weights section of
# https://gohugo.io/content-management/front-matter/#predefined
weight = 10

# Set how many table of contents levels to be showed on page.
geekdocToC = 3

# Set a description for the current page. This will be shown in toc-trees objects.
geekdocDescription =

# Set false to hide the whole left navigation sidebar. Beware that it will make
# navigation pretty hard without adding some kind of on-page navigation.
geekdocNav = true

# Show a breadcrumb navigation bar at the top of each docs page.
geekdocBreadcrumb = false

# Set source repository location.
geekdocRepo = "https://github.com/thegeeklab/hugo-geekdoc"

# Enable 'Edit page' links. Requires 'geekdocRepo' param and the path must point to
# the parent directory of the 'content' folder.
geekdocEditPath = "edit/main/exampleSite"

# Show last modification date of the page in the header.
geekdocPageLastmod = true

# Used for 'Edit page' link, set to '.File.Path' by default.
# Can be overwritten by a path relative to 'geekdocEditPath'
geekdocFilePath =

# Set to mark page as flat section (file-tree menu only).
geekdocFlatSection = true

# Set true to hide page or section from side menu (file-tree menu only).
geekdocHidden = true

# Set false to show this page as a file-tree menu entry when you want it to be hidden in the sidebar.
# NOTE: Only applies when 'geekdocHidden = true'.
geekdocHiddenTocTree = true

# Set to true to make a section foldable in side menu.
geekdocCollapseSection = true

# Add an anchor link to headlines.
geekdocAnchor = true

# If you have protected some pages with e.g. basic authentication you may want to exclude these pages
# from data file, otherwise, information may be leaked. Setting this parameter to 'true' will exclude the
# page from search data, feeds, etc.
# WARNING: Consider hosting a standalone, fully auth-protected static page for secret information instead!
geekdocProtected = false

# Set 'left' (default), 'center' or 'right' to configure the text align of a page.
geekdocAlign = "left"
```

{{< /tab >}}
{{< tab "YAML" >}}

```yaml
# Set type to 'posts' if you want to render page as blogpost.
type: "posts"

# Set page weight to re-arrange items in file-tree menu.
weight: 10

# Set how many table of contents levels to be showed on page.
geekdocToC: 3

# Set a description for the current page. This will be shown in toc-trees objects.
geekdocDescription:

# Set false to hide the whole left navigation sidebar. Beware that it will make
# navigation pretty hard without adding some kind of on-page navigation.
geekdocNav: true

# Show a breadcrumb navigation bar at the top of each docs page.
geekdocBreadcrumb: false

# Set source repository location.
geekdocRepo: "https://github.com/thegeeklab/hugo-geekdoc"

# Enable 'Edit page' links. Requires 'geekdocRepo' param and the path must point to
# the parent directory of the 'content' folder.
geekdocEditPath: "edit/main/exampleSite"

# Show last modification date of the page in the header.
geekdocPageLastmod: true

# Used for 'Edit page' link, set to '.File.Path' by default.
# Can be overwritten by a path relative to 'geekdocEditPath'
geekdocFilePath:

# Set to mark page as flat section (file-tree menu only).
geekdocFlatSection: true

# Set true to hide page or section from side menu (file-tree menu only).
geekdocHidden: true

# Set false to show this page as a file-tree menu entry when you want it to be hidden in the sidebar.
# NOTE: Only applies when 'geekdocHidden: true'.
geekdocHiddenTocTree: true

# Set to true to make a section foldable in side menu.
geekdocCollapseSection: true

# Add an anchor link to headlines.
geekdocAnchor: true

# If you have protected some pages with e.g. basic authentication you may want to exclude these pages
# from data file, otherwise, information may be leaked. Setting this parameter to 'true' will exclude the
# page from search data, feeds, etc.
# WARNING: Consider hosting a standalone, fully auth-protected static page for secret information instead!
geekdocProtected: false

# Set 'left' (default), 'center' or 'right' to configure the text align of a page.
geekdocAlign: "left"
```

{{< /tab >}}
{{< /tabs >}}


================================================
FILE: exampleSite/content/en/usage/customization.md
================================================
---
title: Customization
---

{{< toc >}}

## Custom resources

To add custom resources to your site e.g. CSS or JavaScript files, create the `layouts/partials/head/custom.html` in the root directory of your project. Add the source files you want to include in the `static/` folder of your project, for example `static/css/custom.css` and `static/js/custom.js`. To include the files in your site, add the following code to `layouts/partials/head/custom.html`:

```html
<link rel="stylesheet" type="text/css" href="/css/custom.css" />
<script type="text/javascript" src="/js/custom.js"></script>
```

Ensure to use the absolute path to the files.


================================================
FILE: exampleSite/content/en/usage/getting-started.md
================================================
---
title: Getting Started
weight: -20
# cspell:ignore demosite testlink gohugoio
---

This page tells you how to get started with the Geekdoc theme, including installation and basic configuration.

<!--more-->

{{< toc >}}

## Install requirements

You need a recent version of Hugo for local builds and previews of sites that use Geekdoc. As we are using [webpack](https://webpack.js.org/) as pre-processor, the normal version of Hugo is sufficient. If you prefer the extended version of Hugo anyway this will work as well. For comprehensive Hugo documentation, see [gohugo.io](https://gohugo.io/documentation/).

If you want to use the theme from a cloned branch instead of a release tarball you'll need to install `webpack` locally and run the build script once to create all required assets.

```shell
# install required packages from package.json
npm install

# run the build script to build required assets
npm run build

# build release tarball
npm run pack
```

## Using the theme

To prepare your new site environment just a few steps are required:

1. Create a new empty Hugo site.

   ```shell
   hugo new site demosite
   ```

2. Switch to the root of the new site.

   ```shell
   cd demosite
   ```

3. Install the Geekdoc theme from a [release bundle](#option-1-download-pre-build-release-bundle) (recommended) or from [Git branch](#option-2-clone-the-github-repository).

4. Create the minimal required Hugo configuration `hugo.toml`. For all configuration options take a look at the [configuration page](/usage/configuration/).

   ```toml
   baseURL = "http://localhost"
   title = "Geekdocs"
   theme = "hugo-geekdoc"

   pluralizeListTitles = false

   # Geekdoc required configuration
   pygmentsUseClasses = true
   pygmentsCodeFences = true
   disablePathToLower = true

   # Required if you want to render robots.txt template
   enableRobotsTXT = true

   # Needed for mermaid shortcodes
   [markup]
     [markup.goldmark.renderer]
       # Needed for mermaid shortcode or when nesting shortcodes (e.g. img within
       # columns or tabs)
       unsafe = true
     [markup.tableOfContents]
       startLevel = 1
       endLevel = 9

   [taxonomies]
      tag = "tags"
   ```

5. Test your site.

   ```shell
   hugo server -D
   ```

   The `-D` or `--buildDrafts` option is used to include content marked as draft during the build. It is used because content pages created with the `hugo new content` command have the `draft` flag set by default and this can lead to build errors in newly created projects. For projects with a production-ready content structure, this flag is not required in most cases and can be omitted.

### Option 1: Download pre-build release bundle

Download and extract the latest release bundle into the theme directory.

```shell
mkdir -p themes/hugo-geekdoc/
curl -L https://github.com/thegeeklab/hugo-geekdoc/releases/latest/download/hugo-geekdoc.tar.gz | tar -xz -C themes/hugo-geekdoc/ --strip-components=1
```

### Option 2: Clone the GitHub repository

{{< hint type=note >}}
Keep in mind this method is not recommended and needs some extra steps to get it working.
If you want to use the Theme as submodule keep in mind that your build process need to
run the described steps as well.
{{< /hint >}}

Clone the Geekdoc git repository.

```shell
git clone https://github.com/thegeeklab/hugo-geekdoc.git themes/hugo-geekdoc
```

Build required theme assets e.g. CSS files and SVG sprites.

```shell
npm install
npm run build
```

## Deployments

### Netlify

There are several ways to deploy your site with this theme on Netlify. Regardless of which solution you choose, the main goal is to ensure that the prebuilt theme release tarball is used or to run the [required commands](#option-2-clone-the-github-repository) to prepare the theme assets before running the Hugo build command.

Here are some possible solutions:

#### Use a Makefile

Add a Makefile to your repository to bundle the required steps.

{{< hint type=important >}}
The `Makefile` is only an example. Depending on your project structure, `BASEDIR` or `THEMEDIR` may need to be adapted.
{{< /hint >}}

```makefile
# Please change the theme version to the latest release version.
THEME_VERSION := v0.44.1
THEME := hugo-geekdoc
BASEDIR := docs
THEMEDIR := $(BASEDIR)/themes

.PHONY: doc
doc: doc-assets doc-build

.PHONY: doc-assets
doc-assets:
	mkdir -p $(THEMEDIR)/$(THEME)/ ; \
	curl -sSL "https://github.com/thegeeklab/$(THEME)/releases/download/${THEME_VERSION}/$(THEME).tar.gz" | tar -xz -C $(THEMEDIR)/$(THEME)/ --strip-components=1

.PHONY: doc-build
doc-build:
	cd $(BASEDIR); hugo

.PHONY: clean
clean:
	rm -rf $(THEMEDIR) && \
	rm -rf $(BASEDIR)/public
```

This Makefile can be used in your `netlify.toml`, take a look at the [Netlify example](https://docs.netlify.com/configure-builds/file-based-configuration/#sample-netlify-toml-file) for more information:

```toml
[build]
publish = "docs/public"
command = "make doc"
```

#### Chain required commands

Chain all required commands to prepare the theme and build your site on the `command` option in your `netlify.toml` like this:

```toml
[build]
publish = "docs/public"
command = "command1 && command 2 && command3 && hugo"
```

### Subdirectories

{{< hint type=important >}}
As deploying Hugo sites on subdirectories is not as robust as on subdomains, we do not recommend this.
If you have a choice, using a domain/subdomain should always be the preferred solution!
{{< /hint >}}

If you want to deploy your site to a subdirectory of your domain, some extra steps are required:

- Configure your Hugo base URL e.g. `baseURL = http://localhost/demo/`.
- Don't use `relativeURLs: false` nor `canonifyURLs: true` as is can cause unwanted side effects!

There are two ways to get Markdown links or images working:

- Use the absolute path including your subdirectory e.g. `[testlink](/demo/example-site)`
- Overwrite the HTML base in your site configuration with `geekdocOverwriteHTMLBase = true` and use the relative path e.g. `[testlink](example-site)`

But there is another special case if you use `geekdocOverwriteHTMLBase = true`. If you use anchors in your Markdown links you have to ensure to always include the page path. As an example `[testlink](#some-anchor)` will resolve to `http://localhost/demo/#some-anchor` and not automatically include the current page!

## Known Limitations

### Minify HTML results in spacing issues

Using `hugo --minify` without further configuration or using other minify tools that also minify HTML files might result in spacing issues in the theme and is **not** supported.

After some testing we decided to not spend effort to fix this issue for now as the benefit is very low. There are some parts of the theme where spaces between HTML elements matters but were stripped by minify tools. Some of these issues are related to <!-- cspell:disable -->[gohugoio/hugo#6892](https://github.com/gohugoio/hugo/issues/6892).<!-- cspell:enable --> While recommendation like "don't depend on whitespace in your layout" sounds reasonable, it seems to be not that straight forward especially for something like embedded icons into the text flow.

If you still want to use Hugo's minify flag you should at least exclude HTML files in your site configuration as described in the [Hugo documentation](https://gohugo.io/getting-started/configuration/#configure-minify):

```toml
[minify]
  disableHTML = true
```


================================================
FILE: exampleSite/content/en/usage/menus.md
================================================
---
title: Menus
---

The theme supports two different kinds of menus. File-tree menu is the default one and does not require further configuration to work. If you want full control about your menu the bundle menu is a powerful option to accomplish it.

{{< toc >}}

## File-tree menu

As the name already suggests, the file tree menu builds a menu from the file system structure of the content folder. By default, areas and subareas are sorted alphabetically by the title of the pages. To manipulate the order the `weight` parameter in a page [front matter](https://gohugo.io/content-management/front-matter/) can be used. To structure your content folder you have to use [page bundles](https://gohugo.io/content-management/organization/#page-bundles), single files are **not** supported. Hugo will render build single files in the content folder just fine but it will not be added to the menu.

**Example:**

File system structure:

```plain
content/
├── level-1
│   ├── _index.md
│   ├── level-1-1.md
│   ├── level-1-2.md
│   └── level-1-3
│       ├── _index.md
│       └── level-1-3-1.md
└── level-2
    ├── _index.md
    ├── level-2-1.md
    └── level-2-2.md
```

## Bundle menu

This type of navigation needs to be enabled first by setting `geekdocMenuBundle` to `true` in your [site configuration](/usage/configuration/#site-configuration). After you have activated the bundle menu, you start with an empty navigation. This is intentional because bundle menus have to be defined manually in a data file. While this increases the effort it also offers maximum flexibility in the design. The data file needs to be written in YAML and placed at `data/menu/main.yaml`.

**Example:**

```yaml
---
main:
  - name: Level 1
    ref: "/level-1"
    icon: "gdoc_notification"
    sub:
      - name: Level 1.1
        ref: "/level-1/level-1-1"
      - name: Level 1.2
        ref: "/level-1/level-1-2"
      - name: Level 1.3
        ref: "/level-1/level-1-3"
        sub:
          - name: Level 1.3.1
            ref: "/level-1/level-1-3/level-1-3-1"
  - name: Level 2
    ref: "/level-2"
    sub:
      - name: Level 2.1
        ref: "/level-2/level-2-1"
      - name: Level 2.2
        ref: "/level-2/level-2-2"
      - name: Level 2.2 Anchor
        ref: /level-2/level-2-2
        # Anchor to add to the entry. This example will result in `/level-2/level-2-2/#anchor`
        anchor: anchor
```

As an advantage you can add [icons](/features/icon-sets/) to your menu entries e.g. `icon: "gdoc_notification"`.

### More menu

{{< hint type=tip >}}
**Tip**\
The more menu is special type of the bundle menu and can be combined with the default file-tree menu.
{{< /hint >}}

As this is a special type of the bundle menu it is basically working in the same way. To enable it just add a data file to `data/menu/more.yaml`. The more menu will also work with the file-tree menu and therefore **don't need to be enabled** by the `geekdocMenuBundle` parameter.

**Example:**

```yaml
---
more:
  - name: News
    ref: "/#"
    icon: "gdoc_notification"
  - name: Releases
    ref: "https://github.com/thegeeklab/hugo-geekdoc/releases"
    external: true
    icon: "gdoc_download"
  - name: "View Source"
    ref: "https://github.com/thegeeklab/hugo-geekdoc"
    external: true
    icon: "gdoc_github"
```

## Extra Header Menu

If you want to customize the header menu, this can be achieved by using a data file written in YAML and placed at `data/menu/extra.yaml`.

**Example:**

```yaml
---
header:
  - name: GitHub
    ref: https://github.com/thegeeklab/hugo-geekdoc
    icon: gdoc_github
    external: true
```


================================================
FILE: exampleSite/data/menu/extra.yaml
================================================
---
header:
  - name: GitHub
    ref: https://github.com/thegeeklab/hugo-geekdoc
    icon: gdoc_github
    external: true


================================================
FILE: exampleSite/data/menu/main.yaml
================================================
---
main:
  - name:
      en: Level 1 (EN)
      de: Level 1 (DE)
    sub:
      - name:
          en: Level 1.1 (EN)
          de: Level 1.1 (DE)
        ref: "/toc-tree/level-1/level-1-1"
        rel: me
      - name: Level 1.2
        ref: "/toc-tree/level-1/level-1-2"
      - name: Level 1.3
        ref: "/toc-tree/level-1/level-1-3"
        sub:
          - name: Level 1.3.1
            ref: "/toc-tree/level-1/level-1-3/level-1-3-1"
  - name: Level 2
    ref: "/toc-tree/level-2"
    sub:
      - name: Level 2.1
        ref: "/toc-tree/level-2/level-2-1"
      - name: Level 2.2
        ref: "/toc-tree/level-2/level-2-2"


================================================
FILE: exampleSite/data/menu/more.yaml
================================================
---
more:
  - name: News
    ref: "/posts"
    icon: "gdoc_notification"
  - name: Releases
    ref: "https://github.com/thegeeklab/hugo-geekdoc/releases"
    external: true
    icon: "gdoc_download"
  - name: View Source
    ref: "https://github.com/thegeeklab/hugo-geekdoc"
    external: true
    icon: "gdoc_github"


================================================
FILE: exampleSite/data/properties/demo.yaml
================================================
---
properties:
  - name: prop1
    type: string
    description: Dummy description of the prop1 string property.
    required: true

  - name: prop2
    type: int
    defaultValue: 10
    description:
      en: Another description for the integer property called prop2.
    required: false
    tags:
      en:
        - tag1
        - tag2

  - name: prop3
    type: bool
    defaultValue: false
    description: |
      A `bool` property with a complex multiline description and embedded Markdown:

      - List item 1
      - List item 2

      More description how to use this property.
    required: false

  - name: a-prop
    type: string
    description: Property to demonstrate sorting.
    required: true


================================================
FILE: exampleSite/data/properties/shortcode-audio.yaml
================================================
---
properties:
  - name: name
    type: string
    description: Name of the audio resource defined in page front matter.
    required: true


================================================
FILE: exampleSite/data/properties/shortcode-avatar.yaml
================================================
---
properties:
  - name: name
    type: string
    description: Name of the image resource defined in page front matter.
    required: true
  - name: alt
    type: string
    description: Description text for the image.
    required: false
  - name: size
    type: string
    description: Thumbnail size. Supported values are `origin|tiny|small|medium|large`.
    required: false
  - name: anchor
    type: string
    description: "[Anchor](https://gohugo.io/content-management/image-processing/#anchor) to determine the placement of the crop box."
    required: false


================================================
FILE: exampleSite/data/properties/shortcode-buttons.yaml
================================================
---
properties:
  - name: href
    type: string
    description: The URL to use as target of the button.
    required: false
  - name: relref
    type: string
    description: Executes the [relref](https://gohugo.io/functions/urls/relref/) Hugo function to resolve the relative permalink of the specified page. The result is set as the target of the button.
    required: false
  - name: class
    type: list
    description: List of space-separated CSS class names to apply.
    required: false
  - name: size
    type: string
    description: Preset of different button sizes. Supported values are `regular|large`.
    required: false
    defaultValue: regular


================================================
FILE: exampleSite/data/properties/shortcode-columns.yaml
================================================
---
properties:
  - name: size
    type: string
    description: Preset of different sizes for the _first_ column. Supported values are `small|regular|large`.
    required: false
    defaultValue: regular


================================================
FILE: exampleSite/data/properties/shortcode-hints.yaml
================================================
---
properties:
  - name: type
    type: string
    description: Type of the hint. Supported values are `note|tip|important|caution|warning`.
    required: false
    defaultValue: note
  - name: icon
    type: string
    description: Icon to use. The value need to be an icon from an [SVG sprite](/features/icon-sets/).
    required: false
  - name: title
    type: string
    description: Title text of the hint.
    required: false


================================================
FILE: exampleSite/data/properties/shortcode-images.yaml
================================================
---
properties:
  - name: name
    type: string
    description: Name of the image resource defined in page front matter.
    required: true
  - name: alt
    type: string
    description: Description text for the image.
    required: false
  - name: size
    type: string
    description: Thumbnail size. Supported values are `origin|tiny|small|medium|large`.
    required: false
  - name: lazy
    type: bool
    description: Enable/disable lazy loading for the image.
    required: false
    defaultValue: true


================================================
FILE: exampleSite/data/properties/shortcode-includes.yaml
================================================
---
properties:
  - name: file
    type: string
    description: Path of the file (relative to the Hugo root) to include.
    required: true
  - name: language
    type: string
    description: Language for [syntax highlighting](https://gohugo.io/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages).
    required: false
  - name: type
    type: string
    description: Special include type. Supported values are `html|page`. If not set the included file is rendered as markdown.
    required: false
  - name: options
    type: bool
    description: highlighting [options](https://gohugo.io/content-management/syntax-highlighting/#highlight-shortcode).
    required: false
    defaultValue: linenos=table


================================================
FILE: exampleSite/data/properties/shortcode-katex.yaml
================================================
---
properties:
  - name: class
    type: list
    description: List of space-separated CSS class names to apply.
    required: false


================================================
FILE: exampleSite/data/properties/shortcode-mermaid.yaml
================================================
---
properties:
  - name: class
    type: list
    description: List of space-separated CSS class names to apply.
    required: false


================================================
FILE: exampleSite/data/properties/shortcode-progress.yaml
================================================
---
properties:
  - name: type
    type: string
    description: Color type of the progress bar. Supported values are `main|note|tip|important|caution|warning`.
    required: false
    defaultValue: main
  - name: value
    type: integer
    description: Progress value.
    required: false
    defaultValue: 0
  - name: label
    type: string
    description: Value to display.
    required: false
    defaultValue: "`value`"
  - name: icon
    type: string
    description: Icon to use. The value need to be an icon from an [SVG sprite](/features/icon-sets/).
    required: false
  - name: title
    type: string
    description: Title text of the progress bar.
    required: false


================================================
FILE: exampleSite/data/properties/shortcode-propertylist.yaml
================================================
---
properties:
  - name: name
    type: string
    description: Name of the file from the `data/properties/` directory.
    required: true
  - name: sort
    type: string
    description: Field name to use for sorting.
    required: false
  - name: order
    type: string
    description: Sort order, only applied if `sort` is set. Supported values are `asc|desc`.
    required: false
    defaultValue: asc


================================================
FILE: exampleSite/data/properties/shortcode-toc-tree.yaml
================================================
---
properties:
  - name: sortBy
    type: string
    description: |
      Override the default sort parameter set by [`geekdocFileTreeSortBy`](/usage/configuration/#site-configuration).
    required: false
    defaultValue: .Site.Params.geekdocFileTreeSortBy


================================================
FILE: exampleSite/data/properties/shortcode-toc.yaml
================================================
---
properties:
  - name: format
    type: string
    description: |
      Format of the returned ToC. The `html` format creates an HTML wrapper to enable the `geekdocToC` parameter that limits
      the maximum ToC level to be displayed. This variant also automatically inserts a horizontal line after the ToC. The `raw` format
      returns the unformatted ToC, the parameter `geekdocToC` does not work in this mode. Supported values are `html|raw`.
    required: false
    defaultValue: html


================================================
FILE: exampleSite/layouts/shortcodes/sprites.html
================================================
<div class="flex flex-wrap justify-center">
  {{ range $key, $value := hugo.Data.sprites.geekdoc }}
    <div class="flex flex-grid icon-grid">
      <div class="flex align-center justify-center icon-grid__line">
        <svg class="gdoc-icon {{ $key }}"><use xlink:href="#{{ $key }}"></use></svg>
      </div>
      <div class="flex align-center justify-center icon-grid__line icon-grid__line--text">
        <span>#{{ (replace $key "_" "_<wbr>") | safeHTML }}</span>
      </div>
    </div>
  {{ end }}
</div>


================================================
FILE: exampleSite/static/.htaccess
================================================
ErrorDocument 404 /404.html

ExpiresActive On
ExpiresDefault "access plus 600 seconds"
ExpiresByType text/css "access plus 1 week"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType text/html "access plus 1 seconds"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType image/gif "access plus 1 week"
ExpiresByType image/jpeg "access plus 1 week"
ExpiresByType image/png "access plus 1 week"
ExpiresByType image/x-icon "access plus 1 month"
ExpiresByType image/svg+xml "access plus 1 week"
ExpiresByType application/x-font-woff "access plus 1 week"
ExpiresByType application/font-woff2 "access plus 1 week"


================================================
FILE: exampleSite/static/_includes/example.html.part
================================================
<p>
<i><b>Example HTML include</b></i>
</p>

<h4>This is heading 4</h4>
<h5>This is heading 5</h5>
<h6>This is heading 6</h6>


================================================
FILE: exampleSite/static/_includes/example.md.part
================================================
_**Example Markdown include**_

File including a simple Markdown table.

| Head 1 | Head 2 | Head 3 |
| ------ | ------ | ------ |
| 1      | 2      | 3      |


================================================
FILE: exampleSite/static/custom.css
================================================
:root {
  --code-max-height: 60rem;
}

.icon-grid {
  width: 8rem;
  height: 8rem;
  margin: 0.2em;
  text-align: center;
  padding: 0.3em;
}

.icon-grid__line {
  height: 4rem;
}

.icon-grid__line .gdoc-icon {
  width: 3em;
  height: 3em;
}

.icon-grid__line--text {
  font-size: 0.8em;
}


================================================
FILE: exampleSite/static/custom.css.example
================================================
/* Global customization */

:root {
  --code-max-height: 60rem;

  --header-font-family: "DancingScript";
  --body-font-family: "DancingScript";
  --code-font-family: "DancingScript";
}

/* Light mode theming */
:root,
:root[color-theme="light"] {
  --header-background: #4ec58a;
  --header-font-color: #ffffff;

  --body-background: #ffffff;
  --body-font-color: #343a40;

  --mark-color: #ffab00;

  --button-background: #62cb97;
  --button-border-color: #4ec58a;

  --link-color: #518169;
  --link-color-visited: #c54e8a;

  --code-background: #f5f6f8;
  --code-accent-color: #e3e7eb;
  --code-accent-color-lite: #eff1f3;
  --code-font-color: #5f5f5f;

  --code-copy-background: #f5f6f8;
  --code-copy-font-color: #6b7784;
  --code-copy-border-color: #adb4bc;
  --code-copy-success-color: #00c853;

  --accent-color: #e9ecef;
  --accent-color-lite: #f8f9fa;

  --control-icons: #b2bac1;

  --footer-background: #112b3c;
  --footer-font-color: #ffffff;
  --footer-link-color: #ffcc5c;
  --footer-link-color-visited: #ffcc5c;
}
@media (prefers-color-scheme: light) {
  :root {
    --header-background: #4ec58a;
    --header-font-color: #ffffff;

    --body-background: #ffffff;
    --body-font-color: #343a40;

    --mark-color: #ffab00;

    --button-background: #62cb97;
    --button-border-color: #4ec58a;

    --link-color: #518169;
    --link-color-visited: #c54e8a;

    --code-background: #f5f6f8;
    --code-accent-color: #e3e7eb;
    --code-accent-color-lite: #eff1f3;
    --code-font-color: #5f5f5f;

    --code-copy-background: #f5f6f8;
    --code-copy-font-color: #6b7784;
    --code-copy-border-color: #adb4bc;
    --code-copy-success-color: #00c853;

    --accent-color: #e9ecef;
    --accent-color-lite: #f8f9fa;

    --control-icons: #b2bac1;

    --footer-background: #112b3c;
    --footer-font-color: #ffffff;
    --footer-link-color: #ffcc5c;
    --footer-link-color-visited: #ffcc5c;
  }
}

/* Dark mode theming */
:root[color-theme="dark"] {
  --header-background: #4ec58a;
  --header-font-color: #ffffff;

  --body-background: #343a40;
  --body-font-color: #ced3d8;

  --mark-color: #ffab00;

  --button-background: #62cb97;
  --button-border-color: #4ec58a;

  --link-color: #7ac29e;
  --link-color-visited: #c27a9e;

  --code-background: #2f353a;
  --code-accent-color: #262b2f;
  --code-accent-color-lite: #2b3035;
  --code-font-color: #b9b9b9;

  --code-copy-background: #343a40;
  --code-copy-font-color: #6b7784;
  --code-copy-border-color: #6b7784;
  --code-copy-success-color: #37905c;

  --accent-color: #2b3035;
  --accent-color-lite: #2f353a;

  --control-icons: #b2bac1;

  --footer-background: #112b3c;
  --footer-font-color: #ffffff;
  --footer-link-color: #ffcc5c;
  --footer-link-color-visited: #ffcc5c;
}
@media (prefers-color-scheme: dark) {
  :root {
    --header-background: #4ec58a;
    --header-font-color: #ffffff;

    --body-background: #343a40;
    --body-font-color: #ced3d8;

    --mark-color: #ffab00;

    --button-background: #62cb97;
    --button-border-color: #4ec58a;

    --link-color: #7ac29e;
    --link-color-visited: #c27a9e;

    --code-background: #2f353a;
    --code-accent-color: #262b2f;
    --code-accent-color-lite: #2b3035;
    --code-font-color: #b9b9b9;

    --code-copy-background: #343a40;
    --code-copy-font-color: #6b7784;
    --code-copy-border-color: #6b7784;
    --code-copy-success-color: #37905c;

    --accent-color: #2b3035;
    --accent-color-lite: #2f353a;

    --control-icons: #b2bac1;

    --footer-background: #112b3c;
    --footer-font-color: #ffffff;
    --footer-link-color: #ffcc5c;
    --footer-link-color-visited: #ffcc5c;
  }
}

@font-face {
  font-family: "DancingScript";
  src:
    url("fonts/DancingScript.woff2") format("woff2"),
    url("fonts/DancingScript.woff") format("woff");
  font-weight: normal;
  font-style: normal;
  font-display: swap;
}


================================================
FILE: i18n/am.yaml
================================================
---
edit_page: ገጹን ማስተካከያ

nav_navigation: መሄጃ
nav_tags: መለያዎች
nav_more: ተጨማሪ
nav_top: ወደ ላይ ተመለስ

form_placeholder_search: ፈልግ

error_page_title: ጠፋብዎት? አይጨነቁ።
error_message_title: ጠፋብዎት?
error_message_code: አልተገኘም
error_message_text: >
  ገጹን ማግኘት አልተቻለም፤ ነገር ግን አይጨነቁ፤ በዚህ <a class="gdoc-error__link" href="{{ . }}">ገጽ</a> መመለስ ይችላሉ።

button_toggle_dark: ብሩህ/ጨለማ መቀያየሪያ
button_nav_open: መሄጃውን ክፈት
button_nav_close: መሄጃውን ዝጋ
button_menu_open: ምርጫዎችን ክፈት
button_menu_close: ምርጫዎችን ዝጋ
button_homepage: ወደ መጀመሪያ ገጽ ተመለስ

title_anchor_prefix: "ማያያዣ ወደ:"

posts_read_more: ሙሉውን ያንብቡ
posts_read_time:
  one: "ለማንበብ አንድ ደቂቃ"
  other: "{{ . }} ደቂቃዎች ለማንበብ"
posts_update_prefix: መጨረሻ የዘመነው
posts_count:
  one: "አንድ ጽሑፍ"
  other: "{{ . }} ጽሑፎች"
posts_tagged_with: ከ '{{ . }}' ጋር የተዛመዱ ጽሑፎች በሙሉ

footer_build_with: >
  በ <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> የተገነባ ከ
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg> ጋር
footer_legal_notice: ሕጋዊ መረጃዎች
footer_privacy_policy: ስለ መረጃዎ አያያዝ ያለን አቋም
footer_content_license_prefix: >
  ስለ ይዘቱ ባለመብትነት መረጃ

language_switch_no_translation_prefix: "ያልተተረጐመ ገጽ:"

propertylist_required: ግድ የሚያስፈልግ
propertylist_optional: ግድ ያልሆነ
propertylist_default: በባዶ ፈንታ

pagination_page_prev: ያለፈው
pagination_page_next: ቀጣይ
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/cs.yaml
================================================
---
edit_page: Upravit stránku

nav_navigation: Navigace
nav_tags: Tagy
nav_more: Více
nav_top: Zpět nahoru

form_placeholder_search: Vyhledat

error_page_title: Ztracen? Nic se neděje
error_message_title: Ztracen?
error_message_code: Error 404
error_message_text: >
  Vypadá to že stránka, kterou hledáte, neexistuje. Nemějte obavy, můžete
  se vrátit zpět na <a class="gdoc-error__link" href="{{ . }}">domovskou stránku</a>.

button_toggle_dark: Přepnout tmavý/světlý/automatický režim
button_nav_open: Otevřít navigaci
button_nav_close: Zavřít navigaci
button_menu_open: Otevřít lištu nabídky
button_menu_close: Zavřít lištu nabídky
button_homepage: Zpět na domovskou stránku

title_anchor_prefix: "Odkaz na:"

posts_read_more: Přečíst celý příspěvek
posts_read_time:
  one: "Doba čtení: 1 minuta"
  other: "Doba čtení: {{ . }} minut(y)"
posts_update_prefix: Naposledy upraveno
posts_count:
  one: "Jeden příspěvek"
  other: "Příspěvků: {{ . }}"
posts_tagged_with: Všechny příspěvky označeny '{{ . }}'

footer_build_with: >
  Vytvořeno za pomocí <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> a
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Právní upozornění
footer_privacy_policy: Zásady ochrany soukromí
footer_content_license_prefix: >
  Obsah licencovaný pod

language_switch_no_translation_prefix: "Stránka není přeložena:"

propertylist_required: povinné
propertylist_optional: volitené
propertylist_default: výchozí

pagination_page_prev: předchozí
pagination_page_next: další
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/da.yaml
================================================
---
edit_page: Rediger side

nav_navigation: Navigation
nav_tags: Tags
nav_more: Mere
nav_top: Til toppen

form_placeholder_search: Søg

error_page_title: Faret vild? Bare rolig
error_message_title: Lost?
error_message_code: Fejl 404
error_message_text: >
  Det du leder efter kan ikke findes. Bare rolig, du kan komme tilbage til
  <a class="gdoc-error__link" href="{{ . }}">forsiden</a>.

button_toggle_dark: Skift Dark/Light/Auto mode
button_nav_open: Åben navigation
button_nav_close: Luk navigation
button_menu_open: Åben menubar
button_menu_close: Luk menubar
button_homepage: Tilbage til forsiden

title_anchor_prefix: "Link til:"

posts_read_more: Læs fulde indlæg
posts_read_time:
  one: "Et minut at gennemlæse"
  other: "{{ . }} minutter at gennemlæse"
posts_update_prefix: Opdateret den
posts_count:
  one: "Et indlæg"
  other: "{{ . }} indlæg"
posts_tagged_with: Alle indslag tagget med '{{ . }}'

footer_build_with: >
  Bygget med <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> og
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Forretningsbetingelser
footer_privacy_policy: Privatlivspolitik
footer_content_license_prefix: >
  Indhold licenseret under

language_switch_no_translation_prefix: "Indlæg ikke oversat:"

propertylist_required: påkrævet
propertylist_optional: valgfri
propertylist_default: udgangspunkt

pagination_page_prev: forrige
pagination_page_next: næste
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/de.yaml
================================================
---
edit_page: Seite bearbeiten

nav_navigation: Navigation
nav_tags: Tags
nav_more: Weitere
nav_top: Nach oben

form_placeholder_search: Suchen

error_page_title: Verlaufen? Keine Sorge
error_message_title: Verlaufen?
error_message_code: Fehler 404
error_message_text: >
  Wir können die Seite nach der Du gesucht hast leider nicht finden. Keine Sorge,
  wir bringen Dich zurück zur <a class="gdoc-error__link" href="{{ . }}">Startseite</a>.

button_toggle_dark: Wechsel zwischen Dunkel/Hell/Auto Modus
button_nav_open: Navigation öffnen
button_nav_close: Navigation schließen
button_menu_open: Menüband öffnen
button_menu_close: Menüband schließen
button_homepage: Zurück zur Startseite

title_anchor_prefix: "Link zu:"

posts_read_more: Ganzen Artikel lesen
posts_read_time:
  one: "Eine Minute Lesedauer"
  other: "{{ . }} Minuten Lesedauer"
posts_update_prefix: Aktualisiert am
posts_count:
  one: "Ein Artikel"
  other: "{{ . }} Artikel"
posts_tagged_with: Alle Artikel mit dem Tag '{{ . }}'

footer_build_with: >
  Entwickelt mit <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> und
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Impressum
footer_privacy_policy: Datenschutzerklärung
footer_content_license_prefix: >
  Inhalt lizensiert unter

language_switch_no_translation_prefix: "Seite nicht übersetzt:"

propertylist_required: erforderlich
propertylist_optional: optional
propertylist_default: Standardwert

pagination_page_prev: vorher
pagination_page_next: weiter
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/en.yaml
================================================
---
edit_page: Edit page

nav_navigation: Navigation
nav_tags: Tags
nav_more: More
nav_top: Back to top

form_placeholder_search: Search

error_page_title: Lost? Don't worry
error_message_title: Lost?
error_message_code: Error 404
error_message_text: >
  Seems like what you are looking for can't be found. Don't worry, we can
  bring you back to the <a class="gdoc-error__link" href="{{ . }}">homepage</a>.

button_toggle_dark: Toggle Dark/Light/Auto mode
button_nav_open: Open Navigation
button_nav_close: Close Navigation
button_menu_open: Open Menu Bar
button_menu_close: Close Menu Bar
button_homepage: Back to homepage

title_anchor_prefix: "Anchor to:"

posts_read_more: Read full post
posts_read_time:
  one: "One minute to read"
  other: "{{ . }} minutes to read"
posts_update_prefix: Updated on
posts_count:
  one: "One post"
  other: "{{ . }} posts"
posts_tagged_with: All posts tagged with '{{ . }}'

footer_build_with: >
  Built with <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> and
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Legal Notice
footer_privacy_policy: Privacy Policy
footer_content_license_prefix: >
  Content licensed under

language_switch_no_translation_prefix: "Page not translated:"

propertylist_required: required
propertylist_optional: optional
propertylist_default: default

pagination_page_prev: prev
pagination_page_next: next
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/es.yaml
================================================
---
edit_page: Editar página

nav_navigation: Navegación
nav_tags: Etiquetas
nav_more: Más
nav_top: Inicio de la página

form_placeholder_search: Buscar

error_page_title: Perdido? No te preocupes
error_message_title: Perdido?
error_message_code: Error 404
error_message_text: >
  Al parecer, lo que estás buscando no pudo ser encontrado. No te preocupes, podemos
  llevarte de vuelta al <a class="gdoc-error__link" href="{{ . }}">inicio</a>.

button_toggle_dark: Cambiar el modo Oscuro/Claro/Auto
button_nav_open: Abrir la Navegación
button_nav_close: Cerrar la Navegación
button_menu_open: Abrir el Menú Bar
button_menu_close: Cerrar el Menú Bar
button_homepage: Volver al Inicio

title_anchor_prefix: "Anclado a:"

posts_read_more: Lee la publicación completa
posts_read_time:
  one: "Un minuto para leer"
  other: "{{ . }} minutos para leer"
posts_update_prefix: Actualizado en
posts_count:
  one: "Una publicación"
  other: "{{ . }} publicaciones"
posts_tagged_with: Todas las publicaciones etiquetadas con '{{ . }}'

footer_build_with: >
  Creado con <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> y
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Aviso Legal
footer_privacy_policy: Política de Privacidad
footer_content_license_prefix: >
  Contenido licenciado con

language_switch_no_translation_prefix: "Página no traducida:"

propertylist_required: requerido
propertylist_optional: opcional
propertylist_default: estándar

pagination_page_prev: previo
pagination_page_next: siguiente
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/fr.yaml
================================================
---
edit_page: Editer la page

nav_navigation: Navigation
nav_tags: Tags
nav_more: Plus
nav_top: Retour au haut de page

form_placeholder_search: Chercher

error_page_title: Perdu? Ne t'inquiète pas
error_message_title: Perdu?
error_message_code: Error 404
error_message_text: >
  On dirait que ce que vous cherchez est introuvable. Ne vous inquiétez pas, nous pouvons
  vous ramèner à la <a class="gdoc-error__link" href="{{ . }}">page d'accueil</a>.

button_toggle_dark: Basculer le mode Sombre/Clair/Auto
button_nav_open: Ouvrir la navigation
button_nav_close: Fermer la navigation
button_menu_open: Ouvrir la barre de menus
button_menu_close: Fermer la barre de menus
button_homepage: retour à la page d'accueil

title_anchor_prefix: "Ancrer à :"

posts_read_more: Lire l'article complet
posts_read_time:
  one: "Une minute pour lire"
  other: "{{ . }} minutes à lire"
posts_update_prefix: Mis à jour le
posts_count:
  one: "Un billet"
  other: "{{ . }} billets"
posts_tagged_with: Tous les articles marqués avec '{{ . }}'

footer_build_with: >
  Construit avec <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> et
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Mentions légales
footer_privacy_policy: Politique de confidentialité
footer_content_license_prefix: >
  Contenu sous licence

language_switch_no_translation_prefix: "Page non traduite:"

propertylist_required: requis
propertylist_optional: facultatif
propertylist_default: défaut

pagination_page_prev: précédent
pagination_page_next: suivant
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/it.yaml
================================================
---
edit_page: Modifica la pagina

nav_navigation: Navigazione
nav_tags: Etichette
nav_more: Altro
nav_top: Torna su

form_placeholder_search: Cerca

error_page_title: Perso? Non ti preoccupare
error_message_title: Perso?
error_message_code: Errore 404
error_message_text: >
  Sembra che non sia possibile trovare quello che stavi cercando. Non ti preoccupare,
  possiamo riportarti alla <a class="gdoc-error__link" href="{{ . }}">pagina iniziale</a>.

button_toggle_dark: Seleziona il tema Chiaro/Scuro/Automatico
button_nav_open: Apri la Navigazione
button_nav_close: Chiudi la Navigazione
button_menu_open: Apri la Barra del Menu
button_menu_close: Chiudi la Barra del Menu
button_homepage: Torna alla pagina iniziale

title_anchor_prefix: "Ancora a:"

posts_read_more: Leggi tutto il post
posts_read_time:
  one: "Tempo di lettura: un minuto"
  other: "Tempo di lettura: {{ . }} minuti"
posts_update_prefix: Aggiornato il
posts_count:
  one: "Un post"
  other: "{{ . }} post"
posts_tagged_with: Tutti i post etichettati con '{{ . }}'

footer_build_with: >
  Realizzato con <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> e
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Avviso Legale
footer_privacy_policy: Politica sulla Privacy
footer_content_license_prefix: >
  Contenuto sotto licenza

language_switch_no_translation_prefix: "Pagina non tradotta:"

propertylist_required: richiesto
propertylist_optional: opzionale
propertylist_default: valore predefinito

pagination_page_prev: precedente
pagination_page_next: prossimo
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/ja.yaml
================================================
---
edit_page: ページの編集

nav_navigation: ナビゲーション
nav_tags: タグ
nav_more: さらに
nav_top: トップへ戻る

form_placeholder_search: 検索

error_page_title: お困りですか?ご心配なく
error_message_title: お困りですか?
error_message_code: 404 エラー
error_message_text: >
  お探しのものが見つからないようです。<a class="gdoc-error__link" href="{{ . }}">トップページ</a>
  へ戻ることができるので、ご安心ください。

button_toggle_dark: モードの切替 ダーク/ライト/自動
button_nav_open: ナビゲーションを開く
button_nav_close: ナビゲーションを閉じる
button_menu_open: メニューバーを開く
button_menu_close: メニューバーを閉じる
button_homepage: トップページへ戻る

title_anchor_prefix: "アンカー先:"

posts_read_more: 全投稿を閲覧
posts_read_time:
  one: "読むのに 1 分かかります"
  other: "読むのに要する時間 {{ . }} (分)"
posts_update_prefix: 更新時刻
posts_count:
  one: "一件の投稿"
  other: "{{ . }} 件の投稿"
posts_tagged_with: "'{{ . }}'のタグが付いた記事全部"

footer_build_with: >
  <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> でビルドしています。
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: 法的な告知事項
footer_privacy_policy: プライバシーポリシー
footer_content_license_prefix: >
  提供するコンテンツのライセンス

language_switch_no_translation_prefix: "未翻訳のページ:"

propertylist_required: 必須
propertylist_optional: 任意
propertylist_default: 既定値

pagination_page_prev: 前
pagination_page_next: 次
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/nl.yaml
================================================
---
edit_page: Wijzig pagina

nav_navigation: Navigatie
nav_tags: Markering
nav_more: Meer
nav_top: Terug naar boven

form_placeholder_search: Zoek

error_page_title: Verdwaald? Geen probleem
error_message_title: Verdwaald?
error_message_code: Error 404
error_message_text: >
  Het lijkt er op dat wat je zoekt niet gevonden kan worden. Geen probleem,
  we kunnen je terug naar de <a class="gdoc-error__link" href="{{ . }}">startpagina</a> brengen.

button_toggle_dark: Wijzig Donker/Licht/Auto weergave
button_nav_open: Open navigatie
button_nav_close: Sluit navigatie
button_menu_open: Open menubalk
button_menu_close: Sluit menubalk
button_homepage: Terug naar startpagina

title_anchor_prefix: "Link naar:"

posts_read_more: Lees volledige bericht
posts_read_time:
  one: "Een minuut leestijd"
  other: "{{ . }} minuten leestijd"
posts_update_prefix: Bijgewerkt op
posts_count:
  one: "Een bericht"
  other: "{{ . }} berichten"
posts_tagged_with: Alle berichten gemarkeerd met '{{ . }}'

footer_build_with: >
  Gebouwd met <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> en
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg> 
footer_legal_notice: Juridische mededeling
footer_privacy_policy: Privacybeleid
footer_content_license_prefix: >
  Inhoud gelicenseerd onder

language_switch_no_translation_prefix: "Pagina niet vertaald:"

propertylist_required: verplicht
propertylist_optional: optioneel
propertylist_default: standaard

pagination_page_prev: vorige
pagination_page_next: volgende
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/oc.yaml
================================================
---
edit_page: Modificar la pagina

nav_navigation: Navegacion
nav_tags: Etiquetas
nav_more: Mai
nav_top: Tornar ennaut

form_placeholder_search: Cercar

error_page_title: Perdut ? Cap de problèma
error_message_title: Perdut ?
error_message_code: Error 404
error_message_text: >
  Sembla que cercatz quicòm que se pòt pas trobat. Vos’n fagatz pas vos podèm
  tornar a la <a class="gdoc-error__link" href="{{ . }}">pagina d’acuèlh</a>.

button_toggle_dark: Alternar lo mòde escur/clar/auto
button_nav_open: Dobrir la navegacion
button_nav_close: Tampar la navegacion
button_menu_open: Dobrir la barra de menú
button_menu_close: Tampar la barra de menú
button_homepage: Tornar a la pagina d’acuèlh

title_anchor_prefix: "Ancorar a:"

posts_read_more: Legir la publicacion complèta
posts_read_time:
  one: "Una minuta de lectura"
  other: "{{ . }} minutas de lectura"
posts_update_prefix: Actualizada lo
posts_count:
  one: "Una publicacion"
  other: "{{ . }} publicacions"
posts_tagged_with: Totas las publicacions amb '{{ . }}'

footer_build_with: >
  Construch amb <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a> e
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg>
footer_legal_notice: Mencions legalas
footer_privacy_policy: politica de confidencialitat
footer_content_license_prefix: >
  Contengut sota licéncia

language_switch_no_translation_prefix: "Pagina non traducha :"

propertylist_required: requerit
propertylist_optional: opcional
propertylist_default: per defaut

pagination_page_prev: prec.
pagination_page_next: seg.
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: i18n/zh-cn.yaml
================================================
---
edit_page: 编辑页面

nav_navigation: 导航
nav_tags: 标签
nav_more: 更多
nav_top: 回到顶部

form_placeholder_search: 搜索

error_page_title: 迷路了? 不用担心
error_message_title: 迷路了?
error_message_code: 错误 404
error_message_text: >
  好像找不到你要找的东西。 别担心,我们可以
  带您回到<a class="gdoc-error__link" href="{{ . }}">主页</a>。

button_toggle_dark: 切换暗/亮/自动模式
button_nav_open: 打开导航
button_nav_close: 关闭导航
button_menu_open: 打开菜单栏
button_menu_close: 关闭菜单栏
button_homepage: 返回首页

title_anchor_prefix: "锚定到:"

posts_read_more: 阅读全文
posts_read_time:
  one: "一分钟阅读时间"
  other: "{{ . }} 分钟阅读时间"
posts_update_prefix: 更新时间
posts_count:
  one: 一篇文章
  other: "{{ . }} 个帖子"
posts_tagged_with: 所有带有“{{ . }}”标签的帖子。

footer_build_with: >
  基于 <a href="https://gohugo.io/" class="gdoc-footer__link">Hugo</a>
  <svg class="gdoc-icon gdoc_heart"><use xlink:href="#gdoc_heart"></use></svg> 制作
footer_legal_notice: "法律声明"
footer_privacy_policy: "隐私政策"
footer_content_license_prefix: >
  内容许可证

language_switch_no_translation_prefix: "页面未翻译:"

propertylist_required: 需要
propertylist_optional: 可选
propertylist_default: 默认值

pagination_page_prev: 以前
pagination_page_next: 下一个
pagination_page_state: "{{ .PageNumber }}/{{ .TotalPages }}"


================================================
FILE: layouts/404.html
================================================
<!DOCTYPE html>
<html lang="{{ .Site.Language.Lang }}">
  <head>
    {{ partial "head/meta" . }}
    <title>{{ i18n "error_page_title" }}</title>

    {{ partial "head/favicons" . }}
    {{ partial "head/others" . }}
  </head>

  <body>
    {{ partial "svg-icon-symbols" . }}


    <div class="wrapper">
      {{ partial "site-header" (dict "Root" . "MenuEnabled" false) }}


      <main class="gdoc-error flex-even">
        <div class="flex align-center justify-center">
          <div class="gdoc-error__icon">
            <svg class="gdoc-icon gdoc_cloud_off"><use xlink:href="#gdoc_cloud_off"></use></svg>
          </div>
          <div class="gdoc-error__message">
            <div class="gdoc-error__line gdoc-error__title">{{ i18n "error_message_title" }}</div>
            <div class="gdoc-error__line gdoc-error__code">{{ i18n "error_message_code" }}</div>
            <div class="gdoc-error__line gdoc-error__help">
              {{ i18n "error_message_text" .Site.Home.Permalink | safeHTML }}
            </div>
          </div>
        </div>
      </main>

      {{ partial "site-footer" . }}

    </div>
  </body>
</html>


================================================
FILE: layouts/_default/_markup/render-codeblock-mermaid.html
================================================
<!-- prettier-ignore-start -->
{{ if not (.Page.Scratch.Get "mermaid") }}
  <!-- Include mermaid only first time -->
  <script defer src="{{ index (index hugo.Data.assets "mermaid.js") "src" | relURL }}"></script>
  {{ .Page.Scratch.Set "mermaid" true }}
{{ end }}
<!-- prettier-ignore-end -->

<pre class="gdoc-mermaid mermaid text-center">
  {{- .Inner -}}
</pre>


================================================
FILE: layouts/_default/_markup/render-heading.html
================================================
{{- $showAnchor := (and (default true .Page.Params.geekdocAnchor) (default true .Page.Site.Params.geekdocAnchor)) -}}


<!-- prettier-ignore-start -->
{{- if $showAnchor -}}
<div class="flex align-center gdoc-page__anchorwrap">
    <h{{ .Level }} id="{{ .Anchor | safeURL }}" {{- with .Attributes.class }}
        class="{{ . }}"
    {{- end }}
    >
        {{ .Text | safeHTML }}
    </h{{ .Level }}>
    <a data-clipboard-text="{{ .Page.Permalink }}#{{ .Anchor | safeURL }}" class="gdoc-page__anchor clip flex align-center" title="{{ i18n "title_anchor_prefix" }} {{ .Text | safeHTML }}" aria-label="{{ i18n "title_anchor_prefix" }} {{ .Text | safeHTML }}" href="#{{ .Anchor | safeURL }}">
        <svg class="gdoc-icon gdoc_link"><use xlink:href="#gdoc_link"></use></svg>
    </a>
</div>
{{- else -}}
<div class="gdoc-page__anchorwrap">
    <h{{ .Level }} id="{{ .Anchor | safeURL }}" {{- with .Attributes.class }}
        class="{{ . }}"
    {{- end }}
    >
        {{ .Text | safeHTML }}
    </h{{ .Level }}>
</div>
{{- end -}}
<!-- prettier-ignore-end -->


================================================
FILE: layouts/_default/_markup/render-image.html
================================================
<img
  src="{{ .Destination | safeURL }}"
  alt="{{ .Text }}"
  {{ with .Title }}title="{{ . }}"{{ end }}
/>
{{- /* Drop trailing newlines */ -}}


================================================
FILE: layouts/_default/_markup/render-link.html
================================================
{{- $raw := or (hasPrefix .Text "<img") (hasPrefix .Text "<figure") -}}
{{- $code := hasPrefix .Text "<code" -}}
<a
  class="gdoc-markdown__link{{ if $raw -}}
    --raw
  {{- else if $code -}}
    --code
  {{- end }}"
  href="{{ .Destination | safeURL }}"
  {{- with .Title }}{{ printf "title=\"%s\"" . | safeHTMLAttr }}{{- end }}
>
  {{- .Text | safeHTML -}}
</a>
{{- /* Drop trailing newlines */ -}}


================================================
FILE: layouts/_default/baseof.html
================================================
<!DOCTYPE html>
<html
  lang="{{ .Site.Language.Lang }}"
  class="color-toggle-hidden"
  {{ if default false .Site.Params.geekdocDarkModeCode }}code-theme="dark"{{ end }}
>
  <head>
    {{ partial "head/meta" . }}
    <title>
      {{- if eq .Kind "home" -}}
        {{ .Site.Title }}
      {{- else -}}
        {{ printf "%s | %s" (partial "utils/title" .) .Site.Title }}
      {{- end -}}
    </title>

    {{ partial "head/favicons" . }}
    {{ partial "head/rel-me" . }}
    {{ partial "head/microformats" . }}
    {{ partial "head/others" . }}
    {{ partial "head/custom" . }}
  </head>

  <body itemscope itemtype="https://schema.org/WebPage">
    <div class="w-full flex justify-center">
      <a href="#main-content" id="gdoc-to-main" class="gdoc-markdown__link">Skip to main content</a>
    </div>

    {{ partial "svg-icon-symbols" . }}


    <div
      class="wrapper {{ if default false .Site.Params.geekdocDarkModeDim }}dark-mode-dim{{ end }}"
    >
      {{ $navEnabled := default true .Page.Params.geekdocNav }}
      {{ partial "site-header" (dict "Root" . "MenuEnabled" $navEnabled) }}


      <main class="container flex flex-even">
        {{ if $navEnabled }}
          <aside class="gdoc-nav">
            {{ partial "menu" . }}
          </aside>
        {{ end }}


        <div class="gdoc-page">
          {{ template "main" . }}


          {{ $showPrevNext := (default true .Site.Params.geekdocNextPrev) }}
          {{ if $showPrevNext }}
          <div class="gdoc-page__footer flex flex-wrap justify-between">
            {{ if .Site.Params.geekdocMenuBundle }}
              {{ partial "menu-bundle-np" . }}
            {{ else }}
              {{ partial "menu-filetree-np" . }}
            {{ end }}
          </div>
          {{ end }}
        </div>
      </main>

      {{ partial "site-footer" . }}
    </div>

    {{ partial "foot" . }}
  </body>
</html>


================================================
FILE: layouts/_default/list.html
================================================
{{ define "main" }}
  {{ partial "page-header" . }}


  <article
    class="gdoc-markdown gdoc-markdown__align--{{ default "left" (.Page.Params.geekdocAlign | lower) }}"
    id="main-content" tabindex="-1"
  >
    <h1>{{ partial "utils/title" . }}</h1>
    {{ partial "utils/content" . }}
  </article>
{{ end }}


================================================
FILE: layouts/_default/single.html
================================================
{{ define "main" }}
  {{ partial "page-header" . }}


  <article
    class="gdoc-markdown gdoc-markdown__align--{{ default "left" (.Page.Params.geekdocAlign | lower) }}"
    id="main-content" tabindex="-1"
  >
    <h1>{{ partial "utils/title" . }}</h1>
    {{ partial "page-metadata" . }}
    {{ partial "utils/content" . }}
  </article>
{{ end }}


================================================
FILE: layouts/_default/taxonomy.html
================================================
{{ define "main" }}
  <div id="main-content" tabindex="-1">
  {{ range .Paginator.Pages }}
    <article class="gdoc-post">
      <header class="gdoc-post__header">
        <h1 class="gdoc-post__title">
          <a href="{{ .RelPermalink }}">{{ partial "utils/title" . }}</a>
        </h1>
      </header>

      <section class="gdoc-markdown">
        {{ .Summary }}
      </section>

      <div class="gdoc-post__readmore">
        {{ if .Truncated }}
          <a
            class="flex-inline align-center fake-link"
            title="{{ i18n "posts_read_more" }}"
            href="{{ .RelPermalink }}"
          >
            {{ i18n "posts_read_more" }}
            <i class="gdoc-icon">gdoc_arrow_right_alt</i>
          </a>
        {{ end }}
      </div>

      <footer class="gdoc-post__footer">
        <div class="flex flex-wrap align-center gdoc-post__meta">
          {{ partial "posts/metadata.html" . }}
        </div>
      </footer>
    </article>
  {{ end }}
  </div>
  {{ partial "pagination.html" . }}
{{ end }}

{{ define "post-tag" }}
  <span class="gdoc-post__tag">
    <span class="gdoc-button">
      <a
        class="gdoc-button__link"
        href="{{ .page.RelPermalink }}"
        title="{{ i18n "posts_tagged_with" .name }}"
      >
        {{ .name }}
      </a>
    </span>
  </span>
{{ end }}


================================================
FILE: layouts/_default/terms.html
================================================
{{ define "main" }}
  <div id="main-content" tabindex="-1">
  {{ range .Paginator.Pages.ByTitle }}
    <article class="gdoc-post">
      <header class="gdoc-post__header">
        <h1 class="gdoc-post__title">
          <a href="{{ .RelPermalink }}">{{ partial "utils/title" . }}</a>
        </h1>
      </header>

      <footer class="gdoc-post__meta flex align-center">
        <span class="flex align-center no-wrap">
          {{ $pageCount := len .Pages }}
          <svg class="gdoc-icon gdoc_tag"><use xlink:href="#gdoc_tag"></use></svg>
          <span class="gdoc-post__tag">
            {{ i18n "posts_count" $pageCount }}
          </span>
        </span>

        <span class="flex align-center no-wrap">
          <svg class="gdoc-icon gdoc_star"><use xlink:href="#gdoc_star"></use></svg>
          <span>
            {{ $latest := index .Pages.ByDate 0 }}
            {{ with $latest }}
              <a href="{{ .RelPermalink }}">{{ partial "utils/title" . }}</a>
            {{ end }}
          </span>
        </span>
      </footer>
    </article>
  {{ end }}
  </div>
  {{ partial "pagination.html" . }}
{{ end }}


================================================
FILE: layouts/partials/foot.html
================================================


================================================
FILE: layouts/partials/head/custom.html
================================================
<!--
You can add custom elements to the page header here.

Example:
Ensure to use the absolute path to custom files and place the source files in the `static` folder.

<link rel="stylesheet" type="text/css" href="/custom.css">
<script type="text/javascript" src="/custom.js"></script>
-->


================================================
FILE: layouts/partials/head/favicons.html
================================================
<link rel="icon" type="image/svg+xml" href="{{ "favicon/favicon.svg" | relURL }}" />
<link
  rel="icon"
  type="image/png"
  sizes="32x32"
  href="{{ "favicon/favicon-32x32.png" | relURL }}"
/>
<link
  rel="icon"
  type="image/png"
  sizes="16x16"
  href="{{ "favicon/favicon-16x16.png" | relURL }}"
/>


================================================
FILE: layouts/partials/head/meta.html
================================================
<meta charset="UTF-8" />
<meta name="referrer" content="no-referrer" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="color-scheme" content="light dark" />
{{ hugo.Generator }}

{{ $keywords := default .Site.Params.Keywords .Keywords }}

{{- with partial "utils/description" . }}
  <meta name="description" content="{{ trim (. | plainify) "\n" | safeHTML }}" />
{{- end }}
{{- with $keywords }}
  <meta name="keywords" content="{{ delimit . "," }}" />
{{- end }}


================================================
FILE: layouts/partials/head/microformats.html
================================================
{{ partial "microformats/opengraph.html" . }}
{{ partial "microformats/twitter_cards.html" . }}
{{ partial "microformats/schema" . }}


================================================
FILE: layouts/partials/head/others.html
================================================
{{- if default true .Site.Params.geekdocDarkModeToggle }}
  <script src="{{ index (index hugo.Data.assets "colortheme.js") "src" | relURL }}"></script>
{{- end }}
<script src="{{ index (index hugo.Data.assets "main.js") "src" | relURL }}"></script>

<link
  rel="preload"
  as="font"
  href="{{ "fonts/Metropolis.woff2" | relURL }}"
  type="font/woff2"
  crossorigin="anonymous"
/>
<link
  rel="preload"
  as="font"
  href="{{ "fonts/LiberationSans.woff2" | relURL }}"
  type="font/woff2"
  crossorigin="anonymous"
/>

<link
  rel="preload"
  href="{{ index (index hugo.Data.assets "main.scss") "src" | relURL }}"
  as="style"
/>
<link
  rel="stylesheet"
  href="{{ index (index hugo.Data.assets "main.scss") "src" | relURL }}"
  media="all"
/>

<link
  rel="preload"
  href="{{ index (index hugo.Data.assets "mobile.scss") "src" | relURL }}"
  as="style"
/>
<link
  rel="stylesheet"
  href="{{ index (index hugo.Data.assets "mobile.scss") "src" | relURL }}"
  media="screen and (max-width: 45rem)"
/>

<link
  rel="preload"
  href="{{ index (index hugo.Data.assets "print.scss") "src" | relURL }}"
  as="style"
/>
<link
  rel="stylesheet"
  href="{{ index (index hugo.Data.assets "print.scss") "src" | relURL }}"
  media="print"
/>

<link
  rel="preload"
  href="{{ index (index hugo.Data.assets "custom.css") "src" | relURL }}"
  as="style"
/>
<link
  rel="stylesheet"
  href="{{ index (index hugo.Data.assets "custom.css") "src" | relURL }}"
  media="all"
/>

{{- with .OutputFormats.Get "html" }}
  {{ printf `<link href=%q rel=%q type=%q />` .Permalink .Rel .MediaType.Type | safeHTML }}
{{- end }}

{{- if (default false $.Site.Params.geekdocOverwriteHTMLBase) }}
  <base href="{{ .Site.Home.Permalink }}" />
{{- end }}

{{ printf "<!-- %s -->" "Made with Geekdoc theme https://github.com/thegeeklab/hugo-geekdoc" | safeHTML }}


================================================
FILE: layouts/partials/head/rel-me.html
================================================
<!-- place to set your rel-me links https://microformats.org/wiki/rel-me -->


================================================
FILE: layouts/partials/language.html
================================================
{{ if hugo.IsMultilingual }}
  <span class="gdoc-language">
    <ul class="gdoc-language__selector" tabindex="0" role="button" aria-pressed="false">
      <li>
        {{ range .Site.Languages }}
          {{ if eq . $.Site.Language }}
            <span class="flex align-center">
              <svg class="gdoc-icon gdoc_language"><use xlink:href="#gdoc_language"></use></svg>
              <span>{{ .Lang | upper }}</span>
            </span>
          {{ end }}
        {{ end }}


        <ul class="gdoc-language__list">
          {{ if $.Translations }}
            {{ range $.Translations }}
              <li>
                <a
                  class="flex gdoc-language__entry"
                  title="{{ .Language.LanguageName }}"
                  href="{{ .RelPermalink }}"
                  hreflang="{{ .Lang }}"
                  lang="{{ .Lang }}"
                >
                  {{ .Language.LanguageName }}
                </a>
              </li>
            {{ end }}
          {{ else }}
            {{ range .Site.Languages -}}
              {{ if ne $.Site.Language.Lang .Lang }}
                <li>
                  <a
                    class="flex gdoc-language__entry"
                    title="{{ i18n "language_switch_no_translation_prefix" }} {{ .LanguageName }}"
                    href="{{ .Lang | relLangURL }}"
                    hreflang="{{ .Lang }}"
                    lang="{{ .Lang }}"
                  >
                    {{ .LanguageName }}*
                  </a>
                </li>
              {{ end -}}
            {{ end -}}
          {{ end }}
        </ul>
      </li>
    </ul>
  </span>
{{ end }}


================================================
FILE: layouts/partials/menu-bundle-np.html
================================================
{{ $current := . }}
{{ $site := .Site }}
{{ $current.Scratch.Set "prev" false }}
{{ $current.Scratch.Set "getNext" false }}

{{ $current.Scratch.Set "nextPage" false }}
{{ $current.Scratch.Set "prevPage" false }}

{{ template "menu-bundle-np" dict "sect" hugo.Data.menu.main.main "current" $current "site" $site }}

{{ define "menu-bundle-np" }}
  {{ $current := .current }}
  {{ $site := .site }}

  {{ range sort (default (seq 0) .sect) "weight" }}
    {{ $current.Scratch.Set "current" $current }}
    {{ $current.Scratch.Set "site" $site }}

    {{ $ref := default false .ref }}
    {{ if $ref }}
      {{ $site := $current.Scratch.Get "site" }}
      {{ $this := $site.GetPage .ref }}
      {{ $current := $current.Scratch.Get "current" }}

      {{ if reflect.IsMap .name }}
        {{ $current.Scratch.Set "refName" (index .name $site.Language.Lang) }}
      {{ else }}
        {{ $current.Scratch.Set "refName" .name }}
      {{ end }}
      {{ $name := $current.Scratch.Get "refName" }}

      {{ if $current.Scratch.Get "getNext" }}
        {{ $current.Scratch.Set "nextPage" (dict "name" $name "this" $this) }}
        {{ $current.Scratch.Set "getNext" false }}
      {{ end }}

      {{ if eq $current $this }}
        {{ $current.Scratch.Set "prevPage" ($current.Scratch.Get "prev") }}
        {{ $current.Scratch.Set "getNext" true }}
      {{ end }}

      {{ $current.Scratch.Set "prev" (dict "name" $name "this" $this) }}
    {{ end }}

    {{ $sub := default false .sub }}
    {{ if $sub }}
      {{ template "menu-bundle-np" dict "sect" $sub "current" ($current.Scratch.Get "current") "site" ($current.Scratch.Get "site") }}
    {{ end }}
  {{ end }}
{{ end }}

<span class="gdoc-page__nav">
  {{ with ($current.Scratch.Get "prevPage") }}
    <a
      class="gdoc-page__nav--prev flex align-center"
      href="{{ .this.RelPermalink }}"
      title="{{ .name }}"
    >
      <i class="gdoc-icon">gdoc_arrow_left_alt</i>
      {{ .name }}
    </a>
  {{ end }}
</span>
<span class="gdoc-page__nav">
  {{ with ($current.Scratch.Get "nextPage") }}
    <a
      class="gdoc-page__nav--next flex align-center"
      href="{{ .this.RelPermalink }}"
      title="{{ .name }}"
    >
      {{ .name }}
      <i class="gdoc-icon">gdoc_arrow_right_alt</i>
    </a>
  {{ end }}
</span>


================================================
FILE: layouts/partials/menu-bundle.html
================================================
{{ $current := .current }}
{{ template "menu-file" dict "sect" .source "current" $current "site" $current.Site }}


<!-- template -->
{{ define "menu-file" }}
  {{ $current := .current }}
  {{ $site := .site }}


  <ul class="gdoc-nav__list">
    {{ range sort (default (seq 0) .sect) "weight" }}
      {{ $name := .name }}
      {{ if reflect.IsMap .name }}
        {{ $name = (index .name $site.Language.Lang) }}
      {{ end }}


      <li>
        {{ $ref := default false .ref }}
        {{ if $ref }}
          {{ $this := $site.GetPage .ref }}
          {{ $icon := default false .icon }}
          {{ $numberOfPages := (add (len $this.Pages) (len $this.Sections)) }}
          {{ $isCurrent := eq $current $this }}
          {{ $isAncestor := $this.IsAncestor $current }}
          {{ $id := substr (sha1 $this.Permalink) 0 8 }}
          {{ $doCollapse := and (isset . "sub") (or $this.Params.geekdocCollapseSection (default false .Site.Params.geekdocCollapseAllSections)) }}

          {{ $anchor := default "" .anchor }}
          {{ if $anchor }}
            {{ $anchor = printf "#%s" $anchor }}
          {{ end }}

          {{ if or .external ($this.RelPermalink) }}
            <input
              type="checkbox"
              {{ if $doCollapse }}
                class="gdoc-nav__toggle" id="{{ printf "navtree-%s" $id }}"
                {{ if or $isCurrent $isAncestor }}checked{{ end }}
              {{ else }}
                class="hidden"
              {{ end }}
            />
            <label
              {{ if $doCollapse }}
                for="{{ printf "navtree-%s" $id }}" class="flex justify-between align-center"
              {{ end }}
            >
              <span class="flex">
                {{ if $icon }}
                  <svg class="gdoc-icon {{ .icon }}"><use xlink:href="#{{ .icon }}"></use></svg>
                {{ end }}
                <a
                  href="{{ if .external -}}
                    {{ .ref }}
                  {{- else -}}
                    {{ path.Join $this.RelPermalink $anchor }}
                  {{- end }}"
                  class="gdoc-nav__entry{{- if not .external }}
                    {{- if $isCurrent }}{{ printf " is-active" }}{{ end }}
                  {{- end }}"
                  {{ if .rel -}}
                    rel="{{ .rel }}"
                  {{- end }}
                >
                  {{ $name }}
                </a>
              </span>
              {{ if $doCollapse }}
                <svg class="gdoc-icon toggle gdoc_keyboard_arrow_left">
                  <use xlink:href="#gdoc_keyboard_arrow_left"></use>
                </svg>
                <svg class="gdoc-icon toggle gdoc_keyboard_arrow_down">
                  <use xlink:href="#gdoc_keyboard_arrow_down"></use>
                </svg>
              {{ end }}
            </label>
          {{ end }}
        {{ else }}
          <span class="flex">{{ $name }}</span>
        {{ end }}

        {{ with .sub }}
          {{ template "menu-file" dict "sect" . "current" $current "site" $site }}
        {{ end }}
      </li>
    {{ end }}
  </ul>
{{ end }}


================================================
FILE: layouts/partials/menu-extra.html
================================================
{{ $current := .current }}
{{ template "menu-extra" dict "sect" .source "current" $current "site" $current.Site "target" .target }}


<!-- template -->
{{ define "menu-extra" }}
  {{ $current := .current }}
  {{ $site := .site }}
  {{ $target := .target }}
  {{ $sect := .sect }}

  {{ range sort (default (seq 0) $sect) "weight" }}
    {{ if isset . "ref" }}
      {{ $this := $site.GetPage .ref }}
      {{ $isCurrent := eq $current $this }}
      {{ $icon := default false .icon }}

      {{ $name := .name }}
      {{ if reflect.IsMap .name }}
        {{ $name = (index .name $site.Language.Lang) }}
      {{ end }}

      {{ if not .icon }}
        {{ errorf "Missing 'icon' attribute in data file for '%s' menu item '%s'" $target $name }}
      {{ end }}

      {{ if eq $target "header" }}
        <span>
          <a
            href="{{ if .external -}}
              {{ .ref }}
            {{- else -}}
              {{ relref $current .ref }}
            {{- end }}"
            class="gdoc-header__link"
            {{ if .rel -}}
              rel="{{ .rel }}"
            {{- end }}
          >
            <svg class="gdoc-icon {{ .icon }}">
              <title>{{ $name }}</title>
              <use xlink:href="#{{ .icon }}"></use>
            </svg>
          </a>
        </span>
      {{ end }}
    {{ end }}
  {{ end }}
{{ end }}


================================================
FILE: layouts/partials/menu-filetree-np.html
================================================
{{ $current := . }}
{{ $site := .Site }}
{{ $current.Scratch.Set "prev" false }}
{{ $current.Scratch.Set "getNext" false }}

{{ $current.Scratch.Set "nextPage" false }}
{{ $current.Scratch.Set "prevPage" false }}

{{ template "menu-filetree-np" dict "sect" .Site.Home.Sections "current" $current "site" $site }}

{{ define "menu-filetree-np" }}
  {{ $current := .current }}
  {{ $site := .site }}

  {{ $sortBy := (default "title" .current.Site.Params.geekdocFileTreeSortBy | lower) }}
  {{ range .sect.GroupBy "Weight" }}
    {{ $rangeBy := .ByTitle }}

    {{ if eq $sortBy "title" }}
      {{ $rangeBy = .ByTitle }}
    {{ else if eq $sortBy "linktitle" }}
      {{ $rangeBy = .ByLinkTitle }}
    {{ else if eq $sortBy "date" }}
      {{ $rangeBy = .ByDate }}
    {{ else if eq $sortBy "publishdate" }}
      {{ $rangeBy = .ByPublishDate }}
    {{ else if eq $sortBy "expirydate" }}
      {{ $rangeBy = .ByExpiryDate }}
    {{ else if eq $sortBy "lastmod" }}
      {{ $rangeBy = .ByLastmod }}
    {{ else if eq $sortBy "title_reverse" }}
      {{ $rangeBy = .ByTitle.Reverse }}
    {{ else if eq $sortBy "linktitle_reverse" }}
      {{ $rangeBy = .ByLinkTitle.Reverse }}
    {{ else if eq $sortBy "date_reverse" }}
      {{ $rangeBy = .ByDate.Reverse }}
    {{ else if eq $sortBy "publishdate_reverse" }}
      {{ $rangeBy = .ByPublishDate.Reverse }}
    {{ else if eq $sortBy "expirydate_reverse" }}
      {{ $rangeBy = .ByExpiryDate.Reverse }}
    {{ else if eq $sortBy "lastmod_reverse" }}
      {{ $rangeBy = .ByLastmod.Reverse }}
    {{ end }}

    {{ range $rangeBy }}
      {{ $current.Scratch.Set "current" $current }}
      {{ $current.Scratch.Set "site" $site }}

      {{ if not .Params.geekdocHidden }}
        {{ $numberOfPages := (add (len .Pages) (len .Sections)) }}
        {{ $site := $current.Scratch.Get "site" }}
        {{ $this := . }}
        {{ $current := $current.Scratch.Get "current" }}

        {{ $current.Scratch.Set "refName" (partial "utils/title" .) }}
        {{ $name := $current.Scratch.Get "refName" }}

        {{ if $current.Scratch.Get "getNext" }}
          {{ if or $this.Content $this.Params.geekdocFlatSection }}
            {{ $current.Scratch.Set "nextPage" (dict "name" $name "this" $this) }}
            {{ $current.Scratch.Set "getNext" false }}
          {{ end }}
        {{ end }}

        {{ if eq $current.RelPermalink $this.RelPermalink }}
          {{ $current.Scratch.Set "prevPage" ($current.Scratch.Get "prev") }}
          {{ $current.Scratch.Set "getNext" true }}
        {{ end }}

        {{ if or $this.Content $this.Params.geekdocFlatSection }}
          {{ $current.Scratch.Set "prev" (dict "name" $name "this" $this) }}
        {{ end }}

        {{ $sub := and (ne $numberOfPages 0) (not .Params.geekdocFlatSection) }}
        {{ if $sub }}
          {{ template "menu-filetree-np" dict "sect" .Pages "current" $current }}
        {{ end }}
      {{ end }}
    {{ end }}

  {{ end }}
{{ end }}

<span class="gdoc-page__nav">
  {{ with ($current.Scratch.Get "prevPage") }}
    <a
      class="gdoc-page__nav--prev flex align-center"
      href="{{ .this.RelPermalink }}"
      title="{{ .name }}"
    >
      <i class="gdoc-icon">gdoc_arrow_left_alt</i>
      {{ .name }}
    </a>
  {{ end }}
</span>
<span class="gdoc-page__nav">
  {{ with ($current.Scratch.Get "nextPage") }}
    <a
      class="gdoc-page__nav--next flex align-center"
      href="{{ .this.RelPermalink }}"
      title="{{ .name }}"
    >
      {{ .name }}
      <i class="gdoc-icon">gdoc_arrow_right_alt</i>
    </a>
  {{ end }}
</span>


================================================
FILE: layouts/partials/menu-filetree.html
================================================
{{ $current := . }}
{{ template "tree-nav" dict "sect" .Site.Home.Sections "current" $current }}


<!-- templates -->
{{ define "tree-nav" }}
  {{ $current := .current }}


  <ul class="gdoc-nav__list">
    {{ $sortBy := (default "title" .current.Site.Params.geekdocFileTreeSortBy | lower) }}
    {{ range .sect.GroupBy "Weight" }}
      {{ $rangeBy := .ByTitle }}

      {{ if eq $sortBy "title" }}
        {{ $rangeBy = .ByTitle }}
      {{ else if eq $sortBy "linktitle" }}
        {{ $rangeBy = .ByLinkTitle }}
      {{ else if eq $sortBy "date" }}
        {{ $rangeBy = .ByDate }}
      {{ else if eq $sortBy "publishdate" }}
        {{ $rangeBy = .ByPublishDate }}
      {{ else if eq $sortBy "expirydate" }}
        {{ $rangeBy = .ByExpiryDate }}
      {{ else if eq $sortBy "lastmod" }}
        {{ $rangeBy = .ByLastmod }}
      {{ else if eq $sortBy "title_reverse" }}
        {{ $rangeBy = .ByTitle.Reverse }}
      {{ else if eq $sortBy "linktitle_reverse" }}
        {{ $rangeBy = .ByLinkTitle.Reverse }}
      {{ else if eq $sortBy "date_reverse" }}
        {{ $rangeBy = .ByDate.Reverse }}
      {{ else if eq $sortBy "publishdate_reverse" }}
        {{ $rangeBy = .ByPublishDate.Reverse }}
      {{ else if eq $sortBy "expirydate_reverse" }}
        {{ $rangeBy = .ByExpiryDate.Reverse }}
      {{ else if eq $sortBy "lastmod_reverse" }}
        {{ $rangeBy = .ByLastmod.Reverse }}
      {{ end }}

      {{ range $rangeBy }}
        {{ if not .Params.geekdocHidden }}
          {{ $numberOfPages := (add (len .Pages) (len .Sections)) }}
          {{ $isParent := and (ne $numberOfPages 0) (not .Params.geekdocFlatSection) }}
          {{ $isCurrent := eq $current . }}
          {{ $isAncestor := .IsAncestor $current }}
          {{ $id := substr (sha1 .Permalink) 0 8 }}
          {{ $doCollapse := and $isParent (or .Params.geekdocCollapseSection (default false .Site.Params.geekdocCollapseAllSections)) }}


          <li>
            <input
              type="checkbox"
              {{ if $doCollapse }}
                class="gdoc-nav__toggle" id="{{ printf "navtree-%s" $id }}"
                {{ if or $isCurrent $isAncestor }}checked{{ end }}
              {{ else }}
                class="hidden"
              {{ end }}
            />
            <label
              {{ if $doCollapse }}
                for="{{ printf "navtree-%s" $id }}" class="flex justify-between align-center"
              {{ end }}
            >
              {{ if or .Content .Params.geekdocFlatSection }}
                <span class="flex">
                  <a
                    href="{{ .RelPermalink }}"
                    class="gdoc-nav__entry{{- if eq $current . }}
                      {{- printf " is-active" }}
                    {{- end }}"
                  >
                    {{ partial "utils/title" . }}
                  </a>
                </span>
              {{ else }}
                <span class="flex">{{ partial "utils/title" . }}</span>
              {{ end }}
              {{ if $doCollapse }}
                <svg class="gdoc-icon toggle gdoc_keyboard_arrow_left">
                  <use xlink:href="#gdoc_keyboard_arrow_left"></use>
                </svg>
                <svg class="gdoc-icon toggle gdoc_keyboard_arrow_down">
                  <use xlink:href="#gdoc_keyboard_arrow_down"></use>
                </svg>
              {{ end }}
            </label>

            {{ if $isParent }}
              {{ template "tree-nav" dict "sect" .Pages "current" $current }}
            {{ end }}
          </li>
        {{ end }}
      {{ end }}
    {{ end }}
  </ul>
{{ end }}


================================================
FILE: layouts/partials/menu.html
================================================
<nav>
  {{ partial "search" . }}


  <section class="gdoc-nav--main">
    <h2>{{ i18n "nav_navigation" }}</h2>
    {{ if .Site.Params.geekdocMenuBundle }}
      {{ partial "menu-bundle" (dict "current" . "source" hugo.Data.menu.main.main) }}
    {{ else }}
      {{ partial "menu-filetree" . }}
    {{ end }}
  </section>

  {{ if and (in (slice "posts" "tags") .Section) (default false .Site.Params.geekdocTagsToMenu) }}
    <section class="gdoc-nav--tags">
      <h2>{{ i18n "nav_tags" }}</h2>
      <ul class="gdoc-nav__list">
        {{ $currentPage := .RelPermalink }}
        {{ range $name, $taxonomy := .Site.Taxonomies.tags }}
          {{ with $.Site.GetPage (printf "/tags/%s" $name) }}
            <li>
              <a
                class="gdoc-nav__entry{{- if eq $currentPage .RelPermalink }}
                  {{- printf " is-active" }}
                {{- end }}"
                href="{{ .RelPermalink }}"
              >
                {{ partial "utils/title" . }}
              </a>
            </li>
          {{ end }}
        {{ end }}
      </ul>
    </section>
  {{ end }}


  <section class="gdoc-nav--more">
    {{ if hugo.Data.menu.more.more }}
      <h2>{{ i18n "nav_more" }}</h2>
      {{ partial "menu-bundle" (dict "current" . "source" hugo.Data.menu.more.more) }}
    {{ end }}
  </section>
</nav>


================================================
FILE: layouts/partials/microformats/opengraph.html
================================================
{{ $isPage := or (and (ne .Type "posts") (in "section page" .Kind )) (and (eq .Type "posts") (eq .Kind "page")) }}

{{- if ne .Kind "home" }}
  <meta
    property="og:title"
    {{ partial "utils/title" . | printf "content=%q" | safeHTMLAttr }}
  />
{{- end }}
{{- with .Site.Title }}
  <meta property="og:site_name" {{ . | printf "content=%q" | safeHTMLAttr }} />
{{- end }}
{{- with partial "utils/featured" . }}
  <meta property="og:image" content="{{ . }}" />
{{- end }}
{{- with partial "utils/description" . }}
  <meta property="og:description" content="{{ . | plainify | htmlUnescape | chomp }}" />
{{- end }}
<meta property="og:type" content="{{ if $isPage }}article{{ else }}website{{ end }}" />
<meta property="og:url" content="{{ .Permalink }}" />
{{- with .Params.audio }}
  <meta property="og:audio" content="{{ . }}" />
{{- end }}
{{- with .Params.locale }}
  <meta property="og:locale" content="{{ . }}" />
{{- end }}
{{- with .Params.videos }}
  {{- range . }}
    <meta property="og:video" content="{{ . | absURL }}" />
  {{- end }}
{{- end }}

{{- /* If it is part of a series, link to related articles */}}
{{- if .Site.Taxonomies.series }}
  {{- $permalink := .Permalink -}}
  {{- $siteSeries := .Site.Taxonomies.series -}}
  {{- with .Params.series }}
    {{- range $name := . }}
      {{- $series := index $siteSeries ($name | urlize) }}
      {{- range $page := first 6 $series.Pages }}
        {{- if ne $page.Permalink $permalink }}
          <meta property="og:see_also" content="{{ $page.Permalink }}" />
        {{- end }}
      {{- end }}
    {{- end }}
  {{- end }}
{{- end }}

{{ if $isPage -}}
  {{- $iso8601 := "2006-01-02T15:04:05-07:00" -}}
  <meta property="article:section" content="{{ .Section | humanize | title }}" />
  {{- with .PublishDate }}
    <meta
      property="article:published_time"
      {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }}
    />
  {{- end }}
  {{- with .Lastmod }}
    <meta
      property="article:modified_time"
      {{ .Format $iso8601 | printf "content=%q" | safeHTMLAttr }}
    />
  {{- end }}
{{- end }}

{{- /* Facebook Page Admin ID for Domain Insights */}}
{{- with .Site.Params.facebook_admin }}
  <meta property="fb:admins" content="{{ . }}" />
{{- end }}


================================================
FILE: layouts/partials/microformats/schema.html
================================================
{{ $isPage := or (and (ne .Type "posts") (in "section page" .Kind )) (and (eq .Type "posts") (eq .Kind "page")) }}
{{- if eq .Kind "home" }}
  <script type="application/ld+json">
  {
      "@context": "http://schema.org",
      "@type": "WebSite",
      "name": {{ .Site.Title }},
      "url": {{ .Site.Home.Permalink }},
      {{- with partial "utils/description" . }}
      "description": "{{ . | plainify | htmlUnescape | chomp }}",
      {{- end }}
      {{- with partial "utils/featured" . }}
      "thumbnailUrl": {{ . }},
      {{- end }}
      {{- with .Site.Params.geekdocContentLicense }}
      "license": "{{ .name }}",
      {{- end }}
      "inLanguage": {{ .Lang }}
  }
  </script>
{{- else if $isPage }}
  <script type="application/ld+json">
  {
      "@context": "http://schema.org",
      "@type": "TechArticle",
      "articleSection": "{{ .Section | humanize | title }}",
      "name": {{ partial "utils/title" . }},
      "url": {{ .Permalink }},
      "headline": {{ partial "utils/title" . }},
      {{- with .Params.lead }}
      "alternativeHeadline": {{ . }},
      {{- end }}
      {{- with partial "utils/description" . }}
      "description": "{{ . | plainify | htmlUnescape | chomp }}",
      {{- end }}
      {{- with partial "utils/featured" . }}
      "thumbnailUrl": {{ . }},
      {{- end }}
      "wordCount": "{{ .WordCount }}",
      {{- with .Site.Params.geekdocContentLicense }}
      "license": "{{ .name }}",
      {{- end }}
      "inLanguage": {{ .Lang }},
      "isFamilyFriendly": "true",
      "mainEntityOfPage": {
          "@type": "WebPage",
          "@id": {{ .Permalink }}
      },
      {{- with $tags := .Params.tags }}
      "keywords": [{{ range $i, $tag := $tags }}{{ if $i }}, {{ end }}"{{ $tag }}"{{ end }}],
      {{- end }}
      "copyrightHolder": "{{ .Site.Title }}",
      "copyrightYear": "{{ .Date.Format "2006" }}",
      "dateCreated": "{{ .Date.Format "2006-01-02T15:04:05.00Z" | safeJS }}",
      "datePublished": "{{ .PublishDate.Format "2006-01-02T15:04:05.00Z" | safeJS }}",
      "dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05.00Z" | safeJS }}",
      "publisher":{
          "@type":"Organization",
          "name": {{ .Site.Title }},
          "url": {{ .Site.Home.Permalink }},
          "logo": {
              "@type": "ImageObject",
              "url": {{ (default "brand.svg" .Site.Params.geekdocLogo) | absURL }},
              "width":"32",
              "height":"32"
          }
      }
  }
  </script>
{{- end }}


================================================
FILE: layouts/partials/microformats/twitter_cards.html
================================================
{{- with partial "utils/featured" . }}
  <meta name="twitter:card" content="summary_large_image" />
{{- else }}
  <meta name="twitter:card" content="summary" />
{{- end }}
<meta name="twitter:title" {{ partial "utils/title" . | printf "content=%q" | safeHTMLAttr }} />
{{- with partial "utils/featured" . }}
  <meta property="twitter:image" content="{{ . }}" />
{{- end }}
{{- with partial "utils/description" . }}
  <meta name="twitter:description" content="{{ . | plainify | htmlUnescape | chomp }}" />
{{- end }}
{{- with .Site.Params.twitter -}}
  <meta name="twitter:site" content="@{{ . }}" />
{{- end }}


================================================
FILE: layouts/partials/page-header.html
================================================
{{ $geekdocRepo := default (default false .Site.Params.geekdocRepo) .Page.Params.geekdocRepo }}
{{ $geekdocEditPath := default (default false .Site.Params.geekdocEditPath) .Page.Params.geekdocEditPath }}
{{ if .File }}
  {{ $.Scratch.Set "geekdocFilePath" (default (strings.TrimPrefix hugo.WorkingDir .File.Filename) .Page.Params.geekdocFilePath) }}
{{ else }}
  {{ $.Scratch.Set "geekdocFilePath" false }}
{{ end }}

{{ define "breadcrumb" }}
  {{ $parent := .page.Parent }}
  {{ if $parent }}
    {{ $name := (partial "utils/title" $parent) }}
    {{ $position := (sub .position 1) }}
    {{ $value := (printf "<li itemprop='itemListElement' itemscope itemtype='https://schema.org/ListItem'><a itemscope itemtype='https://schema.org/WebPage' itemprop='item' itemid='%s' href='%s'><span itemprop='name'>%s</span></a><meta itemprop='position' content='%d' /></li><li> / </li>%s" $parent.RelPermalink $parent.RelPermalink $name $position .value) }}
    {{ template "breadcrumb" dict "page" $parent "value" $value "position" $position }}
  {{ else }}
    {{ .value | safeHTML }}
  {{ end }}
{{ end }}

{{ $showBreadcrumb := (and (default true .Page.Params.geekdocBreadcrumb) (default true .Site.Params.geekdocBreadcrumb)) }}
{{ $showEdit := (and ($.Scratch.Get "geekdocFilePath") $geekdocRepo $geekdocEditPath) }}
<div
  class="gdoc-page__header flex flex-wrap
  {{ if $showBreadcrumb }}
    justify-between
  {{ else }}
    justify-end
  {{ end }}
  {{ if not $showEdit }}hidden-mobile{{ end }}
  {{ if (and (not $showBreadcrumb) (not $showEdit)) }}hidden{{ end }}"
  itemprop="breadcrumb"
>
  {{ if $showBreadcrumb }}
    <div>
      <svg class="gdoc-icon gdoc_path hidden-mobile"><use xlink:href="#gdoc_path"></use></svg>
      <ol class="breadcrumb" itemscope itemtype="https://schema.org/BreadcrumbList">
        {{ $position := sub (len (split .RelPermalink "/")) 1 }}
        {{ $name := (partial "utils/title" .) }}
        {{ $value := (printf "<li itemprop='itemListElement' itemscope itemtype='https://schema.org/ListItem'><span itemprop='name'>%s</span><meta itemprop='position' content='%d' /></li>" $name $position ) }}
        {{ template "breadcrumb" dict "page" . "value" $value "position" $position }}
      </ol>
    </div>
  {{ end }}
  {{ if $showEdit }}
    <div>
      <span class="editpage">
        <svg class="gdoc-icon gdoc_code"><use xlink:href="#gdoc_code"></use></svg>
        <a
          href="{{ $geekdocRepo }}/{{ path.Join $geekdocEditPath ($.Scratch.Get "geekdocFilePath") }}"
          rel="edit"
        >
          {{ i18n "edit_page" }}
        </a>
      </span>
    </div>
  {{ end }}
</div>


================================================
FILE: layouts/partials/page-metadata.html
================================================
{{- $showPageLastmod := (or (default false .Page.Params.geekdocPageLastmod) (default false .Site.Params.geekdocPageLastmod)) -}}

{{- if $showPageLastmod -}}
<span class="flex align-center no-wrap">
    <svg class="gdoc-icon gdoc_date"><use xlink:href="#gdoc_date"></use></svg>
    <time datetime="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">
        {{ if .Lastmod.After (.Date.AddDate 0 0 1) }}
        {{ i18n "posts_update_prefix" }}
        {{ end }}
        {{ .Lastmod.Format "Jan 2, 2006" }}
    </time>
</span>
{{- end -}}


================================================
FILE: layouts/partials/pagination.html
================================================
{{ $page := $.Paginator }}


<nav class="gdoc-paging flex flex-even align-center" role="navigation">
  <div class="gdoc-paging__item gdoc-paging__item--prev">
    {{ if $page.HasPrev }}
      <a class="flex-inline align-center fake-link no-wrap" href="{{ $page.Prev.URL }}">
        <i class="gdoc-icon">gdoc_keyboard_arrow_left</i>
        {{ i18n "pagination_page_prev" | upper }}
      </a>
    {{ end }}
  </div>
  <div class="gdoc-paging__state">{{ i18n "pagination_page_state" $page }}</div>
  <div class="gdoc-paging__item gdoc-paging__item--next">
    {{ if $page.HasNext }}
      <a class="flex-inline align-center fake-link no-wrap" href="{{ $page.Next.URL }}">
        {{ i18n "pagination_page_next" | upper }}
        <i class="gdoc-icon">gdoc_keyboard_arrow_right</i>
      </a>
    {{ end }}
  </div>
</nav>


================================================
FILE: layouts/partials/posts/metadata.html
================================================
<span class="flex align-center no-wrap">
  <svg class="gdoc-icon gdoc_date"><use xlink:href="#gdoc_date"></use></svg>
  <span class="gdoc-post__tag">
    <time datetime="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" | safeHTML }}">
      {{ if .Lastmod.After (.Date.AddDate 0 0 1) }}
        {{ i18n "posts_update_prefix" }}
      {{ end }}
      {{ .Lastmod.Format "Jan 2, 2006" }}
    </time>
  </span>
</span>

<span class="flex align-center no-wrap">
  <svg class="gdoc-icon gdoc_timer"><use xlink:href="#gdoc_timer"></use></svg>
  <span class="gdoc-post__tag">{{ i18n "posts_read_time" .ReadingTime }}</span>
</span>

{{ $tc := 0 }}
{{ with .Params.tags }}
  {{ range sort . }}
    {{ $name := . }}
    {{ with $.Site.GetPage (printf "/tags/%s" $name | urlize) }}
      {{ if eq $tc 0 }}
        <span class="flex align-center no-wrap">
          <svg class="gdoc-icon gdoc_bookmark"><use xlink:href="#gdoc_bookmark"></use></svg>
          {{ template "post-tag" dict "name" $name "page" . }}
        </span>
      {{ else }}
        <span class="flex align-center">
          {{ template "post-tag" dict "name" $name "page" . }}
        </span>
      {{ end }}
    {{ end }}
    {{ $tc = (add $tc 1) }}
  {{ end }}
{{ end }}

{{ define "post-tag" }}
  <span class="gdoc-post__tag gdoc-button gdoc-button--regular">
    <a
      class="gdoc-button__link"
      href="{{ .page.RelPermalink }}"
      title="{{ i18n "posts_tagged_with" .name }}"
    >
      {{ .name }}
    </a>
  </span>
{{ end }}


================================================
FILE: layouts/partials/search.html
================================================
{{ if default true .Site.Params.geekdocSearch }}
  <script defer src="{{ index (index hugo.Data.assets "search.js") "src" | relURL }}"></script>
  {{- $searchConfigFile := printf "search/%s.config.json" .Language.Lang -}}
  {{- $searchConfig := resources.Get "search/config.json" | resources.ExecuteAsTemplate $searchConfigFile . | resources.Minify -}}
  {{- $searchConfig.Publish -}}

  <div class="gdoc-search flex align-center">
    <svg class="gdoc-icon gdoc_search"><use xlink:href="#gdoc_search"></use></svg>
    <input
      type="text"
      id="gdoc-search-input"
      class="gdoc-search__input"
      placeholder="{{ i18n "form_placeholder_search" }}..."
      aria-label="{{ i18n "form_placeholder_search" }}"
      maxlength="64"
      data-site-base-url="{{ "" | absURL }}"
      data-site-lang="{{ .Site.Language.Lang }}"
    />
    <ul id="gdoc-search-results" class="gdoc-search__list"></ul>
  </div>
{{ end }}


================================================
FILE: layouts/partials/site-footer.html
================================================
<footer class="gdoc-footer">
  <nav class="container flex">
    <div>
      <section class="flex flex-wrap align-center">
        <span class="gdoc-footer__item gdoc-footer__item--row">
          {{ i18n "footer_build_with" | safeHTML }}
        </span>
        {{ with .Site.Params.geekdocLegalNotice }}
          <span class="gdoc-footer__item gdoc-footer__item--row">
            <a href="{{ . | relURL }}" class="gdoc-footer__link">
              {{ i18n "footer_legal_notice" }}
            </a>
          </span>
        {{ end }}
        {{ with .Site.Params.geekdocPrivacyPolicy }}
          <span class="gdoc-footer__item gdoc-footer__item--row">
            <a href="{{ . | relURL }}" class="gdoc-footer__link">
              {{ i18n "footer_privacy_policy" }}
            </a>
          </span>
        {{ end }}
      </section>
      {{ with .Site.Params.geekdocContentLicense }}
        <section class="flex flex-wrap align-center">
          <span class="gdoc-footer__item">
            {{ i18n "footer_content_license_prefix" }}
            <a href="{{ .link }}" class="gdoc-footer__link no-wrap">{{ .name }}</a>
          </span>
        </section>
      {{ end }}
    </div>
    {{ if (default true .Site.Params.geekdocBackToTop) }}
      <div class="flex flex-25 justify-end">
        <span class="gdoc-footer__item text-right">
          <a class="gdoc-footer__link fake-link" href="#" aria-label="{{ i18n "nav_top" }}">
            <svg class="gdoc-icon gdoc_keyboard_arrow_up">
              <use xlink:href="#gdoc_keyboard_arrow_up"></use>
            </svg>
            <span class="hidden-mobile">{{ i18n "nav_top" }}</span>
          </a>
        </span>
      </div>
    {{ end }}
  </nav>
</footer>


================================================
FILE: layouts/partials/site-header.html
================================================
<header class="gdoc-header">
  <div class="container flex align-center justify-between">
    {{ if .MenuEnabled }}
      <label for="menu-control" class="gdoc-nav__control">
        <div tabindex="0" role="button" aria-pressed="false">
          <input type="checkbox" class="hidden" id="menu-control" />

          <svg class="gdoc-icon gdoc_menu">
            <title>{{ i18n "button_nav_open" }}</title>
            <use xlink:href="#gdoc_menu"></use>
          </svg>
          <svg class="gdoc-icon gdoc_arrow_back">
            <title>{{ i18n "button_nav_close" }}</title>
            <use xlink:href="#gdoc_arrow_back"></use>
          </svg>
        </div>
      </label>
    {{ end }}
    <div>
      <a class="gdoc-brand gdoc-header__link flex gap-16 align-center" href="{{ .Root.Site.Home.Permalink }}">
        <img
          class="gdoc-brand__img"
          src="{{ (default "brand.svg" .Root.Site.Params.geekdocLogo) | relURL }}"
          alt=""
        />
        <div>
          <div class="gdoc-brand__title">{{ .Root.Site.Title }}</div>
          {{ with .Root.Site.Params.geekdocSubtitle }}
          <div class="gdoc-brand__subtitle">{{ . }}</div>
          {{ end }}
        </div>
      </a>
    </div>
    <div class="gdoc-menu-header flex gap-16">
      <span class="gdoc-menu-header__items">
        {{ if .Roothugo.Data.menu.extra.header }}
          {{ partial "menu-extra" (dict "current" .Root "source" .Roothugo.Data.menu.extra.header "target" "header") }}
        {{ end }}


        <span id="gdoc-color-theme" tabindex="0" role="button" aria-pressed="false">
          <svg class="gdoc-icon gdoc_brightness_dark">
            <title>{{ i18n "button_toggle_dark" }}</title>
            <use xlink:href="#gdoc_brightness_dark"></use>
          </svg>
          <svg class="gdoc-icon gdoc_brightness_light">
            <title>{{ i18n "button_toggle_dark" }}</title>
            <use xlink:href="#gdoc_brightness_light"></use>
          </svg>
          <svg class="gdoc-icon gdoc_brightness_auto">
            <title>{{ i18n "button_toggle_dark" }}</title>
            <use xlink:href="#gdoc_brightness_auto"></use>
          </svg>
        </span>

        <span class="gdoc-menu-header__home">
          <a href="{{ .Root.Site.Home.Permalink }}" class="gdoc-header__link">
            <svg class="gdoc-icon gdoc_home">
              <title>{{ i18n "button_homepage" }}</title>
              <use xlink:href="#gdoc_home"></use>
            </svg>
          </a>
        </span>

        {{ partial "language" .Root }}
      </span>
      <span class="gdoc-menu-header__control">
        <label for="menu-header-control">
          <div tabindex="0" role="button" aria-pressed="false">
            <input type="checkbox" class="hidden" id="menu-header-control" />

            <svg class="gdoc-icon gdoc_keyboard_arrow_right">
              <use xlink:href="#gdoc_keyboard_arrow_right"></use>
              <title>{{ i18n "button_menu_close" }}</title>
            </svg>

            <svg class="gdoc-icon gdoc_keyboard_arrow_left">
              <use xlink:href="#gdoc_keyboard_arrow_left"></use>
              <title>{{ i18n "button_menu_open" }}</title>
            </svg>
          </div>
        </label>
      </span>
    </div>
  </div>
</header>


================================================
FILE: layouts/partials/svg-icon-symbols.html
================================================
{{ range resources.Match "sprites/*.svg" }}
  {{ printf "<!-- geekdoc include: %s -->" . | safeHTML }}
  {{ .Content | safeHTML }}
{{ end }}


================================================
FILE: layouts/partials/utils/content.html
================================================
{{ $content := .Content }}

{{ $content = $content | replaceRE `<nav id="TableOfContents">\s*<ul>\s*<li>\s*<ul>` `<nav id="TableOfContents"><ul>` | replaceRE `</ul>\s*</li>\s*</ul>\s*</nav>` `</ul></nav>` | safeHTML }}
{{ $content = $content | replaceRE `(<table>(?:.|\n)+?</table>)` `<div class="table-wrap"> ${1} </div>` | safeHTML }}

{{ return $content }}


================================================
FILE: layouts/partials/utils/description.html
================================================
{{ $isPage := or (and (ne .Type "posts") (in "section page" .Kind )) (and (eq .Type "posts") (eq .Kind "page")) }}
{{ $description := "" }}

{{ if .Description }}
  {{ $description = .Description }}
{{ else }}
  {{ if $isPage }}
    {{ $description = .Summary }}
  {{ else if .Site.Params.description }}
    {{ $description = .Site.Params.description }}
  {{ end }}
{{ end }}

{{ return $description }}


================================================
FILE: layouts/partials/utils/featured.html
================================================
{{ $img := "" }}

{{ with $source := ($.Resources.ByType "image").GetMatch "{*feature*,*cover*,*thumbnail*}" }}
  {{ $featured := .Fill (printf "1200x630 %s" (default "Smart" .Params.anchor)) }}
  {{ $img = $featured.Permalink }}
{{ else }}
  {{ with default $.Site.Params.images $.Params.images }}
    {{ $img = index . 0 | absURL }}
  {{ end }}
{{ end }}

{{ return $img }}


================================================
FILE: layouts/partials/utils/title.html
================================================
{{ $title := "" }}

{{ if .Title }}
  {{ $title = .Title }}
{{ else if and .IsSection .File }}
  {{ $title = path.Base .File.Dir | humanize | title }}
{{ else if and .IsPage .File }}
  {{ $title = .File.BaseFileName | humanize | title }}
{{ end }}

{{ return $title }}


================================================
FILE: layouts/posts/list.html
================================================
{{ define "main" }}
  <div id="main-content" tabindex="-1">
  {{ range .Paginator.Pages }}
    <article class="gdoc-markdown gdoc-post">
      <header class="gdoc-post__header">
        <h1 class="gdoc-post__title">
          <a href="{{ .RelPermalink }}">{{ partial "utils/title" . }}</a>
        </h1>
      </header>
      <section>
        {{ .Summary }}
      </section>
      <div class="gdoc-post__readmore">
        {{ if .Truncated }}
          <a
            class="flex-inline align-center fake-link"
            title="{{ i18n "posts_read_more" }}"
            href="{{ .RelPermalink }}"
          >
            {{ i18n "posts_read_more" }}
            <i class="gdoc-icon">gdoc_arrow_right_alt</i>
          </a>
        {{ end }}
      </div>

      <footer class="gdoc-post__footer">
        <div class="flex flex-wrap align-center gdoc-post__meta">
          {{ partial "posts/metadata.html" . }}
        </div>
      </footer>
    </article>
  {{ end }}
  </div>
  {{ partial "pagination.html" . }}
{{ end }}

{{ define "post-tag" }}
  <span class="gdoc-post__tag">
    <span class="gdoc-button">
      <a
        class="gdoc-button__link"
        href="{{ .page.RelPermalink }}"
        title="{{ i18n "posts_tagged_with" .name }}"
      >
        {{ .name }}
      </a>
    </span>
  </span>
{{ end }}


================================================
FILE: layouts/posts/single.html
================================================
{{ define "main" }}
  <article class="gdoc-post" id="main-content" tabindex="-1">
    <header class="gdoc-post__header">
      <h1 class="gdoc-post__title">{{ partial "utils/title" . }}</h1>
      <div class="flex flex-wrap align-center gdoc-post__meta gdoc-post__meta--head">
        {{ partial "posts/metadata.html" . }}
      </div>
    </header>
    <section class="gdoc-markdown">
      {{ partial "utils/content" . }}
    </section>
  </article>
{{ end }}


================================================
FILE: layouts/robots.txt
================================================
User-agent: *
Disallow: /tags/*

Sitemap: {{ "sitemap.xml" | absURL }}


================================================
FILE: layouts/shortcodes/audio.html
================================================
{{- $source := ($.Page.Resources.ByType "audio").GetMatch (printf "%s" (.Get "name")) }}
{{- $customAlt := .Get "alt" }}

{{- with $source }}
  {{- $caption := default .Title $customAlt }}

  <div class="flex justify-center">
    <figure class="gdoc-markdown__figure">
      <audio controls class="player" preload="auto">
        <source src="{{ .Permalink }}" type="audio/mpeg">
      </audio>
      {{- with $caption }}
        <figcaption>
          {{ . }}
          {{- with $source.Params.credits }}
            {{ printf " (%s)" . | $.Page.RenderString }}
          {{- end }}
        </figcaption>
      {{- end }}
    </figure>
  </div>
{{- end }}


================================================
FILE: layouts/shortcodes/avatar.html
================================================
{{- $source := ($.Page.Resources.ByType "image").GetMatch (printf "%s" (.Get "name")) }}
{{- $customAlt := .Get "alt" }}
{{- $customSize := .Get "size" | lower }}
{{- $customAnchor := default "smart" (.Get "anchor") | title }}
{{- $data := newScratch }}

{{- with $source }}
  {{- $caption := default .Title $customAlt }}
  {{- $isSVG := (eq .MediaType.SubType "svg") }}
  {{- $origin := . -}}

  {{- if $isSVG }}
    {{- $data.SetInMap "size" "tiny" "160" }}
    {{- $data.SetInMap "size" "small" "300" }}
    {{- $data.SetInMap "size" "medium" "600" }}
    {{- $data.SetInMap "size" "large" "900" }}
  {{- else }}
    {{- $data.SetInMap "size" "tiny" (printf "160x160 %s" $customAnchor) }}
    {{- $data.SetInMap "size" "small" (printf "300x300 %s" $customAnchor) }}
    {{- $data.SetInMap "size" "medium" (printf "600x600 %s" $customAnchor) }}
    {{- $data.SetInMap "size" "large" (printf "900x900 %s" $customAnchor) }}
  {{- end -}}

  <div class="flex justify-center">
    <figure
      class="gdoc-markdown__figure gdoc-markdown__figure--round">
      <a class="gdoc-markdown__link--raw" href="{{ .Permalink }}">
        <picture>
          {{- $size := $data.Get "size" }}
          {{- if not $isSVG }}
            {{- if ne $customSize "origin" }}
            <source
              {{- if $customSize }}
                srcset="{{ ($origin.Fill (index $size $customSize)).Permalink }}"
              {{- else }}
                srcset="{{ ($origin.Fill (index $size "small")).Permalink }} 600w, {{ ($origin.Fill (index $size "medium")).Permalink }} 1200w" sizes="100vw"
              {{- end }}
            />
            {{- end }}
          {{- end }}
          <img
          {{- if $isSVG }}
            src="{{ $origin.Permalink }}" width="{{ index $size (default "medium" $customSize) }}"
          {{- else }}
            {{- if eq $customSize "origin" }}
              src="{{ $origin.Permalink }}"
            {{- else }}
              src="{{ ($origin.Fill (index $size "large")).Permalink }}"
            {{- end }}
            alt="{{ $caption }}"
          {{- end }}
          />
        </picture>
      </a>
    </figure>
  </div>
{{- end }}


================================================
FILE: layouts/shortcodes/button.html
================================================
{{- $ref := "" }}
{{- $class := "" }}
{{- $size := default "regular" (.Get "size" | lower) }}

{{- if not (in (slice "regular" "large") $size) }}
  {{- $size = "regular" }}
{{- end }}

{{- with .Get "href" }}
  {{- $ref = . }}
{{- end }}

{{- with .Get "relref" }}
  {{- $ref = relref $ . }}
{{- end }}

{{- with .Get "class" }}
  {{- $class = . }}
{{- end }}


<span class="gdoc-button gdoc-button--{{ $size }}{{ with $class }}{{ printf " %s" . }}{{ end }}">
  <a
    class="gdoc-button__link"
    {{- with $ref }}{{ printf " href=\"%s\"" . | safeHTMLAttr }}{{ end }}
  >
    {{ $.Inner }}
  </a>
</span>


================================================
FILE: layouts/shortcodes/columns.html
================================================
{{- $size := default "regular" (.Get "size" | lower) }}

{{- if not (in (slice "regular" "large" "small") $size) }}
  {{- $size = "regular" }}
{{- end }}


<div class="gdoc-columns gdoc-columns--{{ $size }} flex gap-16 flex-mobile-column">
  {{- range split .Inner "<--->" }}
    <div class="gdoc-columns__content gdoc-markdown--nested flex-even">
      {{ . | $.Page.RenderString -}}
    </div>
  {{- end }}
</div>


================================================
FILE: layouts/shortcodes/expand.html
================================================
{{ $id := substr (sha1 .Inner) 0 8 }}
<div class="gdoc-expand">
  <label class="gdoc-expand__head flex justify-between" for="{{ $id }}-{{ .Ordinal }}">
    <span>{{ default "Expand" (.Get 0) }}</span>
    <span>{{ default "↕" (.Get 1) }}</span>
  </label>
  <input id="{{ $id }}-{{ .Ordinal }}" type="checkbox" class="gdoc-expand__control hidden" />
  <div class="gdoc-markdown--nested gdoc-expand__content">
    {{ .Inner | $.Page.RenderString }}
  </div>
</div>
Download .txt
gitextract_qte0gx_s/

├── .cspell.json
├── .github/
│   └── settings.yaml
├── .gitignore
├── .gitsv/
│   └── config.yaml
├── .htmlvalidate.json
├── .jsbeautifyrc
├── .lighthouserc.yaml
├── .lycheeignore
├── .markdownlint.yaml
├── .npmrc
├── .nvmrc
├── .prettierignore
├── .prettierrc
├── .tarignore
├── .woodpecker/
│   ├── build-package.yaml
│   ├── docs.yaml
│   └── static.yaml
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── archetypes/
│   ├── docs.md
│   └── posts.md
├── assets/
│   └── search/
│       ├── config.json
│       └── data.json
├── eslint.config.js
├── exampleSite/
│   ├── config/
│   │   └── _default/
│   │       ├── hugo.yaml
│   │       ├── languages.yaml
│   │       └── params.yaml
│   ├── content/
│   │   └── en/
│   │       ├── _includes/
│   │       │   ├── _index.md
│   │       │   └── include-page.md
│   │       ├── _index.md
│   │       ├── asciidoc/
│   │       │   ├── admonition-icons.adoc
│   │       │   └── admonitions.adoc
│   │       ├── collapse/
│   │       │   ├── _index.md
│   │       │   ├── level-1/
│   │       │   │   ├── _index.md
│   │       │   │   ├── level-1-1.md
│   │       │   │   └── level-1-2.md
│   │       │   └── level-2/
│   │       │       ├── _index.md
│   │       │       ├── level-2-1.md
│   │       │       └── level-2-2.md
│   │       ├── features/
│   │       │   ├── _index.md
│   │       │   ├── code-blocks.md
│   │       │   ├── dark-mode/
│   │       │   │   └── _index.md
│   │       │   ├── icon-sets.md
│   │       │   ├── multilingual/
│   │       │   │   └── _index.md
│   │       │   └── theming/
│   │       │       └── _index.md
│   │       ├── posts/
│   │       │   ├── _index.md
│   │       │   ├── hello_geekdoc.md
│   │       │   └── initial-release.md
│   │       ├── shortcodes/
│   │       │   ├── _index.md
│   │       │   ├── audio/
│   │       │   │   └── _index.md
│   │       │   ├── avatar/
│   │       │   │   └── _index.md
│   │       │   ├── buttons.md
│   │       │   ├── columns.md
│   │       │   ├── expand.md
│   │       │   ├── hints.md
│   │       │   ├── icons.md
│   │       │   ├── images/
│   │       │   │   └── _index.md
│   │       │   ├── includes.md
│   │       │   ├── katex.md
│   │       │   ├── mermaid.md
│   │       │   ├── progress.md
│   │       │   ├── propertylist.md
│   │       │   ├── tabs.md
│   │       │   ├── toc-tree.md
│   │       │   └── toc.md
│   │       ├── toc-tree/
│   │       │   ├── _index.md
│   │       │   ├── level-1/
│   │       │   │   ├── _index.md
│   │       │   │   ├── level-1-1.md
│   │       │   │   ├── level-1-2.md
│   │       │   │   └── level-1-3/
│   │       │   │       ├── _index.md
│   │       │   │       └── level-1-3-1.md
│   │       │   └── level-2/
│   │       │       ├── _index.md
│   │       │       ├── level-2-1.md
│   │       │       └── level-2-2.md
│   │       └── usage/
│   │           ├── _index.md
│   │           ├── configuration.md
│   │           ├── customization.md
│   │           ├── getting-started.md
│   │           └── menus.md
│   ├── data/
│   │   ├── menu/
│   │   │   ├── extra.yaml
│   │   │   ├── main.yaml
│   │   │   └── more.yaml
│   │   └── properties/
│   │       ├── demo.yaml
│   │       ├── shortcode-audio.yaml
│   │       ├── shortcode-avatar.yaml
│   │       ├── shortcode-buttons.yaml
│   │       ├── shortcode-columns.yaml
│   │       ├── shortcode-hints.yaml
│   │       ├── shortcode-images.yaml
│   │       ├── shortcode-includes.yaml
│   │       ├── shortcode-katex.yaml
│   │       ├── shortcode-mermaid.yaml
│   │       ├── shortcode-progress.yaml
│   │       ├── shortcode-propertylist.yaml
│   │       ├── shortcode-toc-tree.yaml
│   │       └── shortcode-toc.yaml
│   ├── layouts/
│   │   └── shortcodes/
│   │       └── sprites.html
│   └── static/
│       ├── .htaccess
│       ├── _includes/
│       │   ├── example.html.part
│       │   └── example.md.part
│       ├── custom.css
│       └── custom.css.example
├── i18n/
│   ├── am.yaml
│   ├── cs.yaml
│   ├── da.yaml
│   ├── de.yaml
│   ├── en.yaml
│   ├── es.yaml
│   ├── fr.yaml
│   ├── it.yaml
│   ├── ja.yaml
│   ├── nl.yaml
│   ├── oc.yaml
│   └── zh-cn.yaml
├── layouts/
│   ├── 404.html
│   ├── _default/
│   │   ├── _markup/
│   │   │   ├── render-codeblock-mermaid.html
│   │   │   ├── render-heading.html
│   │   │   ├── render-image.html
│   │   │   └── render-link.html
│   │   ├── baseof.html
│   │   ├── list.html
│   │   ├── single.html
│   │   ├── taxonomy.html
│   │   └── terms.html
│   ├── partials/
│   │   ├── foot.html
│   │   ├── head/
│   │   │   ├── custom.html
│   │   │   ├── favicons.html
│   │   │   ├── meta.html
│   │   │   ├── microformats.html
│   │   │   ├── others.html
│   │   │   └── rel-me.html
│   │   ├── language.html
│   │   ├── menu-bundle-np.html
│   │   ├── menu-bundle.html
│   │   ├── menu-extra.html
│   │   ├── menu-filetree-np.html
│   │   ├── menu-filetree.html
│   │   ├── menu.html
│   │   ├── microformats/
│   │   │   ├── opengraph.html
│   │   │   ├── schema.html
│   │   │   └── twitter_cards.html
│   │   ├── page-header.html
│   │   ├── page-metadata.html
│   │   ├── pagination.html
│   │   ├── posts/
│   │   │   └── metadata.html
│   │   ├── search.html
│   │   ├── site-footer.html
│   │   ├── site-header.html
│   │   ├── svg-icon-symbols.html
│   │   └── utils/
│   │       ├── content.html
│   │       ├── description.html
│   │       ├── featured.html
│   │       └── title.html
│   ├── posts/
│   │   ├── list.html
│   │   └── single.html
│   ├── robots.txt
│   └── shortcodes/
│       ├── audio.html
│       ├── avatar.html
│       ├── button.html
│       ├── columns.html
│       ├── expand.html
│       ├── gist.html
│       ├── hint.html
│       ├── icon.html
│       ├── img.html
│       ├── include.html
│       ├── katex.html
│       ├── mermaid.html
│       ├── progress.html
│       ├── propertylist.html
│       ├── tab.html
│       ├── tabs.html
│       ├── toc-tree.html
│       └── toc.html
├── package.json
├── renovate.json
├── src/
│   ├── js/
│   │   ├── accessibility.js
│   │   ├── colorTheme.js
│   │   ├── config.js
│   │   ├── index.js
│   │   ├── katex.js
│   │   ├── mermaid.js
│   │   └── search.js
│   ├── sass/
│   │   ├── _asciidoc.scss
│   │   ├── _base.scss
│   │   ├── _chroma_base.scss
│   │   ├── _chroma_dark.scss
│   │   ├── _chroma_light.scss
│   │   ├── _color_mode.scss
│   │   ├── _defaults.scss
│   │   ├── _fonts.scss
│   │   ├── _markdown.scss
│   │   ├── _mobile.scss
│   │   ├── _normalize.css
│   │   ├── _print.scss
│   │   ├── _shortcodes.scss
│   │   ├── _utils.scss
│   │   ├── main.scss
│   │   ├── mobile.scss
│   │   └── print.scss
│   └── static/
│       └── custom.css
├── svgsprite.config.json
├── theme.toml
├── webpack.config.js
└── webpack.plugins.js
Download .txt
SYMBOL INDEX (22 symbols across 4 files)

FILE: src/js/config.js
  constant COLOR_THEME_DARK (line 1) | const COLOR_THEME_DARK = "dark"
  constant COLOR_THEME_LIGHT (line 2) | const COLOR_THEME_LIGHT = "light"
  constant COLOR_THEME_AUTO (line 3) | const COLOR_THEME_AUTO = "auto"
  constant THEME (line 4) | const THEME = "hugo-geekdoc"
  constant TOGGLE_COLOR_THEMES (line 5) | const TOGGLE_COLOR_THEMES = [COLOR_THEME_AUTO, COLOR_THEME_DARK, COLOR_T...

FILE: src/js/search.js
  function init (line 54) | function init(input, searchConfig) {
  function search (line 80) | function search(input, results, searchConfig) {
  function createLinks (line 152) | function createLinks(pages, target, showDesc) {
  function fetchErrors (line 198) | function fetchErrors(response) {
  function getJson (line 205) | function getJson(src, callback) {
  function flattenHits (line 222) | function flattenHits(results) {
  function urlPath (line 243) | function urlPath(rawURL) {
  function combineURLs (line 258) | function combineURLs(baseURL, relativeURL) {

FILE: webpack.config.js
  method generate (line 87) | generate(seed, files) {

FILE: webpack.plugins.js
  class SRIPlugin (line 10) | class SRIPlugin {
    method constructor (line 16) | constructor(options = {}) {
    method apply (line 36) | apply(compiler) {
  class GitVersionPlugin (line 57) | class GitVersionPlugin {
    method constructor (line 62) | constructor(options = {}) {
    method apply (line 80) | apply(compiler) {
    method version (line 125) | async version() {
    method getBranchAndHash (line 137) | async getBranchAndHash() {
Condensed preview — 206 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (303K chars).
[
  {
    "path": ".cspell.json",
    "chars": 965,
    "preview": "{\n  \"version\": \"0.2\",\n  \"language\": \"en\",\n  \"dictionaries\": [\"en_us\", \"softwareTerms\", \"companies\", \"bash\", \"html\", \"css"
  },
  {
    "path": ".github/settings.yaml",
    "chars": 1493,
    "preview": "repository:\n  name: hugo-geekdoc\n  description: Hugo theme made for documentation\n  homepage: https://geekdocs.de\n  topi"
  },
  {
    "path": ".gitignore",
    "chars": 395,
    "preview": "# local environments\n.swp\n.env*\n/dist/\n/build/\n/node_modules/\n/lhci_reports/\n/exampleSite/themes/\n/exampleSite/public/\n/"
  },
  {
    "path": ".gitsv/config.yaml",
    "chars": 1012,
    "preview": "---\nversion: \"1.1\"\n\nversioning:\n  update-major: []\n  update-minor: [feat]\n  update-patch: [fix, perf, refactor, chore, t"
  },
  {
    "path": ".htmlvalidate.json",
    "chars": 204,
    "preview": "{\n  \"extends\": [\"html-validate:standard\"],\n  \"rules\": {\n    \"element-required-content\": \"off\",\n    \"element-permitted-co"
  },
  {
    "path": ".jsbeautifyrc",
    "chars": 230,
    "preview": "{\n    \"indent_size\": 4,\n    \"indent_char\": \" \",\n    \"preserve_newlines\": false,\n    \"unformatted\": [\"svg\"],\n    \"content"
  },
  {
    "path": ".lighthouserc.yaml",
    "chars": 2181,
    "preview": "---\nci:\n  collect:\n    numberOfRuns: 3\n    staticDistDir: exampleSite/public\n    url:\n      - http://localhost/\n      - "
  },
  {
    "path": ".lycheeignore",
    "chars": 118,
    "preview": "https://github.com/thegeeklab/.+/edit/main/.*\nhttps://unsplash.com.*\nhttps://www.color-hex.com.*\nhttps://geekdocs.de/\n"
  },
  {
    "path": ".markdownlint.yaml",
    "chars": 106,
    "preview": "---\ndefault: True\nMD013: False\nMD041: False\nMD042: False\nMD004:\n  style: dash\nMD010:\n  code_blocks: False\n"
  },
  {
    "path": ".npmrc",
    "chars": 45,
    "preview": "loglevel=error\nfund=false\nengine-strict=true\n"
  },
  {
    "path": ".nvmrc",
    "chars": 6,
    "preview": "lts/*\n"
  },
  {
    "path": ".prettierignore",
    "chars": 99,
    "preview": "_normalize.css\nlist.json.json\n/.lighthouseci/\n/themes/\n/static/js/\n/src/favicon/\nLICENSE\n**/*.html\n"
  },
  {
    "path": ".prettierrc",
    "chars": 91,
    "preview": "{\n  \"printWidth\": 99,\n  \"singleQuote\": false,\n  \"semi\": false,\n  \"trailingComma\": \"none\"\n}\n"
  },
  {
    "path": ".tarignore",
    "chars": 252,
    "preview": ".envrc\n.nvmrc\n.npmrc\n.tarignore\n.git*\n.woodpecker*\n.lighthouse*\n.markdownlint*\n.jsbeautify*\n.prettier*\n.htmlvalidate*\n.l"
  },
  {
    "path": ".woodpecker/build-package.yaml",
    "chars": 1098,
    "preview": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:"
  },
  {
    "path": ".woodpecker/docs.yaml",
    "chars": 1800,
    "preview": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:"
  },
  {
    "path": ".woodpecker/static.yaml",
    "chars": 1878,
    "preview": "---\nwhen:\n  - event: [pull_request, tag]\n  - event: [push, manual]\n    branch:\n      - ${CI_REPO_DEFAULT_BRANCH}\n\nsteps:"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 1654,
    "preview": "# Contributing\n\n## Security\n\nIf you think you have found a **security issue**, please do not mention it in this reposito"
  },
  {
    "path": "LICENSE",
    "chars": 1123,
    "preview": "MIT License\n\nCopyright (c) 2022 Robert Kaussow <mail@thegeeklab.de>\n\nPermission is hereby granted, free of charge, to an"
  },
  {
    "path": "README.md",
    "chars": 3117,
    "preview": "# Geekdoc\n\n[![Build Status](https://ci.thegeeklab.de/api/badges/thegeeklab/hugo-geekdoc/status.svg)](https://ci.thegeekl"
  },
  {
    "path": "archetypes/docs.md",
    "chars": 125,
    "preview": "---\ntitle: \"{{ .Name | humanize | title }}\"\nweight: 1\n# geekdocFlatSection: false\n# geekdocToc: 6\n# geekdocHidden: false"
  },
  {
    "path": "archetypes/posts.md",
    "chars": 71,
    "preview": "---\ntitle: \"{{ replace .Name \"-\" \" \" | title }}\"\ndate: {{ .Date }}\n---\n"
  },
  {
    "path": "assets/search/config.json",
    "chars": 512,
    "preview": "{{- $searchDataFile := printf \"search/%s.data.json\" .Language.Lang -}}\n{{- $searchData := resources.Get \"search/data.jso"
  },
  {
    "path": "assets/search/data.json",
    "chars": 491,
    "preview": "[\n  {{ range $index, $page := (where .Site.Pages \"Params.geekdocProtected\" \"ne\" true) }}\n    {{ if ne $index 0 }},{{ end"
  },
  {
    "path": "eslint.config.js",
    "chars": 1127,
    "preview": "import eslint from \"@eslint/js\"\nimport globals from \"globals\"\nimport eslintPluginPrettierRecommended from \"eslint-plugin"
  },
  {
    "path": "exampleSite/config/_default/hugo.yaml",
    "chars": 578,
    "preview": "---\nbaseURL: https://geekdocs.de/\ntitle: Geekdocs\ntheme: hugo-geekdoc\n\npygmentsUseClasses: true\npygmentsCodeFences: true"
  },
  {
    "path": "exampleSite/config/_default/languages.yaml",
    "chars": 74,
    "preview": "---\nen:\n  languageName: \"English\"\n  contentDir: \"content/en\"\n  weight: 10\n"
  },
  {
    "path": "exampleSite/config/_default/params.yaml",
    "chars": 791,
    "preview": "---\n# cspell:ignore socialmedia2\n\ndescription: >\n  Geekdoc is a simple Hugo theme for documentations. It is intentionall"
  },
  {
    "path": "exampleSite/content/en/_includes/_index.md",
    "chars": 28,
    "preview": "---\ngeekdocHidden: true\n---\n"
  },
  {
    "path": "exampleSite/content/en/_includes/include-page.md",
    "chars": 211,
    "preview": "_**Example page include**_\n\n{{< hint type=note >}}\n**Example Shortcode**\\\nShortcode used in an include page.\n{{< /hint >"
  },
  {
    "path": "exampleSite/content/en/_index.md",
    "chars": 2336,
    "preview": "---\ntitle: Welcome to the documentation\ngeekdocNav: false\ngeekdocAlign: center\ngeekdocAnchor: false\n---\n\n<!-- markdownli"
  },
  {
    "path": "exampleSite/content/en/asciidoc/admonition-icons.adoc",
    "chars": 1026,
    "preview": "+++\ntitle = \"Admonition Icons\"\n+++\n\n:icons: font\n\nBy default, the admonition is rendered with a plain text label. To ena"
  },
  {
    "path": "exampleSite/content/en/asciidoc/admonitions.adoc",
    "chars": 1888,
    "preview": "+++\ntitle = \"Admonitions\"\n+++\n\n// cspell:ignore toclevels\n\n:toc:\n:toclevels: 2\n\n{{< toc >}}\n\n== Admonition types\n\nThere "
  },
  {
    "path": "exampleSite/content/en/collapse/_index.md",
    "chars": 85,
    "preview": "---\ntitle: Collapse\ngeekdocCollapseSection: true\n---\n\nDemo collapsible menu entries.\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/_index.md",
    "chars": 75,
    "preview": "Level 1\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/level-1-1.md",
    "chars": 36,
    "preview": "---\ntitle: Level 1.1\n---\n\nLevel 1.1\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-1/level-1-2.md",
    "chars": 36,
    "preview": "---\ntitle: Level 1.2\n---\n\nLevel 1.2\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/_index.md",
    "chars": 46,
    "preview": "---\ngeekdocCollapseSection: true\n---\n\nLevel-2\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/level-2-1.md",
    "chars": 36,
    "preview": "---\ntitle: Level 2.1\n---\n\nLevel 2.1\n"
  },
  {
    "path": "exampleSite/content/en/collapse/level-2/level-2-2.md",
    "chars": 36,
    "preview": "---\ntitle: Level 2.2\n---\n\nLevel 2.2\n"
  },
  {
    "path": "exampleSite/content/en/features/_index.md",
    "chars": 36,
    "preview": "---\ntitle: Features\nweight: -15\n---\n"
  },
  {
    "path": "exampleSite/content/en/features/code-blocks.md",
    "chars": 2265,
    "preview": "---\ntitle: Code Blocks\n---\n\nThere are several ways to add code blocks. Most of them work out of the box, only the Hugo s"
  },
  {
    "path": "exampleSite/content/en/features/dark-mode/_index.md",
    "chars": 1365,
    "preview": "---\ntitle: Dark Mode\n---\n\nSay hello to the dark mode of the Geekdoc theme!\n\n[![Geekdoc in dark mode](images/geekdoc-dark"
  },
  {
    "path": "exampleSite/content/en/features/icon-sets.md",
    "chars": 2149,
    "preview": "---\ntitle: Icon Sets\n# cSpell:ignore svgsprit.es\n---\n\n{{< toc >}}\n\n## Custom icon sets\n\nThe only supported source for cu"
  },
  {
    "path": "exampleSite/content/en/features/multilingual/_index.md",
    "chars": 2617,
    "preview": "---\ntitle: Multilingual\n# cSpell:ignore Veröffentlichung\n---\n\n{{< toc >}}\n\nHugo supports the creation of websites with m"
  },
  {
    "path": "exampleSite/content/en/features/theming/_index.md",
    "chars": 3986,
    "preview": "---\ntitle: Theming\n# cspell:ignore msapplication\n---\n\n{{< toc >}}\n\n## Color Scheme\n\nIf you want to customize the theme's"
  },
  {
    "path": "exampleSite/content/en/posts/_index.md",
    "chars": 63,
    "preview": "---\ntitle: News\ntype: posts\nweight: 10\ngeekdocHidden: true\n---\n"
  },
  {
    "path": "exampleSite/content/en/posts/hello_geekdoc.md",
    "chars": 707,
    "preview": "---\ntitle: Hello Geekdoc\ntype: posts\ndate: 2020-01-06\ntags:\n  - Documentation\n  - Updates\n---\n\nThis is the first release"
  },
  {
    "path": "exampleSite/content/en/posts/initial-release.md",
    "chars": 402,
    "preview": "---\ntitle: Initial release\ntype: posts\ndate: 2020-01-08\n---\n\nThis is the first release of the Geekdoc theme.\n\nDolor sit,"
  },
  {
    "path": "exampleSite/content/en/shortcodes/_index.md",
    "chars": 38,
    "preview": "---\ntitle: Shortcodes\nweight: -10\n---\n"
  },
  {
    "path": "exampleSite/content/en/shortcodes/audio/_index.md",
    "chars": 1069,
    "preview": "---\ntitle: Audio\nresources:\n  - name: diamonds-trap\n    src: \"diamonds-trap.mp3\"\n    title: Diamonds Trap\n    params:\n  "
  },
  {
    "path": "exampleSite/content/en/shortcodes/avatar/_index.md",
    "chars": 684,
    "preview": "---\ntitle: Avatar\nresources:\n  - name: avatar\n    src: \"avatar.jpg\"\n    title: \"Avatar\"\n---\n\nThe avatar shortcode is ano"
  },
  {
    "path": "exampleSite/content/en/shortcodes/buttons.md",
    "chars": 823,
    "preview": "---\ntitle: Buttons\n---\n\nButtons are styled links that can lead to local page or external link.\n\n## Usage\n\n<!-- prettier-"
  },
  {
    "path": "exampleSite/content/en/shortcodes/columns.md",
    "chars": 1533,
    "preview": "---\ntitle: Columns\n---\n\nThe Columns shortcode can be used to organize content side-by-side (horizontally) for better rea"
  },
  {
    "path": "exampleSite/content/en/shortcodes/expand.md",
    "chars": 1037,
    "preview": "---\ntitle: Expand\n---\n\nExpand shortcode can help to decrease clutter on screen by hiding part of text. Expand content by"
  },
  {
    "path": "exampleSite/content/en/shortcodes/hints.md",
    "chars": 2175,
    "preview": "---\ntitle: Hints\n---\n\nHint shortcode can be used as hint/alerts/notification block.\n\n## Usage\n\n<!-- prettier-ignore-star"
  },
  {
    "path": "exampleSite/content/en/shortcodes/icons.md",
    "chars": 677,
    "preview": "---\ntitle: Icons\n---\n\nSimple shortcode to include icons from SVG sprites outside of menus.\n\n## Usage\n\n<!-- prettier-igno"
  },
  {
    "path": "exampleSite/content/en/shortcodes/images/_index.md",
    "chars": 5136,
    "preview": "---\ntitle: Images\nresources:\n  - name: forest-1\n    src: \"forest-1.jpg\"\n    title: Forest (1)\n    params:\n      credits:"
  },
  {
    "path": "exampleSite/content/en/shortcodes/includes.md",
    "chars": 3128,
    "preview": "---\ntitle: Includes\n---\n\nInclude shortcode can include files of different types. By specifying a language, the included "
  },
  {
    "path": "exampleSite/content/en/shortcodes/katex.md",
    "chars": 788,
    "preview": "---\ntitle: KaTeX\n# cspell:ignore infty\n---\n\n[KaTeX](https://katex.org/) shortcode let you render math typesetting in mar"
  },
  {
    "path": "exampleSite/content/en/shortcodes/mermaid.md",
    "chars": 1537,
    "preview": "---\ntitle: Mermaid\n---\n\n[Mermaid](https://mermaidjs.github.io/) is library for generating SVG charts and diagrams from t"
  },
  {
    "path": "exampleSite/content/en/shortcodes/progress.md",
    "chars": 930,
    "preview": "---\ntitle: Progress\n---\n\nA progress bar shows how far a process has progressed.\n\n## Usage\n\n<!-- prettier-ignore -->\n```t"
  },
  {
    "path": "exampleSite/content/en/shortcodes/propertylist.md",
    "chars": 1045,
    "preview": "---\ntitle: Properties\n---\n\nThe property list shortcode creates a custom HTML description list that can be used to displa"
  },
  {
    "path": "exampleSite/content/en/shortcodes/tabs.md",
    "chars": 1541,
    "preview": "---\ntitle: Tabs\n---\n\nTabs let you organize content by context, for example installation instructions for each supported "
  },
  {
    "path": "exampleSite/content/en/shortcodes/toc-tree.md",
    "chars": 683,
    "preview": "---\ntitle: ToC-Tree\n---\n\nThe `toc-tree` shortcode will generate a Table of Content from a section file tree of your cont"
  },
  {
    "path": "exampleSite/content/en/shortcodes/toc.md",
    "chars": 1820,
    "preview": "---\ntitle: ToC\n---\n\nSimple wrapper to generate a page Table of Content from a shortcode.\n\n## Usage\n\n<!-- prettier-ignore"
  },
  {
    "path": "exampleSite/content/en/toc-tree/_index.md",
    "chars": 243,
    "preview": "---\ntitle: ToC-Tree\ngeekdocFlatSection: true\n---\n\nThis is just a demo section for the <!-- cspell:disable -->[toc-tree]("
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/_index.md",
    "chars": 113,
    "preview": "---\ngeekdocCollapseSection: true\n---\n\nLevel 1\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-1.md",
    "chars": 36,
    "preview": "---\ntitle: Level 1.1\n---\n\nLevel 1.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-2.md",
    "chars": 36,
    "preview": "---\ntitle: Level 1.2\n---\n\nLevel 1.2\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-3/_index.md",
    "chars": 103,
    "preview": "---\ntitle: Level 1.3\n---\n\nLevel 1.3\n\n<!-- cspell:disable -->\n\n{{< toc-tree >}}\n\n<!-- cspell:enable -->\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-1/level-1-3/level-1-3-1.md",
    "chars": 40,
    "preview": "---\ntitle: Level 1.3.1\n---\n\nLevel 1.3.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/_index.md",
    "chars": 8,
    "preview": "Level-2\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/level-2-1.md",
    "chars": 36,
    "preview": "---\ntitle: Level 2.1\n---\n\nLevel 2.1\n"
  },
  {
    "path": "exampleSite/content/en/toc-tree/level-2/level-2-2.md",
    "chars": 36,
    "preview": "---\ntitle: Level 2.2\n---\n\nLevel 2.2\n"
  },
  {
    "path": "exampleSite/content/en/usage/_index.md",
    "chars": 33,
    "preview": "---\ntitle: Usage\nweight: -20\n---\n"
  },
  {
    "path": "exampleSite/content/en/usage/configuration.md",
    "chars": 15068,
    "preview": "---\ntitle: Configuration\nweight: -10\n# cspell:ignore expirydate linktitle publishdate\n---\n\n{{< toc >}}\n\n## Site configur"
  },
  {
    "path": "exampleSite/content/en/usage/customization.md",
    "chars": 646,
    "preview": "---\ntitle: Customization\n---\n\n{{< toc >}}\n\n## Custom resources\n\nTo add custom resources to your site e.g. CSS or JavaScr"
  },
  {
    "path": "exampleSite/content/en/usage/getting-started.md",
    "chars": 7429,
    "preview": "---\ntitle: Getting Started\nweight: -20\n# cspell:ignore demosite testlink gohugoio\n---\n\nThis page tells you how to get st"
  },
  {
    "path": "exampleSite/content/en/usage/menus.md",
    "chars": 3609,
    "preview": "---\ntitle: Menus\n---\n\nThe theme supports two different kinds of menus. File-tree menu is the default one and does not re"
  },
  {
    "path": "exampleSite/data/menu/extra.yaml",
    "chars": 122,
    "preview": "---\nheader:\n  - name: GitHub\n    ref: https://github.com/thegeeklab/hugo-geekdoc\n    icon: gdoc_github\n    external: tru"
  },
  {
    "path": "exampleSite/data/menu/main.yaml",
    "chars": 632,
    "preview": "---\nmain:\n  - name:\n      en: Level 1 (EN)\n      de: Level 1 (DE)\n    sub:\n      - name:\n          en: Level 1.1 (EN)\n  "
  },
  {
    "path": "exampleSite/data/menu/more.yaml",
    "chars": 319,
    "preview": "---\nmore:\n  - name: News\n    ref: \"/posts\"\n    icon: \"gdoc_notification\"\n  - name: Releases\n    ref: \"https://github.com"
  },
  {
    "path": "exampleSite/data/properties/demo.yaml",
    "chars": 715,
    "preview": "---\nproperties:\n  - name: prop1\n    type: string\n    description: Dummy description of the prop1 string property.\n    re"
  },
  {
    "path": "exampleSite/data/properties/shortcode-audio.yaml",
    "chars": 141,
    "preview": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the audio resource defined in page front matter"
  },
  {
    "path": "exampleSite/data/properties/shortcode-avatar.yaml",
    "chars": 570,
    "preview": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the image resource defined in page front matter"
  },
  {
    "path": "exampleSite/data/properties/shortcode-buttons.yaml",
    "chars": 663,
    "preview": "---\nproperties:\n  - name: href\n    type: string\n    description: The URL to use as target of the button.\n    required: f"
  },
  {
    "path": "exampleSite/data/properties/shortcode-columns.yaml",
    "chars": 205,
    "preview": "---\nproperties:\n  - name: size\n    type: string\n    description: Preset of different sizes for the _first_ column. Suppo"
  },
  {
    "path": "exampleSite/data/properties/shortcode-hints.yaml",
    "chars": 434,
    "preview": "---\nproperties:\n  - name: type\n    type: string\n    description: Type of the hint. Supported values are `note|tip|import"
  },
  {
    "path": "exampleSite/data/properties/shortcode-images.yaml",
    "chars": 514,
    "preview": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the image resource defined in page front matter"
  },
  {
    "path": "exampleSite/data/properties/shortcode-includes.yaml",
    "chars": 731,
    "preview": "---\nproperties:\n  - name: file\n    type: string\n    description: Path of the file (relative to the Hugo root) to include"
  },
  {
    "path": "exampleSite/data/properties/shortcode-katex.yaml",
    "chars": 134,
    "preview": "---\nproperties:\n  - name: class\n    type: list\n    description: List of space-separated CSS class names to apply.\n    re"
  },
  {
    "path": "exampleSite/data/properties/shortcode-mermaid.yaml",
    "chars": 134,
    "preview": "---\nproperties:\n  - name: class\n    type: list\n    description: List of space-separated CSS class names to apply.\n    re"
  },
  {
    "path": "exampleSite/data/properties/shortcode-progress.yaml",
    "chars": 684,
    "preview": "---\nproperties:\n  - name: type\n    type: string\n    description: Color type of the progress bar. Supported values are `m"
  },
  {
    "path": "exampleSite/data/properties/shortcode-propertylist.yaml",
    "chars": 408,
    "preview": "---\nproperties:\n  - name: name\n    type: string\n    description: Name of the file from the `data/properties/` directory."
  },
  {
    "path": "exampleSite/data/properties/shortcode-toc-tree.yaml",
    "chars": 260,
    "preview": "---\nproperties:\n  - name: sortBy\n    type: string\n    description: |\n      Override the default sort parameter set by [`"
  },
  {
    "path": "exampleSite/data/properties/shortcode-toc.yaml",
    "chars": 495,
    "preview": "---\nproperties:\n  - name: format\n    type: string\n    description: |\n      Format of the returned ToC. The `html` format"
  },
  {
    "path": "exampleSite/layouts/shortcodes/sprites.html",
    "chars": 511,
    "preview": "<div class=\"flex flex-wrap justify-center\">\n  {{ range $key, $value := hugo.Data.sprites.geekdoc }}\n    <div class=\"flex"
  },
  {
    "path": "exampleSite/static/.htaccess",
    "chars": 702,
    "preview": "ErrorDocument 404 /404.html\n\nExpiresActive On\nExpiresDefault \"access plus 600 seconds\"\nExpiresByType text/css \"access pl"
  },
  {
    "path": "exampleSite/static/_includes/example.html.part",
    "chars": 126,
    "preview": "<p>\n<i><b>Example HTML include</b></i>\n</p>\n\n<h4>This is heading 4</h4>\n<h5>This is heading 5</h5>\n<h6>This is heading 6"
  },
  {
    "path": "exampleSite/static/_includes/example.md.part",
    "chars": 160,
    "preview": "_**Example Markdown include**_\n\nFile including a simple Markdown table.\n\n| Head 1 | Head 2 | Head 3 |\n| ------ | ------ "
  },
  {
    "path": "exampleSite/static/custom.css",
    "chars": 290,
    "preview": ":root {\n  --code-max-height: 60rem;\n}\n\n.icon-grid {\n  width: 8rem;\n  height: 8rem;\n  margin: 0.2em;\n  text-align: center"
  },
  {
    "path": "exampleSite/static/custom.css.example",
    "chars": 3854,
    "preview": "/* Global customization */\n\n:root {\n  --code-max-height: 60rem;\n\n  --header-font-family: \"DancingScript\";\n  --body-font-"
  },
  {
    "path": "i18n/am.yaml",
    "chars": 1411,
    "preview": "---\r\nedit_page: ገጹን ማስተካከያ\r\n\r\nnav_navigation: መሄጃ\r\nnav_tags: መለያዎች\r\nnav_more: ተጨማሪ\r\nnav_top: ወደ ላይ ተመለስ\r\n\r\nform_placehol"
  },
  {
    "path": "i18n/cs.yaml",
    "chars": 1619,
    "preview": "---\nedit_page: Upravit stránku\n\nnav_navigation: Navigace\nnav_tags: Tagy\nnav_more: Více\nnav_top: Zpět nahoru\n\nform_placeh"
  },
  {
    "path": "i18n/da.yaml",
    "chars": 1518,
    "preview": "---\nedit_page: Rediger side\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Mere\nnav_top: Til toppen\n\nform_placehol"
  },
  {
    "path": "i18n/de.yaml",
    "chars": 1607,
    "preview": "---\nedit_page: Seite bearbeiten\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Weitere\nnav_top: Nach oben\n\nform_pl"
  },
  {
    "path": "i18n/en.yaml",
    "chars": 1498,
    "preview": "---\nedit_page: Edit page\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: More\nnav_top: Back to top\n\nform_placeholde"
  },
  {
    "path": "i18n/es.yaml",
    "chars": 1624,
    "preview": "---\nedit_page: Editar página\n\nnav_navigation: Navegación\nnav_tags: Etiquetas\nnav_more: Más\nnav_top: Inicio de la página\n"
  },
  {
    "path": "i18n/fr.yaml",
    "chars": 1637,
    "preview": "---\nedit_page: Editer la page\n\nnav_navigation: Navigation\nnav_tags: Tags\nnav_more: Plus\nnav_top: Retour au haut de page\n"
  },
  {
    "path": "i18n/it.yaml",
    "chars": 1659,
    "preview": "---\nedit_page: Modifica la pagina\n\nnav_navigation: Navigazione\nnav_tags: Etichette\nnav_more: Altro\nnav_top: Torna su\n\nfo"
  },
  {
    "path": "i18n/ja.yaml",
    "chars": 1290,
    "preview": "---\nedit_page: ページの編集\n\nnav_navigation: ナビゲーション\nnav_tags: タグ\nnav_more: さらに\nnav_top: トップへ戻る\n\nform_placeholder_search: 検索\n\n"
  },
  {
    "path": "i18n/nl.yaml",
    "chars": 1600,
    "preview": "---\nedit_page: Wijzig pagina\n\nnav_navigation: Navigatie\nnav_tags: Markering\nnav_more: Meer\nnav_top: Terug naar boven\n\nfo"
  },
  {
    "path": "i18n/oc.yaml",
    "chars": 1638,
    "preview": "---\nedit_page: Modificar la pagina\n\nnav_navigation: Navegacion\nnav_tags: Etiquetas\nnav_more: Mai\nnav_top: Tornar ennaut\n"
  },
  {
    "path": "i18n/zh-cn.yaml",
    "chars": 1180,
    "preview": "---\nedit_page: 编辑页面\n\nnav_navigation: 导航\nnav_tags: 标签\nnav_more: 更多\nnav_top: 回到顶部\n\nform_placeholder_search: 搜索\n\nerror_page"
  },
  {
    "path": "layouts/404.html",
    "chars": 1138,
    "preview": "<!DOCTYPE html>\n<html lang=\"{{ .Site.Language.Lang }}\">\n  <head>\n    {{ partial \"head/meta\" . }}\n    <title>{{ i18n \"err"
  },
  {
    "path": "layouts/_default/_markup/render-codeblock-mermaid.html",
    "chars": 366,
    "preview": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"mermaid\") }}\n  <!-- Include mermaid only first time -->\n  <"
  },
  {
    "path": "layouts/_default/_markup/render-heading.html",
    "chars": 1064,
    "preview": "{{- $showAnchor := (and (default true .Page.Params.geekdocAnchor) (default true .Page.Site.Params.geekdocAnchor)) -}}\n\n\n"
  },
  {
    "path": "layouts/_default/_markup/render-image.html",
    "chars": 146,
    "preview": "<img\n  src=\"{{ .Destination | safeURL }}\"\n  alt=\"{{ .Text }}\"\n  {{ with .Title }}title=\"{{ . }}\"{{ end }}\n/>\n{{- /* Drop"
  },
  {
    "path": "layouts/_default/_markup/render-link.html",
    "chars": 402,
    "preview": "{{- $raw := or (hasPrefix .Text \"<img\") (hasPrefix .Text \"<figure\") -}}\n{{- $code := hasPrefix .Text \"<code\" -}}\n<a\n  cl"
  },
  {
    "path": "layouts/_default/baseof.html",
    "chars": 1894,
    "preview": "<!DOCTYPE html>\n<html\n  lang=\"{{ .Site.Language.Lang }}\"\n  class=\"color-toggle-hidden\"\n  {{ if default false .Site.Param"
  },
  {
    "path": "layouts/_default/list.html",
    "chars": 312,
    "preview": "{{ define \"main\" }}\n  {{ partial \"page-header\" . }}\n\n\n  <article\n    class=\"gdoc-markdown gdoc-markdown__align--{{ defau"
  },
  {
    "path": "layouts/_default/single.html",
    "chars": 348,
    "preview": "{{ define \"main\" }}\n  {{ partial \"page-header\" . }}\n\n\n  <article\n    class=\"gdoc-markdown gdoc-markdown__align--{{ defau"
  },
  {
    "path": "layouts/_default/taxonomy.html",
    "chars": 1331,
    "preview": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages }}\n    <article class=\"gdoc-post"
  },
  {
    "path": "layouts/_default/terms.html",
    "chars": 1133,
    "preview": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages.ByTitle }}\n    <article class=\"g"
  },
  {
    "path": "layouts/partials/foot.html",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "layouts/partials/head/custom.html",
    "chars": 289,
    "preview": "<!--\nYou can add custom elements to the page header here.\n\nExample:\nEnsure to use the absolute path to custom files and "
  },
  {
    "path": "layouts/partials/head/favicons.html",
    "chars": 303,
    "preview": "<link rel=\"icon\" type=\"image/svg+xml\" href=\"{{ \"favicon/favicon.svg\" | relURL }}\" />\n<link\n  rel=\"icon\"\n  type=\"image/pn"
  },
  {
    "path": "layouts/partials/head/meta.html",
    "chars": 502,
    "preview": "<meta charset=\"UTF-8\" />\n<meta name=\"referrer\" content=\"no-referrer\" />\n<meta name=\"viewport\" content=\"width=device-widt"
  },
  {
    "path": "layouts/partials/head/microformats.html",
    "chars": 134,
    "preview": "{{ partial \"microformats/opengraph.html\" . }}\n{{ partial \"microformats/twitter_cards.html\" . }}\n{{ partial \"microformats"
  },
  {
    "path": "layouts/partials/head/others.html",
    "chars": 1834,
    "preview": "{{- if default true .Site.Params.geekdocDarkModeToggle }}\n  <script src=\"{{ index (index hugo.Data.assets \"colortheme.js"
  },
  {
    "path": "layouts/partials/head/rel-me.html",
    "chars": 77,
    "preview": "<!-- place to set your rel-me links https://microformats.org/wiki/rel-me -->\n"
  },
  {
    "path": "layouts/partials/language.html",
    "chars": 1669,
    "preview": "{{ if hugo.IsMultilingual }}\n  <span class=\"gdoc-language\">\n    <ul class=\"gdoc-language__selector\" tabindex=\"0\" role=\"b"
  },
  {
    "path": "layouts/partials/menu-bundle-np.html",
    "chars": 2292,
    "preview": "{{ $current := . }}\n{{ $site := .Site }}\n{{ $current.Scratch.Set \"prev\" false }}\n{{ $current.Scratch.Set \"getNext\" false"
  },
  {
    "path": "layouts/partials/menu-bundle.html",
    "chars": 3138,
    "preview": "{{ $current := .current }}\n{{ template \"menu-file\" dict \"sect\" .source \"current\" $current \"site\" $current.Site }}\n\n\n<!--"
  },
  {
    "path": "layouts/partials/menu-extra.html",
    "chars": 1352,
    "preview": "{{ $current := .current }}\n{{ template \"menu-extra\" dict \"sect\" .source \"current\" $current \"site\" $current.Site \"target\""
  },
  {
    "path": "layouts/partials/menu-filetree-np.html",
    "chars": 3578,
    "preview": "{{ $current := . }}\n{{ $site := .Site }}\n{{ $current.Scratch.Set \"prev\" false }}\n{{ $current.Scratch.Set \"getNext\" false"
  },
  {
    "path": "layouts/partials/menu-filetree.html",
    "chars": 3624,
    "preview": "{{ $current := . }}\n{{ template \"tree-nav\" dict \"sect\" .Site.Home.Sections \"current\" $current }}\n\n\n<!-- templates -->\n{{"
  },
  {
    "path": "layouts/partials/menu.html",
    "chars": 1335,
    "preview": "<nav>\n  {{ partial \"search\" . }}\n\n\n  <section class=\"gdoc-nav--main\">\n    <h2>{{ i18n \"nav_navigation\" }}</h2>\n    {{ if"
  },
  {
    "path": "layouts/partials/microformats/opengraph.html",
    "chars": 2247,
    "preview": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n\n{{- "
  },
  {
    "path": "layouts/partials/microformats/schema.html",
    "chars": 2512,
    "preview": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n{{- i"
  },
  {
    "path": "layouts/partials/microformats/twitter_cards.html",
    "chars": 611,
    "preview": "{{- with partial \"utils/featured\" . }}\n  <meta name=\"twitter:card\" content=\"summary_large_image\" />\n{{- else }}\n  <meta "
  },
  {
    "path": "layouts/partials/page-header.html",
    "chars": 2632,
    "preview": "{{ $geekdocRepo := default (default false .Site.Params.geekdocRepo) .Page.Params.geekdocRepo }}\n{{ $geekdocEditPath := d"
  },
  {
    "path": "layouts/partials/page-metadata.html",
    "chars": 550,
    "preview": "{{- $showPageLastmod := (or (default false .Page.Params.geekdocPageLastmod) (default false .Site.Params.geekdocPageLastm"
  },
  {
    "path": "layouts/partials/pagination.html",
    "chars": 822,
    "preview": "{{ $page := $.Paginator }}\n\n\n<nav class=\"gdoc-paging flex flex-even align-center\" role=\"navigation\">\n  <div class=\"gdoc-"
  },
  {
    "path": "layouts/partials/posts/metadata.html",
    "chars": 1503,
    "preview": "<span class=\"flex align-center no-wrap\">\n  <svg class=\"gdoc-icon gdoc_date\"><use xlink:href=\"#gdoc_date\"></use></svg>\n  "
  },
  {
    "path": "layouts/partials/search.html",
    "chars": 928,
    "preview": "{{ if default true .Site.Params.geekdocSearch }}\n  <script defer src=\"{{ index (index hugo.Data.assets \"search.js\") \"src"
  },
  {
    "path": "layouts/partials/site-footer.html",
    "chars": 1727,
    "preview": "<footer class=\"gdoc-footer\">\n  <nav class=\"container flex\">\n    <div>\n      <section class=\"flex flex-wrap align-center\""
  },
  {
    "path": "layouts/partials/site-header.html",
    "chars": 3287,
    "preview": "<header class=\"gdoc-header\">\n  <div class=\"container flex align-center justify-between\">\n    {{ if .MenuEnabled }}\n     "
  },
  {
    "path": "layouts/partials/svg-icon-symbols.html",
    "chars": 141,
    "preview": "{{ range resources.Match \"sprites/*.svg\" }}\n  {{ printf \"<!-- geekdoc include: %s -->\" . | safeHTML }}\n  {{ .Content | s"
  },
  {
    "path": "layouts/partials/utils/content.html",
    "chars": 360,
    "preview": "{{ $content := .Content }}\n\n{{ $content = $content | replaceRE `<nav id=\"TableOfContents\">\\s*<ul>\\s*<li>\\s*<ul>` `<nav i"
  },
  {
    "path": "layouts/partials/utils/description.html",
    "chars": 403,
    "preview": "{{ $isPage := or (and (ne .Type \"posts\") (in \"section page\" .Kind )) (and (eq .Type \"posts\") (eq .Kind \"page\")) }}\n{{ $d"
  },
  {
    "path": "layouts/partials/utils/featured.html",
    "chars": 376,
    "preview": "{{ $img := \"\" }}\n\n{{ with $source := ($.Resources.ByType \"image\").GetMatch \"{*feature*,*cover*,*thumbnail*}\" }}\n  {{ $fe"
  },
  {
    "path": "layouts/partials/utils/title.html",
    "chars": 269,
    "preview": "{{ $title := \"\" }}\n\n{{ if .Title }}\n  {{ $title = .Title }}\n{{ else if and .IsSection .File }}\n  {{ $title = path.Base ."
  },
  {
    "path": "layouts/posts/list.html",
    "chars": 1321,
    "preview": "{{ define \"main\" }}\n  <div id=\"main-content\" tabindex=\"-1\">\n  {{ range .Paginator.Pages }}\n    <article class=\"gdoc-mark"
  },
  {
    "path": "layouts/posts/single.html",
    "chars": 462,
    "preview": "{{ define \"main\" }}\n  <article class=\"gdoc-post\" id=\"main-content\" tabindex=\"-1\">\n    <header class=\"gdoc-post__header\">"
  },
  {
    "path": "layouts/robots.txt",
    "chars": 71,
    "preview": "User-agent: *\nDisallow: /tags/*\n\nSitemap: {{ \"sitemap.xml\" | absURL }}\n"
  },
  {
    "path": "layouts/shortcodes/audio.html",
    "chars": 657,
    "preview": "{{- $source := ($.Page.Resources.ByType \"audio\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}"
  },
  {
    "path": "layouts/shortcodes/avatar.html",
    "chars": 2168,
    "preview": "{{- $source := ($.Page.Resources.ByType \"image\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}"
  },
  {
    "path": "layouts/shortcodes/button.html",
    "chars": 606,
    "preview": "{{- $ref := \"\" }}\n{{- $class := \"\" }}\n{{- $size := default \"regular\" (.Get \"size\" | lower) }}\n\n{{- if not (in (slice \"re"
  },
  {
    "path": "layouts/shortcodes/columns.html",
    "chars": 416,
    "preview": "{{- $size := default \"regular\" (.Get \"size\" | lower) }}\n\n{{- if not (in (slice \"regular\" \"large\" \"small\") $size) }}\n  {{"
  },
  {
    "path": "layouts/shortcodes/expand.html",
    "chars": 464,
    "preview": "{{ $id := substr (sha1 .Inner) 0 8 }}\n<div class=\"gdoc-expand\">\n  <label class=\"gdoc-expand__head flex justify-between\" "
  },
  {
    "path": "layouts/shortcodes/gist.html",
    "chars": 155,
    "preview": "<script src=\"https://gist.github.com/{{ index .Params 0 }}/{{ index .Params 1 }}.js{{if len .Params | eq 3 }}?file={{ in"
  },
  {
    "path": "layouts/shortcodes/hint.html",
    "chars": 576,
    "preview": "{{- $type := default \"note\" (.Get \"type\") }}\n{{- $icon := .Get \"icon\" }}\n{{- $title := default ($type | title) (.Get \"ti"
  },
  {
    "path": "layouts/shortcodes/icon.html",
    "chars": 123,
    "preview": "{{ $id := .Get 0 }}\n\n{{- with $id -}}\n  <svg class=\"gdoc-icon {{ . }}\"><use xlink:href=\"#{{ . }}\"></use></svg>\n{{- end -"
  },
  {
    "path": "layouts/shortcodes/img.html",
    "chars": 2396,
    "preview": "{{- $source := ($.Page.Resources.ByType \"image\").GetMatch (printf \"%s\" (.Get \"name\")) }}\n{{- $customAlt := .Get \"alt\" }}"
  },
  {
    "path": "layouts/shortcodes/include.html",
    "chars": 543,
    "preview": "{{ $file := .Get \"file\" }}\n{{ $page := .Site.GetPage $file }}\n{{ $type := .Get \"type\" }}\n{{ $language := .Get \"language\""
  },
  {
    "path": "layouts/shortcodes/katex.html",
    "chars": 633,
    "preview": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"katex\") }}\n  <!-- Include katex only first time -->\n  <link"
  },
  {
    "path": "layouts/shortcodes/mermaid.html",
    "chars": 406,
    "preview": "<!-- prettier-ignore-start -->\n{{ if not (.Page.Scratch.Get \"mermaid\") }}\n  <!-- Include mermaid only first time -->\n  <"
  },
  {
    "path": "layouts/shortcodes/progress.html",
    "chars": 812,
    "preview": "{{- $value := default 0 (.Get \"value\") -}}\n{{- $label := default (printf \"%v %%\" $value) (.Get \"label\") -}}\n{{- $type :="
  },
  {
    "path": "layouts/shortcodes/propertylist.html",
    "chars": 2606,
    "preview": "{{- $name := .Get \"name\" -}}\n{{- $sort := .Get \"sort\" -}}\n{{- $order := default \"asc\" (.Get \"order\") -}}\n{{- $showAnchor"
  },
  {
    "path": "layouts/shortcodes/tab.html",
    "chars": 375,
    "preview": "{{- if .Parent }}\n  {{- $name := .Get 0 }}\n  {{- $group := printf \"tabs-%s\" (.Parent.Get 0) }}\n\n  {{- if not (.Parent.Sc"
  },
  {
    "path": "layouts/shortcodes/tabs.html",
    "chars": 611,
    "preview": "{{- if .Inner }}{{ end }}\n{{- $id := .Get 0 }}\n{{- $group := printf \"tabs-%s\" $id }}\n\n\n<div class=\"gdoc-tabs\">\n  {{- ran"
  },
  {
    "path": "layouts/shortcodes/toc-tree.html",
    "chars": 2649,
    "preview": "{{- $current := . }}\n{{- $tocLevels := default (default 6 .Site.Params.geekdocToC) .Page.Params.geekdocToC }}\n{{- $sortB"
  },
  {
    "path": "layouts/shortcodes/toc.html",
    "chars": 425,
    "preview": "{{- $format := default \"html\" (.Get \"format\") }}\n{{- $tocLevels := default (default 6 .Site.Params.geekdocToC) .Page.Par"
  },
  {
    "path": "package.json",
    "chars": 3038,
    "preview": "{\n  \"name\": \"geekdoc\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Hugo theme made for documentation\",\n  \"main\": \"index.js\","
  },
  {
    "path": "renovate.json",
    "chars": 122,
    "preview": "{\n  \"$schema\": \"https://docs.renovatebot.com/renovate-schema.json\",\n  \"extends\": [\"github>thegeeklab/renovate-presets\"]\n"
  },
  {
    "path": "src/js/accessibility.js",
    "chars": 1976,
    "preview": "document.addEventListener(\"DOMContentLoaded\", () => {\n  const gdocNav = document.querySelector(\".gdoc-nav\")\n  const gdoc"
  },
  {
    "path": "src/js/colorTheme.js",
    "chars": 1683,
    "preview": "import Storage from \"store2\"\nimport { TOGGLE_COLOR_THEMES, THEME, COLOR_THEME_AUTO } from \"./config.js\"\n\nconst applyThem"
  },
  {
    "path": "src/js/config.js",
    "chars": 246,
    "preview": "export const COLOR_THEME_DARK = \"dark\"\nexport const COLOR_THEME_LIGHT = \"light\"\nexport const COLOR_THEME_AUTO = \"auto\"\ne"
  },
  {
    "path": "src/js/index.js",
    "chars": 1958,
    "preview": "import Clipboard from \"clipboard\"\nimport \"./accessibility.js\"\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  c"
  },
  {
    "path": "src/js/katex.js",
    "chars": 135,
    "preview": "import \"katex/dist/katex.css\"\nimport renderMathInElement from \"katex/dist/contrib/auto-render.mjs\"\n\nrenderMathInElement("
  },
  {
    "path": "src/js/mermaid.js",
    "chars": 993,
    "preview": "import Storage from \"store2\"\nimport { v4 as uuidv4 } from \"uuid\"\nimport { COLOR_THEME_DARK, THEME, COLOR_THEME_AUTO } fr"
  },
  {
    "path": "src/js/search.js",
    "chars": 6678,
    "preview": "import groupBy from \"lodash/groupBy.js\"\nimport truncate from \"lodash/truncate.js\"\nimport { Document, Charset } from \"fle"
  },
  {
    "path": "src/sass/_asciidoc.scss",
    "chars": 2055,
    "preview": "@use \"sass:color\";\n@use \"defaults\";\n\n.admonitionblock {\n  $root: &;\n\n  margin: defaults.$padding-16 0;\n  padding: 0;\n\n  "
  },
  {
    "path": "src/sass/_base.scss",
    "chars": 14700,
    "preview": "@use \"sass:meta\";\n@use \"sass:map\";\n@use \"color_mode\";\n@use \"defaults\";\n\n:root {\n  --code-max-height: none;\n\n  --header-f"
  },
  {
    "path": "src/sass/_chroma_base.scss",
    "chars": 981,
    "preview": "@use \"defaults\";\n\n@mixin chroma_base {\n  .chroma {\n    color: var(--code-font-color);\n  }\n  .chroma .lntable td:nth-chil"
  },
  {
    "path": "src/sass/_chroma_dark.scss",
    "chars": 5539,
    "preview": "@use \"chroma_base\";\n\n@mixin chroma_dark {\n  /* Theme: Dracula */\n  /* Background */\n  @include chroma_base.chroma_base;\n"
  },
  {
    "path": "src/sass/_chroma_light.scss",
    "chars": 5990,
    "preview": "@use \"chroma_base\";\n\n@mixin chroma_github {\n  /* Theme: GitHub */\n  /* Background */\n  @include chroma_base.chroma_base;"
  },
  {
    "path": "src/sass/_color_mode.scss",
    "chars": 3463,
    "preview": "@use \"sass:color\";\n@use \"sass:map\";\n@use \"chroma_dark\";\n@use \"chroma_light\";\n@use \"defaults\";\n\n@mixin color_theme_light "
  },
  {
    "path": "src/sass/_defaults.scss",
    "chars": 3037,
    "preview": "@use \"sass:color\";\n\n// Used in layout\n$padding-2: 0.125rem !default;\n$padding-4: 0.25rem !default;\n$padding-8: 0.5rem !d"
  },
  {
    "path": "src/sass/_fonts.scss",
    "chars": 1825,
    "preview": "@font-face {\n  font-family: \"Liberation Sans\";\n  src:\n    url(\"fonts/LiberationSans-Bold.woff2\") format(\"woff2\"),\n    ur"
  },
  {
    "path": "src/sass/_markdown.scss",
    "chars": 4271,
    "preview": "@use \"defaults\";\n\n.gdoc-markdown {\n  line-height: 1.6rem;\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    font-weight: 600;\n\n "
  },
  {
    "path": "src/sass/_mobile.scss",
    "chars": 2063,
    "preview": "@use \"defaults\";\n\n@media screen and (max-width: defaults.$sm-breakpoint) {\n  .gdoc-nav {\n    margin-left: -(defaults.$me"
  },
  {
    "path": "src/sass/_normalize.css",
    "chars": 6160,
    "preview": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ==========================="
  },
  {
    "path": "src/sass/_print.scss",
    "chars": 800,
    "preview": "@use \"defaults\";\n\n@media print {\n  .gdoc-nav,\n  .gdoc-footer .container span:not(:first-child),\n  .gdoc-paging,\n  .editp"
  },
  {
    "path": "src/sass/_shortcodes.scss",
    "chars": 6249,
    "preview": "@use \"sass:color\";\n@use \"defaults\";\n\n// {{< expand \"Label\" \"icon\" >}}\n.gdoc-expand {\n  margin: defaults.$padding-16 0;\n\n"
  },
  {
    "path": "src/sass/_utils.scss",
    "chars": 1240,
    "preview": "@use \"defaults\";\n\n.flex {\n  display: flex;\n}\n\n.flex-auto {\n  flex: 1 1 auto;\n}\n\n.flex-25 {\n  flex: 1 1 25%;\n}\n\n.flex-inl"
  },
  {
    "path": "src/sass/main.scss",
    "chars": 120,
    "preview": "@use \"_normalize\";\n@use \"_utils\";\n@use \"_fonts\";\n@use \"_base\";\n\n@use \"_markdown\";\n@use \"_asciidoc\";\n@use \"_shortcodes\";\n"
  },
  {
    "path": "src/sass/mobile.scss",
    "chars": 54,
    "preview": "@use \"sass:color\";\n\n@use \"_defaults\";\n@use \"_mobile\";\n"
  }
]

// ... and 6 more files (download for full content)

About this extraction

This page contains the full source code of the thegeeklab/hugo-geekdoc GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 206 files (267.4 KB), approximately 81.6k tokens, and a symbol index with 22 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!