nixos-config/lib/fudo/slynk.nix

71 lines
1.7 KiB
Nix
Raw Normal View History

2020-06-06 19:24:59 -07:00
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.fudo.slynk;
2020-07-15 14:02:12 -07:00
initScript = port: load-paths: let
load-path-string =
concatStringsSep " " (map (path: "\"${path}\"") load-paths);
in pkgs.writeText "slynk.lisp" ''
2020-06-06 19:24:59 -07:00
(load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname)))
(ql:quickload :slynk)
2020-07-15 14:02:12 -07:00
(setf asdf:*central-registry*
(append asdf:*central-registry*
(list ${load-path-string})))
2020-06-06 19:24:59 -07:00
(slynk:create-server :port ${toString port} :dont-close t)
(dolist (var '("LD_LIBRARY_PATH"))
(format t "~S: ~S~%" var (sb-unix::posix-getenv var)))
(loop (sleep 60))
'';
2020-07-15 14:02:12 -07:00
lisp-libs = with pkgs.lispPackages; [
alexandria
asdf-package-system
asdf-system-connections
cl_plus_ssl
cl-ppcre
quicklisp
quri
uiop
usocket
];
2020-06-06 19:24:59 -07:00
in {
options.fudo.slynk = {
enable = mkEnableOption "Enable Slynk emacs common lisp server.";
port = mkOption {
type = types.int;
description = "Port on which to open a Slynk server.";
default = 4005;
};
};
config = mkIf cfg.enable {
systemd.user.services.slynk = {
description = "Slynk Common Lisp server.";
2020-07-15 14:02:12 -07:00
serviceConfig = let
load-paths = (map (pkg: "${pkg}/lib/common-lisp/") lisp-libs);
in {
2020-06-06 19:24:59 -07:00
ExecStartPre = "${pkgs.lispPackages.quicklisp}/bin/quicklisp init";
2020-07-16 14:13:32 -07:00
ExecStart = "${pkgs.sbcl}/bin/sbcl --load ${initScript cfg.port load-paths}";
2020-06-06 19:24:59 -07:00
Restart = "on-failure";
PIDFile = "/run/slynk.$USERNAME.pid";
};
2020-06-25 20:46:18 -07:00
path = with pkgs; [
2020-07-15 14:02:12 -07:00
gcc
2020-06-25 20:46:18 -07:00
glibc # for getent
file
];
2020-06-06 19:24:59 -07:00
environment = {
2020-07-15 14:02:12 -07:00
LD_LIBRARY_PATH = "${pkgs.openssl_1_1.out}/lib";
2020-06-06 19:24:59 -07:00
};
};
};
}