aboutsummaryrefslogtreecommitdiff
path: root/publish.el
blob: 9c8e10deb30ce4b40a119f93ccab2d206bcccc74 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
(require 'package)
(add-to-list 'package-archives '("gnu"   . "https://elpa.gnu.org/packages/"))
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(package-initialize)

(unless (package-installed-p 'use-package)
  (package-refresh-contents)
  (package-install 'use-package))
(eval-and-compile
  (setq use-package-always-ensure t
        use-package-expand-minimally t))

(use-package org
  :ensure org-plus-contrib)
(use-package ox-rss
  :after org)

(require 'org)
(require 'ox-html)

(defun my/org-publish-org-sitemap-format (entry style project)
  (cond ((not (directory-name-p entry))
         (format "(%s) [[file:%s][%s]]\n"
                 (format-time-string "%Y-%m-%d"
                                     (org-publish-find-date entry project))
                 entry
                 (org-publish-find-title entry project)))))

(defun posts-rss-feed (title list)
  "Generate a sitemap of posts that is exported as a RSS feed.
TITLE is the title of the RSS feed.  LIST is an internal
representation for the files to include.  PROJECT is the current
project."
  (concat
   "#+TITLE: " title "\n\n"
   (org-list-to-subtree list)))


(defun format-posts-rss-feed-entry (entry _style project)
  "Format ENTRY for the posts RSS feed in PROJECT."
  (let* (
         (title (org-publish-find-title entry project))
         (link (concat (file-name-sans-extension entry) ".html"))
         (pubdate (format-time-string (car org-time-stamp-formats)
                                      (org-publish-find-date entry project))))
    (message pubdate)
    (format "%s
:properties:
:rss_permalink: %s
:pubdate: %s
:end:\n"
            title
            link
            pubdate)))

(defun publish-posts-rss-feed (plist filename dir)
  "Publish PLIST to RSS when FILENAME is rss.org.
DIR is the location of the output."
  (if (equal "rss.org" (file-name-nondirectory filename))
      (org-rss-publish-to-rss plist filename dir)))

(setq org-publish-project-alist
      '(
        ("org-notes"
         :base-directory "~/website/"
         :base-extension "org"
         :publishing-directory "~/public_html/"
         :recursive t
         :publishing-function org-html-publish-to-html
         :with-toc nil
         :headline-levels 4
         :section-numbers nil
         :html-head "<link rel='stylesheet' href='/css/stylesheet.css' type='text/css'/>"
         :html-preamble "<div class='topnav'><a href='/'>Home</a><a href='/projects.html'>Projects</a><a href='/blog'>Blog</a><a href='/config.html'>Dotfiles</a><a href='/about.html'>About Me</a></div>"
         :html-postamble nil)
        ("org-static"
         :base-directory "~/website/"
         :base-extension "css\\|js\\|png\\|jpg\\|gif\\|pdf\\|mp3\\|ogg\\|swf"
         :publishing-directory "~/public_html"
         :recursive t
         :publishing-function org-publish-attachment)
        ("org-blog"
         :base-directory "~/blog/"
         :base-extension "org"
         :publishing-directory "~/public_html/blog"
         :recursive t
         :publishing-function org-html-publish-to-html
         :with-toc nil
         :with-properties t
         :with-date t
         :with-timestamps nil
         :headline-levels 4
         :section-numbers nil
         :html-head "<link rel='stylesheet' href='/css/stylesheet.css' type='text/css'/>"
         :html-preamble "<div class='topnav'><a href='/'>Home</a><a href='/projects.html'>Projects</a><a href='/blog'>Blog</a><a href='/config.html'>Dotfiles</a><a href='/about.html'>About Me</a></div>"
         :html-postamble nil
         :auto-sitemap t
         :sitemap-filename "index.org"
         :sitemap-format-entry my/org-publish-org-sitemap-format
         :sitemap-sort-files anti-chronologically
         :sitemap-title "Blog")
        ("org-rss"
         :publishing-directory "~/public_html"
         :base-directory "~/blog/"
         :base-extension "org"
         :exclude "index.org"
         :publishing-function publish-posts-rss-feed
         :rss-extension "xml"
         :html-link-home "https://jjanzen.ca"
         :html-link-use-abs-url t
         :html-link-org-files-as-html t
         :auto-sitemap t
         :sitemap-function posts-rss-feed
         :sitemap-title "Jacob Janzen's Blog"
         :sitemap-filename "rss.org"
         :sitemap-style list
         :sitemap-sort-files anti-chronologically
         :sitemap-format-entry format-posts-rss-feed-entry)
        ("org-config"
         :base-directory "~/.doom.d/"
         :base-extension "org"
         :html-head "<link rel='stylesheet' href='/css/stylesheet.css' type='text/css'/>"
         :html-preamble "<div class='topnav'><a href='/'>Home</a><a href='/projects.html'>Projects</a><a href='/blog'>Blog</a><a href='/config.html'>Dotfiles</a><a href='/about.html'>About Me</a></div>"
         :html-postamble nil
         :publishing-directory "~/public_html"
         :publishing-function org-html-publish-to-html
         :headline-levels 4
         :auto-preamble t)
        ("org" :components ("org-notes" "org-static" "org-config"))))
(org-publish-all t)