Created
August 9, 2023 20:40
-
-
Save JanisErdmanis/94da86eecfeeef7b9e38f2c0a7abf367 to your computer and use it in GitHub Desktop.
Compiling `.org` files into a personal website with `org-publish`
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(require 'ox) | |
(require 'cl-lib) | |
(require 'cl) | |
(setq make-backup-files nil) ;; No need for backup files | |
(defvar my-base-directory (concat (file-name-directory load-file-name) "org") | |
"Org sources are taken from folder org relative to this file") | |
(defvar my-publishing-directory (concat (file-name-directory load-file-name) "html") | |
"Everything is published in folder html relative to this file") | |
(load-file (concat (file-name-directory load-file-name) "html-link.el")) | |
(defun pd-html-template (contents info) | |
(let | |
( | |
;; Existing file name. Could be usefull for if clauses | |
(rbase (file-relative-name (plist-get info :base-directory) (file-name-directory (plist-get info ':input-file)))) | |
;; Relative file name starting from base directory | |
(rfname (file-relative-name (plist-get info ':input-file) (plist-get info :base-directory))) | |
) | |
(concat " | |
<!DOCTYPE html> | |
<html lang=\"en\"> | |
<head> | |
<!-- Basic Page Needs | |
================================================== --> | |
<meta charset=\"utf-8\"> | |
<title>Blog</title> | |
<!-- Mobile Specific Metas | |
================================================== --> | |
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, maximum-scale=1\"> | |
<!-- CSS | |
================================================== --> | |
" | |
(format "<link rel=\"stylesheet\" href=\"%s/stylesheets/base.css\">\n" rbase) | |
(format "<link rel=\"stylesheet\" href=\"%s/stylesheets/skeleton.css\">\n" rbase) | |
(format "<link rel=\"stylesheet\" href=\"%s/stylesheets/layout.css\">\n" rbase) | |
" | |
<style type=\"text/css\"> | |
b { | |
font-weight: bold; | |
} | |
body { | |
font-size:12pt;font-family:\"PT Serif\", serif; | |
text-rendering: optimizeLegibility; | |
hyphens:auto | |
} | |
pre { | |
border: 1px solid #ccc; | |
box-shadow: 3px 3px 3px #eee; | |
padding: 8pt; | |
font-family: monospace; | |
font-size:10pt; | |
overflow: auto; | |
margin: 1.2em; | |
} | |
pre.src { | |
position: relative; | |
overflow: visible; | |
padding-top: 1.2em; | |
} | |
</style> | |
<!-- Favicons | |
================================================== --> | |
<!-- <link rel=\"shortcut icon\" href=\"images/favicon.ico\"> --> | |
<script type=\"text/x-mathjax-config\"> | |
MathJax.Hub.Config({\"HTML-CSS\": { scale: 75}}); | |
</script> | |
<script type=\"text/javascript\" | |
src=\"https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"> | |
</script> | |
</head> | |
" | |
"<body>\n" | |
" <div class=\"container\"> | |
<!-- Header --> | |
" | |
;; <div class=\"sixteen columns\"> | |
(format "<h1 class=\"remove-bottom\" style=\"margin-top: 40px; color: #ad3f39; display: inline-block;\">%s</h1> " | |
(org-export-data (or (plist-get info :title) "") info)) | |
(format "%s" (org-export-data (or (plist-get info :date) "") info)) | |
;(format | |
"<h5>" | |
(format "<a href=\"%s/aboutme\">about me</a>    \n" rbase) (format "<a href=\"%s/cv\">cv</a>    \n" rbase) | |
(format "<a href=\"%s/research\">research</a>    \n" rbase) | |
(format "<a href=\"%s/blog\">blog</a>    \n" rbase) | |
"</h5>" | |
"<hr />" | |
;;"</div>" | |
"<div id=\"home\">\n" | |
contents | |
"</div>" | |
" | |
<div class=\"sixteen columns\"> | |
<hr /> | |
<small>This website was made with <a href=\"http://www.getskeleton.com\">Skeleton</a> with modificactions from <a href=\"http://www.juliadiff.org\">JuliaDiff</a></small>. | |
</div> | |
</div><!-- container --> | |
<!-- End Document | |
================================================== --> | |
</body> | |
</html> | |
" | |
) | |
) | |
) | |
(org-export-define-derived-backend 'pd-html 'html | |
:translate-alist '((template . pd-html-template) | |
(link . pd-html-link) | |
)) | |
(defun pd-html-publish-to-html (plist filename pub-dir) | |
(org-publish-org-to 'pd-html filename ".html" plist pub-dir)) | |
(setq org-publish-project-alist | |
`( | |
("org-page-sources" | |
:base-directory ,my-base-directory ;; Path to your org files. | |
:base-extension "org" | |
:publishing-directory ,my-publishing-directory ;; Path to your Jekyll project. | |
:recursive t | |
:publishing-function pd-html-publish-to-html ;;org-html-publish-to-html | |
;;:publishing-function org-html-publish-to-html | |
:headline-levels 6 | |
:html-extension "html" | |
:with-toc nil ; don't create a table of contents | |
:section-numbers nil | |
:table-of-contents nil | |
:html-link-org-files-as-html t | |
:htmlized-source nil | |
) | |
) | |
) | |
(defun blog-publish () | |
(interactive) | |
(org-publish "org-page-sources" t)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment