PaperModのインストール
以下を参考にPaperModをインストールする。
Hugoのテーマのインストール方法にはいくつかあるが、今回はHugo Moduleを使う方法を採用する。git submodule
を使う方法と比較して、リポジトリのクローン時に明示的な初期化が不要であり、アップデートのコマンドが単純であるという利点がある。ただしGoのインストールが必要。
空のサイトを作り、PaperModをインストールしてローカルで立ち上げるコマンドは以下の通り。
# "sitorasu.github.io"と"github.com/sitorasu/sitorasu.github.io"の部分は自分の環境に合わせて置き換える
$ hugo new site sitorasu.github.io --format yaml
$ cd sitorasu.github.io
$ hugo mod init github.com/sitorasu/sitorasu.github.io
$ cat << EOS >> hugo.yaml
module:
imports:
- path: github.com/adityatelange/hugo-PaperMod
EOS
$ hugo server
hugo server
で立ち上げたサイトを確認すると、PaperModのテーマが表示されているはず。
PaperMod Wikiの説明にはhugo.yaml
にtheme: ["PaperMod"]
を追加するよう指示があるが、Hugo Moduleを使う場合には追加してはいけない。追加するとhugo server
実行時にfailed to load modules: module “PaperMod” not foundというエラーが出る。
テーマをアップデートするには以下のコマンドを実行する。
$ hugo mod get -u
Hugo Moduleの依存関係はプロジェクトのルートのgo.mod
というファイルに記録されており、上記コマンドで更新される。go.mod
はhugo mod init
実行時に作成される。
設定ファイルの記述
設定ファイルはプロジェクトのルートのhugo.yaml
。exampleSiteのconfig.ymlに主要な設定が載っている。意味が分からないものについてはPaperMod WikiまたはHugo Docsを参照する。だいたいデフォルトで適切な設定になっているはずなので、デフォルトで気に入らない部分だけ明示的に設定する。
アイコンの追加
ソーシャルアイコンにVRChatっぽいアイコンを追加する。svg.htmlをlayouts/partials/
にコピーし、独自のSVGを追加すればよい。例えばこのコミットが参考になる。
CSSの上書き
FAQs · adityatelange/hugo-PaperMod Wikiによれば、assets/css/extended
に配置したcssはすべて読み込まれるらしい。実際にやってみたらちゃんと読み込まれた。
コードブロックのフォントがmonospaceに設定されていたので調整した。
リンクを新しいタブで開くようにする
このコメントを参考に設定。themes
の下にファイルを作るのではなくプロジェクトのルート直下のlayouts
の下に作るようにした。無事成功。
最終更新日をヘッダに表示する
このプルリクエストの通りに設定する。作成日と同日中の更新は表示しない仕様のつもりなんだろうけど実装にミスがある。DateFormatの指定は2006-01-02
の日付でないと機能しない。
ついでに日付の前に作成日・最終更新日の文字が表示されるようにした。
投稿日と最終更新日をコミット時に自動設定する
最終更新日だけならhugo.yaml
に以下を書くだけで実現できる。
enableGitInfo: true
frontmatter:
lastmod:
- :git
ただ、これだと新規追加のファイルも問答無用でlastmod
がついてしまって小回りが利かなかったので、Git Hooksのpre-commitで同じ仕組みを自作することにした。仕様は以下。
- ステージングされた
.md
ファイルのうち、content/posts
ディレクトリの下にあるものを処理の対象とする - 変更の種別がファイルの新規追加である
.md
ファイルについて- フロントマターに
date:
で始まる行がなければdate: <現在の日時>
を追加する - フロントマターに
date:
で始まる行があれば何もしない
- フロントマターに
- 変更の種別が既存ファイルの変更である
.md
ファイルについて- フロントマターに
lastmod:
で始まる行があればその行を削除する - フロントマターに
lastmod: <現在の日時>
を追加する
- フロントマターに
なお、pre-commitのスクリプトは
.git/hooks/pre-commit
に記述するか、- スクリプトを記述した
pre-commit
ファイルを任意の場所に配置し、git config --local core.hooksPath <pre-commitの親ディレクトリのパス>
を実行する
ことでしか機能しない。いずれにしてもクローンしてすぐに機能させることはできないので初期設定が必要になる。
Gistのサポート
そのままでは以下の警告が出るので言われたとおりに対策する。
WARN The “gist” shortcode was deprecated in v0.143.0 and will be removed in a future release. See https://gohugo.io/shortcodes/gist for instructions to create a replacement.
このコードを丸ごとコピペしてくださいというコードの中に警告のロジックが入っているのでそれは取り除かないと警告が消えないことに注意。
GitHub Actionsの登録
Host on GitHub Pagesをそのまんまやる
ファビコン・Twitterカードの設定
設定ファイルの以下のフィールドで設定する。
params:
# Twitterカードのパス。この例ではstatic/card/logo.pngに配置する。
images: ["/card/logo.png"]
# ファビコンのパス。この例ではstatic/favicon.icoに配置する。
assets:
favicon: '/favicon.ico'
static
ではなくassets
の下に配置した画像も参照できるかもしれないが、自分の環境ではうまくいかなかった。でもPaperModのサンプルサイトではassets
の下に置いてうまくいっている。謎。
TODO: 目次をリッチにする
サイドバーで追従するやつにしたい。