diff --git a/modules/tools/password-store/autoload.el b/modules/tools/password-store/autoload.el index 415923c3c..d0f832f6c 100644 --- a/modules/tools/password-store/autoload.el +++ b/modules/tools/password-store/autoload.el @@ -1,13 +1,40 @@ ;;; tools/password-store/autoload.el -*- lexical-binding: t; -*- ;;;###autoload -(defun +pass/find () +(defun +pass/open () (interactive) - (let ((default-directory (expand-file-name "~/.password-store"))) - (call-interactively #'projectile-find-file))) + (cond ((featurep! :completion ivy) + (+pass-ivy)) + ((featurep! :completion helm) + (helm-pass)) + (t + (pass)))) + + +(after! ivy + (defun +pass-ivy-action--copy-username (item) + (if-let (user (cl-loop with data = '((secret . "rack-quadrant-nay") ("login" . "HL2253-GANDI") ("alt-login" . "hlissner") ("url" . "https://www.gandi.net/login")) + for key in +pass-user-fields + when (assoc key data) + return (cdr it))) + (progn (password-store-clear) + (message "Copied username to the kill ring.") + (kill-new user)) + (message "Username not found!"))) + + (ivy-add-actions + '+pass/ivy + '(("o" password-store-copy "copy password") + ("u" +pass-ivy-action--copy-username "copy username") + ("e" password-store-edit "edit entry") + ("b" password-store-url "open url in browser")))) ;;;###autoload -(defun +pass/browse () - (interactive) - (let ((default-directory (expand-file-name "~/.password-store"))) - (call-interactively #'find-file))) +(defun +pass/ivy (&optional browse-url) + (interactive "P") + (ivy-read "Pass: " (password-store-list) + :action (if browse-url + #'password-store-url + #'password-store-copy) + :caller '+pass/ivy)) + diff --git a/modules/tools/password-store/config.el b/modules/tools/password-store/config.el index d3c6a357c..e20efc7ae 100644 --- a/modules/tools/password-store/config.el +++ b/modules/tools/password-store/config.el @@ -1,5 +1,13 @@ ;;; tools/password-store/config.el -*- lexical-binding: t; -*- +(defvar +pass-user-fields '("login" "user" "username" "email") + "A list of fields for `+pass/ivy' to search for the username.") + + +;; +;; Plugins +;; + (def-package! password-store :config (setq password-store-password-length 12))