Create cl-gemini flake
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
{ lib, lispPackages, openssl_1_1, sbcl, writeShellApplication, cl-gemini, ... }:
|
||||
|
||||
with lib;
|
||||
let
|
||||
serverLauncher = pkgs.writeText "launch-cl-gemini.lisp" ''
|
||||
(defun getenv-or-fail (env-var &optional default)
|
||||
(let ((value (uiop:getenv env-var)))
|
||||
(if (null value)
|
||||
(if default
|
||||
default
|
||||
(uiop:die 1 "unable to find required env var: ~A" env-var))
|
||||
value)))
|
||||
|
||||
(require :asdf)
|
||||
(asdf:load-system :slynk)
|
||||
(asdf:load-system :cl-gemini)
|
||||
(let ((slynk-port (uiop:getenvp "GEMINI_SLYNK_PORT")))
|
||||
(when slynk-port
|
||||
(slynk:create-server :port (parse-integer slynk-port) :dont-close t)))
|
||||
(let ((feed-file (uiop:getenvp "GEMINI_FEEDS")))
|
||||
(when feed-file
|
||||
(load feed-file)))
|
||||
(cl-gemini:start-gemini-server
|
||||
(getenv-or-fail "GEMINI_LISTEN_IP")
|
||||
(getenv-or-fail "GEMINI_PRIVATE_KEY")
|
||||
(getenv-or-fail "GEMINI_CERTIFICATE")
|
||||
:port (parse-integer (getenv-or-fail "GEMINI_LISTEN_PORT"))
|
||||
:document-root (getenv-or-fail "GEMINI_DOCUMENT_ROOT")
|
||||
:textfiles-root (getenv-or-fail "GEMINI_TEXTFILES_ROOT")
|
||||
:log-stream *standard-output*
|
||||
:threaded t
|
||||
:separate-thread t)
|
||||
(loop (sleep 10))
|
||||
'';
|
||||
|
||||
sbcl-with-ssl = sbcl.overrideAttrs (oldAttrs: rec {
|
||||
propagatedBuildInputs = oldAttrs.buildInputs ++ [ openssl_1_1.dev ];
|
||||
});
|
||||
|
||||
in writeShellApplication {
|
||||
name = "cl-gemini-launcher";
|
||||
|
||||
runtimeInputs = [ asdf sbcl-with-ssl openssl_1_1 cl-gemini ];
|
||||
|
||||
text =
|
||||
"${lispPackages.clwrapper}/bin/common-lisp.sh --load ${server-launcher}";
|
||||
}
|
||||
Reference in New Issue
Block a user