{ config, lib, pkgs, ... }: with lib; mkIf (elem "emacs::lsp" config.machine.pkgs) { programs.emacs.init.usePackage = { lsp-mode = { enable = true; command = [ "lsp-mode" ]; config = '' (setq lsp-keymap-prefix "C-c") (setq lsp-eldoc-render-all nil) (defvar lsp-language-id-configuration '( ${optionalString (elem "emacs::rust" config.machine.pkgs) ''(rust-mode . "rust")''} )) ${optionalString (elem "emacs::rust" config.machine.pkgs) '' (setq lsp-rust-clippy-preference "on") ''} ${optionalString (elem "emacs::web-mode" config.machine.pkgs) '' (setq lsp-clients-deno-enable-unstable 't) (setq lsp-disabled-clients '(ts-ls)) ''} ''; }; lsp-ui = { enable = true; after = [ "lsp" ]; command = [ "lsp-ui-mode" "lsp-ui-sideline-mode" ]; config = '' (setq lsp-ui-sideline-enable t lsp-ui-sideline-show-symbol nil lsp-ui-sideline-show-hover nil lsp-ui-sideline-show-code-actions t lsp-ui-sideline-update-mode 'point) ''; }; lsp-ui-flycheck = { enable = true; package = epkgs: [ epkgs.lsp-ui ]; after = [ "lsp-ui" ] ++ optional (elem "emacs::flycheck" config.machine.pkgs) "flycheck"; }; }; }