Storage Structure
Structure of this repository
We basically follow the Jekyll and Minimal Mistakes layout our documentation site is based on, with a small set of additions for our custom plugins, tools, and includes.
.
├── _data
│ ├── links/ # auto-generated, gitignored
│ ├── manpages/ # auto-generated, gitignored
│ ├── navigation.yml # auto-generated by _tools/navgen
│ ├── excluded_titles.yml
│ ├── external_links.yml
│ └── link_aliases.yml
│
├── _includes
│ ├── doc/ # reusable doc snippets (options, warnings, notes, examples)
│ ├── footer/
│ ├── head/
│ ├── search/
│ └── … (theme partials)
│
├── _js
│ ├── custom/ # our scripts (auto-bundled by _tools/pack)
│ ├── plugins/ # 3rd-party plugins
│ ├── vendor/ # 3rd-party libraries
│ ├── lunr/ # Lunr search engine + our lunr-store.js
│ └── _main.js # pre-pack entry; the packed result is `assets/js/main.min.js`
│
├── _layouts
│
├── _plugins # our Jekyll plugins (see Directories below)
│
├── _sass
│ └── minimal-mistakes/
│
├── .github
│ └── workflows/ # CI build pipeline (jekyll-gh-pages.yml)
│
├── _site # generated output, gitignored
│
├── _tools # our helper tools (see Directories below)
│
├── assets
│ ├── css/
│ ├── images/
│ └── js/ # built from `_js`, gitignored
│
├── doc
│ ├── _admin-guide/
│ ├── _dev-guide/
│ ├── _doc-guide/
│ └── site-internal/
│
├── _config.yml
├── Gemfile
├── LICENSE.*
└── README.md
Directories
_data
Inputs Jekyll consumes during site generation: navigation, link descriptors, alias and exclusion tables, manpage metadata, etc.links/
Do not edit. Auto-generated during the first build pass (JEKYLL_BUILD_LINKS=yes) by_plugins/generate_links.rb; gitignored. Contains one YAML descriptor per page used as input for the autolink/tooltip generation in the second build pass.manpages/
Do not edit. Auto-generated by_tools/mangen; gitignored. Holds intermediate metadata used to build the rendered manpages under_site/manpages/.
-
_includes
Reusable HTML/Liquid fragments. The bulk are Minimal Mistakes theme partials (masthead, sidebar, TOC, breadcrumbs, archive, …); our additions live under_includes/doc/(admin-guide and dev-guide reusable snippets, plus the site-widecommon_linksandcommon_snippets) and a few standalone helpers (e.g.settings_panel.html).
No inline<script>or<style>blocks here — behaviour belongs in_js/custom/<feature>.js(auto-bundled by_tools/pack) and styling in_sass/minimal-mistakes/minimal-mistakes/_<area>.scssusing SCSS skin variables, so light/dark skins both work. Inline<script>is not picked up by_tools/pack(forces a full Jekyll rebuild on every edit); inline<style>bypasses the SASS skin variables and breaks dark/light parity. _jscustom/
Our own scripts. Every*.jshere, plus_js/plugins/and_js/vendor/, is bundled intoassets/js/main.min.jsby_tools/pack— a repack alone ships JS changes, no Jekyll build needed when running_tools/serve. Note:_tools/packuses an explicit, order-sensitive file list — a new_js/custom/<feature>.jsmust be appended there too, otherwise it will silently NOT be bundled.plugins/
3rd-party jQuery plugins used by the theme plusclipboard.js(FitVids, Magnific-Popup, greedy-navigation, throttle/debounce, smooth-scroll, gumshoe).vendor/
3rd-party libraries the bundle depends on — currently justjquery/jquery-3.7.1.js.lunr/
Lunr is the default search engine. We ship our own fully rewrittenlunr-en.js(multi-strategy search with location-based boosting) plus ourlunr-store.js(which uses theextract_headingsLiquid filter from [[doc-jekyll-extensions]] to add per-heading search entries).
-
_layouts
The page layouts the site is built on — a curated subset of the Minimal Mistakes layouts:base,compress,default,single. Unused theme layouts were removed. _plugins
Our Jekyll plugins — see Jekyll extensions for the per-plugin reference. Short index:common_includes.rb— prependsdoc/common_snippetsto every page (always-active:site, :pre_render).expand_notice_blocks.rb— expands paired{: .notice--TYPE-start/-end}markers (always-active).extract_headings.rb— Liquid filter that returns the heading anchors of an HTML fragment (used by Lunr).generate_links.rb— first-build link descriptor generator (JEKYLL_BUILD_LINKS=yes,:site, :post_render).generate_tooltips.rb— second-build autolink/tooltip injector (JEKYLL_BUILD_TOOLTIPS=yes, two:pre_renderhooks).liquify.rb— Liquid filter that forces evaluation of a Liquid expression embedded in data.sass_silence_deprecations.rb— propagates_config.yml’ssass.silence_deprecationslist into thesass-embeddedruntime.site_data_by_path.rb— Liquid filter (data_by_path) that walks a dotted path through a hash to dereference_data/...entries dynamically.
-
_sass
The Jekyll SASS converter input. Holds the full Minimal Mistakes SCSS tree under_sass/minimal-mistakes/and theminimal-mistakes.scssentry. The actual top-level entry points (main.scssand the per-skinmain_*.scssvariants) live underassets/css/. -
_site
Do not edit. Generated static site output; gitignored. -
_tools
Our self-made helper tools. .githubworkflows/
The GitHub CI build Action workflow files (jekyll-gh-pages.yml).
assetscss/
The site’s stylesheet entry points:main.scssfor the default skin plus onemain_<skin>.scssper Minimal Mistakes (mm-air,mm-aqua,mm-contrast,mm-dark,mm-dirt,mm-mint,mm-neon,mm-plum,mm-sunrise) and One Identity (oi-light,oi-dark,oi-midnight) skin. Each one imports_sass/minimal-mistakes/.images/
Image files used by the site. Keep them organized by their owning collection (admin-guide/,dev-guide/, …); the shared notice icons (note.png,info.png,caution.png,warning.png,success.png) andfavicons/live at the top level.js/
Do not edit. Built from_js/by_tools/pack; gitignored.
doc
The actual documentation source — the Markdown files of each documentation collection._admin-guide/
The syslog-ng OSE Administration Guide sources._dev-guide/
The Developer Guide sources._doc-guide/
The Documentation Guide sources.site-internal/
Markdown and HTML sources that do not belong to a documentation collection — currently the 404 page (404.md) and the Lunr search help page (lunr_search_help.md).
Files
_config.yml
Our Jekyll configuration file. Theproduct.versionfield is overwritten by_tools/update_config_versionduring CI.Gemfile
Jekyll and Minimal Mistakes Ruby gem dependencies.LICENSE.*
License files of the modules the project uses (Lunr, Midnight, Minimal Mistakes).README.md
The GitHub repository landing-page README.-
AGENTS.md,.github/copilot-instructions.md
Repository conventions and build rules consumed by AI coding agents (and useful as a contributor cheat-sheet). _data/navigation.yml
Input YAML for the left navigation sidebar. Generated by_tools/navgen— do not edit, your changes will be overwritten on every build._data/excluded_titles.yml
Title patterns (plain strings or[Cc]haracter classes) that the autolink/tooltip generator must skip — generic words likeExample,Note,Options,Default value, etc._data/external_links.yml
Central collector for every external (non-site) link referenced in the documentation. Entries are grouped by ID prefix (gh:GitHub,bb:Balabit,oi:One Identity,sn:syslog-ng,mm:Minimal Mistakes,lic:licenses,rfc:RFCs); keep alphabetical order inside each block.-
_data/link_aliases.yml
Per link-ID list of alternate phrases (plain or/regex/) that the autolink/tooltip generator should resolve to the same target page or anchor. -
.github/workflows/jekyll-gh-pages.yml
The GitHub Actions CI build workflow — runs the pre-build tools, the two Jekyll passes, and the post-build steps (_tools/pack,doxygen,_tools/mangen). _js/_main.js
The Minimal Mistakes theme’s main jQuery init script (FitVids, Magnific-Popup, smooth-scroll, gumshoe, navigation, etc.). Packed last by_tools/pack— the comment in_tools/packnotes this is required to avoid runtime Lunr errors._js/custom/*.js
Our own scripts — currentlycopy-to-clipboard-btn.js,navigation.js,settings-panel.js,custom-init.js. Bundled in this exact order by_tools/pack(see the explicit list inside the script). When adding a new file, append it there too — the bundler does not auto-discover it._js/plugins/*.js
3rd-party jQuery plugins (FitVids, Magnific-Popup, greedy-navigation, throttle/debounce, smooth-scroll, gumshoe, clipboard.js). Bundled by_tools/packbetween jQuery and_js/custom/._js/vendor/jquery/jquery-3.7.1.js
The jQuery build packed first by_tools/pack(every other script depends on it)._js/lunr/lunr.js,_js/lunr/lunr.min.js
Upstream Lunr search engine. Copied as-is toassets/js/lunr/by_tools/pack— not bundled intomain.min.js, since per-language and per-heading support is now produced via Liquid at content-generation time._js/lunr/lunr-en.js
Our fully rewritten Lunr search front-end. Implements a multi-strategy compound-term search (full compound, all-terms-together, exact component parts, wildcard variations, fuzzy matches) with location-based boosting (title vs. excerpt-start vs. body) on top of the per-heading entries produced bylunr-store.js. The search algorithm is intentionally specific to our documentation layout and bears little resemblance to the upstream Lunr help example._js/lunr/lunr-store.js
Liquid template that builds the per-page search documents fed to Lunr; expanded with one entry per heading via theextract_headingsLiquid filter from [[doc-jekyll-extensions]].-
assets/js/main.min.js
The bundle produced by_tools/packfrom_js/vendor/jquery/,_js/plugins/,_js/custom/, and_js/_main.js(in that order). Lunr is not included. Do not edit, your changes will be overwritten. _plugins/*.rb
Our Jekyll plugins — see the Jekyll extensions page for the per-plugin reference._tools/*
Our helper tools — see the Self-made tools page for the per-tool reference (banner.js,linkcheck,mangen,navgen,pack,package.json.in,serve,update_config_version).