about summary refs log tree commit diff
path: root/blog
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-01-23T21·58+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-01-23T22·01+0000
commit6108f8df0140e2f71c9f9b50d530d16400d9cdcb (patch)
tree8d1fcc3c535cf9e449ec1d114d407391b3ee1de8 /blog
parent2e3bb0435f2849e2a5d4da0ed8408c2993ca9052 (diff)
Support proof-of-concept blog
After some toil, I have a working proof-of-concept blog. The idea is simple:
write blog posts in markdown and store the posts in the `./posts`
directory. Then use the server and `pandoc` to convert these markdown files into
HTML at request time. I'm using nix to package everything together. It's far
from perfect, but it works at the moment, which is encouraging.
Diffstat (limited to 'blog')
-rw-r--r--blog/default.nix11
-rw-r--r--blog/src/server.lisp10
2 files changed, 12 insertions, 9 deletions
diff --git a/blog/default.nix b/blog/default.nix
index ed1e405ddca4..5359a0ab6f37 100644
--- a/blog/default.nix
+++ b/blog/default.nix
@@ -1,23 +1,24 @@
 {
-  pkgs ? import <nixpkgs> {},
+  nixpkgs ? import <nixpkgs> {},
   depot ? import <depot> {},
   universe ? import <universe> {},
   ...
 }:
 
 let
-  injectedPosts = pkgs.writeText "posts.lisp" ''
+  injectedPosts = nixpkgs.writeText "posts.lisp" ''
     (in-package #:server)
     (setq *path-to-posts* "${./posts}")
   '';
-  injectedExecutables = pkgs.writeText "executables.lisp" ''
+  injectedExecutables = nixpkgs.writeText "executables.lisp" ''
     (in-package #:server)
-    (setq *pandoc-bin* "${pkgs.pandoc}/bin/pandoc")
+    (setq *pandoc-bin* "${nixpkgs.pandoc}/bin/pandoc")
   '';
 in depot.nix.buildLisp.program {
   name = "server";
-  deps = with depot.third_party.lisp; [
+  deps = with depot.third_party.lisp; with universe.third_party.lisp; [
     hunchentoot
+    cl-arrows
   ];
   srcs = [
     ./src/server.lisp
diff --git a/blog/src/server.lisp b/blog/src/server.lisp
index 7f669ddd77bf..ad8169fa1af9 100644
--- a/blog/src/server.lisp
+++ b/blog/src/server.lisp
@@ -2,6 +2,7 @@
 (defpackage #:server
   (:documentation "Robot condemned to a life of admin work for my blog.")
   (:use #:cl)
+  (:import-from #:cl-arrows #:->>)
   (:export :main))
 (in-package #:server)
 
@@ -9,7 +10,9 @@
 ;; Nix-injected dependencies
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
-(defvar *path-to-posts* "/tmp"
+;; TODO: Wrap this in an assert or ensure that there's a trailing slash so it's
+;; treated as a directory.
+(defvar *path-to-posts* "/tmp/"
   "File path pointing to the posts directory.")
 
 (defvar *pandoc-bin* "/usr/bin/pandoc")
@@ -21,7 +24,7 @@
 (defun render-post (path)
   "Render the markdown file stored at PATH to HTML using pandoc."
   (uiop:run-program (list *pandoc-bin* path "--to" "html")
-                    :output t))
+                    :output :string))
 
 ;; TODO: Figure out how to handle this with Nix.
 (defvar *posts* (uiop:directory-files *path-to-posts*)
@@ -29,8 +32,7 @@
 
 (hunchentoot:define-easy-handler
     (get-latest :uri "/latest") ()
-  (print (parameter "name"))
-  (uiop:read-file-string (car *posts*)))
+  (render-post (concatenate 'string *path-to-posts* "/" "test.md")))
 
 (hunchentoot:define-easy-handler
     (get-posts :uri "/posts") ()