lang/nix: add ivy version of helm-nixos-options

And make it nix-mode's lookup-documentation handler, so pressing `K` on
an option will prefill the ivy search.
This commit is contained in:
Henrik Lissner 2019-09-21 13:54:30 -04:00
parent 615e632477
commit 6f9b7a2889
No known key found for this signature in database
GPG key ID: 5F6C0EA160557395
2 changed files with 44 additions and 2 deletions

View file

@ -0,0 +1,41 @@
;;; lang/nix/autoload.el -*- lexical-binding: t; -*-
(defun +nix--options-action (candidate)
(switch-to-buffer-other-window
(nixos-options-doc-buffer
(nixos-options-get-documentation-for-option candidate))))
;;;###autoload
(defun +nix/lookup-option (&optional initial-input)
"Look up documentation on a nix option."
(interactive
(list
;; REVIEW Must be a better way to do this
(when (and (looking-at-p "[a-zA-Z0-9-_\\.]")
(not (doom-point-in-string-or-comment-p)))
(buffer-substring-no-properties
(save-excursion
(skip-chars-backward "^ ")
(point))
(save-excursion
(skip-chars-forward "^ ")
(point))))))
(cond ((featurep! :completion helm)
(require 'helm-nixos-options)
;; REVIEW We reimplment `helm-nixos-options' so we can supply
;; `initial-input'. Maybe use `helm-attrset' instead?
(helm :sources `(,(helm-source-nixos-options-search))
:buffer "*helm-nixos-options*"
:input initial-input))
((featurep! :completion ivy)
(require 'nixos-options)
(ivy-read "NixOS options: "
nixos-options
:require-match t
:initial-input initial-input
:action #'+nix--options-action
:caller '+nix/options))
;; TODO Add general `completing-read' support
((user-error "No search engine is enabled. Enable helm or ivy!")))
;; Tell lookup module to let us handle things from here
'deferred)

View file

@ -4,6 +4,8 @@
:mode "\\.nix\\'" :mode "\\.nix\\'"
:config :config
(set-company-backend! 'nix-mode 'company-nixos-options) (set-company-backend! 'nix-mode 'company-nixos-options)
(set-lookup-handlers! 'nix-mode
:documentation '(+nix/lookup-option :async t))
(map! :localleader (map! :localleader
:map nix-mode-map :map nix-mode-map
@ -13,8 +15,7 @@
"s" #'nix-shell "s" #'nix-shell
"b" #'nix-build "b" #'nix-build
"u" #'nix-unpack "u" #'nix-unpack
(:when (featurep! :completion helm) "o" #'+nix/lookup-option))
"o" #'helm-nixos-options)))
(use-package! nix-drv-mode (use-package! nix-drv-mode
:mode "\\.drv\\'") :mode "\\.drv\\'")