home/docs/README.ru.md

6.6 KiB
Raw Blame History

home

Совершенно новый™️ Golang-движок для моего персонального сайта. Без баз данных, работа полностью основана на взаимодействии с простыми файлами "как есть". Потенциально стремится к совместимости с протоколами IndieWeb.

Установка и запуск

Склонируйте этот репозиторий и запустите его компилятором Go:

> git clone https://source.toby3d.me/toby3d/home -b develop
> cd home && go run .

Базовая конфигурация движка осуществляется через переменные окружения ОС.

Доступны четыре опции:

  • HOME_CONTENT_DIR -- имя или путь директории в которой содержатся страницы и статика, по-умолчанию content/;
  • HOME_HOST -- IP-адрес на котором будет работать движок, по-умолчанию 0.0.0.0;
  • HOME_THEME_DIR -- имя или путь директории в которой содержатся файлы шаблонов, по-умолчанию theme/;
  • HOME_PORT -- порт на котором будет работать движок, по-умолчанию 3000;

Конфигурация сайта и его страниц полностью обеспечивается через FrontMatter в Markdown-файлах находящиеся в $HOME_CONTENT_DIR.

Чтобы назначить глобальные настройки сайту нужно создать index.md в $HOME_CONTENT_DIR и указать в нём следующее:

---
# Известные параметры:
title: "ACME Inc" # Название сайта
baseUrl: "https://example.com/" # Префикс всех относительных URL
timeZone: "UTC" # Имя часового пояса

# Любые другие наборы ключей-значений будут восприниматься как второстепенные параметры и доступные через `.Site.Params`:
tokens:
  mastodonApi: "asdbjhqwe..."
  telegram: "bot1234..."
announcement: >
  You got mail!
backlink: "https://mstdn.io/@toby3d"
...
---

Использование

Страницы публикуются мгновенно через создание Markdown-файлов. Индексные файлы главной страницы и директорий называются index.md или index.lang.md где lang это двубуквенное обозначение языка локализации. Движок поддерживает работу с любым числом локализаций одних и тех же страниц: index.ru.md, index.en.md, index.jp.md и так далее.

Именованные страницы могут называться как угодно, имя будет использоваться в качестве slug из URL, например:

  • $HOME_CONTENT_DIR/folder/file.md: /folder/file, /folder/file/, /folder/file/index.html и /folder/file.html;
  • $HOME_CONTENT_DIR/now/index.md: /now, /now/, /now/index.html и /now.html;
  • $HOME_CONTENT_DIR/2023/11/09.md: /2023/11/09, /2023/11/09/, /2023/11/09/index.html и /2023/11/09.html;
  • и так далее;

Правила по локализациям здесь также применимы: folder/file.ru.md b folder/file.en.md, now.jp.md, 2023/11/09.de.md и так далее.

Содержимое публикуемых страниц также соответствует формату FrontMatter:

---
# Известные параметры:
title: "Hello, World!"

# Любые другие наборы ключей-значений будут восприниматься как второстепенные параметры и доступные через `.Page.Params`:
style:
  accent: "#0a0a23"
  icon: "👋🏻"
tags:
  - example
  - demo
  - blog
contact: "hey@toby3d.me"
---
This is a sample page content for demo.

Статические файлы вроде изображений, видео, robots.txt, стилей, скриптов и чего-угодно ещё размещаются в $HOME_CONTENT_DIR как есть: в корень если они должны быть доступны глобально через .Site.Files и для домашних страниц, а также в нужных директориях со страницами для доступа к ним через .Page.Files. Формат и имена файлов ничем не ограничены.

Для рендера содержимого страниц в браузерах необходимы шаблоны, которые должны размещаться в $HOME_THEME_DIR. Для работы необходим хотя бы один шаблон с блоком baseof который будет вызываться для каждой страницы, например:

<!-- theme/baseof.html -->

{{ define "baseof" }}
<!DOCTYPE html>
<html lang="{{ .Site.Language }}">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1.0">

    <title>{{ .Site.Title }}</title>
  </head>
  <body>
    {{ block "body" . }}{{ .Page.Content }}{{ end }}
  </body>
</html>
{{ end }}

Шаблонизация работает по инструкциям стандартного шаблонизатора Go с небольшими дополнениями в виде дополнительных утилит. В $HOME_THEME_DIR разрешена любая комбинация и иеархия шаблонов и их взаимосвязей до тех пор, пока существует baseof в качестве единого родительского блока.

В качестве контекста в каждый шаблон пробрасываются две структуры: .Site с глобальными опциям из $HOME_CONTENT_DIR/index.md и текущая просматриваемая страница с её опциями найденная в $HOME_CONTENT_DIR. Структуры данных в этих контекстах можно посмотреть в пакете domains, они используются в шаблонах как есть.