Moved add-hook calls (for tree-sitter initialization) into their respective modes' config blocks, or nearby, to be consistent with how other, similar tools (like lsp!) are initialized, and does so at runtime, rather than at expansion/compile time, which eval-when! caused.
57 lines
1.6 KiB
EmacsLisp
57 lines
1.6 KiB
EmacsLisp
;;; lang/nix/config.el -*- lexical-binding: t; -*-
|
|
|
|
(after! tramp
|
|
(add-to-list 'tramp-remote-path "/run/current-system/sw/bin"))
|
|
|
|
|
|
;;
|
|
;;; Plugins
|
|
|
|
(use-package! nix-mode
|
|
:interpreter ("\\(?:cached-\\)?nix-shell" . +nix-shell-init-mode)
|
|
:mode "\\.nix\\'"
|
|
:init
|
|
;; Treat flake.lock files as json. Fall back to js-mode because it's faster
|
|
;; than js2-mode, and its extra features aren't needed there.
|
|
(add-to-list 'auto-mode-alist
|
|
(cons "/flake\\.lock\\'"
|
|
(if (featurep! :lang json)
|
|
'json-mode
|
|
'js-mode)))
|
|
:config
|
|
(set-repl-handler! 'nix-mode #'+nix/open-repl)
|
|
(set-company-backend! 'nix-mode 'company-nixos-options)
|
|
(set-lookup-handlers! 'nix-mode
|
|
:documentation '(+nix/lookup-option :async t))
|
|
(set-popup-rule! "^\\*nixos-options-doc\\*$" :ttl 0 :quit t)
|
|
|
|
;; Fix #3927: disable idle completion because `company-nixos-options' is
|
|
;; dreadfully slow. It can still be invoked manually..
|
|
(setq-hook! 'nix-mode-hook company-idle-delay nil)
|
|
|
|
(when (featurep! +lsp)
|
|
(add-hook 'nix-mode-local-vars-hook #'lsp! 'append))
|
|
(when (featurep! +tree-sitter)
|
|
(add-hook 'nix-mode-local-vars-hook #'tree-sitter! 'append))
|
|
|
|
(map! :localleader
|
|
:map nix-mode-map
|
|
"f" #'nix-update-fetch
|
|
"p" #'nix-format-buffer
|
|
"r" #'nix-repl-show
|
|
"s" #'nix-shell
|
|
"b" #'nix-build
|
|
"u" #'nix-unpack
|
|
"o" #'+nix/lookup-option))
|
|
|
|
|
|
(use-package! nix-drv-mode
|
|
:mode "\\.drv\\'")
|
|
|
|
|
|
(use-package! nix-update
|
|
:commands nix-update-fetch)
|
|
|
|
|
|
(use-package! nix-repl
|
|
:commands nix-repl-show)
|