---
title: Hugo博客迁移日志(2)
date: 2024-06-29T21:30:00+08:00
summary: 真·迁移日志(1)
description: 本文介绍了作者对于从NotionNext迁移到Hugo的具体过程的简要叙述,包含对项目的总览、友链页面的构建、说说页面的构建等
categories: ["百草园"]
series: Hugo博客迁移日志
tags:
- 博客
- Hugo
- 浮光
- 折腾
featuredImage: https://img.viento.cc/cover/migrating-to-hugo-2-cover.webp
draft: false
slug: migrating-to-hugo-2
---
芜湖,各位老友们好啊,我是 Chlorine。接着上一回,咱们开始讲我从 NotionNext 迁移到 Hugo 的旅程。
## 项目整体结构
Hugo Landscape 的项目结构没有什么佶屈聱牙的地方,很正常的 Hugo 主题结构……除了 `layouts` 下面有一个单独的 `posts/single.html`?我也不知道这个算不算特别。
这个主题最经典的地方在于:**它使用的是 UnoCSS**。啥是 UnoCSS?行吧我也不是很懂,似乎就是一个高度原子化、依赖于 HTML 对象的 CSS。反正挺 OOP 的。
那就先安装个 UnoCSS 吧。直接在主题文件夹下:
```bash
npm install
```
完事。就安装好了一大堆依赖。
*其实我一开始的时候没有做这个,后续我会讲具体经过。*
为了后续开发方便,我使用 OOP 课程的知识,写了个简单的 Makefile:
```makefile
# 默认目标
all: theme hugo
# Hugo构建
hugo:
hugo server -D
# 主题构建
theme:
cd themes/efimero && npm run build && cd ../..
# 清理构建文件
clean:
rm -rf public
rm -rf resources/_gen
cd themes/efimero && rm -rf node_modules
cd ../..
# 帮助信息
help:
@echo "可用的make目标:"
@echo " all: 默认目标,构建 Hugo 和主题"
@echo " hugo: 构建 Hugo"
@echo " theme: 构建主题"
```
这样每次更新功能要预览的时候,直接 `make` 就完事了。
## 友链页面
没错,在不细品项目的情况下,直接开冲,主打一个勇。
~~就算是品了我也品不懂,毕竟我对前端一窍不通。~~
友链页面是我的必需品。还是老办法,用一个 `JSON` 文件存储信息,放在 `主题/static/jsons/friends.json`。格式大概是:
```json
{
"name": "名字",
"note": "注释",
"url": "网址",
"md5": "邮箱的 MD5 值,用来从 Cravatar 获取头像",
"des": "描述/签名",
"ava": "/avatars/头像.webp,在没有 MD5 的情况下用这个"
}
```
然后搬出我的祖传 shortcode:
```html
{{ $friends := getJSON "themes/efimero/static/jsons/friends.json" }}
{{ range $friends.friend}}
{{ end }}
```
既然是换新主题了,肯定得写个好看的样式。`主题/assets/css` 下新建一个 `addon.css`,扔进去:
```css
.friend-link-container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.friend-link {
width: calc(50% - 10px);
border: 1px solid #ccc;
border-radius: 10px;
margin-bottom: 20px;
display: flex;
align-items: center;
padding: 10px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
height: auto;
max-height: 150px;
background-size: cover;
background-position: center;
}
@media screen and (max-width: 768px) {
.friend-link {
width: 100%;
}
}
.friend-link-avatar {
width: 70px;
height: 70px;
border-radius: 50%;
margin-right: 10px;
}
.friend-link-content {
display: flex;
flex-direction: column;
}
.friend-link-content h3 {
margin: 0;
padding: 0;
font-size: 20px;
color: #333;
}
.friend-link-content p {
margin: 0;
padding: 0;
font-size: 16px;
color: #666;
word-wrap: break-word;
}
```
当然,不能忘了包含这个 CSS。Landscape 采用的是 `css.html` 专门包含 CSS,嗯,我很喜欢。
最终出来的效果还是很好看的,详见我的友链页面。哦,别忘了新建一个 Markdown 文件,包含这个短代码。
## 说说
关于怎么搞说说,我属实是折腾了 N 多天,最终还是靠着[恐咖兵糖](https://www.ftls.xyz/)大佬的方案,经过一顿折腾之后得到的还算满意的 solution。
首先,让我们科普一个概念:**联邦宇宙**。
搬运 Wiki:
> 联邦宇宙(英语:Fediverse,简称Fedi)在英文中是“联邦”(Federation)和“宇宙”(Universe)的混成词。联邦宇宙由一系列自由软件组成,有一组互联的服务器(用户自建或第三方托管),一起提供网络发布(如社交媒体、微博、博客或者网站)或者文件托管功能。虽然各个服务器是独立运行的,且各个实例繁多,内容多样, 但服务器之间可以彼此互通。在不同的服务器(实例)上,用户可以创建不同帐号。这些帐号能够跨越实例边界而通信,因为服务器上运行的软件支持一种或多种遵循开放标准的通信协议。 用户通过联邦宇宙中的帐号,可以发布文本或者其他媒体文件,也可以关注其他用户。在某些情况下,用户可以公布或分享数据(如音频、视频、文本文件等),使其对所有或部分人开放并允许他们共同编辑内容(例如日历和黄页)。
>
> 联邦宇宙的目的是建立在网络社交巨头公司之外, 提供另一种交流方式。与在单一服务器上运行的传统社交网络相比,联邦宇宙的运行方式更开放。 其服务器的分散性,使联邦宇宙更安全可靠。
简单来说,就是一系列去中心化(准确来说应该算是联邦化或者多中心化)的自由软件组成的庞大社交网络。我对去中心化网络非常感兴趣,后续如果系统学习,会把心得分享出来(`画大饼.webp`)。
联邦宇宙主要由四大通讯协议支持:
- ActivityPub
- Diaspora Network
- OStatus
- Zot & Zot/6
我们要用的是第一个。ActivityPub 协议的代表软件是 [Mastodon](https://mastodon.social/)(中文名:长毛象/乳齿象),简单来说就是联邦宇宙的 Twitter(𝕏)。Mastodon 虽然成熟,但是比较笨重,不利于自托管(虽然说咱们也不用自托管就是了),而且国内可用的实例比较少。所以,我们选择 ActivityPub 协议的另外一个实践者—— [GoToSocial](https://gotosocial.org/)。
GoToSocial 不多介绍。直接上解决方案:
1. 注册一个国内的 GTS 实例,例如我用的 [https://scg.owu.one](https://scg.owu.one)。
2. 获取鉴权 Token,直接在[这里](https://takahashim.github.io/mastodon-access-token/)操作即可。
好的,下面开始爆改。具体的操作步骤等我专门写一个说明文档(或许是主题的说明文档?)。
上一个 shortcode:
```html
```
在站点配置 TOML 中加入相关数据:
```toml
# 联邦宇宙的说说参数
[params.whisper]
instance = "你的实例名称"
user_id = "你的 ID"
bot_token = "你的 Token"
```
开一个 Markdown,加入短代码,完事。
别看我现在说得轻巧,当初折腾的时候不知道费了多少劲。
今天先说这两个,剩下的明天再说。