--- /dev/null
+# Babashka Scripts
+
+Miscellaneous [babashka](https://babashka.org "babashka website") scripts I wrote for my own personal use.
+
+## Requirements
+
+babashka (>= 0.2.9)
+
+## Usage
+
+Clone this repository.
+
+``` sh
+cd ~/dev
+git clone https://njoseph.me/gitweb/babashka-scripts.git
+```
+
+Add the following lines to your shell configuration file.
+
+``` sh
+export BABASHKA_PRELOADS='(load-file (str (System/getProperty "user.home") "/dev/babashka-scripts/lib.clj"))'
+export PATH=$PATH:$HOME/dev/babashka-scripts
+```
+
+## Organization
+
+`lib.clj` contains functions that the other scripts might use. It must be loaded first.
; A utility to listen to your ebooks using TTS programs
-(import '[java.nio.file Files FileSystems CopyOption])
-
(require '[babashka.process :as p]
'[clojure.java.io :as io]
'[clojure.string :refer [split]])
;; TODO Use festival-tts or say depending on OS
-
(defn run-cmd
[command]
(->> command
:out
slurp))
-(defn extract-file-from-zip
- [zip-file-name source destination]
- (let [zip-file (io/file zip-file-name)
- src (io/file source)
- dest (io/file destination)
- fs (FileSystems/newFileSystem (.toPath zip-file) nil)
- file-in-zip (.getPath fs source (into-array String []))]
- (Files/copy file-in-zip (.toPath dest)
- (into-array CopyOption []))))
-
(let [book-file (first *command-line-args*)
title (first (split book-file #"\."))
txtz-file (str title ".txtz")
--- /dev/null
+;
+
+(import '[java.nio.file Files FileSystems CopyOption StandardCopyOption])
+
+(defn extract-file-from-zip
+ [zip-file-name source destination]
+ (let [zip-file (io/file zip-file-name)
+ src (io/file source)
+ dest (io/file destination)
+ fs (FileSystems/newFileSystem (.toPath zip-file) nil)
+ file-in-zip (.getPath fs source (into-array String []))]
+ (Files/copy file-in-zip (.toPath dest)
+ (into-array CopyOption [StandardCopyOption/REPLACE_EXISTING]))))
+
+(defn expand-home [s]
+ (if (.startsWith s "~")
+ (clojure.string/replace-first s "~" (System/getProperty "user.home"))
+ s))
--- /dev/null
+#! /usr/bin/env bb
+
+(require '[clojure.java.shell :refer [sh]]
+ '[cheshire.core :as json]
+ '[babashka.curl :as curl]
+ '[babashka.fs :as fs])
+
+(defn babashka-latest-version []
+ (-> (curl/get "https://api.github.com/repos/babashka/babashka/tags")
+ :body
+ (json/parse-string true)
+ first
+ :name
+ (subs 1)))
+
+(defn download-binary
+ [url destination]
+ (io/copy
+ (:body (curl/get url {:as :stream}))
+ (io/file destination)))
+
+(defn get-download-url
+ [version architecture]
+ (str "https://github.com/babashka/babashka/releases/download/v" version "/babashka-"
+ version "-" architecture ".zip"))
+
+(defn check-latest
+ [version]
+ (when (= (System/getProperty "babashka.version") version)
+ (println "Already using the latest version.")
+ (System/exit 0)))
+
+(defn download-latest
+ [version architecture output]
+ (let [url (get-download-url version architecture)]
+ (println (str "Latest version is " version))
+ (download-binary url output)))
+
+(= *file* (System/getProperty "babashka.file")
+ (let [architecture "linux-static-amd64" ;; TODO support multiple architectures
+ zip-file "babashka.zip"
+ destination (expand-home "~/bin/bb")
+ version (babashka-latest-version)]
+ (check-latest version)
+ (download-latest version architecture zip-file)
+ (extract-file-from-zip zip-file "bb" destination)
+ (fs/set-posix-file-permissions "/home/joseph/bin/bb" "rwxr-xr-x")
+ (io/delete-file zip-file)))