balrog

A partial drop-in replacement for pass and pass-otp written in POSIX shell.
git clone https://git.stjo.hn/balrog
Log | Files | Refs | README | LICENSE

README (1606B)


      1 # Balrog
      2 
      3 A partial drop-in replacement for [pass](https://www.passwordstore.org/) and
      4 [pass-otp](https://github.com/tadfisher/pass-otp) written in POSIX shell.
      5 
      6 ## What is this?
      7 
      8 There is no particularly good reason to want to replace pass and pass-otp,
      9 which are excellent utilities, but I fancied the idea of writing a simple
     10 drop-in replacement for them written in POSIX-compliant shell. There were a
     11 few hiccups along the way, but it largely works for my own purposes. Users
     12 should be warned against using this in a production context, but I use it
     13 happily and wanted to share it for educational or reference purposes.
     14 
     15 Why is it called Balrog? Because "you shall not pass." Haaaaah.
     16 
     17 ## Dependencies
     18 
     19 * A POSIX shell. The `balrog` script is strictly POSIX compliant to
     20   ensure maximum portability.
     21 * [xclip](https://github.com/astrand/xclip) on X11 or wl-copy on Wayland.
     22   Copies the password to the clipboard.
     23 * [OATH Toolkit](https://www.nongnu.org/oath-toolkit/) (optional). Used for
     24   handling one-time passwords.
     25 
     26 ## Features Implemented
     27 
     28 Balrog is entirely compatible with pass and pass-otp, but only implements a
     29 subset of their features. The following command-line options are implemented:
     30 
     31 * -c|--clip
     32   Copy to clipboard.
     33 * -i|--in-place
     34   When generating a password, replace only the first line of the file instead
     35   of writing over it.
     36 * -n|--no-symbols
     37   Generate passwords with only alphanumeric characters.
     38 
     39 The following actions are implemented:
     40 
     41 * edit
     42 * generate
     43 * otp
     44 * show
     45 
     46 Use the exact same way you currently use pass. See the documentation of pass
     47 and pass-otp for details.