summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--publish-mlnp.org418
1 files changed, 363 insertions, 55 deletions
diff --git a/publish-mlnp.org b/publish-mlnp.org
index 6a12191..0ee6463 100644
--- a/publish-mlnp.org
+++ b/publish-mlnp.org
@@ -6,7 +6,8 @@
#+DATE: <2022-01-26 Wed>
#+OPTIONS: toc:nil
-#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="resources/mlnp.css" />
+#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="resources/mlnp.css"/>
+#+HTML_HEAD: <link rel="icon" type="image/png" href="resources/favicon.png"/>
#+INCLUDE: resources/topnav.html export html
@@ -26,8 +27,10 @@ website at a later date.
* Introduction
This entire website is built with [[https://orgmode.org/][Org mode]], an Emacs mode designed for
-literate programming among other things. Using Org mode for designing,
-building and publishing a website brings the following benefits:
+literate programming among other things.
+
+
+** Benefits
- Work within Emacs :: This advantage concerns existing Emacs users.
- Literate programming :: Org files contain a mix of plain text
@@ -37,6 +40,54 @@ building and publishing a website brings the following benefits:
of remembering why a particular piece of code was written.
+** Project structure
+
+My three websites---main, wiki, and blog---are edited in the same
+directory, but can be exported to different locations. This enables me
+to assign subdomains to each website, as is recommended for
+uncorrelated content.
+
+#+NAME: tree
+#+BEGIN_SRC bash :results verbatim :exports results
+ tree -L 2 -I *.html
+#+END_SRC
+
+#+RESULTS: tree
+#+begin_example
+.
+├── README.org
+├── about.org
+├── blog
+│   ├── 2022
+│   ├── 2023
+│   ├── index.org
+│   └── sitemap.org
+├── cv.org
+├── cv.txt
+├── index.org
+├── publish-mlnp.org
+├── resources
+│   ├── css.org
+│   ├── favicon.png
+│   ├── favicon.xcf
+│   ├── fonts
+│   └── mlnp.css
+├── sitemap.org
+└── wiki
+ ├── aerospace
+ ├── emacs
+ ├── images
+ ├── index.org
+ ├── languages
+ ├── linux
+ ├── programming
+ ├── sitemap.org
+ └── typography
+
+13 directories, 15 files
+#+end_example
+
+
* Publishing targets
This first section lays out the interactive prompts used to bind
@@ -46,9 +97,9 @@ export-related symbols with the following publishing targets:
- Components :: What parts of the website should be built?
-** Location
+** Locations
-Two possible publishing locations are considered:
+Two publishing locations are prompted, if undefined:
- Local :: The website is built on the local machine. This is useful
for website development.
@@ -56,24 +107,42 @@ Two possible publishing locations are considered:
is used to publish the website on the internet, it then becomes
visible at [[http://mlnp.fr/][mlnp.fr]].
-#+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/"
- ?l "build website on the local machine")
- ("/ssh:root@192.162.71.223:/var/www/"
- ?r "build website on the remote machine"))))
+ We follow the recommendation outlined in the manual's [[https://orgmode.org/manual/Uploading-Files.html][uploading
+ files]] section: in the case of remote publishing, we first publish
+ locally, then ~rsync~ the local copy with the remote one. This is
+ much more efficient for small updates---when attempting to publish
+ to the remote target directly, =tramp= will `dumbly' check files for
+ changes one by one, instead of checking the overall delta, which
+ ~rsync~ does.
+
+#+NAME: org-publish-locations
+#+BEGIN_SRC emacs-lisp
+ (unless (boundp 'org-publish-location-local)
+ (setq org-publish-location-local
+ (read-string
+ "Local target: " "/tmp/")))
+
+ (setq org-publish-location-local
+ (or org-publish-location-local
+ (read-string "Local target: " "/tmp/")))
+
+
+
+ (unless (boundp 'org-publish-location-remote)
+ (setq org-publish-location-remote
+ (read-string
+ "Remote target: " "root@192.162.71.223:/var/www/")))
#+END_SRC
** Components
-We outline three components: the main site, the wiki, and the blog.
+We outline three significant components: the main site, the wiki, and
+the blog. We define an additional component to publish only styling
+information, as it changes pretty frequently.
#+NAME: org-publish-component
-#+begin_src elisp
+#+begin_src emacs-lisp
(setq org-publish-component
(read-answer
"Which `org-publish-project-alist' component should be built? "
@@ -83,8 +152,10 @@ We outline three components: the main site, the wiki, and the blog.
?w "build the wiki")
("blog.mlnp.fr"
?b "build the blog")
- ("all"
- ?a "build all websites"))))
+ ("everything"
+ ?e "build everything for all websites")
+ ("all-styles"
+ ?s "build only websites' styles"))))
#+end_src
@@ -135,19 +206,94 @@ Both the wiki and the blog call for css and font resources hosted on
=mlnp.fr/resources/= folder.
#+NAME: org-publish-project-alist
-#+BEGIN_SRC elisp :noweb yes
+#+BEGIN_SRC emacs-lisp :noweb no-export :results pp
(require 'ox-publish)
(setq org-publish-project-alist
`( ;; This line left blank to avoid noweb honoring `( prefix.
<<mlnp.fr>>
<<wiki.mlnp.fr>>
<<blog.mlnp.fr>>
- ("all"
+ <<all-styles>>
+ ("everything"
:components ("mlnp.fr"
"wiki.mlnp.fr"
"blog.mlnp.fr"))))
#+END_SRC
+#+RESULTS: org-publish-project-alist
+#+begin_example
+(("mlnp.fr" :components
+ ("mlnp-main-pages" "mlnp-cv-txt" "mlnp-resources" "resources-pages" "mlnp-fonts"))
+ ("mlnp-main-pages" :base-directory "./" :base-extension "org" :publishing-directory "/tmp/mlnp.fr/" :recursive nil :auto-sitemap t :sitemap-title "Sitemap for [[https://wiki.mlnp.fr][wiki.mlnp.fr]]" :publishing-function org-html-publish-to-html)
+ ("mlnp-cv-txt" :base-directory "./" :base-extension "txt" :publishing-directory "/tmp/mlnp.fr/" :publishing-function org-publish-attachment)
+ ("mlnp-resources" :base-directory "resources/" :base-extension "css\\|js\\|png" :publishing-directory "/tmp/mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("resources-pages" :base-directory "resources/" :base-extension "org" :publishing-directory "/tmp/mlnp.fr/resources/" :recursive t :publishing-function org-html-publish-to-html)
+ ("mlnp-fonts" :base-directory "resources/fonts/" :base-extension "ttf\\|otf" :publishing-directory "/tmp/mlnp.fr/resources/fonts/" :publishing-function org-publish-attachment)
+ ("wiki.mlnp.fr" :components
+ ("wiki-main-pages" "wiki-resources" "wiki-fonts" "wiki-images"))
+ ("wiki-main-pages" :components
+ ("wiki-sitemap" "wiki---aerospace" "wiki---emacs" "wiki---languages" "wiki---linux" "wiki---programming" "wiki---typography"))
+ ("wiki-sitemap")
+ ("wiki---aerospace" :base-directory "wiki/aerospace" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/aerospace" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki---emacs" :base-directory "wiki/emacs" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/emacs" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki---languages" :base-directory "wiki/languages" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/languages" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki---linux" :base-directory "wiki/linux" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/linux" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki---programming" :base-directory "wiki/programming" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/programming" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki---typography" :base-directory "wiki/typography" :base-extension "org" :publishing-directory "/tmp/wiki.mlnp.fr/typography" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-filename "index.org" :publishing-function org-html-publish-to-html)
+ ("wiki-resources" :base-directory "resources/" :base-extension "css\\|js\\|png" :publishing-directory "/tmp/wiki.mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("wiki-fonts" :base-directory "resources/fonts/" :base-extension "ttf\\|otf" :publishing-directory "/tmp/wiki.mlnp.fr/resources/fonts/" :publishing-function org-publish-attachment)
+ ("wiki-images" :base-directory "wiki/images/" :base-extension "png\\|jpg" :publishing-directory "/tmp/wiki.mlnp.fr/images/" :publishing-function org-publish-attachment)
+ ("blog.mlnp.fr" :components
+ ("blog-main-pages" "blog-resources" "blog-fonts"))
+ ("blog-main-pages" :base-directory "blog/" :base-extension "org" :publishing-directory "/tmp/blog.mlnp.fr/" :recursive t :html-head "<link rel='stylesheet' type='text/css' href='https://blog.mlnp.fr/resources/mlnp.css'/>\n <link rel='icon' type='image/png' href='https://blog.mlnp.fr/resources/favicon.png'/>" :auto-sitemap t :sitemap-title "Sitemap for [[https://blog.mlnp.fr][blog.mlnp.fr]]" :sitemap-sort-files anti-chronologically :publishing-function org-html-publish-to-html)
+ ("blog-resources" :base-directory "resources/" :base-extension "css\\|js\\|png" :publishing-directory "/tmp/blog.mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("blog-fonts" :base-directory "resources/fonts/" :base-extension "ttf\\|otf" :publishing-directory "/tmp/blog.mlnp.fr/resources/fonts/" :publishing-function org-publish-attachment)
+ ("all-styles" :components
+ ("styles-mlnp" "styles-wiki" "styles-blog"))
+ ("styles-mlnp" :base-directory "resources/" :base-extension "css" :publishing-directory "/tmp/mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("styles-wiki" :base-directory "resources/" :base-extension "css" :publishing-directory "/tmp/wiki.mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("styles-blog" :base-directory "resources/" :base-extension "css" :publishing-directory "/tmp/blog.mlnp.fr/resources/" :publishing-function org-publish-attachment)
+ ("everything" :components
+ ("mlnp.fr" "wiki.mlnp.fr" "blog.mlnp.fr")))
+#+end_example
+
+
+** All styles
+
+We specify a separate publishing component for website styling
+information according to the following rationale:
+
+1. the page nesting hierarchy is subject to change;
+2. thus, pages should use absolute paths to reference their stylesheet
+ in order to access it reliably, i.e. the remote URL;
+3. thus, pages built locally also require the remote stylesheet.
+
+\rarr If the stylesheet isn't published remotely, it wouldn't be reflected
+on locally published pages.
+
+#+NAME: all-styles
+#+BEGIN_SRC emacs-lisp
+ ("all-styles"
+ :components ("styles-mlnp"
+ "styles-wiki"
+ "styles-blog"))
+ ("styles-mlnp"
+ :base-directory "resources/"
+ :base-extension "css"
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/resources/")
+ :publishing-function org-publish-attachment)
+ ("styles-wiki"
+ :base-directory "resources/"
+ :base-extension "css"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/resources/")
+ :publishing-function org-publish-attachment)
+ ("styles-blog"
+ :base-directory "resources/"
+ :base-extension "css"
+ :publishing-directory ,(concat org-publish-location-local "blog.mlnp.fr/resources/")
+ :publishing-function org-publish-attachment)
+#+END_SRC
+
** =mlnp.fr=
@@ -155,63 +301,208 @@ Both the wiki and the blog call for css and font resources hosted on
#+BEGIN_SRC emacs-lisp
("mlnp.fr"
:components ("mlnp-main-pages"
+ "mlnp-cv-txt"
"mlnp-resources"
"resources-pages" ; Only hosted on the main website.
"mlnp-fonts"))
("mlnp-main-pages"
:base-directory "./"
:base-extension "org"
- :publishing-directory ,(concat org-publish-location "mlnp.fr/")
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/")
:recursive nil ; Main site pages are all in top-level org directory.
+ :auto-sitemap t
+ :sitemap-title "Sitemap for [[https://wiki.mlnp.fr][wiki.mlnp.fr]]"
:publishing-function org-html-publish-to-html)
+ ("mlnp-cv-txt"
+ :base-directory "./"
+ :base-extension "txt"
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/")
+ :publishing-function org-publish-attachment)
("mlnp-resources"
:base-directory "resources/"
- :base-extension "css\\|js"
- :publishing-directory ,(concat org-publish-location "mlnp.fr/resources/")
+ :base-extension "css\\|js\\|png"
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/resources/")
:publishing-function org-publish-attachment)
("resources-pages"
:base-directory "resources/"
:base-extension "org"
- :publishing-directory ,(concat org-publish-location "mlnp.fr/resources/")
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/resources/")
+ :recursive t ; Resource files could be nested deep inside resources/ folder.
:publishing-function org-html-publish-to-html)
("mlnp-fonts"
:base-directory "resources/fonts/"
:base-extension "ttf\\|otf"
- :publishing-directory ,(concat org-publish-location "mlnp.fr/resources/fonts/")
+ :publishing-directory ,(concat org-publish-location-local "mlnp.fr/resources/fonts/")
:publishing-function org-publish-attachment)
#+END_SRC
** =wiki.mlnp.fr=
+We use triple dashes in component names so that they convert to em
+dashes when exported to the sitemap titles.
+
#+NAME: wiki.mlnp.fr
-#+BEGIN_SRC emacs-lisp
+#+BEGIN_SRC emacs-lisp :noweb no-export
("wiki.mlnp.fr"
:components ("wiki-main-pages"
"wiki-resources"
- "wiki-fonts"))
+ "wiki-fonts"
+ "wiki-images"))
("wiki-main-pages"
- :base-directory "wiki/"
- :base-extension "org"
- :publishing-directory ,(concat org-publish-location "wiki.mlnp.fr/")
- :recursive t
- :html-head "<link rel='stylesheet' type='text/css' href='http://wiki.mlnp.fr/resources/mlnp.css'>"
- :auto-sitemap t
- :sitemap-title "Sitemap for [[http://wiki.mlnp.fr][wiki.mlnp.fr]]"
- :publishing-function org-html-publish-to-html)
+ :components (;; "wiki-sitemap"
+ "wiki-index"
+ "wiki---aerospace"
+ "wiki---emacs"
+ "wiki---languages"
+ "wiki---linux"
+ "wiki---programming"
+ "wiki---typography"))
+ ;; ("wiki-sitemap" ;; TODO
+ ;; )
+<<wiki-index>>
+ <<wiki---aerospace>>
+ <<wiki---emacs>>
+ <<wiki---languages>>
+ <<wiki---linux>>
+ <<wiki---programming>>
+ <<wiki---typography>>
("wiki-resources"
:base-directory "resources/"
- :base-extension "css\\|js"
- :publishing-directory ,(concat org-publish-location "wiki.mlnp.fr/resources/")
+ :base-extension "css\\|js\\|png"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/resources/")
:publishing-function org-publish-attachment)
("wiki-fonts"
:base-directory "resources/fonts/"
:base-extension "ttf\\|otf"
- :publishing-directory ,(concat org-publish-location "wiki.mlnp.fr/resources/fonts/")
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/resources/fonts/")
+ :publishing-function org-publish-attachment)
+ ("wiki-images"
+ :base-directory "wiki/images/"
+ :base-extension "png\\|jpg"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/images/")
:publishing-function org-publish-attachment)
#+END_SRC
+*** Index
+
+#+NAME: wiki-index
+#+BEGIN_SRC emacs-lisp
+ ("wiki-index"
+ :base-directory "wiki/"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/")
+ :recursive nil ; Only top-level wiki pages.
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap nil
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Aerospace
+
+#+NAME: wiki---aerospace
+#+BEGIN_SRC emacs-lisp
+ ("wiki---aerospace"
+ :base-directory "wiki/aerospace"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/aerospace")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Emacs
+
+#+NAME: wiki---emacs
+#+BEGIN_SRC emacs-lisp
+ ("wiki---emacs"
+ :base-directory "wiki/emacs"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/emacs")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Languages
+
+#+NAME: wiki---languages
+#+BEGIN_SRC emacs-lisp
+ ("wiki---languages"
+ :base-directory "wiki/languages"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/languages")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Linux
+
+#+NAME: wiki---linux
+#+BEGIN_SRC emacs-lisp
+ ("wiki---linux"
+ :base-directory "wiki/linux"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/linux")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Programming
+
+#+NAME: wiki---programming
+#+BEGIN_SRC emacs-lisp
+ ("wiki---programming"
+ :base-directory "wiki/programming"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/programming")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
+*** Typography
+
+#+NAME: wiki---typography
+#+BEGIN_SRC emacs-lisp
+ ("wiki---typography"
+ :base-directory "wiki/typography"
+ :base-extension "org"
+ :publishing-directory ,(concat org-publish-location-local "wiki.mlnp.fr/typography")
+ :recursive t
+ :html-head "<link rel='stylesheet' type='text/css' href='https://wiki.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://wiki.mlnp.fr/resources/favicon.png'/>"
+ :auto-sitemap t
+ :sitemap-filename "index.org"
+ :publishing-function org-html-publish-to-html)
+#+END_SRC
+
+
** =blog.mlnp.fr=
#+NAME: blog.mlnp.fr
@@ -223,53 +514,70 @@ Both the wiki and the blog call for css and font resources hosted on
("blog-main-pages"
:base-directory "blog/"
:base-extension "org"
- :publishing-directory ,(concat org-publish-location "blog.mlnp.fr/")
+ :publishing-directory ,(concat org-publish-location-local "blog.mlnp.fr/")
:recursive t
- :html-head "<link rel='stylesheet' type='text/css' href='http://blog.mlnp.fr/resources/mlnp.css'>"
+ :html-head "<link rel='stylesheet' type='text/css' href='https://blog.mlnp.fr/resources/mlnp.css'/>
+ <link rel='icon' type='image/png' href='https://blog.mlnp.fr/resources/favicon.png'/>"
:auto-sitemap t
- :sitemap-title "Sitemap for [[http://blog.mlnp.fr][blog.mlnp.fr]]"
+ :sitemap-title "Sitemap for [[https://blog.mlnp.fr][blog.mlnp.fr]]"
:sitemap-sort-files anti-chronologically
:publishing-function org-html-publish-to-html)
("blog-resources"
:base-directory "resources/"
- :base-extension "css\\|js"
- :publishing-directory ,(concat org-publish-location "blog.mlnp.fr/resources/")
+ :base-extension "css\\|js\\|png"
+ :publishing-directory ,(concat org-publish-location-local "blog.mlnp.fr/resources/")
:publishing-function org-publish-attachment)
("blog-fonts"
:base-directory "resources/fonts/"
:base-extension "ttf\\|otf"
- :publishing-directory ,(concat org-publish-location "blog.mlnp.fr/resources/fonts/")
+ :publishing-directory ,(concat org-publish-location-local "blog.mlnp.fr/resources/fonts/")
:publishing-function org-publish-attachment)
#+END_SRC
-* Main publishing logic :main:
+* COMMENT Main publishing logic :main:
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>>
+#+BEGIN_SRC emacs-lisp :noweb no-export
+ ;; Never interrupt website publishing by asking to confirm evaluation
+ ;; of source blocks.
+ (setq org-confirm-babel-evaluate nil)
+
+ <<org-publish-locations>>
<<org-publish-component>>
<<org-publish-project-alist>>
+ ;; (org-publish-remove-all-timestamps)
+
+ ;; Prepare resources:
(org-babel-tangle-file "resources/css.org")
- (org-publish-remove-all-timestamps)
+ (save-window-excursion
+ (find-file "cv.org")
+ (org-ascii-export-to-ascii))
+ ;; TODO (org-publish-sitemap "wiki.mlnp.fr")
(org-publish org-publish-component)
- (format "Successfully built %s!" org-publish-component)
+
+ (let* ((local org-publish-location-local)
+ (local-websites (concat local "*mlnp.fr"))
+ (remote org-publish-location-remote)
+ (sync-command (format "rsync -razvP %s %s" local-websites remote)))
+ (if (not (yes-or-no-p "Push local changes to remote target? "))
+ (message "Didn't publish remotely to %s." remote)
+ (message
+ "Publishing local changes at %s to remote %s." local remote)
+ (async-shell-command sync-command)))
#+END_SRC
#+RESULTS: main
-: Successfully built wiki.mlnp.fr component!
+: #<window 95 on *Async Shell Command*>
-
-Link to the locally built homepages:
+The following links to the locally built homepages are useful after
+building the website locally, to check that everything proceeded smoothly.
- Main site :: [[file:/tmp/mlnp.fr/index.html]]
- Wiki :: [[file:/tmp/wiki.mlnp.fr/index.html]]
- Blog :: [[file:/tmp/blog.mlnp.fr/index.html]]
-
-
-* TODO Export resume to txt upon publishing
Copyright 2019--2026 Marius PETER