gopass-personal-docs
CLI tool for creating structured gopass entries with consistent YAML key-value pairs across 15 categories (13 personal, 1 infrastructure, 1 online accounts).
Overview
gopass-personal-docs solves the problem of inconsistent secret entry formats by providing interactive templates that generate standardized YAML structures, enabling dot-notation access to any field.
Location: ~/atelier/_projects/personal/dots-quantum/bin/.local/bin/gopass-personal-docs
Lines: ~4,014 (modular, 16 files)
Created: 2026-03-18
Installation
# Option 1: Symlink to PATH
ln -sf ~/atelier/_projects/personal/dots-quantum/bin/.local/bin/gopass-personal-docs ~/.local/bin/
# Option 2: Using stow
stow -d ~/atelier/_projects/personal/dots-quantum -t ~ bin
# Verify
gopass-personal-docs --help
Usage
# Interactive menu
gopass-personal-docs
# Jump to category
gopass-personal-docs documents
gopass-personal-docs health
gopass-personal-docs travel
gopass-personal-docs accounts
gopass-personal-docs infrastructure
Categories
| # | Category | Templates |
|---|---|---|
1 |
Documents |
SSN, passport, driver’s license, birth certificate |
2 |
Government |
DMV, IRS, SSA, TSA PreCheck/Global Entry |
3 |
Health |
Insurance (medical/dental/vision), providers, records (meds/vaccines/allergies/conditions) |
4 |
Finance |
Credit monitoring (3 bureaus), retirement accounts (401k/IRA) |
5 |
Insurance |
Auto, home/renters, life |
6 |
Legal |
Will, POA (financial/medical), living will, trust |
7 |
Emergency |
ICE contacts with medical preferences |
8 |
Automotive |
Vehicles (VIN, registration, financing, maintenance) |
9 |
Housing |
Rental (lease), owned/mortgage, utilities |
10 |
Travel |
Flights, hotels, car rentals, loyalty programs |
11 |
Subscriptions |
Streaming, software, news, gaming, fitness |
12 |
Recovery |
2FA backup codes, recovery keys, seed phrases, security questions |
13 |
Infrastructure |
Cisco ISE, firewall, switch, wireless, server, hypervisor, service, certs, WiFi |
14 |
Accounts |
Browser (Firefox/Chrome), email, developer (GitHub/GitLab), shopping, social, cloud (AWS/GCP/Cloudflare), generic |
Entry Structure
Every entry follows the gopass convention:
PRIMARY_SECRET_VALUE (1)
---
metadata: (2)
key: value
nested:
subkey: value
| 1 | First line = primary secret (copied with gopass show -c path) |
| 2 | YAML metadata accessible via dot notation |
Accessing Values
# Primary secret (first line)
gopass show v3/personal/documents/drivers-license
gopass show -c v3/personal/documents/drivers-license # Copy to clipboard
# Specific keys (dot notation)
gopass show v3/personal/documents/drivers-license holder.legal_name
gopass show v3/personal/documents/drivers-license dates.expires
gopass show v3/personal/documents/drivers-license holder.address.city
# Copy specific key to clipboard
gopass show -c v3/personal/documents/drivers-license dates.expires
Example Entries
Driver’s License
gopass show v3/personal/documents/drivers-license
D1234567
---
document_type: drivers_license
state: CA
class: C
real_id: true
holder:
legal_name: "Evan Junior Rosado"
date_of_birth: "1983-01-29"
address:
street: "123 Main St"
city: "Los Angeles"
state: "CA"
zip: "90001"
dates:
issued: "2024-01-15"
expires: "2029-01-29"
organ_donor: true
veteran: false
Flight Booking
gopass show v3/personal/travel/flight-2026-03-20 outbound.seat
gopass show v3/personal/travel/flight-2026-03-20 passenger.known_traveler
Health Insurance
gopass show v3/personal/health/insurance/medical-primary pharmacy.rx_bin
gopass show v3/personal/health/insurance/medical-primary contacts.member_services
Maintenance
Adding Custom Keys
Edit any entry to add keys not in the template:
gopass edit v3/personal/documents/drivers-license
Add your custom section:
...existing content...
custom:
my_field: "value"
another:
nested: "data"
Access it:
gopass show v3/personal/documents/drivers-license custom.my_field
Updating Entries
# Edit interactively
gopass edit v3/personal/documents/passport
# Update specific field (requires full re-entry)
# Better to use gopass edit for targeted changes
Listing Entries
# All personal entries
gopass ls v3/personal/
# Flat list
gopass ls --flat v3/personal/
# Specific category
gopass ls v3/personal/health/
Design Decisions
Why First Line = Primary Secret?
gopass convention. The -c flag copies the first line, which should be the most commonly needed sensitive value:
-
Password entries: the password
-
Document entries: the identifier (SSN, DL#, passport#)
-
Account entries: the password
-
Travel entries: confirmation code
Why Separate Entries for Document vs Account?
Different lifecycles:
-
Driver’s license expires every 5 years
-
DMV account password changes whenever
-
Keeping them separate avoids coupling
Why YAML Instead of Flat?
Dot notation enables precise extraction:
# Flat: hard to extract
gopass show entry | grep "Member ID"
# YAML: precise
gopass show entry member_id
Integration with Scripts
#!/usr/bin/env bash
# Example: Get insurance info for doctor visit
MEMBER_ID=$(gopass show v3/personal/health/insurance/medical-primary)
GROUP=$(gopass show v3/personal/health/insurance/medical-primary plan.group_number)
PHONE=$(gopass show v3/personal/health/insurance/medical-primary contacts.member_services)
echo "Member ID: $MEMBER_ID"
echo "Group: $GROUP"
echo "Phone: $PHONE"
Commits
| Commit | Description |
|---|---|
|
Initial version (1,656 lines, 6 categories) |
|
Fix variable shadowing in prompt functions |
|
Expand to 12 categories (2,971 lines) |
— |
v2.0.0: Modular refactor (14 sourced libs + entry point, 3,946 lines) |
— |
v2.2.0: Add Accounts category (browser, email, developer, shopping, social, cloud, generic). 16 files, ~4,014 lines. |
Related
-
dsec/dsourcefor domain-based secret loading