From 81c6b3e8ede6f9a61f04b25abcdb90283bb1666a Mon Sep 17 00:00:00 2001 From: Marius Peter Date: Sun, 6 Feb 2022 12:10:49 +0100 Subject: Gotta start somewhere! --- publish-mlnp.org | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 publish-mlnp.org (limited to 'publish-mlnp.org') diff --git a/publish-mlnp.org b/publish-mlnp.org new file mode 100644 index 0000000..2ea510b --- /dev/null +++ b/publish-mlnp.org @@ -0,0 +1,146 @@ +# -*- mode: org; -*- + +#+TITLE: Publish +#+SUBTITLE: Publishing this very website. +#+AUTHOR: Marius Peter +#+DATE: <2022-01-26 Wed> +#+OPTIONS: toc:nil + +#+HTML_HEAD: +#+INCLUDE: resources/topnav.org +#+TOC: headlines 3 + + +#+begin_abstract +In the spirit of [[https://en.wikipedia.org/wiki/Literate_programming][literate programming]] encouraged by Org mode, this +entire website's build process is documented on this very page. When +Emacs builds this website, it parses and executes the code blocks +contained on this page. By mixing behavior with the behavior's +documentation, we can future-proof our understanding of the build +logic, making it possible to efficiently revisit this website at a +later date in order to bring improvements. +#+end_abstract + + +* Publishing targets + +This first section lays out the interactive prompts used to bind +export-related symbols with the following publishing targets: + +- location :: Where should the website be published? +- components :: What parts of the website should be built? + + +** Location + +Two possible publishing locations are considered: + +- Local :: The website would be built on the local machine. +- Remote :: The website would be built on a remote server, after + uploading the selected files via ssh. + +#+NAME: org-publish-location +#+BEGIN_SRC elisp + (setq org-publish-location + (read-answer + "Should the website be built on the local or remote target? " + '(("~/tmp-mlnp.fr/" + ?l "build website on the local machine") + ("/ssh:root@192.162.71.223:/var/www/html/mlnp.fr/" + ?r "build website on the remote machine")))) +#+END_SRC + + +** Components + +#+NAME: org-publish-components +#+begin_src elisp + (setq org-publish-components + (read-answer + "Which `org-publish-project-alist' component should be built? " + '(("content" + ?c "build content (html) website components") + ("all" + ?a "build all website components")))) +#+end_src + + + +* Resources + +This section explores the =.css= and (maybe later) =.js= resources +available on the website. + + +** CSS + +The main CSS file is located at [[file:resources/css.org]]. + + +* Project components + +The ~org-publish-project-alist~ variable is used by ~org-publish~ to +identify website components and their properties upon export. + +#+NAME: org-publish-project-alist +#+BEGIN_SRC elisp + (require 'ox-publish) + (setq org-publish-project-alist + `(("site" + :base-directory "./" + :base-extension "org" + :publishing-directory ,org-publish-location + :recursive nil ; Top-level pages are all in top-level org directory. + :publishing-function org-html-publish-to-html + :auto-sitemap t + :sitemap-filename "resources/topnav-items.org" + :sitemap-title "Top-level site links") + ("posts" + :base-directory "posts/" + :base-extension "org" + :publishing-directory ,(concat org-publish-location "posts/") + :recursive t + :publishing-function org-html-publish-to-html) + ("styles" + :base-directory "resources/" + :base-extension "css" + :publishing-directory ,(concat org-publish-location "resources/") + :publishing-function org-publish-attachment) + ("images" + :base-directory "images/" + :base-extension "jpg\\|gif\\|png\\|svg" + :publishing-directory ,(concat org-publish-location "images/") + :recursive t + :publishing-function org-publish-attachment) + ("content" + :components ("site" + "posts")) + ("all" + :components ("content" + "styles" + "images")))) +#+END_SRC + + +* Main publishing logic + +This is the main publishing logic. Execute the following source block +to build the entire website. + +#+NAME: main +#+BEGIN_SRC elisp :noweb no-export + <> + <> + <> + + <> + + (org-babel-tangle-file "resources/css.org") + + (org-publish-remove-all-timestamps) + (org-publish org-publish-components) +#+END_SRC + +Open the website. + +[[file:~/tmp-mlnp.fr/index.html]] -- cgit v1.2.3