{"id":21204385,"url":"https://github.com/acidvegas/pass","last_synced_at":"2025-10-24T10:53:26.058Z","repository":{"id":163712866,"uuid":"639171538","full_name":"acidvegas/pass","owner":"acidvegas","description":"posix password manager 🔒","archived":false,"fork":false,"pushed_at":"2024-01-20T23:00:19.000Z","size":20,"stargazers_count":5,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-05-21T00:59:07.671Z","etag":null,"topics":["dmenu","dmenu-scripts","gpg","password","password-generator","password-manager","password-store","passwords"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/acidvegas.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-05-10T23:13:12.000Z","updated_at":"2023-11-29T00:49:20.000Z","dependencies_parsed_at":"2023-12-24T05:52:05.401Z","dependency_job_id":"fa2eadff-0e10-43f2-b3b6-fff2ff01fa50","html_url":"https://github.com/acidvegas/pass","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidvegas%2Fpass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidvegas%2Fpass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidvegas%2Fpass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/acidvegas%2Fpass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/acidvegas","download_url":"https://codeload.github.com/acidvegas/pass/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225627481,"owners_count":17498994,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dmenu","dmenu-scripts","gpg","password","password-generator","password-manager","password-store","passwords"],"created_at":"2024-11-20T20:32:11.095Z","updated_at":"2025-10-24T10:53:21.011Z","avatar_url":"https://github.com/acidvegas.png","language":"Shell","funding_links":[],"categories":["\u003ca name=\"password-manager\"\u003e\u003c/a\u003ePassword managers"],"sub_categories":[],"readme":"# pass\n\u003e posix password manager\n\nA very simple password manager that keeps passwords inside gpg encrypted files inside a simple directory tree.\n\nSimilar to [password-store](https://git.zx2c4.com/password-store/about/), but written in POSIX compliant shell script instead of bash.\n\n## Requirements\n- [gpg](https://gnupg.org/)\n- [tree](https://oldmanprogrammer.net/source.php?dir=projects/tree)\n\n###### Optional Requirements\n- [nano](https://www.nano-editor.org/)                      *(required only if environment variable `$EDITOR` is not set)*\n- [pinentry-dmenu](https://github.com/ritze/pinentry-dmenu) *(required for menu)*\n- [xclip](https://github.com/astrand/xclip)                 *(required for menu to copy passwords)*\n- [xdotool](https://github.com/jordansissel/xdotool)        *(required for menu to type passwords)*\n- [oath-toolit](https://www.nongnu.org/oath-toolkit/)       *(required for 2FA)*\n- [gnupg2-scdaemon](https://linux.die.net/man/1/scdaemon)   *(required for smartcard support)*\n\n## Config\nEdit the source code to change these settings:\n\n| Setting    | Description                                                                                                      |\n| ---------- | ---------------------------------------------------------------------------------------------------------------- |\n| `GPG_ID`   | Default GPG key ID to use for encrypting/decrypting                                                              |\n| `GPG_OPTS` | Do not edit this unless you know what you are doing                                                              |\n| `METHOD`   | Method used for the menu *(\"copy\" will use xclip to copy passwords \u0026 \"type\" will use xdotool to type passwords)* |\n| `PASS_DIR` | Directory to store all password information                                                                      |\n\n## Usage\n| Command            | Description                                                                                                  |\n| ------------------ | ------------------------------------------------------------------------------------------------------------ |\n| `pass`             | Display a directory tree of stored passwords                                                                 |\n| `pass \u003cpath\u003e`      | Display password information for `\u003cpath\u003e` or a directory tree of stored passwords if `\u003cpath\u003e` is a directory |\n| `pass menu`        | Use pass in dmenu *(Selected line is copied to the clipboard or typed out depending on the `METHOD` used)*   |\n| `pass edit \u003cpath\u003e` | Display stored password information for `\u003cpath\u003e`                                                             |\n| `pass gen \u003clen\u003e`   | Generate a random password that is `\u003clen\u003e` characters long                                                   |\n| `pass otp \u003cpath\u003e`  | Return a 2-Factor-Authenticaion code for `\u003cpath\u003e` *(Last line of `\u003cpath\u003e` must be a valid otpauth:// URI)*   |\n\n###### Note\n`\u003cpath\u003e` is not a direct path per-say. If the password is stored in `$PASS_DIR/www/github.gpg` all you have to put is `www/github` for `\u003cpath\u003e`\n\nWhen using the menu, the clipboard is cleared after 3 seconds or passwords are typed after 3 seconds, depending on what `METHOD` you set in the config.\n\nFor setting up 2FA, you can download the QR code image \u0026 use [zbar](https://github.com/mchehab/zbar) to convert it to a string to get a valid URI.\n\n## Pinentry Setup\nTo keep everything in the command line, make sure you edit your `$HOME/.gnupg/gpg-agent.conf` to include `pinentry-program /usr/bin/pinentry-curses`\n\nIf you plan on using the menu features, [pinentry-dmenu](https://github.com/ritze/pinentry-dmenu) will allow you to enter your GPG key password inside of dmenu, but in order to do that you will need to create a wrapper for pinetry at `$HOME/.gnupg/pinentry-wrapper`:\n```\nif [ \"$PINENTRY_USER_DATA\" = \"dmenu\" ]; then\n    exec /usr/local/bin/pinentry-dmenu \"$@\"\nelse\n    exec /usr/bin/pinentry-curses \"$@\"\nfi\n```\nMake it executable with `chmod +x $HOME/.gnupg/pinentry-wrapper` and then edit your `$HOME/.gnupg/gpg-agent.conf` to include `pinentry-program $HOME/.gnupg/pinentry-wrapper`.\n\n## SmartCard Support\nUsing a [Smart Card](https://en.wikipedia.org/wiki/Smart_card) such as a [YubiKey](https://www.yubico.com/) with pass simply requires setting up your GPG key to recognize your card.\n\nFirst, you will need to install `scdaemon` \u0026 enable the service on your system in order to recognize your smartcards. After you set this up, you can check if your card is recognized with the `gpg --card-status` command.\n\nEdit your GPG key with `gpg --edit-key [Your-Key-ID]` \u0026 run the follow commands in the interactive session:\n```\nkey 1\nkeytocard\nsave\n```\n\n## Ideas \u0026 TODO\n- Hash file names for obsurity *(`pass rm \u003centry\u003e` \u0026 `pass mv \u003centry\u003e` since file names will be hashed)*\n- Better way than using a hard coded `GPG_ID` \u0026 maybe on the fly `METHOD` selection\n\n___\n\n###### Mirrors for this repository: [acid.vegas](https://git.acid.vegas/pass) • [SuperNETs](https://git.supernets.org/acidvegas/pass) • [GitHub](https://github.com/acidvegas/pass) • [GitLab](https://gitlab.com/acidvegas/pass) • [Codeberg](https://codeberg.org/acidvegas/pass)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facidvegas%2Fpass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Facidvegas%2Fpass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Facidvegas%2Fpass/lists"}