diff options
author | William Carroll <wpcarro@gmail.com> | 2020-01-29T14·43+0000 |
---|---|---|
committer | William Carroll <wpcarro@gmail.com> | 2020-01-29T14·43+0000 |
commit | 5c9079a41059e077f2b71b68eb83ff9fcb2e38d1 (patch) | |
tree | dce7e3566b04213228fb3c92fc593ca18841d972 /blog | |
parent | fb9380ba268b3cd27372acadb87b14cc96163374 (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.nix | 28 | ||||
-rw-r--r-- | blog/posts/test.md | 4 | ||||
-rw-r--r-- | blog/src/index.html | 16 | ||||
-rw-r--r-- | blog/src/server.lisp | 49 |
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)))) |