mirror of
https://github.com/SqrtMinusOne/password-store-completion.git
synced 2025-12-10 18:03:03 +03:00
feat: CI, readme
This commit is contained in:
parent
6975628ebb
commit
9d34d0ce23
3 changed files with 132 additions and 17 deletions
30
.github/workflows/melpazoid.yml
vendored
Normal file
30
.github/workflows/melpazoid.yml
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
# melpazoid <https://github.com/riscy/melpazoid> build checks.
|
||||||
|
|
||||||
|
# If your package is on GitHub, enable melpazoid's checks by copying this file
|
||||||
|
# to .github/workflows/melpazoid.yml and modifying RECIPE and EXIST_OK below.
|
||||||
|
|
||||||
|
name: melpazoid
|
||||||
|
on: [push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up Python 3.6
|
||||||
|
uses: actions/setup-python@v1
|
||||||
|
with: { python-version: 3.6 }
|
||||||
|
- name: Install
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
sudo apt-get install emacs && emacs --version
|
||||||
|
git clone https://github.com/riscy/melpazoid.git ~/melpazoid
|
||||||
|
pip install ~/melpazoid
|
||||||
|
- name: Run
|
||||||
|
env:
|
||||||
|
LOCAL_REPO: ${{ github.workspace }}
|
||||||
|
# RECIPE is your recipe as written for MELPA:
|
||||||
|
RECIPE: (ivy-pass :repo "SqrtMinusOne/ivy-pass" :fetcher github)
|
||||||
|
# set this to false (or remove it) if the package isn't on MELPA:
|
||||||
|
EXIST_OK: false
|
||||||
|
run: echo $GITHUB_REF && make -C ~/melpazoid
|
||||||
68
README.org
Normal file
68
README.org
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
#+TITLE: ivy-pass
|
||||||
|
|
||||||
|
A [[https://www.passwordstore.org/][pass]] frontend based on [[https://github.com/abo-abo/swiper#ivy][Ivy]], made primarily to use with [[https://github.com/ch11ng/exwm][EXWM]] and [[https://github.com/tumashu/ivy-posframe][ivy-posframe]].
|
||||||
|
|
||||||
|
Also take a look at Nicolas Petton's [[https://github.com/NicolasPetton/pass][pass]], =ivy-pass= is designed as complementary to the Nicolas' package.
|
||||||
|
|
||||||
|
This package is made with Ivy because I need some fine-tuning like actions and turning off the sort in some completions, and Ivy happens to be the competing system I'm using now.
|
||||||
|
|
||||||
|
* Installation
|
||||||
|
As the package isn’t yet available anywhere but in this repository, you can clone the repository, add it to the load-path and require the package. My preferred way is =use-package= with =straight=:
|
||||||
|
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(use-package ivy-pass
|
||||||
|
:straight (:host github :repo "SqrtMinusOne/ivy-pass")
|
||||||
|
:after (exwm))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
This package types stuff with =xdotool=, so you need to have that available in your =$PATH=.
|
||||||
|
* Usage
|
||||||
|
Emacs' built-in [[https://www.gnu.org/software/emacs/manual/html_node/auth/The-Unix-password-store.html][password store]] integration has to be set up.
|
||||||
|
|
||||||
|
The only command is =M-x ivy-pass=, which invokes Ivy to select an entry from the pass database. Available commands in the selection buffer:
|
||||||
|
- =M-a=. Perform autotype
|
||||||
|
- =M-p=. Type password
|
||||||
|
- =M-u=. Type username
|
||||||
|
- =M-U=. Type url
|
||||||
|
- =M-f=. Select a field to type
|
||||||
|
|
||||||
|
* Customization
|
||||||
|
There are a few parameters that control delays:
|
||||||
|
- =ivy-pass-initial-wait= controls the initial delay before starting to type a sequence (in milliseconds)
|
||||||
|
- =ivy-pass-delay= controls the delay between typing characters (in milliseconds)
|
||||||
|
|
||||||
|
There is also =ivy-pass-sequences= that determines the sequence of actions =ivy-pass= performs.
|
||||||
|
|
||||||
|
It is an alist with the following required keys (corresponding to the basic actions):
|
||||||
|
- =autotype=
|
||||||
|
- =password=
|
||||||
|
- =username=
|
||||||
|
- =url=
|
||||||
|
|
||||||
|
The values are lists of the following elements:
|
||||||
|
- =wait=. Wait for =ivy-pass-initial-wait= milliseconds
|
||||||
|
- =(wait <milliseconds>)=. Wait for =<milliseconds>=.
|
||||||
|
- =(key <key>)=. Type =<key>=.
|
||||||
|
- =(field <field>)=. Type =<field>= of entry.
|
||||||
|
|
||||||
|
For example, the starting values:
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
'((autotype . (wait
|
||||||
|
(field . "username")
|
||||||
|
(key . "Tab")
|
||||||
|
(field . secret)
|
||||||
|
(key . "Return")))
|
||||||
|
(password . (wait (field . secret)))
|
||||||
|
(username . (wait (field . "username")))
|
||||||
|
(url . (wait (field . "url"))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
In addition to the global override, sequences can be overriden per-entry with a field called =sequence-<name>=, where =<name>= is a key of =ivy-pass-sequences=.
|
||||||
|
|
||||||
|
For example, here is an override to press =Tab= twice:
|
||||||
|
#+begin_example
|
||||||
|
<pass>
|
||||||
|
username: thexcloud@gmail.com
|
||||||
|
url: <url>
|
||||||
|
sequence-autotype: (wait (field . "username") (key . "Tab") (key . "Tab") (field . secret) (key . "Return"))
|
||||||
|
#+end_example
|
||||||
51
ivy-pass.el
51
ivy-pass.el
|
|
@ -25,9 +25,18 @@
|
||||||
|
|
||||||
;;; Commentary:
|
;;; Commentary:
|
||||||
|
|
||||||
;; A pass frontend based on Ivy, made primarily to use with EXWM.
|
;; A pass frontend based on Ivy, made primarily to use with EXWM and
|
||||||
|
;; ivy-posframe.
|
||||||
;;
|
;;
|
||||||
;; The only command is `ivy-pass'.
|
;; This package types stuff with xdotool, so you need to have that
|
||||||
|
;; available in your $PATH.
|
||||||
|
;;
|
||||||
|
;; The only command is `ivy-pass', which presents an Ivy buffer to
|
||||||
|
;; select some entry from the pass database. Take a look at its
|
||||||
|
;; docstring for mode detail.
|
||||||
|
;;
|
||||||
|
;; Also take a look at the package README at
|
||||||
|
;; <https://github.com/SqrtMinusOne/ivy-pass>.
|
||||||
|
|
||||||
;;; Code:
|
;;; Code:
|
||||||
(require 'ivy)
|
(require 'ivy)
|
||||||
|
|
@ -38,7 +47,7 @@
|
||||||
:group 'password-store)
|
:group 'password-store)
|
||||||
|
|
||||||
(defcustom ivy-pass-initial-wait 250
|
(defcustom ivy-pass-initial-wait 250
|
||||||
"How much miliseconds to wait before typing characters."
|
"How much milliseconds to wait before typing characters."
|
||||||
:type 'integer
|
:type 'integer
|
||||||
:group 'ivy-pass)
|
:group 'ivy-pass)
|
||||||
|
|
||||||
|
|
@ -55,12 +64,20 @@
|
||||||
(key . "Tab")
|
(key . "Tab")
|
||||||
(field . secret)
|
(field . secret)
|
||||||
(key . "Return")))
|
(key . "Return")))
|
||||||
(password . ((field . secret)))
|
(password . (wait (field . secret)))
|
||||||
(username . ((field . "username")))
|
(username . (wait (field . "username")))
|
||||||
(url . ((field . "url"))))
|
(url . (wait (field . "url"))))
|
||||||
"Sequences to execute by `ivy-pass'.
|
"Sequences to execute by `ivy-pass'.
|
||||||
|
|
||||||
Take a look at `ivy-pass--get-commands' for available fields."
|
It is an alist with the following required keys (corresponding to the
|
||||||
|
basic actions):
|
||||||
|
- autotype
|
||||||
|
- password
|
||||||
|
- username
|
||||||
|
- url
|
||||||
|
|
||||||
|
Values are lists of symbols that determine action. Take a look at
|
||||||
|
`ivy-pass--get-commands' for available options."
|
||||||
:group 'ivy-pass
|
:group 'ivy-pass
|
||||||
:options '(autotype password username url)
|
:options '(autotype password username url)
|
||||||
:type '(alist :key-type (symbol :tag "Sequence name")
|
:type '(alist :key-type (symbol :tag "Sequence name")
|
||||||
|
|
@ -69,9 +86,9 @@ Take a look at `ivy-pass--get-commands' for available fields."
|
||||||
(choice
|
(choice
|
||||||
(const :tag "Wait for `ivy-pass-initial-wait'" wait)
|
(const :tag "Wait for `ivy-pass-initial-wait'" wait)
|
||||||
(cons
|
(cons
|
||||||
:tag "Wait for miliseconds"
|
:tag "Wait for milliseconds"
|
||||||
(const :tag "Wait for miliseconds" wait)
|
(const :tag "Wait for milliseconds" wait)
|
||||||
(integer :tag "Number of miliseconds to wait"))
|
(integer :tag "Number of milliseconds to wait"))
|
||||||
(cons
|
(cons
|
||||||
:tag "Enter a field"
|
:tag "Enter a field"
|
||||||
(const :tag "Enter a field" field)
|
(const :tag "Enter a field" field)
|
||||||
|
|
@ -122,11 +139,11 @@ Call CALLBACK when the last command is executed."
|
||||||
"| xdotool type --clearmodifiers --file - --delay "
|
"| xdotool type --clearmodifiers --file - --delay "
|
||||||
(number-to-string ivy-pass-delay)))
|
(number-to-string ivy-pass-delay)))
|
||||||
|
|
||||||
(defun ivy-pass--get-wait-command (&optional miliseconds)
|
(defun ivy-pass--get-wait-command (&optional milliseconds)
|
||||||
"Return a command to sleep for MILISECONDS.
|
"Return a command to sleep for MILLISECONDS.
|
||||||
|
|
||||||
If MILISECONDS is nil, default to `ivy-pass-initial-wait'."
|
If MILLISECONDS is nil, default to `ivy-pass-initial-wait'."
|
||||||
(format "sleep %f" (/ (float (or miliseconds ivy-pass-initial-wait)) 1000)))
|
(format "sleep %f" (/ (float (or milliseconds ivy-pass-initial-wait)) 1000)))
|
||||||
|
|
||||||
(defun ivy-pass--get-key-command (key)
|
(defun ivy-pass--get-key-command (key)
|
||||||
"Get a command that presses KEY."
|
"Get a command that presses KEY."
|
||||||
|
|
@ -143,9 +160,9 @@ ENTRY is an alist, FIELD is a symbol or string that can be a key of alist"
|
||||||
"Get a list of commands to execute for ENTRY.
|
"Get a list of commands to execute for ENTRY.
|
||||||
|
|
||||||
SEQUENCE is a list of the following elements:
|
SEQUENCE is a list of the following elements:
|
||||||
- `wait'. Wait for `ivy-pass-initial-wait' miliseconds.
|
- `wait'. Wait for `ivy-pass-initial-wait' milliseconds.
|
||||||
- `(wait <miliseconds>)'. Wait for <miliseconds>.
|
- `(wait <milliseconds>)'. Wait for <milliseconds>.
|
||||||
- `(key <key>)'. Type <key>
|
- `(key <key>)'. Type <key>.
|
||||||
- `(field <field>)'. Type <field> of entry."
|
- `(field <field>)'. Type <field> of entry."
|
||||||
(seq-filter
|
(seq-filter
|
||||||
(lambda (command) (not (seq-empty-p command)))
|
(lambda (command) (not (seq-empty-p command)))
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue