41 lines
1.3 KiB
EmacsLisp
41 lines
1.3 KiB
EmacsLisp
;;; syd-lang-nix.el -*- lexical-binding: t; -*-
|
|
|
|
(require 'syd-handle-repl)
|
|
(require 'syd-handle-lookup)
|
|
|
|
(defun syd-nix-open-nix-repl ()
|
|
(interactive)
|
|
;; If possible, cd to the project root. Flakes force you to use relative
|
|
;; paths, which can be annoying in combination with
|
|
;;
|
|
;; REVIEW: Should this be something handled by `syd--call-repl-handler'?
|
|
(-some-> (syd-project-root) cd)
|
|
(nix-repl)
|
|
(current-buffer))
|
|
|
|
(use-package nix-mode
|
|
:mode "\\.nix\\'"
|
|
:init
|
|
(add-to-list 'auto-mode-alist
|
|
(cons (rx "/flake.lock'")
|
|
(if (fboundp 'json-mode)
|
|
'json-mode
|
|
'js-mode)))
|
|
:config
|
|
(add-hook 'nix-mode-hook #'lsp)
|
|
(set-popup-rule! (rx bol "*nixos-options-doc*" eol) :ttl 0 :quit t)
|
|
(set-repl-handler! 'nix-mode #'syd-nix-open-nix-repl)
|
|
(dolist (c '(?- ?_))
|
|
(modify-syntax-entry c "w" nix-mode-syntax-table))
|
|
|
|
;; Inform Smartparens and Evil-surround of Nix's alternative string syntax.
|
|
(with-eval-after-load 'smartparens
|
|
(sp-local-pair 'nix-mode "''" "''"))
|
|
(syd-add-hook 'nix-mode-hook
|
|
(defun syd-nix--configure-evil-surround-h ()
|
|
(with-eval-after-load 'evil-surround
|
|
(push '(?Q . ("''" . "''"))
|
|
evil-surround-pairs-alist)))))
|
|
|
|
(provide 'syd-lang-nix)
|