summaryrefslogtreecommitdiffstats
path: root/site/cleopatra/org.org
diff options
context:
space:
mode:
authorThomas Letan <lthms@soap.coffee>2020-04-02 20:16:53 +0200
committerThomas Letan <lthms@soap.coffee>2020-04-02 20:16:53 +0200
commit46b2e7a3be44312f93b3d638f9bbd944f5c063a1 (patch)
treeb1eff65fa11c462e114204aadf7e6645d70d6b31 /site/cleopatra/org.org
parentEnjoy soupault’s plugin autodiscovery feature (diff)
Refactor the build process to use cleopatra the Second
Diffstat (limited to 'site/cleopatra/org.org')
-rw-r--r--site/cleopatra/org.org188
1 files changed, 188 insertions, 0 deletions
diff --git a/site/cleopatra/org.org b/site/cleopatra/org.org
new file mode 100644
index 0000000..bab4dc9
--- /dev/null
+++ b/site/cleopatra/org.org
@@ -0,0 +1,188 @@
+* Author Guidelines
+
+* Under the Hood
+
+#+BEGIN_SRC emacs-lisp :tangle scripts/packages.el
+(require 'package)
+
+(setq user-emacs-directory (concat (getenv "ROOT") "/emacs.d"))
+(setq package-user-dir (concat (getenv "ROOT") "/emacs.d"))
+(setq package-archives
+ '(("gnu" . "https://elpa.gnu.org/packages/")
+ ("melpa" . "https://melpa.org/packages/")))
+
+(package-initialize)
+
+(or (file-exists-p package-user-dir)
+ (package-refresh-contents))
+
+(defun ensure-package-installed (&rest packages)
+ "Ensure every PACKAGES is installed."
+ (mapcar
+ (lambda (package)
+ (if (package-installed-p package)
+ nil
+ (package-install package))
+ package)
+ packages))
+
+(ensure-package-installed 'use-package)
+(eval-when-compile (require 'use-package))
+
+(use-package org :ensure t)
+(use-package htmlize :ensure t)
+(use-package lua-mode :ensure t :defer t)
+(use-package rust-mode :ensure t :defer t)
+(use-package sass-mode :ensure t :defer t)
+(use-package haskell-mode :ensure t :defer t)
+(use-package toml-mode :ensure t :defer t)
+(use-package json-mode :ensure t :defer t)
+(use-package monokai-pro-theme :ensure t :defer t
+ :init
+ (load-theme 'monokai-pro t))
+
+(provide 'packages)
+#+END_SRC
+
+#+BEGIN_SRC emacs-lisp :tangle scripts/export-org.el
+(require 'packages)
+
+(org-babel-do-load-languages
+ 'org-babel-load-languages
+ '((shell . t)))
+(setq org-src-preserve-indentation t)
+(setq org-src-fontify-natively t)
+(setq org-confirm-babel-evaluate nil)
+(setq org-export-with-toc nil)
+(setq org-export-with-sub-superscripts nil)
+
+(add-to-list 'org-entities-user
+ '("im" "\\(" nil "<span class=\"imath\">" "" "" ""))
+(add-to-list 'org-entities-user
+ '("mi" "\\)" nil "</span>" "" "" ""))
+
+(setq org-babel-exp-code-template
+ (concat "#+BEGIN_SRC %lang%switches%flags "
+ ":tangle %tangle :name %name\n"
+ "%body\n"
+ "#+END_SRC"))
+
+(defun cleopatra-html-src-block (oldfun src-block contents info)
+ (let*
+ ((old-ret (funcall oldfun src-block contents info))
+ (pars (org-babel-parse-header-arguments
+ (org-element-property :parameters src-block)))
+ (tangle (cdr (assoc :tangle pars)))
+ (name (cdr (assoc :name pars))))
+ (cond
+ (name
+ (concat
+ "<div class=\"org-literate-programming\">"
+ (format "<div class=\"org-src-name\">&lt;&lt%s&gt;&gt :=</div>" name)
+ old-ret
+ "</div>"))
+ ((not (string= tangle "no"))
+ (concat
+ "<div class=\"org-literate-programming\">"
+ old-ret
+ (format "<div class=\"org-src-tangled-to\">%s</div>" tangle)
+ "</div>"))
+ (t old-ret))))
+
+(advice-add 'org-html-src-block
+ :around #'cleopatra-html-src-block)
+
+(org-html-export-to-html nil nil nil t)
+#+END_SRC
+
+#+BEGIN_SRC makefile :tangle org.mk
+EMACSBIN := emacs
+EMACS := ROOT="${ROOT}" ${EMACSBIN}
+TANGLE := --batch \
+ --load="${ROOT}/scripts/tangle-org.el" \
+ 2>> build.log
+
+ORG_POSTS := $(shell find site/ -name "*.org")
+ORG_HTML := $(ORG_POSTS:.org=.html)
+
+org-prebuild : .emacs
+org-build : ${ORG_HTML}
+
+theme-build : site/style/org.sass
+soupault-build : org-build
+
+ARTIFACTS += ${ORG_HTML} "*.html~"
+CONFIGURE += .emacs emacs.d/
+
+EXPORT := --directory="${ROOT}/scripts/" --batch \
+ --load="${ROOT}/scripts/export-org.el" \
+ 2>> build.log
+INIT := --batch --load="${ROOT}/scripts/packages.el" \
+ 2>> build.log
+
+.emacs : scripts/packages.el
+ @cleopatra echo Initiating "Emacs configuration"
+ @${EMACS} ${INIT}
+ @touch .emacs
+
+%.html : %.org scripts/packages.el scripts/export-org.el \
+ .emacs org.mk
+ @cleopatra echo Exporting "$*.org"
+ @${EMACS} $< ${EXPORT}
+#+END_SRC
+
+#+BEGIN_SRC sass :tangle site/style/org.sass
+.org-src-container
+ @include code-block
+ padding-top : .1rem
+ padding-bottom : .1rem
+
+.org-src-tangled-to, .org-src-name
+ @include padding-centered(4rem)
+
+.example
+ @include verbatim-block
+ // this is hacky, but it works: no need for a padding-bottom
+ padding-top : 1rem
+
+.footdef
+ @include padding-centered
+
+.footpara
+ display: inline
+ margin-left: .2em
+
+.section-number-2:after,
+.section-number-3:after
+ content: ". "
+
+.section-number-4,
+.section-number-5,
+.section-number-6
+ display: none
+
+dl
+ dt
+ font-weight: bold
+ dd p
+ margin-top: 0
+
+.footnotes
+ font-size : 1rem
+
+.org-literate-programming
+ padding-top : 1rem
+ padding-bottom : 1rem
+ .org-src-name
+ @include code-font
+ font-weight: bold
+
+ .org-src-tangled-to:before
+ content: "\f054"
+ font : normal normal normal 14px/1 ForkAwesome
+
+ .org-src-tangled-to
+ @include code-font
+ font-weight: bold
+ text-align: right
+#+END_SRC