diff --git a/config.el b/config.el index 1f72fcc..58af2ac 100644 --- a/config.el +++ b/config.el @@ -174,6 +174,47 @@ (after! vertico (vertico-mouse-mode)) + +(after! lsp-mode + (setq lsp-signature-render-documentation nil) + + (lsp-register-client + (make-lsp-client :new-connection (lsp-stdio-connection "nixd") + :major-modes '(nix-mode) + :priority 0 + :server-id 'nixd))) + +(defun lsp-booster--advice-json-parse (old-fn &rest args) + "Try to parse bytecode instead of json." + (or + (when (equal (following-char) ?#) + (let ((bytecode (read (current-buffer)))) + (when (byte-code-function-p bytecode) + (funcall bytecode)))) + (apply old-fn args))) +(advice-add (if (progn (require 'json) + (fboundp 'json-parse-buffer)) + 'json-parse-buffer + 'json-read) + :around + #'lsp-booster--advice-json-parse) + +(defun lsp-booster--advice-final-command (old-fn cmd &optional test?) + "Prepend emacs-lsp-booster command to lsp CMD." + (let ((orig-result (funcall old-fn cmd test?))) + (if (and (not test?) ;; for check lsp-server-present? + (not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper + lsp-use-plists + (not (functionp 'json-rpc-connection)) ;; native json-rpc + (executable-find "emacs-lsp-booster")) + (progn + (when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH) + (setcar orig-result command-from-exec-path)) + (message "Using emacs-lsp-booster for %s!" orig-result) + (cons "emacs-lsp-booster" orig-result)) + orig-result))) +(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command) + ;; sly (after! sly (setq sly-lisp-implementations @@ -203,7 +244,9 @@ (add-to-list 'auto-mode-alist '("\\.lsx\\'" . lisp-mode)) (after! nix-mode - (set-formatter! 'alejandra '("alejandra" "--quiet") :modes '(nix-mode))) + (set-formatter! 'alejandra '("alejandra" "--quiet") :modes '(nix-mode)) + (setopt lsp-nix-nixd-server-path "nixd" + lsp-nix-nixd-formatting-command [ "nixpkgs-alejandra"])) ;; add platformio to ino files (add-to-list 'auto-mode-alist '("\\.ino\\'" . arduino-mode)) diff --git a/init.el b/init.el index 7911aad..a19adb2 100644 --- a/init.el +++ b/init.el @@ -72,7 +72,7 @@ ein ; tame Jupyter notebooks with emacs (eval +overlay) ; run code, run (also, repls) (lookup +dictionary +offline +docsets) ; navigate your code and its documentation - (lsp +eglot) ; M-x vscode + lsp ; M-x vscode magit ; a git porcelain for Emacs make ; run make tasks from Emacs pdf ; pdf enhancements