expLog

Org Configuration

The org configuration to generate this site.

Imports

(require 'ob-css)
(require 'ox-publish)

Style

body {
  color: #bbb;
  background-color: #111;
  font-family: 'Palatino', serif;
  font-size: 16px;
  line-height: 24px;
  margin: 0;
  padding: 0;
}

a:link,
a:visited {
  background-color: #000;
  border-bottom: solid #fff 1px;
  color: #bbb;
  padding: 0 .2em;
  text-decoration: none;
}

a:hover {
  background-color: #bbb;
  color: #111;
}

a:active {
  border-bottom: solid #f00 1px;
}

h1, h2, h3, h4, h5, h6 {
  color: #fff;
  font-family: 'helvetica', 'arial', sans-serif;
  font-weight: normal;
  line-height: 1.2em;
}

h1.title {
  border-bottom: solid #000 1px;
  padding: .2em 1em;
  margin: 0 auto;
  max-width: 696px;
  text-align: left;
}

#preamble {
  background-color: #000;
  height: 24px;
}

#preamble a:link, #preamble a:visited {
  border: none;
  display: block;
  font-family: 'helvetica', 'arial', sans-serif;
  height: 24px;
  line-height: 24px;
  max-width: 696px;
  margin: 0 auto;
  text-decoration: none;
}

#preamble a:active, #preamble a:hover {
  border: none;
  background-color: transparent;
  color: #f00;
}

#postamble {
  border-top: solid #000 1px;
  color: #999;
  font-style: italic;
  text-align: right;
  margin: 1em auto;
  padding: 0 1em;
}

#postamble a.source-link:link,
#postamble a.source-link:visited {
  border-bottom: none;
  color: #ccc;
  font-family: monospace;
  font-size: .8em;
  font-style: normal;
  line-height: 24px;
  text-transform: lowercase;
  text-decoration: none;
}

#postamble a.source-link:hover,
#postamble a.source-link:active {
  background-color: transparent;
  color: #0f0;
}

code {
  border-top: solid #000 1px;
  border-bottom: solid #000 1px;
  padding: 0 .2em;
}

pre.src, pre.example {
  background-color: #222;
  border-top: none;
  border-bottom: solid #000 1px;
  border-left: none;
  border-right: solid #000 1px;
  box-shadow: none;
  font-size: 14px;
  line-height: 20px;
  padding: 1em 2em;
  overflow: auto;
}

pre.src:before {
  background-color: transparent;
  border: none;
  top: 0;
  right: 0;
}

sup {
  line-height: 0;
}

hr {
  border-top: solid 1px #000;
  border-bottom: solid 1px #333;
}

li p {
  margin: 0;
}

.footpara {
  margin: 0;
}

.footnotes {
  margin-top: 1em;
}

h2, h3, h4, h5, h6,
.footnotes {
  margin: 12px auto;
  max-width: 696px;
}

p, ul {
  margin: 12px auto;
  max-width: 672px;
}

li ul {
  margin-top: 0;
  margin-bottom: 0;
}

pre {
  margin: 0 auto;
  max-width: 672px;
}

Header

<style type='text/css'>
  <<style>>
</style>
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-80889645-1', 'auto');
  ga('send', 'pageview');
</script>

Publishing configuration

(defun create-source-link (filename)
  (concat "./" (file-name-nondirectory filename) ".html"))

(defun create-postamble (options)
  (let ((input-file (plist-get options :input-file)))
    (concat
     "<a class='source-link' href='"
     (create-source-link input-file)
     "'>view source</a>")))

(defun plist-keys-helper (plist keyp counter)
  (if (and (> counter 0) (not (null plist)))
      (let ((rest (plist-keys-helper (cdr plist) (not keyp) (- counter 1))))
        (if keyp
            (cons (car plist) rest)
          rest))
    '()))

(defun plist-keys (plist)
  (plist-keys-helper plist 't 10))

(defun create-preamble (options)
  (if (not (string-suffix-p "src/org/index.org" (plist-get options :input-file)))
      (concat
       "<div id='#preamble'><a href='http://explog.in'>expLog</a></div>")))

(defun create-project-configuration (title base-dir publishing-dir)
  `((,(concat title "-source")
     :base-directory ,base-dir
     :publishing-directory ,publishing-dir
     :base-extension "org"
     :recursive t
     :htmlized-source t
     :publishing-function org-org-publish-to-org)
    (,title
     :base-directory ,base-dir
     :publishing-directory ,publishing-dir
     :base-extension "org"
     :recursive t
     :section-numbers nil
     :publishing-function org-html-publish-to-html
     :with-author nil
     :with-toc nil
     :html-head-include-scripts nil
     :html-head-extra "
    <<header>>
            "
     :html-validation-link nil
     :html-footnotes-section "<div class=\"footnotes\" title=\"%s\">%s</div>"
     :html-preamble ,'create-preamble
     :html-postamble ,'create-postamble)))

(setq
 org-publish-project-alist
 `(,@(create-project-configuration
      "explog-notes"
      "~/explog/src/org/"
      "~/explog/publish/kunalb.github.io/")
   ,@(create-project-configuration
      "dot-emacs"
      "~/dot/"
      "~/explog/publish/kunalb.github.io/dot/")
   ("explog-static"
    :base-directory "~/explog/src/static/"
    :publishing-directory "~/explog/publish/kunalb.github.io/static/"
    :base-extension any
    :recursive t
    :publishing-function org-publish-attachment)
   ("explog"
    :components ("explog-notes"
                 "explog-static"
                 "dot-emacs"
                 "explog-notes-source"
                 "dot-emacs-source"))))

Publish

(org-publish "explog" nil)
(global-set-key
 (kbd "C-c c")
 (lambda ()
   (interactive)
   (org-babel-load-file "~/explog/src/org/config.org")))
; (org-babel-execute-buffer)
view source