133a38e8f6
Intentionally-feature-incomplete Elisp integration with `passage`. Change-Id: Ia46ddb93ac7df1f91b9d9221ac8fbe5f11010f97 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7559 Autosubmit: wpcarro <wpcarro@gmail.com> Tested-by: BuildkiteCI Reviewed-by: wpcarro <wpcarro@gmail.com>
65 lines
2 KiB
EmacsLisp
65 lines
2 KiB
EmacsLisp
;;; passage.el --- Emacs passage support -*- lexical-binding: t; -*-
|
|
|
|
;; Copyright (C) 2022-2023 William Carroll <wpcarro@gmail.com>
|
|
|
|
;; Author: William Carroll <wpcarro@gmail.com>
|
|
;; 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 <http://www.gnu.org/licenses/>.
|
|
|
|
;;; 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
|