summaryrefslogtreecommitdiff
path: root/publish-mlnp.org
diff options
context:
space:
mode:
Diffstat (limited to 'publish-mlnp.org')
-rw-r--r--publish-mlnp.org146
1 files changed, 146 insertions, 0 deletions
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: <link rel="stylesheet" type="text/css" href="resources/mlnp.css" />
+#+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-publish-location>>
+ <<org-publish-components>>
+ <<org-publish-html-preamble>>
+
+ <<org-publish-project-alist>>
+
+ (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]]
Copyright 2019--2026 Marius PETER