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/pkgs/passage/passage.el | 65 +++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 users/wpcarro/emacs/pkgs/passage/passage.el (limited to 'users/wpcarro/emacs/pkgs/passage/passage.el') diff --git a/users/wpcarro/emacs/pkgs/passage/passage.el b/users/wpcarro/emacs/pkgs/passage/passage.el new file mode 100644 index 0000000000..4a43920e0b --- /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