diff options
| -rw-r--r-- | publish-mlnp.org | 418 |
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 |