aboutsummaryrefslogtreecommitdiff
path: root/content/blog/2024-03-29-org-blog.md
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2024-07-28 19:46:20 -0500
committerChristian Cleberg <[email protected]>2024-07-28 19:46:20 -0500
commit5d4a1199b51602f64985982c82de9b7c537583c6 (patch)
tree7ac50f99425c5524c0820360754045b80d1bafcc /content/blog/2024-03-29-org-blog.md
parente86c55dbfad35870e76bd0e69991416f60017512 (diff)
downloadcleberg.net-5d4a1199b51602f64985982c82de9b7c537583c6.tar.gz
cleberg.net-5d4a1199b51602f64985982c82de9b7c537583c6.tar.bz2
cleberg.net-5d4a1199b51602f64985982c82de9b7c537583c6.zip
conversion from Zola to Weblorg
Diffstat (limited to 'content/blog/2024-03-29-org-blog.md')
-rw-r--r--content/blog/2024-03-29-org-blog.md265
1 files changed, 0 insertions, 265 deletions
diff --git a/content/blog/2024-03-29-org-blog.md b/content/blog/2024-03-29-org-blog.md
deleted file mode 100644
index fac2c47..0000000
--- a/content/blog/2024-03-29-org-blog.md
+++ /dev/null
@@ -1,265 +0,0 @@
-+++
-date = 2024-03-29
-title = "Blogging in Org-Mode"
-description = ""
-draft = false
-+++
-
-First and foremost, apologies to those who subscribe via RSS as I know that my
-feed duplicated itself when I moved this blog over to org-mode last night.
-
-This post focuses specifically on the configuration and tools I use to blog from
-Emacs with Org-Mode and does not focus on Emacs or Org-Mode themselves. Refer to
-the post I wrote about [Doom Emacs &
-Org-Mode](file:///blog/doom-emacs-org-mode.html) for more information about my
-base Emacs configuration.
-
-# Weblorg
-
-The first step in blogging with Org-Mode is to choose a method to convert the
-source files to HTML and publish them. The Worg site maintains a nice list of
-[Blogs and Wikis with Org](https://orgmode.org/worg/org-blog-wiki.html), but the
-tools are inevitably different and opinionated, so you'll need to find what
-works for you.
-
-I tried using Jekyll, Hugo, ox-hugo, Nikola, Blorg, org-static-blog, and the
-native org-publish functions before finally settling on Weblorg. For one reason
-or another, the other solutions were a drastic step down from my previous
-workflow that used [Zola](https://www.getzola.org/) with Markdown content.
-
-[Weblorg](https://github.com/emacs-love/weblorg) is a static site generator for
-[org-mode](https://orgmode.org/), built for use within
-[Emacs](https://www.gnu.org/software/emacs/). Since it's written in Emacs Lisp,
-there's no need to install other languages or frameworks to get started. More
-than that, you can write in any editor you please and simply invoke the Emacs
-build process with the `--script` parameter instead of requiring you to blog
-inside Emacs.
-
-## Installation
-
-The [Getting Started](https://emacs.love/weblorg/doc/index.html) page details
-broad installation requirements. I am using Doom Emacs on macOS, which requires
-you to add the package to the `~/.doom.d/packages.el` file and configure the
-`publish.el` file slightly differently.
-
-To start, add the `htmlize` and `weblorg` packages to Doom, sync the changes,
-and reload.
-
-```sh
-nano ~/.doom.d/packages.el
-```
-
-```lisp
-(package! htmlize)
-(package! weblorg)
-```
-
-```sh
-doom sync
-```
-
-Either re-open Emacs or hit `SPC h r r` to reload the changes.
-
-## Configuration
-
-Now that I've installed weblorg, I need to configure the project. I'll start by
-navigating to my site's source code and creating a `publish.el` file.
-
-```sh
-cd ~/Source/cleberg.net && nano publish.el
-```
-
-Since I'm using Doom, Emacs will not automatically load the packages I need
-later in the build process. To compensate, my `publish.el` file needs to
-explicitly tell Emacs where Doom stores the `htmlize`, `weblorg`, and
-`templatel` packages.
-
-```lisp
-;; explicity load packages since I'm using Doom Emacs
-(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/emacs-htmlize")
-(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/weblorg")
-(add-to-list 'load-path "~/.emacs.d/.local/straight/repos/templatel")
-(require 'htmlize)
-(require 'weblorg)
-
-;; defaults to http://localhost:8000
-;; To build with the custom URL below, call:
-;;;; ENV=prod emacs --script publish.el
-(if (string= (getenv "ENV") "prod")
- (setq weblorg-default-url "https://cleberg.net"))
-
-;; site metadata
-(weblorg-site
- :theme nil
- :template-vars '(("site_name" . "cleberg.net")
- ("site_owner" . "[email protected]")
- ("site_description" . "Just a blip of ones and zeroes.")))
-
-;; route for rendering the index page of the website
-(weblorg-route
- :name "index"
- :input-pattern "content/index.org"
- :template "index.html"
- :output ".build/index.html"
- :url "/")
-
-;; route for rendering each blog post
-(weblorg-route
- :name "blog"
- :input-pattern "content/blog/*.org"
- :template "post.html"
- :output ".build/blog/{{ slug }}.html"
- :url "/blog/{{ slug }}.html")
-
-;; route for rendering the index page of the blog
-(weblorg-route
- :name "blog-index"
- :input-pattern "content/blog/*.org"
- :input-aggregate #'weblorg-input-aggregate-all-desc
- :template "blog.html"
- :output ".build/blog/index.html"
- :url "/blog/")
-
-;; route for rendering each wiki post
-(weblorg-route
- :name "wiki"
- :input-pattern "content/wiki/*.org"
- :template "post.html"
- :output ".build/wiki/{{ slug }}.html"
- :url "/wiki/{{ slug }}.html")
-
-;; route for rendering the index page of the wiki
-(weblorg-route
- :name "wiki-index"
- :input-pattern "content/wiki/*.org"
- :input-aggregate #'weblorg-input-aggregate-all
- :template "wiki.html"
- :output ".build/wiki/index.html"
- :url "/wiki/")
-
-;; routes for rendering all other pages
-(weblorg-route
- :name "pages"
- :input-pattern "content/*.org"
- :template "page.html"
- :output ".build/{{ slug }}.html"
- :url "/{{ slug }}.html")
-
-(weblorg-route
- :name "salary"
- :input-pattern "content/salary/*.org"
- :template "page.html"
- :output ".build/salary/{{ slug }}.html"
- :url "/salary/{{ slug }}.html")
-
-(weblorg-route
- :name "services"
- :input-pattern "content/services/*.org"
- :template "page.html"
- :output ".build/services/{{ slug }}.html"
- :url "/services/{{ slug }}.html")
-
-;; RSS Feed
-(weblorg-route
- :name "rss"
- :input-pattern "content/blog/*.org"
- :input-aggregate #'weblorg-input-aggregate-all-desc
- :template "atom.xml"
- :output ".build/atom.xml"
- :url "/atom.xml")
-
-;; route for static assets that also copies files to .build directory
-(weblorg-copy-static
- :output ".build/{{ file }}"
- :url "/{{ file }}")
-
-;; fire the engine and export all the files declared in the routes above
-(weblorg-export)
-```
-
-# Project
-
-## Structure
-
-The project structure for weblorg is highly customizable and the main
-restriction is that the `publish.el` file must point to the correct paths.
-
-For my blog, I prefer to keep the blog content out of the top-level directory.
-This results in the following structure (shortened for brevity):
-
-```txt
-.build/
-content/
- blog/
- example-blog-post.org
- index.org
- wiki/
- example-wiki-post.org
- index.org
- index.org
- other-example-page.org
-theme/
- static/
- styles.css
- robots.txt
- templates/
- base.html
- blog.html
- index.html
- page.html
- post.html
- wiki.html
-build.sh
-publish.el
-```
-
-This is simply my preferred structure and you can alter it to fit your needs.
-The key here really is that you can customize at will, as long as the
-`publish.el` file matches.
-
-## Build & Deploy
-
-Once you're content with the status of the project, you're ready to build and
-deploy the blog.
-
-My process utilizes a `build.sh` script that combines the steps I take every
-time.
-
-```sh
-touch build.sh && chmod +x build.sh && nano build.sh
-```
-
-Within this script, I do the following:
-
-1. Remove any files within the `.build` directory that I use to store published
- files.
-2. Set the environment variable to `prod` to ensure the `base_url` matches my
- configuration in `publish.el`.
-3. Build the site with Emacs & `publish.el`.
-4. Use `scp` to copy files to my site's public directory on my server.
-
-```sh
-rm -rf .build/* && \
-ENV=prod emacs --script publish.el && \
-scp -r .build/* ubuntu:/var/www/cleberg.net/
-```
-
-### Time to Build
-
-My only current complaints are:
-
-1. Errors messages are not helpful. It takes work to determine what the error is
- and where it's coming from. I generally have to sit and watch the build
- process to see the file that weblorg pubslishes right before the error
- occurred.
-2. The build process re-builds every single file on each run, which takes a long
- time for a blog of my size. See below for the last time I measured.
-
-```sh
-> time ./build.sh
-
-./build.sh 35.46s user 0.59s system 85% cpu 41.965 total
-```
-
-Overall, I have thoroughly enjoyed using weblog and will continue to use it
-going forward until I find something better.