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 BABASHKA_PRELOADS='(run! load-file (map #(str (System/getProperty "user.home") "/dev/babashka-scripts/" %) ["lib.clj" "utils.clj"]))'
+export BABASHKA_PRELOADS=$BABASHKA_PRELOADS" (require '[utils :refer :all])"
export PATH=$PATH:$HOME/dev/babashka-scripts
```
+Some useful aliases.
+
+``` sh
+alias gup="bb -e '(git-pull-rebase-branch)'"
+```
+
## Organization
-`lib.clj` contains functions that the other scripts might use. It must be loaded first.
+`lib.clj` contains functions that the other scripts might use. It must be loaded
+first.
+
+`utils.clj` contains standalone utilities that can be executed directly. These are
+convenient to use through shell aliases.
+
+The remaining Clojure files are executable scripts.
--- /dev/null
+(ns utils
+ (:require [lib :refer [run-cmd]]
+ [clojure.string :as str]))
+
+(defn git-pull-rebase-branch
+ "Do git pull and rebase branch with master"
+ []
+ (let [current-branch (str/trim (run-cmd ["git" "branch" "--show-current"]))]
+ (print (run-cmd ["git" "pull" "--rebase"]))
+ (when (not (contains? #{"master" "main"} current-branch))
+ (run! print
+ (map run-cmd
+ '[["git" "checkout" "master"]
+ ["git" "pull" "--rebase"]
+ ["git" "checkout" "-"]
+ ["git" "rebase" "master"]])))))