   (command "vault [global opts] <command> [command args]"
     "Command-line tool for the vault data store."
 
+    ["--store" "Select blob store to use."
+     :parse-fn keyword]
     ["-v" "--verbose" "Show extra debugging messages."
      :flag true :default false]
     ["-h" "--help" "Show usage information."

    (command "blob <action> [args]"
      "Blob storage command."

      ["--store" "Select blob store to use."]

      (init [opts]
        (let [store (get-blob-store opts)]
          (when-not store
            (println "No blob-store initialized.")
            (System/exit 1))
          (assoc opts :store store)))

      (command "list [opts]"
        "Enumerate the stored blobs."

                     "/.config/vault/blob-stores.edn")})


(def ^:private config-readers
  "Map of EDN readers for supported types in config files."
  {'vault/file-store (partial apply file-store)})



;; BLOB STORAGE

(defn- select-blob-store
  [stores selection]
  (->> (or selection :default)
       (iterate stores)
       (drop-while keyword?)
       first))


(defn- initialize-blob-stores
  [opts]
  (try
    (let [config (slurp (:blob-stores config-paths))
          stores (edn/read-string {:readers config-readers} config)
          store (select-blob-store stores (:store opts :default))]
      (assoc opts :blob-stores stores :store store))
    (catch java.io.FileNotFoundException e
      (assoc opts :blob-stores {}))))


(defn- require-blob-store
  [opts]
  (when-not (:store opts)
    (println "No blob-store initialized.")
    (System/exit 1))
  opts)


(defn- list-blob-stores
