[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/nix-mode df4ba688a7 435/500: Merge branch 'nix-search-upda
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/nix-mode df4ba688a7 435/500: Merge branch 'nix-search-updates' |
Date: |
Sat, 29 Jan 2022 08:27:54 -0500 (EST) |
branch: elpa/nix-mode
commit df4ba688a7cf0f59cc0292f92bd5bf0af2398b4d
Merge: 75d2111891 37f641a913
Author: Matthew Bauer <mjbauer95@gmail.com>
Commit: Matthew Bauer <mjbauer95@gmail.com>
Merge branch 'nix-search-updates'
---
.dir-locals.el | 4 +++
flake.nix | 1 +
nix-search.el | 104 ++++++++++++++++++++++++++++++++++++++++++++++++---------
nix-shell.el | 13 ++++++++
nix.el | 26 ++++++++++++++-
5 files changed, 132 insertions(+), 16 deletions(-)
diff --git a/.dir-locals.el b/.dir-locals.el
new file mode 100644
index 0000000000..8f5e85227a
--- /dev/null
+++ b/.dir-locals.el
@@ -0,0 +1,4 @@
+;;; Directory Local Variables
+;;; For more information see (info "(emacs) Directory Variables")
+
+((emacs-lisp-mode . ((indent-tabs-mode . t))))
diff --git a/flake.nix b/flake.nix
index 3688d9fdff..592fd01a03 100644
--- a/flake.nix
+++ b/flake.nix
@@ -23,6 +23,7 @@
echo Run make run to get vanilla emacs with nix-mode loaded.
'';
doCheck = true;
+ meta.description = "An emacs major mode for editing Nix expressions";
};
});
diff --git a/nix-search.el b/nix-search.el
index ccd0f03645..38116bf678 100644
--- a/nix-search.el
+++ b/nix-search.el
@@ -17,36 +17,110 @@
(require 'json)
;;;###autoload
-(defun nix-search--search (search file &optional no-cache)
+(defun nix-search--search (search file &optional no-cache use-flakes)
(with-temp-buffer
- (call-process nix-executable nil (list t nil) nil
- "search" "--json" (if no-cache "--no-cache" "") "--file" file search)
+ (if use-flakes
+ (call-process nix-executable nil (list t nil) nil
+ "search" "--json" file (if (string= search "") "."
search))
+ (call-process nix-executable nil (list t nil) nil
+ "search" "--json" (if no-cache "--no-cache" "") "--file"
file search))
(goto-char (point-min))
(json-read)))
+(defface nix-search-pname
+ '((t :height 1.5
+ :weight bold))
+ "Face used for package names."
+ :group 'nix-mode)
+
+(defface nix-search-version
+ '((((class color) (background dark))
+ :foreground "light blue")
+ (((class color) (background light))
+ :foreground "blue"))
+ "Face used for package version."
+ :group 'nix-mode)
+
+(defface nix-search-description
+ '((t))
+ "Face used for package description."
+ :group 'nix-mode)
+
+(defvar nix-search-mode-menu (make-sparse-keymap "Nix")
+ "Menu for Nix Search mode.")
+
+(defvar nix-search-mode-map (make-sparse-keymap)
+ "Local keymap used for Nix Search mode.")
+
+(defvar-local nix-search--filter nil
+ "Search filter used for current buffer")
+(defvar-local nix-search---file nil
+ "File/flake used for current buffer")
+
+(defun nix-search--refresh ()
+ "Refresh Nix Search buffer"
+ (interactive)
+ (let ((results (nix-search--search nix-search--filter nix-search--file nil
use-flakes)))
+ (nix-search--display results (current-buffer) use-flakes
nix-search--filter nix-search--file)))
+
+(defun nix-search-create-keymap ()
+ "Create the keymap associated with the Nix Search mode.")
+
+(defun nix-search-create-menu ()
+ "Create the Nix Search menu as shown in the menu bar."
+ (let ((m '("Nix Search"
+ ["Refresh" nix-search--refresh t])))
+ (easy-menu-define nix-search-mode-menu nix-search-mode-map "Menu keymap
for Nix mode" m)))
+
+(nix-search-create-keymap)
+(nix-search-create-menu)
+
+(define-derived-mode nix-search-mode view-mode "Nix Search"
+ "Major mode for showing Nix search results.
+
+\\{nix-search-mode-map}"
+ :group 'nix-mode
+
+ (easy-menu-add nix-search-mode-menu)
+
+ (read-only-mode 1))
+
;;;###autoload
-(defun nix-search--display (results &optional display-buffer)
+(defun nix-search--display (results &optional display-buffer use-flakes search
file)
(unless display-buffer (setq display-buffer (generate-new-buffer "*nix
search*")))
(with-current-buffer display-buffer
- (dolist (entry results)
- (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))))))
+ (setq-local nix-search--filter search)
+ (setq-local nix-search--file file)
+ (unless (derived-mode-p 'nix-search-mode)
+ (nix-search-mode))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (insert
"-------------------------------------------------------------------------------\n")
+ (dolist (entry results)
+ (let ((pname (if use-flakes
+ (alist-get 'pname (cdr entry))
+ (alist-get 'pkgName (cdr entry))))
+ (version (alist-get 'version (cdr entry)))
+ (description (alist-get 'description (cdr entry))))
+ (put-text-property 0 (length pname) 'face 'nix-search-pname pname)
+ (put-text-property 0 (length version) 'face 'nix-search-version
version)
+ (put-text-property 0 (length description) 'face
'nix-search-description description)
+ (insert (format "* %s (%s)\n%s\n" pname version description))
+ (insert
"-------------------------------------------------------------------------------\n")
+ ))))
(display-buffer display-buffer))
;;;###autoload
-(defun nix-search (search &optional file)
+(defun nix-search (search &optional file display-buffer)
"Run nix search.
SEARCH a search term to use.
FILE a Nix expression to search in."
(interactive "snix-search> \n")
- (setq file (or file (nix-read-file)))
- (let ((results (nix-search--search search file)))
+ (setq use-flakes (nix-has-flakes))
+ (setq file (or file (if use-flakes (nix-read-flake) (nix-read-file))))
+ (let ((results (nix-search--search search file nil use-flakes)))
(when (called-interactively-p 'any)
- (nix-search--display results))
+ (nix-search--display results display-buffer use-flakes search file))
results))
(defun nix-search-read-attr (file)
diff --git a/nix-shell.el b/nix-shell.el
index e8b5c8d21f..dcab7e5df4 100644
--- a/nix-shell.el
+++ b/nix-shell.el
@@ -60,6 +60,12 @@ Should only be set in dir-locals.el file."
:type 'stringp
:group 'nix-shell)
+(defcustom nix-flake nil
+ "Nix flake to build expressions from.
+Should only be set in dir-locals.el file."
+ :type 'stringp
+ :group 'nix-shell)
+
(defcustom nix-attr nil
"Nix attribute path to use.
Should only be set in dir-locals.el file."
@@ -80,6 +86,13 @@ ATTR is the attribute to unpack."
"Get nix attribute from user."
(read-string "Nix attr: "))
+(defun nix-read-flake ()
+ "Get nix flake from user."
+ (cond
+ (nix-flake nix-flake)
+ ((and (nix-has-flakes) (file-exists-p "flake.nix")) ".")
+ (t (read-string "Nix flake: " "nixpkgs"))))
+
(defun nix-read-file ()
"Get nix file from user."
(cond
diff --git a/nix.el b/nix.el
index 0507ae7e7d..ede66d7790 100644
--- a/nix.el
+++ b/nix.el
@@ -78,6 +78,17 @@
(kill-buffer stdout)
result)))
+(defun nix-show-config ()
+ "Show nix config."
+ (let ((stdout (generate-new-buffer "nix config"))
+ result)
+ (call-process nix-executable nil (list stdout nil) nil "show-config"
"--json")
+ (setq result (with-current-buffer stdout
+ (goto-char (point-min))
+ (json-read)))
+ (kill-buffer stdout)
+ result))
+
(defvar nix-commands
'("add-to-store"
"build"
@@ -187,10 +198,23 @@ OPTIONS a list of options to accept."
((or (string= "-s" last-arg) (string= "--substituter" last-arg))
(pcomplete-here))))))
+(defun nix-is-24 ()
+ "Whether Nix is a version with Flakes support."
+ ;; earlier versions reported as 3, now it’s just nix-2.4
+ (let ((version (nix-version)))
+ (or (string-prefix-p "nix (Nix) 3" version)
+ (string-prefix-p "nix (Nix) 2.4" version))))
+
+(defun nix-has-flakes ()
+ "Whether Nix is a version with Flakes support."
+ ;; earlier versions reported as 3, now it’s just nix-2.4
+ (and (nix-is-24)
+ (seq-contains-p (alist-get 'value (alist-get 'experimental-features
(nix-show-config))) "flakes")))
+
;;;###autoload
(defun pcomplete/nix ()
"Completion for the nix command."
- (if (string-prefix-p "nix (Nix) 3" (nix-version))
+ (if (nix-is-24)
(let ((stdout (generate-new-buffer "nix-completions"))
(process-environment
(cons (format "NIX_GET_COMPLETIONS=%s" (1- (length
pcomplete-args)))
- [nongnu] elpa/nix-mode b4518ae3ee 374/500: fixed a typo, (continued)
- [nongnu] elpa/nix-mode b4518ae3ee 374/500: fixed a typo, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode d13d70b37d 377/500: Merge pull request #102 from yilinwei/master, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode a00b3f776d 384/500: Merge pull request #103 from yilinwei/patch-1, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode bb0b49e3ac 408/500: Merge pull request #112 from leungbk/makefile-load-path, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 7d09073976 424/500: Merge pull request #121 from znewman01/fixbuild, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 4941961c75 059/500: Get rid of extra hanging indent matches., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode c577957d66 347/500: Merge pull request #85 from NixOS/fix-84, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode cccd68768b 319/500: Install info page to the right location, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode e820157994 338/500: Merge pull request #82 from jabranham/comp-warns, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 7556c032dc 421/500: Use the located nixfmt binary for formatting., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode df4ba688a7 435/500: Merge branch 'nix-search-updates',
ELPA Syncer <=
- [nongnu] elpa/nix-mode 4528033194 018/500: Add "nix-mode-reload" function., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode f3b4215166 004/500: Update metadata, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 69c7c87caa 017/500: Sert comment-multi-line., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 83229f0d4c 041/500: Fix flycheck errors., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 76ad5882f0 046/500: format, ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 3ef4647aa2 052/500: Fixup lets/ins counting., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 0ad464e25a 058/500: Add ']' to match closing parens., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 376cbff828 054/500: More let fixes., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode 1a1ce340af 070/500: Fix indentation case when '{' at beginning., ELPA Syncer, 2022/01/29
- [nongnu] elpa/nix-mode dc705bb4df 057/500: Disable generic hanging indent., ELPA Syncer, 2022/01/29