lib/lib/fudo/slynk.nix

57 lines
1.2 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.fudo.slynk;
initScript = port:
pkgs.writeText "slynk.lisp" ''
(asdf:load-system 'slynk)
(slynk:create-server :port ${toString port} :dont-close t)
(loop (sleep 60))
'';
sbclWithLibs = pkgs.sbcl.withPackages (ps:
with ps; [
alexandria
asdf-package-system
asdf-system-connections
cl_plus_ssl
cl-ppcre
quri
usocket
]);
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.";
serviceConfig = {
ExecStart = "sbcl --load ${initScript cfg.port}";
Restart = "on-failure";
PIDFile = "/run/slynk.$USERNAME.pid";
};
path = with pkgs; [
gcc
glibc # for getent
file
sbclWithLibs
];
environment = { LD_LIBRARY_PATH = "${pkgs.openssl.out}/lib"; };
};
};
}