   {"apt" {:genrepo apt-pkg/slurp-apt-repo
              :version-comparison "debian"}
    "degasolv" {:genrepo degasolv-pkg/slurp-degasolv-repo
-               :version-comparison "maven"}})
+               :version-comparison "maven"}
+   "subproc" {:genrepo subproc-pkg/slurp-subproc-repo
+              :version-comparison "maven"
+              :cli
+              [
+               ["-x" "--subproc-exe PATH"
+                "Path to the executable to call to get package data"
+                :validate [#(and
+                             (fs/exists? %)
+                             (fs/executable? %))
+                           "Must be an executable file which exists on the file system."]
+                :required true]
+               ]
+              }})
 
 (defn- generate-repo-index-cli!
   [options arguments]

   [clojure.tools.cli :refer [parse-opts summarize]]
   [degasolv.pkgsys.apt :as apt-pkg]
   [degasolv.pkgsys.core :as degasolv-pkg]
   [degasolv.resolver :as r :refer :all]
   [degasolv.util :refer :all]
   [me.raynes.fs :as fs]

                            configs)))))
      (hash-map))))

(defn- parseplz!
  [command args command-spec]
  (let [{:keys [options arguments errors summary]}
        (parse-opts args (concat
                          (:cli command-spec)
                          [["-h" "--help" "Print this help page"]])
                    :in-order true)]
    (cond
      (or
        (:help options)
        (and
         (empty? arguments)
         (:subcommands command-spec)))
      (exit 0
            (str (usage command summary)
                 (if (:required-arguments command-spec)
                   (str
                     "\n\n"
                     (required-args-msg
                       (:required-arguments command-spec))
                     "\n\n")
                   "\n\n")
                 (if (:subcommands command-spec)
                   (str
                    (command-list (keys (:subcommands command-spec)))
                    "\n\n")
                   "")))
      errors
      (exit 1
            (string/join
             \newline
             [(error-msg errors)
              ""
              (usage command summary)
              (if (:subcommands command-spec)
                (string/join
                 \newline
                 [
                 ""
                 (command-list (keys (:subcommands command-spec)))
                 ""])
                "")])))
    {:options options
     :arguments arguments}))

(defn -main [& args]
  (let [{:keys [options arguments]}
        (parseplz! "degasolv" args cli-spec)]
    (let [global-options options
          subcommand (first arguments)
          subcommand-cli (:subcommands cli-spec)
          subcmd-cli (if (not (= subcommand "display-config"))
                       (get subcommand-cli subcommand)
                       ; this grabs all other options as part of display-config
