Skip to main content

GPG-encrypted personal dossier system for the command line.

Project description

filecard

GPG-encrypted personal dossier system for the command line.

Inspired by the Farley File concept from Robert A. Heinlein's Double Star.

Requirements

  • Python: 3.11 or later
  • GnuPG: gpg binary must be in your $PATH.
  • A GnuPG secret key
  • System: Linux or OpenBSD (macOS/Windows untested).
  • Environment: A terminal supporting curses (most standard Linux/BSD terminals).

Install from PyPI

pip install --upgrade filecard

Install from source

git clone https://codeberg.org/duras/filecard
cd filecard
pip install -e ".[dev]"

The -e flag installs in editable mode: changes to the source directory take effect immediately without reinstalling.

Setup

filecard init

Selects your GnuPG key, creates the encrypted vault, and writes the configuration file.

Synopsis

filecard
filecard init
filecard log query -m message [-t type]
filecard export query [-o file]
filecard nuke

Description

filecard stores structured notes about people in a single GnuPG-encrypted file called the vault.

Each person is represented by a card containing facts, notes, relationships, and a timestamped event log.

Invoked without arguments, filecard decrypts the vault into memory, launches an interactive terminal interface, and re-encrypts the vault on exit. Decrypted data never touches the filesystem.

On every clean exit, a compressed backup of the encrypted vault is written to the backups/ directory alongside the vault. Backups are timestamped; only the ten most recent are kept.

The log and export commands operate without launching the interface.

Commands

init

Initialise a new vault.

  • Prompts for a GnuPG key
  • Creates ~/.local/share/filecard/vault.gpg
  • Creates ~/.config/filecard/config.json

log query -m message [-t type]

Append an event to a card without opening the interface.

  • Resolution: exact match → fuzzy match
  • Aborts if ambiguous
  • If -t is omitted, an interactive type menu is shown

export query [-o file]

Export a card as plain text.

  • -o specified → write to file
  • -o omitted → write to stdout

nuke

Destroy vault and configuration.

  • Overwrites vault with random bytes (3 passes)
  • Deletes vault and config
  • Prompts for confirmation

Options

Option Description
-m message Event content (required for log)
-t type Event type: meeting, call, observation, … If omitted, menu shown
-o file Output file for export. If omitted, write to stdout

Interface

Full-screen terminal interface with two views.

List view

Key Action
j, k Move down / up
g, G Jump to top / bottom
/ Live search — type to filter
Esc Clear search and tag filter
t Filter by tag
n New card
Enter Open card in edit view
x Export card to file
d Delete card (confirms)
q Quit — encrypt vault + write backup

Edit view

Switch tabs with 15:

Tab Contents
1 Identity Name, aliases, tags
2 Facts Key-value fields (standard + custom)
3 Relations Role → name pairs
4 Events Timestamped log, newest first
5 Notes Dated free-text notes

Within any tab:

Key Action
j, k Move
Enter Edit field in place
a Add item
d Delete selected item
x Export card
Esc Return to list view

All edits are applied immediately. No explicit save step.

Pickers

Tags, event types, and relationship roles are selected through an interactive fuzzy picker: type to filter the list, j/k to move, Enter to confirm, Esc to cancel.

Files

Path Purpose
~/.local/share/filecard/vault.gpg Encrypted vault
~/.local/share/filecard/backups/ Compressed backups (vault-YYYYMMDD-HHMMSS.gpg.gz)
~/.config/filecard/config.json GnuPG fingerprint and vault path

Environment

Variable Description
EDITOR Editor used by filecard edit --raw. Defaults to vi

GnuPG and gpg-agent handle encryption and passphrase caching. See gpg-agent(1) for cache timeout configuration (default-cache-ttl, max-cache-ttl).

Security

  • Vault is encrypted with GnuPG public-key encryption
  • Decrypted data exists only in process memory
  • Backup files contain only encrypted data

nuke overwrites the vault with random bytes before deletion. This does not guarantee physical erasure on SSDs with wear leveling. Use full-disk encryption (Linux LUKS, OpenBSD softraid CRYPTO) for that guarantee.

edit --raw writes a plaintext JSON file to /tmp for the duration of the edit. Mount /tmp as tmpfs on Linux, or use OpenBSD where /tmp is typically memory-backed.

Examples

# First-time setup
filecard init

# Open the interface
filecard

# Log an event from the shell
filecard log "john" -m "met at the spaceport" -t meeting

# Log with interactive type menu
filecard log "john" -m "called to confirm"

# Export to stdout
filecard export "john"

# Export to file
filecard export "john" -o john.txt

# Destroy vault
filecard nuke

Documentation

man filecard

https://filecard.readthedocs.io/en/latest/

License

ISC

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

filecard-0.1.7.tar.gz (25.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

filecard-0.1.7-py3-none-any.whl (26.5 kB view details)

Uploaded Python 3

File details

Details for the file filecard-0.1.7.tar.gz.

File metadata

  • Download URL: filecard-0.1.7.tar.gz
  • Upload date:
  • Size: 25.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for filecard-0.1.7.tar.gz
Algorithm Hash digest
SHA256 6db3d2065b9f73c7b5212c9759b3e4ee122d2964bae3665829ba1b004e735b92
MD5 3ea45073bf05126a147172e19f0989ab
BLAKE2b-256 49325547e4bf902d154f46baea04cf692c1e650262df9bfa7ff482e876753064

See more details on using hashes here.

File details

Details for the file filecard-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: filecard-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 26.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for filecard-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 419096cca249f281efdf7f640b4f37588422dfdd7b5e40f595abcabe38154abb
MD5 37933b469e9dc5ddcaf1b3955cdb1509
BLAKE2b-256 1e0d2d3d704b8d187b2fca16b653ba191657e742c22da958588bbc6877537c1f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page