{"id":13479143,"url":"https://github.com/drduh/Purse","last_synced_at":"2025-03-27T09:30:49.860Z","repository":{"id":44329124,"uuid":"135850078","full_name":"drduh/Purse","owner":"drduh","description":"GnuPG asymmetric password manager","archived":false,"fork":false,"pushed_at":"2024-07-05T01:19:10.000Z","size":55,"stargazers_count":581,"open_issues_count":0,"forks_count":45,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-03-19T22:49:20.647Z","etag":null,"topics":["bash","bash-script","encryption","file-encryption","gnupg","gpg","password","password-manager","security","unix"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drduh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["drduh"]}},"created_at":"2018-06-02T20:28:59.000Z","updated_at":"2025-03-10T15:33:09.000Z","dependencies_parsed_at":"2024-03-26T22:30:52.280Z","dependency_job_id":"51bf3cec-87bd-4315-b8b0-61391b88dc4c","html_url":"https://github.com/drduh/Purse","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drduh%2FPurse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drduh%2FPurse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drduh%2FPurse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drduh%2FPurse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drduh","download_url":"https://codeload.github.com/drduh/Purse/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245817344,"owners_count":20677272,"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":["bash","bash-script","encryption","file-encryption","gnupg","gpg","password","password-manager","security","unix"],"created_at":"2024-07-31T16:02:10.300Z","updated_at":"2025-03-27T09:30:49.588Z","avatar_url":"https://github.com/drduh.png","language":"Shell","funding_links":["https://github.com/sponsors/drduh"],"categories":["Shell","Tools","bash"],"sub_categories":["Third-party Tools"],"readme":"Purse is a fork of [drduh/pwd.sh](https://github.com/drduh/pwd.sh).\n\nBoth programs are Bash shell scripts which use [GnuPG](https://www.gnupg.org/) to manage passwords and other secrets in encrypted text files. Purse is based on asymmetric (public-key) authentication, while pwd.sh is based on symmetric (password-based) authentication.\n\nWhile both scripts use a trusted crypto implementation (GnuPG) and safely handle passwords (never saving plaintext to disk, only using shell built-ins), Purse eliminates the need to remember a main passphrase - just plug in a YubiKey, enter the PIN, then touch it to decrypt a password to clipboard.\n\n# Install\n\nThis script requires a GnuPG identity - see [drduh/YubiKey-Guide](https://github.com/drduh/YubiKey-Guide) to set one up.\n\nFor the latest version, clone the repository or download the script directly:\n\n```console\ngit clone https://github.com/drduh/Purse\n\nwget https://github.com/drduh/Purse/blob/master/purse.sh\n```\n\nVersioned [Releases](https://github.com/drduh/Purse/releases) are also available.\n\n# Use\n\nRun the script interactively using `./purse.sh` or symlink to a directory in `PATH`:\n\n- `w` to write a password\n- `r` to read a password\n- `l` to list passwords\n- `b` to create an archive for backup\n- `h` to print the help text\n\nOptions can also be passed on the command line.\n\nCreate a 20-character password for `userName`:\n\n```console\n./purse.sh w userName 20\n```\n\nRead password for `userName`:\n\n```console\n./purse.sh r userName\n```\n\nPasswords are stored with an epoch timestamp for revision control. The most recent version is copied to clipboard on read. To list all passwords or read a specific version of a password:\n\n```console\n./purse.sh l\n\n./purse.sh r userName@1574723600\n```\n\nCreate an archive for backup:\n\n```console\n./purse.sh b\n```\n\nRestore an archive from backup:\n\n```console\ntar xvf purse*tar\n```\n\n# Configure\n\nSeveral customizable options and features are also available, and can be configured with environment variables, for example in the [shell rc](https://github.com/drduh/config/blob/master/zshrc) file:\n\nVariable | Description | Default | Available options\n-|-|-|-\n`PURSE_CLIP` | clipboard to use | `xclip` | `pbcopy` on macOS\n`PURSE_CLIP_ARGS` | arguments to pass to clipboard command | unset (disabled) | `-i -selection clipboard` to use primary (control-v) clipboard with xclip\n`PURSE_TIME` | seconds to clear password from clipboard/screen | `10` | any valid integer\n`PURSE_LEN` | default generated password length | `14` | any valid integer\n`PURSE_COPY` | copy password to clipboard before write | unset (disabled) | `1` or `true` to enable\n`PURSE_DAILY` | create daily backup archive on write | unset (disabled) | `1` or `true` to enable\n`PURSE_ENCIX` | encrypt index for additional privacy; 2 YubiKey touches will be required for separate decryption operations | unset (disabled) | `1` or `true` to enable\n`PURSE_COMMENT` | **unencrypted** comment to include in index and safe files | unset | any valid string\n`PURSE_CHARS` | character set for passwords | `[:alnum:]!?@#$%^\u0026*();:+=` | any valid characters\n`PURSE_DEST` | password output destination, will set to `screen` without clipboard | `clipboard` | `clipboard` or `screen`\n`PURSE_ECHO` | character used to echo password input | `*` | any valid character\n`PURSE_SAFE` | safe directory name | `safe` | any valid string\n`PURSE_INDEX` | index file name | `purse.index` | any valid string\n`PURSE_BACKUP` | backup archive file name | `purse.$hostname.$today.tar` | any valid string\n\n**Note** For additional privacy, the recipient key ID is **not** included in metadata (GnuPG `throw-keyids` option).\n\n\n\nSee [config/gpg.conf](https://github.com/drduh/config/blob/master/gpg.conf) for additional GnuPG options.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrduh%2FPurse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrduh%2FPurse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrduh%2FPurse/lists"}