Home

Emacs config.
Published on Apr 14, 2023 by Horhik.

Table of Contents

#+author Horhik

Here's part of my config for org-publish

1. Orb Publish

1.1. Setting up variables

(setq blog-path "~/Space/Code/Blog/")
(setq blog-static-path "~/Space/Code/Blog/html/")
(setq blog-content-path "~/Space/Code/Blog/pages/")
(setq blog-templates "~/Space/Code/Blog/assets/templates/")

1.2. Custom sections

(defvar this-date-format "%b %d, %Y")
(defun blog/html-postamble (plist)
    "PLIST."
    (concat (format
             (with-temp-buffer
               (insert-file-contents (concat blog-templates "postamble.html")) (buffer-string))
             (format-time-string this-date-format (plist-get plist :time)) (plist-get plist :creator))))

  (defun blog/html-preamble (plist)
  "PLIST: An entry."
  (if (org-export-get-date plist this-date-format)
      (plist-put plist
                 :subtitle (format "Published on %s by %s."
                                   (org-export-get-date plist this-date-format)
                                   (car (plist-get plist :author)))))
  ;; Preamble
  (with-temp-buffer
    (insert-file-contents (concat blog-templates "preamble.html")) (buffer-string)))

(defun blog/html-index-preamble (plist)
  "PLIST: An entry."
  (if (org-export-get-date plist this-date-format)
      (plist-put plist
                 :subtitle (format "Published on %s by %s."
                                   (org-export-get-date plist this-date-format)
                                   (car (plist-get plist :author)))))
  ;; Preamble
  (with-temp-buffer
    (insert-file-contents (concat blog-templates "index-preamble.html")) (buffer-string)))

1.3. Sitemap

  (defun me/org-sitemap-format-entry (entry style project)
    "Format posts with author and published data in the index page.

ENTRY: file-name
STYLE:
PROJECT: `posts in this case."
    (cond ((not (directory-name-p entry))
           (format "*[[file:%s][%s]]*
                 #+HTML: <p class='pubdate'>by %s on %s.</p>"
                   entry
                   (org-publish-find-title entry project)
                   (car (org-publish-find-property entry :author project))
                   (format-time-string this-date-format
                                       (org-publish-find-date entry project))))
          ((eq style 'tree) (file-name-nondirectory (directory-file-name entry)))
          (t entry)))

1.4. Preambles and postambles

(setq index-preamble "<section> <div> <h3> Segmentation Fail. Horhik's blog </h3></div> <div><ul> <li><a href='./posts/index.html'>Posts</a></li> <li><a href='./portfolio/index.html'>Portfolio</a></li> <li><a href='./about/index.html'>About</a></li> <li><a href='./donate/index.html'>Donate</a></li> <li><a href='./projects/index.html'>Projects</a></li> </ul></div> </section>") (setq inner-preamble "<header> <div> <h3> <a href='../index.html'>Horhik's blog </a></h3></div> <div><ul> <li><a href='../posts/index.html'>Posts</a></li> <li><a href='../portfolio/index.html'>Portfolio</a></li> <li><a href='../about/index.html'>About</a></li> <li><a href='../donate/index.html'>Donate</a></li> <li><a href='../projects/index.html'>Projects</a></li> </ul></div> </header>")

(setq site-postamble "<footer><p> <b> This site is made by Horhik and all contens are under CC I forgot full license name </b> </p></footer>") (setq org-html-preamble-format `(("en", inner-preamble))) (setq org-html-postamble-format `(("en", site-postamble)))

1.5. list

  (require 'ox-publish)


  (setq org-publish-project-alist
        `(
          ("blogposts"
           :base-directory ,(concat blog-content-path "posts")
           :base-extension "org"
           :publishing-directory ,(concat blog-static-path "posts")
           :publishing-function org-html-publish-to-html
           :recursive t
           :headline-levels 8             
           :html-preamble blog/html-preamble
           :html-postamble blog/html-postamble
           :auto-sitemap t
           :sitemap-filename "index.org"
           :sitemap-title "Blog Index"         
           :sitemap-format-entry me/org-sitemap-format-entry
           :sitemap-style list
           :with-tags t
           :with-toc t
           :section-numbers: nil
           :table-of-contents t
           :html-head-include-default-style nil
           )
          ("portfolio"
           :base-directory ,(concat blog-content-path  "portfolio")
           :base-extension "org"
           :publishing-directory ,(concat blog-static-path  "portfolio")
           :publishing-function org-html-publish-to-html
           :headline-levels 8             
           :html-preamble blog/html-preamble
           :html-postamble blog/html-postamble
           :auto-sitemap: t
           :sitemap-filename: "index.org"
           :sitemap-title: "Portfolio"
           :sitemap-format-entry me/org-sitemap-format-entry
           :sitemap-style list
           :validation-link nil
           :table-of-contents nil
           :html-head-include-default-style nil
           )
          ("about"
           :base-directory ,(concat blog-content-path  "about")
           :base-extension "org"
           :publishing-directory ,(concat blog-static-path  "about")
           :publishing-function org-html-publish-to-html
           :recursive t
           :headline-levels 8             
           :html-preamble blog/html-preamble
           :html-postamble blog/html-postamble
           :validation-link nil
           :table-of-contents nil
           :html-head-include-default-style nil
           )
("donate"
           :base-directory ,(concat blog-content-path  "donate")
           :base-extension "org"
           :publishing-directory ,(concat blog-static-path  "donate")
           :publishing-function org-html-publish-to-html
           :recursive t
           :headline-levels 8             
           :html-preamble blog/html-preamble
           :html-postamble blog/html-postamble
           :validation-link nil
           :table-of-contents nil
           :html-head-include-default-style nil
           )
          ("blogstatic"
           :base-directory "~/Blog/pages/"
           :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
           :publishing-directory "/home/horhik/Code/Blog/html/"
           :recursive t
           :publishing-function org-publish-attachment
           )
            ("index"
             :base-directory ,(concat blog-content-path "")
             :base-extension "org"
             :publishing-directory ,(concat blog-static-path "")
             :publishing-function org-html-publish-to-html
             :site-toc nil
             :table-of-contents: nil
             :auto-sitemap: t
             :sitemap-format-entry me/org-sitemap-format-entry
             :sitemap-style list
             :headline-levels 8             
             :html-preamble blog/html-index-preamble
             :html-postamble blog/html-postamble
             )
          ("Blog" :components ("blogposts" "blogstatic"  "portfolio" "about"  "index" "donate"))
          )
        )