From 133a38e8f6af6f90d536383fc8ea5d6283e8c246 Mon Sep 17 00:00:00 2001 From: William Carroll Date: Sun, 11 Dec 2022 13:33:29 -0800 Subject: feat(wpcarro/emacs): Support passage.el Intentionally-feature-incomplete Elisp integration with `passage`. Change-Id: Ia46ddb93ac7df1f91b9d9221ac8fbe5f11010f97 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7559 Autosubmit: wpcarro Tested-by: BuildkiteCI Reviewed-by: wpcarro --- users/wpcarro/emacs/.emacs.d/wpc/keybindings.el | 3 +- users/wpcarro/emacs/.emacs.d/wpc/wpc-ui.el | 2 - users/wpcarro/emacs/default.nix | 2 +- users/wpcarro/emacs/pkgs/passage/README.md | 12 +++++ users/wpcarro/emacs/pkgs/passage/default.nix | 12 +++++ users/wpcarro/emacs/pkgs/passage/passage.el | 65 +++++++++++++++++++++++++ 6 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 users/wpcarro/emacs/pkgs/passage/README.md create mode 100644 users/wpcarro/emacs/pkgs/passage/default.nix create mode 100644 users/wpcarro/emacs/pkgs/passage/passage.el (limited to 'users/wpcarro/emacs') diff --git a/users/wpcarro/emacs/.emacs.d/wpc/keybindings.el b/users/wpcarro/emacs/.emacs.d/wpc/keybindings.el index e9d4bdd5e4de..1c853ea6cd3d 100644 --- a/users/wpcarro/emacs/.emacs.d/wpc/keybindings.el +++ b/users/wpcarro/emacs/.emacs.d/wpc/keybindings.el @@ -47,6 +47,7 @@ (require 'key-chord) (require 'edebug) (require 'avy) +(require 'passage) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Helper Functions @@ -207,7 +208,7 @@ (keybindings-exwm "" #'window-manager-next-workspace) (keybindings-exwm "" #'window-manager-prev-workspace) (keybindings-exwm "C-S-f" #'window-manager-toggle-previous) -(keybindings-exwm "C-M-\\" #'ivy-pass) +(keybindings-exwm "C-M-\\" #'passage-select) (defun keybindings-copy-emoji () "Select an emoji from the completing-read menu." diff --git a/users/wpcarro/emacs/.emacs.d/wpc/wpc-ui.el b/users/wpcarro/emacs/.emacs.d/wpc/wpc-ui.el index fced698b433a..7a5605cdcad5 100644 --- a/users/wpcarro/emacs/.emacs.d/wpc/wpc-ui.el +++ b/users/wpcarro/emacs/.emacs.d/wpc/wpc-ui.el @@ -109,8 +109,6 @@ (unless constants-ci? (prescient-persist-mode 1))) -(use-package ivy-pass) - ;; all-the-icons (use-package all-the-icons :config diff --git a/users/wpcarro/emacs/default.nix b/users/wpcarro/emacs/default.nix index 3af7d2648cc8..eb6fd8e5a0f3 100644 --- a/users/wpcarro/emacs/default.nix +++ b/users/wpcarro/emacs/default.nix @@ -49,6 +49,7 @@ let list macros maybe + passage set string struct @@ -107,7 +108,6 @@ let helpful ivy ivy-clipmenu - ivy-pass ivy-prescient key-chord lispyville diff --git a/users/wpcarro/emacs/pkgs/passage/README.md b/users/wpcarro/emacs/pkgs/passage/README.md new file mode 100644 index 000000000000..51f7bd6efda4 --- /dev/null +++ b/users/wpcarro/emacs/pkgs/passage/README.md @@ -0,0 +1,12 @@ +# passage.el + +Emacs support for `passage`. + +## Alternative Packages + +If you're looking for more feature-complete, configurable alternatives, +check-out the following packages: + +- `ivy-pass.el` +- `password-store.el` +- `pass.el` diff --git a/users/wpcarro/emacs/pkgs/passage/default.nix b/users/wpcarro/emacs/pkgs/passage/default.nix new file mode 100644 index 000000000000..ac87f193b4e2 --- /dev/null +++ b/users/wpcarro/emacs/pkgs/passage/default.nix @@ -0,0 +1,12 @@ +{ pkgs, depot, ... }: + +pkgs.callPackage + ({ emacsPackages }: + emacsPackages.trivialBuild { + pname = "passage"; + version = "1.0.0"; + src = ./passage.el; + packageRequires = (with emacsPackages; [ dash f s ]); + } + ) +{ } diff --git a/users/wpcarro/emacs/pkgs/passage/passage.el b/users/wpcarro/emacs/pkgs/passage/passage.el new file mode 100644 index 000000000000..4a43920e0bed --- /dev/null +++ b/users/wpcarro/emacs/pkgs/passage/passage.el @@ -0,0 +1,65 @@ +;;; passage.el --- Emacs passage support -*- lexical-binding: t; -*- + +;; Copyright (C) 2022-2023 William Carroll + +;; Author: William Carroll +;; Version: 1.0.0 + +;; This file is not part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; This package provides functions for working with passage. + +;;; Code: + +(require 'dash) +(require 'f) +(require 's) + +(defgroup passage nil + "Customization options for `passage'." + :prefix "passage-" + :group 'vterm) + +(defcustom passage-store + "~/.passage/store" + "Path to the passage store directory." + :type 'string + :group 'passage) + +(defcustom passage-executable + (or (executable-find "passage") + "/nix/store/jgffkfdiiwiqa4zqpxn3691mx9xc6axa-passage-unstable-2022-05-01/bin/passage") + "Path to passage executable." + :type 'string + :group 'passage) + +(defun passage-select () + "Select an entry and copy its password to the kill ring." + (interactive) + (let ((key (completing-read "Copy password of entry: " + (-map (lambda (x) + (f-no-ext (f-relative x passage-store))) + (f-files passage-store nil t))))) + (kill-new + (s-trim-right + (shell-command-to-string + (format "%s show %s | head -1" passage-executable key)))) + (message "[passage.el] Copied \"%s\"!" key))) + +(provide 'passage) +;;; passage.el ends here -- cgit 1.4.1