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

478ab2a

Initial version (1,656 lines, 6 categories)

b3ef4ce

Fix variable shadowing in prompt functions

51f1730

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.

  • dsec / dsource for domain-based secret loading