about summary refs log tree commit diff
path: root/blog
diff options
context:
space:
mode:
authorWilliam Carroll <wpcarro@gmail.com>2020-01-29T14·43+0000
committerWilliam Carroll <wpcarro@gmail.com>2020-01-29T14·43+0000
commit5c9079a41059e077f2b71b68eb83ff9fcb2e38d1 (patch)
treedce7e3566b04213228fb3c92fc593ca18841d972 /blog
parentfb9380ba268b3cd27372acadb87b14cc96163374 (diff)
Splice ./universe directory into ./
Manually merging:
- README.md: I added the description from universe/README.md into the heading of
  dotfiles/README.md.
- .envrc: dotfiles/.envrc was a superset of universe/.envrc
- .gitignore: Adding some of the ignored patterns from universe/.gitignore to
  dotfiles/.gitignore

Everything else here should be a simple rename.
Diffstat (limited to 'blog')
-rw-r--r--blog/default.nix28
-rw-r--r--blog/posts/test.md4
-rw-r--r--blog/src/index.html16
-rw-r--r--blog/src/server.lisp49
4 files changed, 97 insertions, 0 deletions
diff --git a/blog/default.nix b/blog/default.nix
new file mode 100644
index 000000000000..5359a0ab6f37
--- /dev/null
+++ b/blog/default.nix
@@ -0,0 +1,28 @@
+{
+  nixpkgs ? import <nixpkgs> {},
+  depot ? import <depot> {},
+  universe ? import <universe> {},
+  ...
+}:
+
+let
+  injectedPosts = nixpkgs.writeText "posts.lisp" ''
+    (in-package #:server)
+    (setq *path-to-posts* "${./posts}")
+  '';
+  injectedExecutables = nixpkgs.writeText "executables.lisp" ''
+    (in-package #:server)
+    (setq *pandoc-bin* "${nixpkgs.pandoc}/bin/pandoc")
+  '';
+in depot.nix.buildLisp.program {
+  name = "server";
+  deps = with depot.third_party.lisp; with universe.third_party.lisp; [
+    hunchentoot
+    cl-arrows
+  ];
+  srcs = [
+    ./src/server.lisp
+    injectedPosts
+    injectedExecutables
+  ];
+}
diff --git a/blog/posts/test.md b/blog/posts/test.md
new file mode 100644
index 000000000000..ec2e030b2824
--- /dev/null
+++ b/blog/posts/test.md
@@ -0,0 +1,4 @@
+# Testing
+
+The goal here is to be able to write markdown files and have a server that can
+render the markdown into HTML and serve them to the clients.
diff --git a/blog/src/index.html b/blog/src/index.html
new file mode 100644
index 000000000000..a9d9cf7eaa25
--- /dev/null
+++ b/blog/src/index.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta name="description" content="Showcase of AI bots at DeepMind" />
+    <link rel="stylesheet" href="/index.css">
+    <title>AI Showcase</title>
+    <script data-ad-client="ca-pub-6018268443649487" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
+  </head>
+  <body>
+    <noscript>You need to enable JavaScript to run this app.</noscript>
+    <h1>Welcome</h1>
+    <p>To my blog!</p>
+  </body>
+</html>
diff --git a/blog/src/server.lisp b/blog/src/server.lisp
new file mode 100644
index 000000000000..ad8169fa1af9
--- /dev/null
+++ b/blog/src/server.lisp
@@ -0,0 +1,49 @@
+(in-package #:cl-user)
+(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)
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Nix-injected dependencies
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;; 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")
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; Library
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+(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 :string))
+
+;; TODO: Figure out how to handle this with Nix.
+(defvar *posts* (uiop:directory-files *path-to-posts*)
+  "List of the paths to the blog posts.")
+
+(hunchentoot:define-easy-handler
+    (get-latest :uri "/latest") ()
+  (render-post (concatenate 'string *path-to-posts* "/" "test.md")))
+
+(hunchentoot:define-easy-handler
+    (get-posts :uri "/posts") ()
+  "Working!")
+
+(defun main ()
+  "This is the main entrypoint for our application."
+  (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))
+  (print "Listing on port 4242...")
+  (sb-thread:join-thread
+   (find-if (lambda (th)
+              (string= (sb-thread:thread-name th)
+                       "hunchentoot-listener-*:4242"))
+            (sb-thread:list-all-threads))))