Skip to content

VitePress Features and Customizations

This guide documents the VitePress features and customizations available for writing Garden Linux documentation. It covers custom components, diagram support, and front-matter extensions.

Custom Components

Garden Linux documentation includes two custom Vue components that are registered globally in the VitePress theme.

SectionIndex Component

The <SectionIndex /> component automatically generates a table of contents for the current documentation section. It reads the sidebar configuration, finds the section matching the current page, and displays its child pages as a grid.

When to use:

  • On section index pages (e.g., tutorials/index.md, how-to/index.md)
  • Any page that should display links to its child pages

How it works:

  1. Reads the sidebar configuration from the VitePress theme
  2. Finds the sidebar group matching the current directory
  3. Extracts child items and their descriptions from front-matter
  4. Displays them in a responsive grid layout

Configuration:

Use the overviewDescriptions front-matter field to control whether child page descriptions are shown:

yaml
---
title: How-To Guides
overviewDescriptions: true # Show descriptions (default)
---

Set to false to hide descriptions:

yaml
---
title: Quick Reference
overviewDescriptions: false # Hide descriptions
---

Example usage:

markdown
---
title: How-To Guides
description: Step-by-step guides for common Garden Linux tasks
---

# How-To Guides

How-to guides are **task-oriented** directions that guide you through solving a specific problem or achieving a particular goal. They assume you have some familiarity with Garden Linux and focus on practical solutions.

<SectionIndex />

RelatedTopics Component

The <RelatedTopics /> component displays a curated list of related documentation pages at the bottom of content. It validates that all linked pages exist during the build process.

When to use:

  • At the end of content pages
  • To guide readers to next steps or related documentation

How it works:

  1. Reads the related_topics array from the page's front-matter
  2. Resolves file paths to URLs
  3. Extracts titles and descriptions from linked pages
  4. Displays them as a formatted list with links

Configuration:

Define related topics in the page's front-matter using absolute paths:

yaml
---
title: Building Images
related_topics:
  - /how-to/choosing-flavors.md
  - /how-to/getting-images.md
  - /reference/features.md
---

Example usage:

markdown
---
title: Building Images
description: How to build Garden Linux images
related_topics:
  - /how-to/choosing-flavors.md
  - /how-to/getting-images.md
---

# Building Images

<content here>

<RelatedTopics />

Mermaid Diagrams

Garden Linux documentation supports Mermaid diagrams through the vitepress-mermaid-renderer plugin. This enables flowcharts, Gantt charts, sequence diagrams, and more.

When to use:

  • Visualizing timelines and release schedules
  • Showing process flows and architectures
  • Displaying complex relationships

How it works: The plugin automatically renders code blocks marked with mermaid as diagrams. It includes custom theming that matches the Garden Linux brand colors (green scheme) and supports dark mode.

Syntax:

markdown
```mermaid
graph TD
    A[Start] --> B{Decision}
    B -->|Yes| C[Continue]
    B -->|No| D[Stop]
```

Gantt chart example:

markdown
```mermaid
gantt
    title Release Schedule
    dateFormat YYYY-MM-DD
    section Development
    Feature A :2024-01-01, 30d
    Feature B :2024-01-15, 30d
    section Testing
    Integration Tests :after Feature A, 14d
```

Custom theming: The documentation uses a green color scheme matching Garden Linux branding:

mermaid
%%{init: {'theme':'base', 'themeVariables': {
  'primaryColor':'#30a46c',
  'primaryTextColor':'#fff',
  'primaryBorderColor':'#18794e',
  'lineColor':'#30a46c',
  'textColor':'#009f76'
}}}%%
gantt
    title Theme Preview
    dateFormat YYYY-MM-DD
    section Example
    Task 1 :2024-01-01, 10d

Real-world example: See the Maintained Releases page for a complete Gantt chart showing release maintenance phases.

Container Syntax (Callouts)

VitePress supports special container blocks for callouts and highlighted content. Garden Linux documentation uses these throughout.

When to use:

  • :::tip - Recommendations and helpful hints
  • :::warning - Important caveats or potential issues
  • :::danger - Critical warnings about data loss, security, etc.
  • :::info - Informational notes
  • :::details - Collapsible content for optional information

Examples:

markdown
:::tip
Use rootless Podman for building images. It provides better security
and doesn't require special privileges.
:::

:::warning
Provide at least 8 GiB of memory to the container runtime. Insufficient
memory may cause builds to fail silently.
:::

:::danger
Do not use the production keyring for testing. Always use test keys
to avoid accidentally publishing unverified packages.
:::

:::details Click to expand for technical details
The build process uses the following steps:

1. Initialize container with base image
2. Apply feature layers
3. Apply customization
4. Create final image

Each step creates an intermediate container.
:::

:::info
This feature requires Garden Linux version 2150.0.0 or later.
:::

Best practices:

  • Use :::tip for recommendations and best practices
  • Use :::warning for important caveats
  • Use :::danger sparingly and only for critical warnings
  • Use :::details for optional advanced content that most readers don't need

Front-matter Fields

Garden Linux documentation uses several front-matter fields for configuration.

Component Configuration

overviewDescriptions (boolean, default: true)

Controls whether the <SectionIndex /> component displays descriptions for child pages. Set to false on an index page to hide descriptions in its section listing.

related_topics (array of strings)

Defines related pages for the <RelatedTopics /> component. Each entry is an absolute file path (starting with /) to another markdown file. All paths must exist or the build will fail with an error.

Display Configuration

title (string, required)

The page title. Used in navigation, search results, and as the default heading.

description (string)

A short summary of the page content. Used as the meta description for SEO and displayed by <SectionIndex /> for child page listings.

order (number, default: 999)

Controls sort order in the sidebar and section listings. Lower numbers appear first. Use this to create logical groupings (e.g., 0 for intro, 10 for basics, 100 for advanced).

Aggregated Content Fields

For content aggregated from external repositories, these fields enable proper placement and "Edit on GitHub" links. For complete details on aggregation configuration, see Documentation Aggregation Configuration Reference.

github_target_path (string)

Target location in the docs directory for aggregated content.

github_org (string)

GitHub organization name.

github_repo (string)

Repository name.

github_source_path (string)

Original file path in the source repository.

github_branch (string, default: "main")

Branch name for edit links.

Best Practices

Component Usage

  • Always use <SectionIndex /> on section index pages (tutorials/, how-to/, explanation/, reference/)
  • Place <RelatedTopics /> at the end of content pages, before any closing sections
  • Keep related_topics lists focused (3-5 items is ideal)
  • Write clear, concise description fields for better section overviews

Mermaid Diagrams

  • Use for timelines, processes, and complex relationships
  • Keep diagrams simple and focused
  • Test in both light and dark mode (use the preview)
  • Don't overuse - diagrams should add clarity, not replace text

Containers/Callouts

  • Use :::tip for recommendations and best practices
  • Use :::warning for important caveats that readers should know
  • Use :::danger only for critical warnings about data loss, security, or system damage
  • Use :::info sparingly for contextual information
  • Use :::details for optional advanced content that most readers can skip

Front-matter

  • Always include title and description on every page
  • Use order to control logical flow in sections
  • Validate that related_topics links exist before committing
  • Keep descriptions under 160 characters for optimal SEO