Переезд на Hugo
Содержание
После многолетнего перерыва я решил возобновить ведение блога. Cтарый блог я забросил
в один прекрасный момент, когда решил написать свой генератор статических сайтов на
основе Org mode взамен используемому мной форку генератора org-page
. Писать новые статьи
планировалось параллельно с запилом своего генератора, но в итоге дальше самой идеи и
нескольких коммитов в форк org-page
дело так и не пошло.
Недавно возросшее с новой силой желание чего-нибудь написать заставило меня вернуться к теме блога. Трезво оценив свои шансы создать за приемлемое время с нуля генератор статических сайтов, удовлетворяющий мои потребности, я отказался от этой затеи. Так как я большой фанат Emacs и Org mode, я решил разузнать, как поменялись в среде Org mode за это время дела на фронте блогинга.
Проглядев список генераторов для файлов .org
, я не нашёл подходящего решения, которое
работало бы нативно в Emacs (а оригинальный org-page
вообще за это время прекратил
и без того не особо активное развитие). К моему удивлению, довольно-таки
продвинутый и активно развиваемый сообществом генератор статических сайтов Hugo,
написанный на Go, недавно обзавёлся вполне сносной встроенной поддержка формата
Org-mode с внедрением библиотеки парсинга и рендеринга Org mode-файлов go-org. Так
как список поддерживаемых им фич, из-за которых я и задумал изначально переписать
org-page
(быстрая публикация, развитая система управления коллекциями, live
reloading), меня полностью удовлетворял, я решил остановиться на этом проекте.
Установка
Так как я использую пакетный менеджер Nix, то для установки зависимостей для ведения
блога я воспользовался nix-shell
. Pinned-версия nixpkgs
(на ):
import (builtins.fetchGit {
name = "nixos-unstable-2019-07-02";
url = "https://github.com/nixos/nixpkgs";
rev = "1556781737d75688f240485ed448b4b4184ca882";
})
pkgs.nix
Так как версия Hugo с новой библиотекой go-org
ещё не вышла, мне пришлось опакетить
текущую development-версию. Для этого я взял за основу официальный пакет и изменил
атрибут src
:
{ stdenv, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
name = "hugo-${version}";
version = "b2a3d4644bb5a505db662b2927af6f80856a3076";
src = fetchFromGitHub {
owner = "gohugoio";
repo = "hugo";
rev = version;
sha256 = "19m296vsq5f1fmrl9mizjvqbvfxgd7pis3mdpss2wp199hryqwi7";
};
modSha256 = "15f50wsc0vkp9wf1mz5q98xc4a4yx7yracgmy5yr1czdg04d2laa";
subPackages = ["."];
buildFlags = "-tags extended";
meta = with stdenv.lib; {
description = "A fast and modern static website engine.";
homepage = https://gohugo.io;
license = licenses.asl20;
maintainers = with maintainers; [ schneefux ];
};
}
hugo/default.nix
И, наконец, конфигурация nix-shell
:
{ pkgs ? import ./pkgs.nix {}
}:
let
inherit (pkgs) mkShell callPackage;
hugo = callPackage ./hugo {};
in mkShell {
buildInputs = [hugo];
}
shell.nix
Настройка
Создав новый блог с помощью команды hugo new site
, я первым же делом установил тему
Terminal (green):
$ git submodule add \
https://github.com/panr/hugo-theme-terminal.git themes/terminal
Начав писать эту запись, я между делом менял конфигурацию Hugo и темы:
baseURL = "https://maximov.space"
languageCode = "ru"
defaultContentLanguage = "ru"
title = "Untitled"
subtitle = "Emacs, Programming, and Anything"
theme = "terminal"
paginate = 5
copyright = """
<span>© 2019 Powered by <a href="http://gohugo.io">Hugo</a></span>
<span>Theme made by <a href="https://twitter.com/panr">panr</a></span>
<span><a href="http://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA 4.0</a></span>
"""
[permalinks]
posts = "/:section/:year/:month/:day/:filename"
[params]
contentTypeName = "posts"
themeColor = "green"
showMenuItems = 2
fullWidthTheme = false
centerTheme = true
[params.logo]
logoText= "Untitled"
[taxonomies]
tag = "tags"
[languages]
[languages.ru]
readMore = "Читать дальше"
menuMore = "Ещё"
subtitle = "Emacs, Programming, and Anything"
config.toml
Так как тема некорректно отображала подписи к коду и сноски (footnotes), я создал
файл static/style.css
, в котором переопределил некоторые стили. Также я скачал
кастомную сборку Prism (библиотеки подсветки синтаксиса), изменив список
поддерживаемых языков и плагинов, и сохранил её в static/assets/prism.js
.
Результат
Исходники нового блога можно посмотреть здесь. В следующих постах я опишу процесс миграции старых записей и деплой блога.