gopass Migration Plan

Migration Status: COMPLETE (2026-02-09)

  • 52 entries migrated to v2 store

  • Original store preserved (no data loss)

  • v2 store accessible via gopass ls v2/

Target Structure (v2)

v2/
├── OPUS/                                   # Work credentials
│   └── chla/                               # CHLA (chla.usc.edu)
│       ├── ad/
│       │   ├── erosado
│       │   └── chlxsbg
│       └── network/
│           └── cisco-tacacs
│
├── DOMUS/                                  # Personal infrastructure
│   ├── ad/                                 # Active Directory
│   │   ├── administrator
│   │   ├── evanusmodestus
│   │   ├── gabriel
│   │   └── dsrm
│   │
│   ├── network/                            # Network devices
│   │   ├── pfsense-admin
│   │   ├── switch-admin
│   │   ├── wlc-admin
│   │   └── 9800-wlc-01
│   │
│   ├── servers/                            # Server credentials
│   │   ├── ise-admin
│   │   ├── keycloak-admin
│   │   ├── vault-01
│   │   ├── gitea
│   │   └── ipsk-mgr-01
│   │
│   ├── storage/                            # Storage systems
│   │   ├── synology
│   │   ├── synology-api
│   │   └── synology-quickconnect
│   │
│   ├── wifi/                               # Wireless networks
│   │   ├── domus-secure
│   │   └── domus-iot
│   │
│   └── devices/                            # Standalone devices
│       └── ipmi-01
│
├── ARCANA/                                 # Secrets & keys
│   ├── api/                                # API keys
│   │   ├── domus/
│   │   │   ├── ise-ers
│   │   │   ├── ise-dataconnect
│   │   │   ├── cloudflare-dns
│   │   │   └── certmgr-deploy
│   │   └── cloud/
│   │       └── (future)
│   │
│   ├── crypto/                             # Encryption
│   │   ├── age-primary
│   │   ├── borg-key
│   │   ├── borg-passphrase
│   │   ├── seagate-primary
│   │   ├── seagate-secondary
│   │   ├── veracrypt-portable
│   │   └── custos-inaugural
│   │
│   ├── ssh/                                # SSH keys
│   │   ├── personal/
│   │   │   ├── github
│   │   │   ├── gitlab
│   │   │   ├── bitbucket
│   │   │   ├── codeberg
│   │   │   ├── azure
│   │   │   ├── d000
│   │   │   └── d001
│   │   └── domus/
│   │       ├── vault-01-deploy
│   │       ├── ise-02
│   │       └── gitea
│   │
│   ├── radius/                             # RADIUS secrets
│   │   └── shared-secrets
│   │
│   ├── certificates/                       # PKI secrets
│   │   └── certbot-svc
│   │
│   └── recovery/                           # Recovery codes
│       └── (future)
│
├── COMMERCIA/                              # Financial (unchanged)
│   ├── banking/
│   │   ├── accounts/
│   │   └── cards/
│   ├── licenses/
│   │   └── vim-adventures
│   ├── services/
│   └── vendors/
│
├── PERSONAE/                               # Personal (unchanged structure)
│   ├── email/
│   ├── gaming/
│   ├── identity/
│   ├── logins/
│   │   └── obsidian-md                     # Moved from obsidian.md/
│   ├── medical/
│   ├── shopping/
│   ├── social/
│   ├── streaming/                          # New category
│   ├── travel/                             # New category
│   └── web/
│
└── COMMUNIS/                               # Shared/family (new)
    ├── household/
    ├── subscriptions/
    └── emergency/

Migration Mapping

OPUS (Work) - 3 entries

Current Path New Path Status

ad/chla.usc.edu/erosado

v2/OPUS/chla/ad/erosado

[ ]

ad/chla.usc.edu/chlxsbg

v2/OPUS/chla/ad/chlxsbg

[ ]

work/cisco-tacacs

v2/OPUS/chla/network/cisco-tacacs

[ ]

DOMUS (Personal Infrastructure) - 22 entries

AD Accounts

Current Path New Path Status

ad/inside.domusdigitalis.dev/evanusmodestus

v2/DOMUS/ad/evanusmodestus

[ ]

ad/inside.domusdigitalis.dev/gabriel

v2/DOMUS/ad/gabriel

[ ]

ADMINISTRATIO/servers/home-dc01/Administrator

v2/DOMUS/ad/administrator

[ ]

ADMINISTRATIO/servers/home-dc01/dsrm

v2/DOMUS/ad/dsrm

[ ]

infra/inside.domusdigitalis.dev/dc-administrator

SKIP (duplicate of above)

[x]

infra/inside.domusdigitalis.dev/adcs-admin

SKIP (legacy AD CS, deprecated)

[x]

Network Devices

Current Path New Path Status

infra/inside.domusdigitalis.dev/pfsense-admin

v2/DOMUS/network/pfsense-admin

[ ]

infra/inside.domusdigitalis.dev/switch-admin

v2/DOMUS/network/switch-admin

[ ]

infra/inside.domusdigitalis.dev/wlc-admin

v2/DOMUS/network/wlc-admin

[ ]

ADMINISTRATIO/network/9800-wlc-01

v2/DOMUS/network/9800-wlc-01

[ ]

ADMINISTRATIO/network/admin-gui

REVIEW (what is this?)

[ ]

ADMINISTRATIO/network/ise-02

v2/DOMUS/servers/ise-cli

[ ]

Servers

Current Path New Path Status

infra/inside.domusdigitalis.dev/ise-admin

v2/DOMUS/servers/ise-admin

[ ]

infra/inside.domusdigitalis.dev/keycloak-admin

v2/DOMUS/servers/keycloak-admin

[ ]

ADMINISTRATIO/servers/vault-01

v2/DOMUS/servers/vault-01

[ ]

ADMINISTRATIO/servers/gitea

v2/DOMUS/servers/gitea

[ ]

ADMINISTRATIO/servers/ipsk-mgr-01

v2/DOMUS/servers/ipsk-mgr-01

[ ]

ADMINISTRATIO/servers/keycloak-01

SKIP (duplicate of keycloak-admin?)

[ ]

Storage

Current Path New Path Status

ADMINISTRATIO/servers/synology

v2/DOMUS/storage/synology

[ ]

ADMINISTRATIO/servers/synology-api

v2/DOMUS/storage/synology-api

[ ]

ADMINISTRATIO/servers/synology-quickconnect

v2/DOMUS/storage/synology-quickconnect

[ ]

WiFi

Current Path New Path Status

wifi/inside.domusdigitalis.dev/domus-secure

v2/DOMUS/wifi/domus-secure

[ ]

wifi/inside.domusdigitalis.dev/domus-iot

v2/DOMUS/wifi/domus-iot

[ ]

ADMINISTRATIO/network/Domus-IoT

SKIP (duplicate)

[x]

Devices

Current Path New Path Status

ADMINISTRATIO/devices/ipmi-01

v2/DOMUS/devices/ipmi-01

[ ]

infra/ipmi-01

SKIP (duplicate)

[x]

ARCANA (Secrets) - 18 entries

API Keys

Current Path New Path Status

ARCANA/api/ise-02

v2/ARCANA/api/domus/ise-ers

[ ]

ARCANA/api/ise-dataconnect

v2/ARCANA/api/domus/ise-dataconnect

[ ]

ARCANA/api/cloudflare-dns

v2/ARCANA/api/domus/cloudflare-dns

[ ]

ARCANA/api/vault-01-deploy

v2/ARCANA/api/domus/certmgr-deploy

[ ]

Crypto/Encryption

Current Path New Path Status

ARCANA/encryption/vault-01-age

v2/ARCANA/crypto/age-primary

[ ]

storage/ds3018xs/borg-key

v2/ARCANA/crypto/borg-key

[ ]

storage/ds3018xs/borg-passphrase

v2/ARCANA/crypto/borg-passphrase

[ ]

ARCANA/storage/seagate-primary

v2/ARCANA/crypto/seagate-primary

[ ]

ARCANA/storage/seagate-secondary

v2/ARCANA/crypto/seagate-secondary

[ ]

ARCANA/storage/veracrypt-portable

v2/ARCANA/crypto/veracrypt-portable

[ ]

ARCANA/custos-inaugural

v2/ARCANA/crypto/custos-inaugural

[ ]

SSH Keys

Current Path New Path Status

ARCANA/ssh/github

v2/ARCANA/ssh/personal/github

[ ]

ARCANA/ssh/gitlab

v2/ARCANA/ssh/personal/gitlab

[ ]

ARCANA/ssh/bitbucket

v2/ARCANA/ssh/personal/bitbucket

[ ]

ARCANA/ssh/codeberg

v2/ARCANA/ssh/personal/codeberg

[ ]

ARCANA/ssh/azure

v2/ARCANA/ssh/personal/azure

[ ]

ARCANA/ssh/d000

v2/ARCANA/ssh/personal/d000

[ ]

ARCANA/ssh/d001

v2/ARCANA/ssh/personal/d001

[ ]

ARCANA/ssh/vault-01-deploy

v2/ARCANA/ssh/domus/vault-01-deploy

[ ]

ARCANA/ssh/ise-02

v2/ARCANA/ssh/domus/ise-02

[ ]

ARCANA/ssh/gitea

v2/ARCANA/ssh/domus/gitea

[ ]

RADIUS & Certificates

Current Path New Path Status

svc/inside.domusdigitalis.dev/radius-shared-secrets

v2/ARCANA/radius/shared-secrets

[ ]

svc/inside.domusdigitalis.dev/certbot-svc

v2/ARCANA/certificates/certbot-svc

[ ]

PERSONAE - 1 entry to move

Current Path New Path Status

obsidian.md/evanusmodestus

v2/PERSONAE/logins/obsidian-md

[ ]

COMMERCIA - Keep as-is

Already has correct structure, just copy:

Current Path New Path Status

COMMERCIA/licenses/vim-adventures

v2/COMMERCIA/licenses/vim-adventures

[ ]

Migration Script

#!/bin/bash
# gopass-migrate-v2.sh
# Run: bash gopass-migrate-v2.sh
# Safe: Uses copy, not move. Originals preserved.

set -euo pipefail

echo "=== gopass v2 Migration ==="
echo ""

# Initialize v2 store if not exists
if ! gopass mounts | grep -q "^v2"; then
    echo "Initializing v2 store..."
    gopass init --store v2
fi

echo "--- OPUS (Work) ---"
gopass cp ad/chla.usc.edu/erosado v2/OPUS/chla/ad/erosado 2>/dev/null || echo "  erosado: skipped"
gopass cp ad/chla.usc.edu/chlxsbg v2/OPUS/chla/ad/chlxsbg 2>/dev/null || echo "  chlxsbg: skipped"
gopass cp work/cisco-tacacs v2/OPUS/chla/network/cisco-tacacs 2>/dev/null || echo "  cisco-tacacs: skipped"

echo ""
echo "--- DOMUS/ad ---"
gopass cp ad/inside.domusdigitalis.dev/evanusmodestus v2/DOMUS/ad/evanusmodestus 2>/dev/null || echo "  evanusmodestus: skipped"
gopass cp ad/inside.domusdigitalis.dev/gabriel v2/DOMUS/ad/gabriel 2>/dev/null || echo "  gabriel: skipped"
gopass cp ADMINISTRATIO/servers/home-dc01/Administrator v2/DOMUS/ad/administrator 2>/dev/null || echo "  administrator: skipped"
gopass cp ADMINISTRATIO/servers/home-dc01/dsrm v2/DOMUS/ad/dsrm 2>/dev/null || echo "  dsrm: skipped"

echo ""
echo "--- DOMUS/network ---"
gopass cp infra/inside.domusdigitalis.dev/pfsense-admin v2/DOMUS/network/pfsense-admin 2>/dev/null || echo "  pfsense-admin: skipped"
gopass cp infra/inside.domusdigitalis.dev/switch-admin v2/DOMUS/network/switch-admin 2>/dev/null || echo "  switch-admin: skipped"
gopass cp infra/inside.domusdigitalis.dev/wlc-admin v2/DOMUS/network/wlc-admin 2>/dev/null || echo "  wlc-admin: skipped"
gopass cp ADMINISTRATIO/network/9800-wlc-01 v2/DOMUS/network/9800-wlc-01 2>/dev/null || echo "  9800-wlc-01: skipped"

echo ""
echo "--- DOMUS/servers ---"
gopass cp infra/inside.domusdigitalis.dev/ise-admin v2/DOMUS/servers/ise-admin 2>/dev/null || echo "  ise-admin: skipped"
gopass cp infra/inside.domusdigitalis.dev/keycloak-admin v2/DOMUS/servers/keycloak-admin 2>/dev/null || echo "  keycloak-admin: skipped"
gopass cp ADMINISTRATIO/servers/vault-01 v2/DOMUS/servers/vault-01 2>/dev/null || echo "  vault-01: skipped"
gopass cp ADMINISTRATIO/servers/gitea v2/DOMUS/servers/gitea 2>/dev/null || echo "  gitea: skipped"
gopass cp ADMINISTRATIO/servers/ipsk-mgr-01 v2/DOMUS/servers/ipsk-mgr-01 2>/dev/null || echo "  ipsk-mgr-01: skipped"
gopass cp ADMINISTRATIO/network/ise-02 v2/DOMUS/servers/ise-cli 2>/dev/null || echo "  ise-cli: skipped"

echo ""
echo "--- DOMUS/storage ---"
gopass cp ADMINISTRATIO/servers/synology v2/DOMUS/storage/synology 2>/dev/null || echo "  synology: skipped"
gopass cp ADMINISTRATIO/servers/synology-api v2/DOMUS/storage/synology-api 2>/dev/null || echo "  synology-api: skipped"
gopass cp ADMINISTRATIO/servers/synology-quickconnect v2/DOMUS/storage/synology-quickconnect 2>/dev/null || echo "  synology-quickconnect: skipped"

echo ""
echo "--- DOMUS/wifi ---"
gopass cp wifi/inside.domusdigitalis.dev/domus-secure v2/DOMUS/wifi/domus-secure 2>/dev/null || echo "  domus-secure: skipped"
gopass cp wifi/inside.domusdigitalis.dev/domus-iot v2/DOMUS/wifi/domus-iot 2>/dev/null || echo "  domus-iot: skipped"

echo ""
echo "--- DOMUS/devices ---"
gopass cp ADMINISTRATIO/devices/ipmi-01 v2/DOMUS/devices/ipmi-01 2>/dev/null || echo "  ipmi-01: skipped"

echo ""
echo "--- ARCANA/api ---"
gopass cp ARCANA/api/ise-02 v2/ARCANA/api/domus/ise-ers 2>/dev/null || echo "  ise-ers: skipped"
gopass cp ARCANA/api/ise-dataconnect v2/ARCANA/api/domus/ise-dataconnect 2>/dev/null || echo "  ise-dataconnect: skipped"
gopass cp ARCANA/api/cloudflare-dns v2/ARCANA/api/domus/cloudflare-dns 2>/dev/null || echo "  cloudflare-dns: skipped"
gopass cp ARCANA/api/vault-01-deploy v2/ARCANA/api/domus/certmgr-deploy 2>/dev/null || echo "  certmgr-deploy: skipped"

echo ""
echo "--- ARCANA/crypto ---"
gopass cp ARCANA/encryption/vault-01-age v2/ARCANA/crypto/age-primary 2>/dev/null || echo "  age-primary: skipped"
gopass cp storage/ds3018xs/borg-key v2/ARCANA/crypto/borg-key 2>/dev/null || echo "  borg-key: skipped"
gopass cp storage/ds3018xs/borg-passphrase v2/ARCANA/crypto/borg-passphrase 2>/dev/null || echo "  borg-passphrase: skipped"
gopass cp ARCANA/storage/seagate-primary v2/ARCANA/crypto/seagate-primary 2>/dev/null || echo "  seagate-primary: skipped"
gopass cp ARCANA/storage/seagate-secondary v2/ARCANA/crypto/seagate-secondary 2>/dev/null || echo "  seagate-secondary: skipped"
gopass cp ARCANA/storage/veracrypt-portable v2/ARCANA/crypto/veracrypt-portable 2>/dev/null || echo "  veracrypt-portable: skipped"
gopass cp ARCANA/custos-inaugural v2/ARCANA/crypto/custos-inaugural 2>/dev/null || echo "  custos-inaugural: skipped"

echo ""
echo "--- ARCANA/ssh/personal ---"
gopass cp ARCANA/ssh/github v2/ARCANA/ssh/personal/github 2>/dev/null || echo "  github: skipped"
gopass cp ARCANA/ssh/gitlab v2/ARCANA/ssh/personal/gitlab 2>/dev/null || echo "  gitlab: skipped"
gopass cp ARCANA/ssh/bitbucket v2/ARCANA/ssh/personal/bitbucket 2>/dev/null || echo "  bitbucket: skipped"
gopass cp ARCANA/ssh/codeberg v2/ARCANA/ssh/personal/codeberg 2>/dev/null || echo "  codeberg: skipped"
gopass cp ARCANA/ssh/azure v2/ARCANA/ssh/personal/azure 2>/dev/null || echo "  azure: skipped"
gopass cp ARCANA/ssh/d000 v2/ARCANA/ssh/personal/d000 2>/dev/null || echo "  d000: skipped"
gopass cp ARCANA/ssh/d001 v2/ARCANA/ssh/personal/d001 2>/dev/null || echo "  d001: skipped"

echo ""
echo "--- ARCANA/ssh/domus ---"
gopass cp ARCANA/ssh/vault-01-deploy v2/ARCANA/ssh/domus/vault-01-deploy 2>/dev/null || echo "  vault-01-deploy: skipped"
gopass cp ARCANA/ssh/ise-02 v2/ARCANA/ssh/domus/ise-02 2>/dev/null || echo "  ise-02: skipped"
gopass cp ARCANA/ssh/gitea v2/ARCANA/ssh/domus/gitea 2>/dev/null || echo "  gitea: skipped"

echo ""
echo "--- ARCANA/radius & certificates ---"
gopass cp svc/inside.domusdigitalis.dev/radius-shared-secrets v2/ARCANA/radius/shared-secrets 2>/dev/null || echo "  shared-secrets: skipped"
gopass cp svc/inside.domusdigitalis.dev/certbot-svc v2/ARCANA/certificates/certbot-svc 2>/dev/null || echo "  certbot-svc: skipped"

echo ""
echo "--- COMMERCIA ---"
gopass cp COMMERCIA/licenses/vim-adventures v2/COMMERCIA/licenses/vim-adventures 2>/dev/null || echo "  vim-adventures: skipped"

echo ""
echo "--- PERSONAE ---"
gopass cp obsidian.md/evanusmodestus v2/PERSONAE/logins/obsidian-md 2>/dev/null || echo "  obsidian-md: skipped"

echo ""
echo "=== Migration Complete ==="
echo ""
echo "Verify: gopass ls v2/"
echo ""
echo "Once verified, you can:"
echo "  1. Make v2 the primary: gopass mounts"
echo "  2. Remove old entries after confirming v2 works"

Post-Migration

Verify v2 Store

gopass ls v2/

Make v2 Primary (after verification)

Option 1: Rename stores

# Backup current
mv ~/.local/share/gopass/stores/root ~/.local/share/gopass/stores/legacy

# Promote v2
mv ~/.local/share/gopass/stores/v2 ~/.local/share/gopass/stores/root

# Remount
gopass mounts

Option 2: Keep both, use v2 as default

# Access v2 entries directly
gopass show v2/DOMUS/ad/evanusmodestus

# Or set alias in shell
alias gp='gopass show v2/'

Entries to Review

These entries need manual decision:

Entry Question

ADMINISTRATIO/network/admin-gui

What is this? Network device GUI password?

ADMINISTRATIO/servers/keycloak-01

Duplicate of keycloak-admin?

infra/inside.domusdigitalis.dev/dc-administrator

Duplicate of home-dc01/Administrator?

ADMINISTRATIO/servers/home-dc01/meta

What metadata is stored here?