很多朋友问到我这个站点是怎么搭建出来的。不过我的感觉是,他们可能更多地是对我积累了这么多文章感到好奇,而不仅仅是这个站点的搭建感兴趣。 因为其实只要有个简单的Wordpress或者是Github Pages也能做到这样,唯一的差别还是是否愿意长期往这个站点里面添加文章和内容。 说来惭愧,我的这个站点里面大部分的内容都不是原创的,东抄一点西抄一点,抄别人的文章,翻译别人的文章和论文等等。
既然问的同学多了,我就简单地说说我这个站点是怎么搞的。代码仓库在 这里
- src 原始org文件
- src/images 图片和PDF等静态资源文件
- html 生成html文件
- scripts
- publish/publish.el 发布脚本
- pp-html 处理org生成的html文件,添加评论以及GA等代码
- gen-404 生成404.html
- codes 非生产代码
- sitemap.xml/txt 站点导图
- 404.html/index.html
- themes 站点样式配置
publish.el 文件如下:
- 载入.emacs文件,里面有一些辅助函数比如 `get-string-from-file`
- 设置站点发布配置:哪些目录,发布到哪里,样式如何等等
- 调用 `org-publish-project` 发布站点
CSS文件可以参考这个链接 CSS for Org-exported HTML 原始文件
;; load env
(load "~/.emacs.d/init.el")
;; http://orgmode.org/worg/org-tutorials/org-publish-html-tutorial.html
(require 'ox-publish)
;; TODO(yan): 在下面设置 :html-head 一直有问题
;; 显示 Wrong type: sequencep my-org-publish-html-head
;; 但是在这里如果检查变量的话,的确是满足sequencep的。
;; 暂时找不到原因。不过如果放在 publish.el 下面设置 (setq org-html-head ...) 是可以work的
;; 现在解决方案是将这个处理放在pp-html里面,这样的好处是可以快速地修改样式,
;; 而不用每次对整个项目重新输出,速度更快。
(setq my-org-publish-html-head
(replace-regexp-in-string
"root/" "/"
(get-string-from-file "~/repo/dirtysalt.github.io/themes/setup.txt")))
;; (message my-org-publish-html-head)
;; (when (sequencep my-org-publish-html-head)
;; (message "IT'S SEQUENCE"))
(setq org-publish-project-alist
'(("pages"
:base-directory "~/repo/dirtysalt.github.io/src/"
:publishing-directory "~/repo/dirtysalt.github.io/html/"
:recursive nil
:html-head-include-default-style nil
;; TODO(yan): seqeuncep my-org-publish-html-head failed?!
;; :html-head my-org-publish-html-head
:html-head ""
:publishing-function org-html-publish-to-html
:with-toc 't)
("site" :components ("pages" "blogs"))))
;; (setq my-org-publish-html-head
;; (replace-regexp-in-string
;; "root/" "/"
;; (get-string-from-file "~/repo/dirtysalt.github.io/themes/setup.txt")))
;; (setq org-html-head my-org-publish-html-head)
(org-publish-project "site")