Skip to content

move

Interactively move cards between decks, collections, and wanted lists.

Terminal window
./ritual move

The move command launches an interactive session that lets you search across all your lists, select cards to relocate, and commit the changes in a batch. Changes are recorded in the source and destination changelog files, and only written to disk when you confirm.

Key behaviors:

  • Deck moves: Moving a card from a deck decrements its quantity by 1. The line is removed when quantity reaches 0.
  • Note preservation: Notes ({note}) on deck, collection, and wanted list entries are carried over to the destination list.
  • Name-only wanted entries: If a card has no set/collector number (i.e., it is a name-only wanted list entry) and the destination requires a printing (e.g., a collection), you will be prompted to resolve a printing before the move is queued.
  • Single destination: If only one valid destination is configured, the destination prompt is skipped and the card is queued immediately.
  • Change tracking: Source files receive a Moved … to … changelog entry. Destination files receive a Moved … from … changelog entry.

When launched, the tool shows an autocomplete search field. You can type a card name to search, or select from the menu:

OptionDescription
⚙️ Configure Session FiltersRestrict which lists are eligible as sources or destinations
📋 View Pending Changes (N)Preview queued moves before committing
🚪 ExitLeave the session (asks to save, discard, or cancel when pending)

After searching, select a card and choose a destination (or confirm the single available one). The destination prompt is also an autocomplete field — type to filter the list of destinations instead of scrolling with the arrow keys. The move is queued as a pending change. You can queue multiple moves before committing.

Foil and etched cards are flagged in the search results, the pending-changes view, and the queued-move confirmation (e.g. Lightning Bolt (LEA:161) [Foil]). Normal non-foil printings are shown without a finish tag.

Nothing is written until you exit and choose to save. 🚪 Exit (or pressing Escape) leaves the session immediately when nothing is pending; with pending moves it opens a menu to Save and exit (commit all pending moves), Exit without saving, or Cancel (keep editing).

Select Configure Session Filters to open the filter dialog. You can independently configure:

  • Move FROM — which lists are valid sources
  • Move TO — which lists are valid destinations

Inside each filter view, you can toggle lists by category (Decks, Collections, Wanted Lists) or individually:

[X] Decks (3/3)
[~] Collections (1/2)
[ ] Wanted Lists (0/1)
── Toggle All ON ──
── Toggle All OFF ──
← Done

The bracket indicator shows:

  • [X] — all lists in this category are enabled
  • [~] — some lists in this category are enabled
  • [ ] — no lists in this category are enabled

At least one destination must remain enabled at all times.

If you move a card and then try to move the same card again (e.g., from B to C after already queuing A → B), the tool updates the pending move to reflect the final destination. Only the original source and the final destination are written to; intermediate lists are never touched.

For example, if you queue:

  1. Sol Ring: Deck A → Collection B
  2. Sol Ring: Collection B → Wanted C

The committed result is: Sol Ring removed from Deck A and added to Wanted C. Collection B is unchanged. Changelogs reflect Deck A → Wanted C.

Card names are written quoted so the name is unambiguously separated from trailing annotations.

Source list changelog (.changes.md):

- Moved "Lightning Bolt" (LEA:161) [foil] &5 to Collection 'Red Binder'

Destination list changelog:

- Moved "Lightning Bolt" (LEA:161) [foil] &5 from Deck 'Ghyrson Starn Spellslinger'