Files
doomemacs/modules/lang/nix/config.el
2025-05-24 17:27:30 +02:00

70 lines
1.8 KiB
EmacsLisp

;;; lang/nix/config.el -*- lexical-binding: t; -*-
(after! tramp
(add-to-list 'tramp-remote-path "/run/current-system/sw/bin"))
;;
;;; Plugins
(add-to-list 'auto-mode-alist
(cons "/flake\\.lock\\'"
(if (modulep! :lang json)
'json-mode
'js-mode)))
(defun +nix-common-config (mode)
(set-repl-handler! mode #'+nix/open-repl)
(set-company-backend! mode 'company-nixos-options)
(set-lookup-handlers! mode
:documentation '(+nix/lookup-option :async t))
(set-popup-rule! "^\\*nixos-options-doc\\*$" :ttl 0 :quit t)
(when (modulep! +lsp)
(add-hook (intern (format "%s-local-vars-hook" mode)) #'lsp! 'append))
(map! :localleader
:map ,(symbol-value (intern (format "%s-map" mode)))
"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-mode
:interpreter ("\\(?:cached-\\)?nix-shell" . +nix-shell-init-mode)
:mode "\\.nix\\'"
:config
(+nix-common-config 'nix-mode))
(use-package! nix-ts-mode
:when (modulep! +tree-sitter)
:when (fboundp 'treesit-available-p)
:defer t
:init
(set-tree-sitter! 'nix-mode 'nix-ts-mode
'((nix :url "https://github.com/nix-community/tree-sitter-nix")))
:config
(+nix-common-config 'nix-ts-mode))
(use-package! company-nixos-options
:defer t
:init
;; Fix #3927: disable idle completion because `company-nixos-options' is
;; dreadfully slow. It can still be invoked manually..
(setq-hook! '(nix-mode-hook nix-ts-mode-hook) company-idle-delay nil))
(use-package! nix-update
:commands nix-update-fetch)
(use-package! nix-repl
:commands nix-repl-show)