mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2025-12-06 09:07:21 +01:00
feat: enable lsp in src-blocks; emacs nix tooling
This commit is contained in:
parent
f5f396db25
commit
bf73151817
2 changed files with 147 additions and 33 deletions
|
|
@ -877,6 +877,7 @@ create a new one."
|
|||
(add-to-list 'org-structure-template-alist '("el" . "src emacs-lisp"))
|
||||
(add-to-list 'org-structure-template-alist '("py" . "src python :results output"))
|
||||
(add-to-list 'org-structure-template-alist '("nix" . "src nix :tangle"))
|
||||
(add-to-list 'org-structure-template-alist '("nix-ts" . "src nix-ts :tangle"))
|
||||
|
||||
(use-package auctex)
|
||||
(setq TeX-auto-save t)
|
||||
|
|
@ -1008,10 +1009,44 @@ create a new one."
|
|||
(add-hook 'org-present-mode-quit-hook 'swarsel/org-present-end)
|
||||
(add-hook 'org-present-after-navigate-functions 'swarsel/org-present-slide)
|
||||
|
||||
(use-package nix-mode)
|
||||
(use-package nix-mode
|
||||
:after lsp-mode
|
||||
:ensure t
|
||||
:hook
|
||||
(nix-mode . lsp-deferred) ;; So that envrc mode will work
|
||||
:custom
|
||||
(lsp-disabled-clients '((nix-mode . nix-nil))) ;; Disable nil so that nixd will be used as lsp-server
|
||||
:config
|
||||
(setq lsp-nix-nixd-server-path "nixd"
|
||||
lsp-nix-nixd-formatting-command [ "nixpkgs-fmt" ]
|
||||
lsp-nix-nixd-nixpkgs-expr "import (builtins.getFlake \"/home/swarsel/.dotfiles\").inputs.nixpkgs { }"
|
||||
lsp-nix-nixd-nixos-options-expr "(builtins.getFlake \"/home/swarsel/.dotfiles\").nixosConfigurations.nbl-imba-2.options"
|
||||
lsp-nix-nixd-home-manager-options-expr "(builtins.getFlake \"/home/swarsel/.dotfiles\").nixosConfigurations.nbl-imba-2.options.home-manager.users.type.getSubOptions []"
|
||||
))
|
||||
|
||||
(use-package nix-ts-mode
|
||||
:mode "\\.nix\\'")
|
||||
(use-package nix-mode
|
||||
:after lsp-mode
|
||||
:mode "\\.nix\\'"
|
||||
:ensure t
|
||||
:hook
|
||||
(nix-ts-mode . lsp-deferred) ;; So that envrc mode will work
|
||||
:custom
|
||||
(lsp-disabled-clients '((nix-ts-mode . nix-nil))) ;; Disable nil so that nixd will be used as lsp-server
|
||||
:config
|
||||
(setq lsp-nix-nixd-server-path "nixd"
|
||||
lsp-nix-nixd-formatting-command [ "nixpkgs-fmt" ]
|
||||
lsp-nix-nixd-nixpkgs-expr "import (builtins.getFlake \"/home/swarsel/.dotfiles\").inputs.nixpkgs { }"
|
||||
lsp-nix-nixd-nixos-options-expr "(builtins.getFlake \"/home/swarsel/.dotfiles\").nixosConfigurations.nbl-imba-2.options"
|
||||
lsp-nix-nixd-home-manager-options-expr "(builtins.getFlake \"/home/swarsel/.dotfiles\").nixosConfigurations.nbl-imba-2.options.home-manager.users.type.getSubOptions []"
|
||||
))
|
||||
|
||||
|
||||
(with-eval-after-load 'lsp-mode
|
||||
(lsp-register-client
|
||||
(make-lsp-client :new-connection (lsp-stdio-connection "nixd")
|
||||
:major-modes '(nix-mode nix-ts-mode)
|
||||
:priority 0
|
||||
:server-id 'nixd)))
|
||||
|
||||
(use-package hcl-mode
|
||||
:mode "\\.hcl\\'"
|
||||
|
|
@ -1365,28 +1400,48 @@ create a new one."
|
|||
|
||||
(defalias 'start-lsp-server #'eglot)
|
||||
|
||||
(use-package lsp-bridge
|
||||
:ensure nil)
|
||||
|
||||
(use-package lsp-mode
|
||||
:init
|
||||
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
|
||||
(setq lsp-keymap-prefix "C-c l")
|
||||
(setq lsp-auto-guess-root "t")
|
||||
:commands lsp)
|
||||
|
||||
(use-package company)
|
||||
;; (use-package company)
|
||||
|
||||
;; thanks to https://tecosaur.github.io/emacs-config/config.html#lsp-support-src
|
||||
(cl-defmacro lsp-org-babel-enable (lang)
|
||||
"Support LANG in org source code block."
|
||||
(setq centaur-lsp 'lsp-mode)
|
||||
(cl-check-type lang string)
|
||||
(let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang)))
|
||||
(intern-pre (intern (format "lsp--%s" (symbol-name edit-pre)))))
|
||||
`(progn
|
||||
(defun ,intern-pre (info)
|
||||
(let ((file-name (->> info caddr (alist-get :file))))
|
||||
(unless file-name
|
||||
(setq file-name (make-temp-file "babel-lsp-")))
|
||||
(setq buffer-file-name file-name)
|
||||
(lsp-deferred)))
|
||||
(put ',intern-pre 'function-documentation
|
||||
(format "Enable lsp-mode in the buffer of org source block (%s)."
|
||||
(upcase ,lang)))
|
||||
(if (fboundp ',edit-pre)
|
||||
(advice-add ',edit-pre :after ',intern-pre)
|
||||
(progn
|
||||
(defun ,edit-pre (info)
|
||||
(,intern-pre info))
|
||||
(put ',edit-pre 'function-documentation
|
||||
(format "Prepare local buffer environment for org source block (%s)."
|
||||
(upcase ,lang))))))))
|
||||
(defvar org-babel-lang-list
|
||||
'( "nix" "nix-ts" "go" "python" "ipython" "bash" "sh" ))
|
||||
(dolist (lang org-babel-lang-list)
|
||||
(eval `(lsp-org-babel-enable ,lang)))
|
||||
|
||||
(use-package lsp-bridge
|
||||
:ensure nil)
|
||||
|
||||
(use-package lsp-mode
|
||||
:init
|
||||
;; set prefix for lsp-command-keymap (few alternatives - "C-l", "C-c l")
|
||||
(setq lsp-keymap-prefix "C-c l")
|
||||
:commands lsp)
|
||||
|
||||
(use-package company)
|
||||
|
||||
(use-package sideline-flymake
|
||||
:hook (flymake-mode . sideline-mode)
|
||||
:init
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue