Hugo

Hugo

hugo相关

安装

1
brew install hugo

使用

新建site

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
~ hugo new site hugo
Congratulations! Your new Hugo site is created in /Users/liuliancao/hugo.

Just a few more steps and you're ready to go:

1. Download a theme into the same-named folder.
   Choose a theme from https://themes.gohugo.io/ or
   create your own with the "hugo new theme <THEMENAME>" command.
2. Perhaps you want to add some content. You can add single files
   with "hugo new <SECTIONNAME>/<FILENAME>.<FORMAT>".
3. Start the built-in live server via "hugo server".

Visit https://gohugo.io/ for quickstart guide and full documentation.
➜  ~ tree hugo
hugo
├── archetypes
│   └── default.md
├── config.toml
├── content
├── data
├── layouts
├── static
└── themes

6 directories, 2 files

我发现默认是没有theme的,theme列表在官方提示里面 可以发现hugo的主题都非常漂亮哈哈,相比nikola,就比较保守一点。

创建新页面

参考hugo中文文档哈

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
cd hugo
➜  hugo hugo new about.md
/Users/liuliancao/hugo/content/about.md created
➜  hugo hugo new post/first.md
/Users/liuliancao/hugo/content/post/first.md created
➜  hugo cat  content/about.md
---
title: "About"
date: 2021-09-10T08:51:10+08:00
draft: true
---
➜  hugo cat content/post/first.md
---
title: "First"
date: 2021-09-10T08:52:54+08:00
draft: true
---

### Hello Hugo
1. aaa
1. bbb
1. ccc

使用主题

1
2
3
4
5
6
7
8
9
➜  hugo cd themes
➜  themes git clone https://github.com/spf13/hyde.git
正克隆到 'hyde'...
remote: Enumerating objects: 424, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 424 (delta 0), reused 2 (delta 0), pack-reused 419
接收对象中: 100% (424/424), 837.81 KiB | 2.12 MiB/s, 完成.
处理 delta 中: 100% (198/198), 完成.

运行hugo

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
➜  themes cd ..
➜  hugo hugo server --theme=hyde --buildDrafts
Start building sites …
hugo v0.86.1+extended darwin/amd64 BuildDate=unknown

                   | EN
-------------------+-----
  Pages            | 11
  Paginator pages  |  0
  Non-page files   |  0
  Static files     |  6
  Processed images |  0
  Aliases          |  0
  Sitemaps         |  1
  Cleaned          |  0

Built in 28 ms
Watching for changes in /Users/liuliancao/hugo/{archetypes,content,data,layouts,static,themes}
Watching for config changes in /Users/liuliancao/hugo/config.toml
Environment: "development"
Serving pages from memory
Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
Web Server is available at http://localhost:1313/ (bind address 127.0.0.1)
Press Ctrl+C to stop

zdoc主题搭建设置

官方github 官方文档 按照官方文档做就好了,

1
2
3
4
# 如果报这个错,就重命名下文件
Error: Error building site: "/Users/liuliancao/mydocs/themes/zdoc/exampleSite/content/ko/blog/rich-content.md:1:1": timed out initializing value. You may have a circular loop in a shortcode, or your site may have resources that take longer to build than the `timeout` limit in your Hugo config file.
mv /Users/liuliancao/mydocs/themes/zdoc/exampleSite/content/ko/blog/rich-content.md /Users/liuliancao/mydocs/themes/zdoc/exampleSite/content/ko/blog/rich-content.md.bak
mv /Users/liuliancao/mydocs/themes/zdoc/exampleSite/content/en/blog/rich-content.md /Users/liuliancao/mydocs/themes/zdoc/exampleSite/content/en/blog/rich-content.md.bak

nikola迁移到hugo(或者说从org笔记迁移到hugo)

所有org放到一个文件夹

先放到这~/hugo_org

观察nikola的部分

.. title: ansible初探(二) .. slug: ansiblechu-tan-er .. date: 2021-08-20 08:30:39 UTC+08:00 .. tags: ansible .. category: linux .. link: .. description: ansible的一些编写建议 .. type: text

观察hugo的头部分

找了半天,有定义

#+tags

全部做一下sed替换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# linux do this
sed  -i -e  '/BEGIN_COMMENT/,/END_COMMENT/ s/\.\. /#+/g' -e '/BEGIN_COMMENT/d;/END_COMMENT/d' *.org
sed -i  -e 's/\+tags/+hugo_tags/' -e 's/\+category/+hugo_categories/' -e 's/\+slug/+hugo_slug/' *.org
sed -i  '1i\#+HUGO_BASE_DIR: ~/hugo' *.org
sed -i '1i\#+SEQ_TODO: TODO DRAFT DONE'  *.org
sed -i '1i\#+PROPERTY: header-args :eval no' *.org
# mac use gsed
gsed  -i -e  '/BEGIN_COMMENT/,/END_COMMENT/ s/\.\. /#+/g' -e '/BEGIN_COMMENT/d;/END_COMMENT/d' *.org
gsed -i  -e 's/\+tags/+hugo_tags/' -e 's/\+category/+hugo_categories/' -e 's/\+slug/+hugo_slug/' *.org
gsed -i  '1i\#+HUGO_BASE_DIR: ~/hugo' *.org
gsed -i '1i\#+SEQ_TODO: TODO DRAFT DONE'  *.org
gsed -i '1i\#+PROPERTY: header-args :eval no' *.org

转移hugo文件下的文件测试

发现有文章了,但是我要到处所有的org文件,我发现C-e H A并不会到处我所有的org源文件

发现链接里面带上语言zh或者en

想去掉,修改config/config.toml的defaultContentLanguageInSubdir = false即可 修改params.toml 设置enableLangChange = false

改了个背景图片,透明度去哪调

扫下官网background的配置

为什么我的C-c C-e H A只导出当前文件

查阅官方文档 但是我发现实际并非是这样, 需要做的就是一件事情 目录结构保持这样 HUGO的项目文件夹 ├── archetypes ├── config ├── content # 把你的org文件都放到这里 ├── data ├── layouts ├── resources ├── static └── themes 这时候hugo server看下

hugo搜索不能用了

我发现搜索不能用了,原因是缺少index.json, 这个时候查看config的output 和官方的exampleSite/config.toml比对下,发现,home我没有写outputs, 改成这样就好了 [outputs] home = ["HTML", "RSS", "SearchIndex"]

图片不识别

直接nikola的图片特殊处理过,所以

  • 所有图片copy过来 结果发现直接可以了,生活总是给我们意外,也给我们快乐

roam导出到hugo

了解roam之前,我对于博客的了解是通过博客,可以实现对知识的二次加工,加深记忆,同时帮助更多的人节约不必要的时间 了解roam之后,我觉得博客或者笔记还有一个用途就是知识wiki的功能,虽然博客有检索系统,但是没有形成所谓的知识体系 而知识体系是需要类似脑图来形容的 所以我计划在博客里面引入roam这部分,之前的博客部分依然保留

第一步把org-roam(我的roam的目录)直接放到content下面

➜ hugo-liuliancao git:(master) ✗ mkdir content/roams ➜ hugo-liuliancao git:(master) ✗ cp -r ~/org-roam/* content/roams/ 发现大部分还真能访问 但是还有一些有意思的问题要解决

  • 没有title(是透明的)
  • 还有一点是无法链接到其他ID,
  • 无法看到反向饮用
  • 没有一个云图展示

解决问题之前和之前一样,先了解下问题, 是roam的格式和hugo的格式不一样导致的,所以要考虑在哪个阶段修复

没有title

title的问题归结为roam的模版需要调整,当前的roam org files统一sed处理下增加即可 原来的一个roam files

1
2
3
4
5
6
7
8
9
:PROPERTIES:
:ID:       F7EAC666-5075-4F60-B506-4BD769C60626
:END:
: Programming Languages

编程语言:
- [[/roams/20210903085657-rust][Rust]]
- [[/roams/20210907153551-go][Go]]
- [[/roams/20210912081535-elisp][Elisp]]

尝试改了下, 移到顶部,hugo开始报错,REF_NOT_FOUND: Ref xxx: not found,进入第二个问题 批量sed, 写个简单的脚本吧, 如果是mac把sed替换成gsed或者alias一下

1
2
3
4
5
6
7
8
mkdir /tmp/roam-bak-$(date +%Y-%m-%d)
echo "tips: back dir is /tmp/roam-bak-$(date +%Y-%m-%d)"
for i in $(ls *.org);do
  cp $i /tmp/roam-bak/
  title=$(sed -n '/:/p' $i)
  sed -i '/:/d' $i
  sed -i "1i $title" $i
done

修改roam的创建模版 目前暂时不好修改, 那就先写到部署脚本吧

可以看到roam的链接方式是id 这种org形式的链接

链接其他roam文章

链接的问题归结为hugo的链接方式和roam的链接方式不一致,需要了解下hugo怎么文章互相访问 其实就是hugo头哪个定义为这个链接,增加这个设置为id即可 发现问题没那么简单 这里相当于超链接,而hugo没有处理这里 所以我还是用shell的方式操作修改了下发现这样可以识别

1
[[ /roams/20210910125923-mysql][MySQL]]

那对于shell就比较简单了哈,操作流程 依然遍历当前文件夹,找到所有引用,观察引用是否/roams开头 如果不是,根据ID找出他的文件名(可以sed或者sqlite) 替换对应的引用 操作前建议先备份

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# used for sync roams file to hugo by liuliancao at 20210912.
mkdir /tmp/roam-bak-$(date +%Y-%m-%d-%H-%M)
echo "tips: back dir is /tmp/roam-bak-$(date +%Y-%m-%d-%H-%M)"
roam_source="$HOME/org-roam"
hugo_root="$HOME/projects/hugo-liuliancao"
cp -r $roam_source/*.org  $hugo_root/content/roams/
cp -r $roam_source/img/* $hugo_root/stati../images/
cd $hugo_root/content/roams
for i in $(ls *.org);do
  # changing title to top of the file
  cp $i /tmp/roam-bak-$(date +%Y-%m-%d-%H-%M)
  title=$(gsed -n '/:/p' $i|head -n 1)
  gsed -i 's///' $i
  gsed -i "1i $title" $i

  echo "dealing with $i"
  grep -q '\[\[id:' $i|| continue
  grep '\[\[id:' $i|awk -F ':|]' '{print $2}'|while read id;do
    sql="select file from nodes where id='\"${id}\"'"
    echo executing sql $sql
    echo cmd is sqlite3  ~/.emacs.d/org-roam.db "$sql"|awk -F '/' '{print $NF}'|awk -F '.' '{print $1}'
    file=$(sqlite3  ~/.emacs.d/org-roam.db "$sql"|awk -F '/' '{print $NF}'|awk -F '.' '{print $1}')
    echo changing links to $file...
    gsed -i "s#id:${id}#/roams/${file}#" $i
  done
done
无法看到反向引用

反向引用在org文件本身本来就是没有的,那我们还是有办法哈,通过sqlite数据库查反向引用,并追加到org就好了

没有云图展示

可以尝试用js 插件简单写一写

怎么部署

官方文档

1
hugo && rsync -avz --delete public/ root@blog.liuliancao.com:/var/www/

TODO 学习elisp

主题meme