{ config, lib, pkgs, ... }: with lib; let cfg = config.fudo.slynk; initScript = port: pkgs.writeText "slynk.lisp" '' (load (merge-pathnames "quicklisp/setup.lisp" (user-homedir-pathname))) (ql:quickload :slynk) (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)) ''; 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 = { # Type = "simple"; ExecStartPre = "${pkgs.lispPackages.quicklisp}/bin/quicklisp init"; ExecStart = "${pkgs.sbcl-with-libs}/bin/sbcl --load ${initScript cfg.port}"; Restart = "on-failure"; PIDFile = "/run/slynk.$USERNAME.pid"; }; environment = { LD_LIBRARY_PATH = "${pkgs.openssl_1_1.out}/lib:${pkgs.libuv.out}/lib"; }; ## Starts on login. But what about ports? # wantedBy = [ "default.target" ]; }; }; }