about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2018-06-06T07·46+0200
committerVincent Ambo <mail@tazj.in>2018-06-06T07·46+0200
commit66e86d2546c8abdc22cc7333e85e50eef3408c3d (patch)
tree8364fee63c818f159ddb117e15eb1e8b13f73ddf
parentbe8d47257f1fa60e63e4ea6e76502011067a515d (diff)
feat(functions): Add custom ivy-password-store function
The default `ivy-pass` function shells out to `pass` in such a way
that using pinentry with emacs doesn't work, causing EXWM to freeze
until `C-g` is hit, after which the password entry buffer pops up.

That was very inconvenient - however, the new auth-source integration
with pass works correctly and this commit introduces a new function
and bindings for using the same functionality as before but doing the
actual password-reading via auth-source.
-rw-r--r--init/functions.el20
-rw-r--r--init/nixos.el5
2 files changed, 24 insertions, 1 deletions
diff --git a/init/functions.el b/init/functions.el
index 07411396b27d..5ed9a06fd6fb 100644
--- a/init/functions.el
+++ b/init/functions.el
@@ -170,4 +170,24 @@ Including indent-buffer, which should not be called automatically on save."
                            (when (string= event "finished\n")
                              (message "%s process finished." process))))))))
 
+(defun ivy-password-store (&optional password-store-dir)
+  "Custom version of password-store integration with ivy that
+  actually uses the GPG agent correctly."
+
+  (interactive)
+  (ivy-read "Copy password of entry: "
+            (password-store-list (or password-store-dir (password-store-dir)))
+            :require-match t
+            :keymap ivy-pass-map
+            :action (lambda (entry)
+                      (let ((password (auth-source-pass-get 'secret entry)))
+                        (password-store-clear)
+                        (kill-new password)
+                        (setq password-store-kill-ring-pointer kill-ring-yank-pointer)
+                        (message "Copied %s to the kill ring. Will clear in %s seconds."
+                                 entry (password-store-timeout))
+                        (setq password-store-timeout-timer
+                              (run-at-time (password-store-timeout)
+                                           nil 'password-store-clear))))))
+
 (provide 'functions)
diff --git a/init/nixos.el b/init/nixos.el
index a75695d0c8e3..431ba705c3bc 100644
--- a/init/nixos.el
+++ b/init/nixos.el
@@ -65,7 +65,10 @@
 
       ;; Launch applications with completion (dmenu style!)
       (exwm-input-set-key (kbd "s-d") #'ivy-run-external-command)
-      (exwm-input-set-key (kbd "s-p") #'ivy-pass)
+      (exwm-input-set-key (kbd "s-p") #'ivy-password-store)
+      (exwm-input-set-key (kbd "C-s-p") '(lambda ()
+                                           (interactive)
+                                           (ivy-password-store "~/.aprila-secrets")))
 
       ;; Toggle between line-mode / char-mode
       (exwm-input-set-key (kbd "C-c C-t C-t") #'exwm-input-toggle-keyboard)