|
|
- ;;; nix-search.el -- run nix commands in Emacs -*- lexical-binding: t -*-
-
- ;; Author: Matthew Bauer <mjbauer95@gmail.com>
- ;; Homepage: https://github.com/NixOS/nix-mode
- ;; Keywords: nix
- ;; Version: 1.4.0
-
- ;; This file is NOT part of GNU Emacs.
-
- ;;; Commentary:
-
- ;;; Code:
-
- (require 'nix)
- (require 'nix-instantiate)
- (require 'nix-shell)
- (require 'json)
-
- ;;;###autoload
- (defun nix-search (&optional search file)
- "Run nix search.
- SEARCH a search term to use.
- FILE a Nix expression to search in."
- (interactive)
- (unless search (setq search ""))
- (unless file (nix-read-file))
-
- (let ((stdout (generate-new-buffer "nix search"))
- result)
- (call-process nix-executable nil (list stdout nil) nil
- "search" "--json" "-f" file search)
- (with-current-buffer stdout
- (when (eq (buffer-size) 0)
- (error "Error: nix search %s failed to produce any output" search))
- (goto-char (point-min))
- (setq result (json-read)))
- (kill-buffer stdout)
- (when (called-interactively-p 'any)
- (let ((display (generate-new-buffer "*nix search*")))
- (with-current-buffer display
- (dolist (entry result)
- (widget-insert
- (format "attr: %s\nname: %s\nversion: %s\ndescription: %s\n\n"
- (car entry)
- (alist-get 'pkgName (cdr entry))
- (alist-get 'version (cdr entry))
- (alist-get 'description (cdr entry)))))
- )
- (display-buffer display 'display-buffer-pop-up-window)))
- (kill-buffer stdout)
- result))
-
- (defun nix-search-read-attr (file)
- "Read from a list of attributes.
- FILE the nix file to look in."
- (let ((collection
- (sort (mapcar (lambda (x) (symbol-name (car x)))
- (nix-search "" file))
- 'string<))
- (read (cond ((fboundp 'ivy-read) 'ivy-read)
- (t 'completing-read))))
- (funcall read "Attribute: " collection)))
-
- (provide 'nix-search)
- ;;; nix-search.el ends here
|