Skip to content

vitepress-theme-alt-docs

Общая тема VitePress для документации ALT Linux. Объединяет все пакеты монорепозитория в готовую конфигурацию.

Установка

bash
npm install @ampernic/vitepress-theme-alt-docs

Тема подтягивает остальные пакеты как зависимости автоматически.

Подключение

Тема (theme/index.ts)

ts
export { Theme as default } from '@ampernic/vitepress-theme-alt-docs'

Конфиг (.vitepress/config/index.mts)

ts
import { createSharedConfig } from '@ampernic/vitepress-theme-alt-docs/config'

const shared = createSharedConfig({
  distroName: 'alt-server',
  allDistros: ['alt-server', 'alt-workstation', 'alt-education'],
  hostname: 'https://docs.altlinux.org',
})

export default defineConfigWithTheme({
  ...shared,
  rewrites: { 'ru/:slug*': ':slug*' },
  locales: {
    root: { label: 'Русский', ...ru },
  },
})

createSharedConfig(options)

ОпцияТипПо умолчаниюОписание
distroNamestring-Slug дистрибутива (например 'alt-server'). Обязательно
productNamestring-Отображаемое имя продукта. Проброшено в PWA manifest, <title>, LLM-выдачу
allDistrosstring[]-Список всех дистрибутивов для переключателя. distros.json рядом с конфигом важнее
sectionsSectionInfo[]-Группировки дистрибутивов в переключателе; sections.json рядом с конфигом важнее
productLinksRecord<string, string>-Slug -> внешняя страница продукта. Ссылка текущего дистрибутива автоматически подставляется в export.logoLink
hostnamestring-Абсолютный hostname для sitemap, canonical, og:image
editLinkRepostringalt-docs/docs-vitepressРепозиторий Forgejo для кнопки «Предложить правку»
exportExportPluginOptions-Опции экспорта в PDF / HTML / EPUB. Если не задано - экспорт не запускается
metaMetaPluginOptions | falseзначения по умолчаниюSEO / OG / canonical. false полностью отключает MetaPlugin
llmsLlmsPluginOptions | falseзначения по умолчаниюllms.txt / llms-full.txt / per-page mirror. false отключает
singlePageOmit<SinglePagePluginOptions, 'distroName'>-Опции single-page (например dropInitialTOC: true)
reportIssuefalse | { repo?; origin?; labels?; shortcut? }alt-docs/docs-vitepressCtrl+Enter -> Forgejo new-issue. false отключает
optimizeImagesboolean | OptimizeImagesOptionsвключеноПережимает PNG в собранном сайте без потерь, до того как экспорт вставит их в бандлы. false отключает
debugbooleanfalseОдин флаг, включающий debug во всех вложенных плагинах (свой debug в конкретной опции важнее)

Включённые плагины

ПлагинЧто даёт
vitepress-plugin-pagefindПоиск Pagefind с фильтрацией по версии
vitepress-alt-docs-versioningПереключатель версий и редакций
vitepress-plugin-breadcrumbsХлебные крошки над контентом
vitepress-plugin-cross-site-routerМежсайтовая навигация
vitepress-plugin-single-pageОдностраничное представление версии
vitepress-plugin-exportЭкспорт версии в PDF / HTML / EPUB
vitepress-plugin-html-imageНормализация <img> в raw HTML
vitepress-plugin-metaCanonical, sitemap, Open Graph, OG-image
vitepress-plugin-llmsllms.txt, llms-full.txt, per-page markdown-зеркало
vitepress-plugin-report-issueCtrl+Enter -> заготовка issue в Forgejo
alt-docs-registryОбщий реестр дистрибутивов (products.yaml)
@nolebase/vitepress-plugin-enhanced-readabilitiesПереключатель ширины контента
vitepress-plugin-tabsВкладки в Markdown
markdown-it-kbd<kbd> синтаксис
markdown-it-attrs{#id .class} после заголовков
@alt-gnome/markdown-it-custom-containersКонтейнеры left, center, right

Layout slots

Тема занимает следующие слоты VitePress:

СлотКомпонент
layout-topReportIssueDialog (модалка «Сообщить о проблеме»)
nav-bar-content-beforeПоисковая строка (кнопка + модал)
nav-bar-content-afterМеню Nolebase (настройки читаемости)
nav-screen-content-afterМобильное меню: ExportButton + Nolebase
sidebar-nav-beforeПереключатель дистрибутивов
doc-beforeХлебные крошки
doc-footer-beforeReportIssueLink (ссылка на модалку)
aside-outline-beforeExportButton (переключатель форматов)
aside-outline-afterADFootnotesOutline (сноски рядом с содержанием)
home-hero-beforeГлавная (карточки продуктов) на layout: home

Главная и лендинги

Главная (layout: home)

Главная страница (индекс-сайт) использует layout: home; контент рисуют компоненты темы по данным из frontmatter altHome:

yaml
---
layout: home
altHome:
  hero:
    logo: basealt
    title: Документация «Базальт СПО»
    text: Официальная документация ОС «Альт».
  products:
    alt-server:
      tagline: Комплексное серверное решение для ИТ-инфраструктуры
      accent: '#8e96a3'
      grad: ['#c8d0dd', '#8e96a3']
  footer:
    links:
      - { title: Сайт компании, url: https://www.basealt.ru/ }
    copyright: © 2026 «Базальт СПО»
---

Список дистрибутивов и разделы берутся из __VERSIONS_DATA__ (плагин версионирования); altHome.products[<slug>] задаёт теглайн и акцентный цвет карточки (имя по умолчанию - из общего справочника).

Лендинг дистрибутива

Шаблон лендинга выводит <VersionList distro="<slug>" /> - релизы, сгруппированные по мажорным версиям, карточками со списками и бейджем «Актуальная».

Структура контента

Тема ожидает файлы в docs/ru/{version}/... с rewrite-правилом ru/:slug* -> :slug*.

docs/
  ru/
    11.0/
      index.md
    11.1/
      index.md
  public/
    favicon.ico
    branding/

Поиск

Поиск работает только в production-сборке. Для индексации pagefind должен быть установлен как devDependency в проекте документации:

bash
npm install -D pagefind

После vitepress build автоматически запускается pagefind --site .vitepress/dist. Поиск фильтруется по текущей версии страницы.

Сжатие изображений

Скриншоты приходят из редакторского пайплайна с тем сжатием, которое выбрал инструмент захвата - как правило, никаким. Повторное кодирование на полном уровне усилий возвращает около двух третей их объёма, пиксель в пиксель.

Это важно дважды: картинки качают читатели, и они же попадают в экспортные бандлы в виде base64, составляя основную массу документа, который получает рендерер PDF.

Замер на одном дистрибутиве:

допосле
картинки в сборке51.1 МБ16.2 МБ
загрузка страницы в chromium4.6 с2.3 с
сборка одного PDF22.3 с17.2 с
размер PDF48.2 МБ39.6 МБ

Сам проход занял 12.8 с на 632 файла.

Сжатие без потерь: это снимки интерфейса с мелким текстом, где кайма, которую оставляет вокруг букв алгоритм с потерями, - ровно то, от чего читатель пытается уйти, увеличивая картинку.

Требуется sharp; без него шаг пропускается с предупреждением, сборка не падает. Настройки - exclude (каталоги), minBytes (порог) и concurrency.