(wip) Setup btrfs impermanence
This commit is contained in:
43
modules/nixos/impermanence/erase-darlings.clj
Normal file
43
modules/nixos/impermanence/erase-darlings.clj
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bb
|
||||
|
||||
(require '[clojure.core.match :refer [match]]
|
||||
'[babashka.cli :as cli]
|
||||
'[clojure.pprint :as pp]
|
||||
'[clojure.tools.logging :as l]
|
||||
'[babashka.process :refer [shell check process] :as p])
|
||||
|
||||
(def cli-spec
|
||||
{:spec
|
||||
{:archive-limit {:coerce :int
|
||||
:alias :n
|
||||
:validate #(pos? %)
|
||||
:default 3
|
||||
:desc "Number of archives to save at a time."}
|
||||
:device {:coerce :string
|
||||
;; :validate fs/exists?
|
||||
:require true
|
||||
:desc "Dataset to be archived and rolled back."}
|
||||
:previous-roots
|
||||
{:coerce :string
|
||||
:default "/persist/previous"
|
||||
:desc "The path under which previous roots will be stored."}
|
||||
:error-fn
|
||||
(fn [{:keys [spec type cause msg option] :as data}]
|
||||
(when (= :org.babashka/cli type)
|
||||
(case cause
|
||||
:require
|
||||
(println
|
||||
(format "Missing required argument: %s\n" option))))
|
||||
(System/exit 1))}})
|
||||
|
||||
(defmacro with-echoed-shell-commands [& body]
|
||||
(let [print-cmd #(println (str "+ " (str/join (:cmd %))))]
|
||||
`(binding [p/*defaults* {:pre-start-fn ~print-cmd}]
|
||||
~@body)))
|
||||
|
||||
(defn -main [opts]
|
||||
(pp/pprint opts)
|
||||
(with-echoed-shell-commands
|
||||
(shell "mount")))
|
||||
|
||||
(-main (cli/parse-opts *command-line-args* cli-spec))
|
||||
Reference in New Issue
Block a user