summaryrefslogtreecommitdiff
path: root/abraham-porter.sh
diff options
context:
space:
mode:
Diffstat (limited to 'abraham-porter.sh')
-rwxr-xr-xabraham-porter.sh155
1 files changed, 155 insertions, 0 deletions
diff --git a/abraham-porter.sh b/abraham-porter.sh
new file mode 100755
index 0000000..1498ccf
--- /dev/null
+++ b/abraham-porter.sh
@@ -0,0 +1,155 @@
+#!/bin/sh
+
+## Configuration
+dmenu="rofi -dmenu"
+doas="doas"
+terminal="alacritty"
+printer="rofi -width -81 -e"
+ports_dir="/usr/local/poudriere/ports/default"
+pkglist="$HOME/.pkglist"
+poudriere_jail="121x64"
+
+
+## Error codes
+OK=0
+NO_ACTION_PROVIDED=3
+NO_PORT_PROVIDED=4
+NO_PKG_DESCR_FOUND=5
+NO_WANT_TERM_PROVIDED=6
+
+
+## Gets a port name from the user with dmenu
+get_port() {
+ cwd=$(pwd)
+ cd "$ports_dir"
+ printf "%s\n" */* | $dmenu -p "Choose a port"
+ cd "$cwd"
+}
+
+
+## Prompt user if they want to run command in a new term
+wants_term() {
+ choice=$($dmenu -p "Do you want to do this in a new terminal?" << EOF
+no
+yes
+EOF
+ )
+ [ $action = "yes" ] && return 1
+ [ $action = "no" ] && return 0
+ exit $NO_WANT_TERM_PROVIDED
+}
+
+
+## Gets an action from the user with dmenu
+get_action() {
+ action=$($dmenu -p "Whadyagonnado" << EOF
+1. print pkg-descr
+2. set options
+3. set options, add to pkglist
+4. set options, build pkg
+5. set options, build pkg, add to pkglist
+6. add to pkglist
+7. set options on pkglist
+8. build entire pkglist (lengthy and intensive!)
+EOF
+ )
+ echo "$action" | cut -d'.' -f1
+}
+
+
+## Handle printing a package description file
+handle_print_pkg_desc() {
+ port=$(get_port)
+ [ -z $port ] && exit $NO_PORT_PROVIDED
+ pkg_descr="$ports_dir"/$port/pkg-descr
+ [ ! -f "$pkg_descr" ] && exit $NO_PKG_DESCR_FOUND
+ text=$(cat "$ports_dir"/$port/pkg-descr)
+ $printer "$text"
+}
+
+
+## Handle appending a port to the pkglist. Skips appending if already present
+handle_append_pkglist() {
+ port="$1"
+ grep -q $port "$pkglist" && exit $OK
+ cp "$pkglist" "$pkglist".bak
+ echo $port >> "$pkglist"
+ sort "$pkglist" -o "$pkglist"
+ echo $port
+}
+
+
+## Handle running poudriere options on a single port
+handle_poudriere_options_single() {
+ port="$1"
+ $terminal -e $doas poudriere options -c $port
+ echo $port
+}
+
+
+## Handle running poudriere bulk on a single port
+handle_poudriere_bulk_single() {
+ port="$1"
+ if wants_term; then
+ $terminal -e $doas poudriere bulk -j "$jail" $port
+ else
+ $doas poudriere bulk -j "$jail" $port
+ fi
+}
+
+
+## Handle running poudriere options on pkglist
+handle_poudriere_options_pkglist() {
+ $terminal -e $doas poudriere options -f "$pkglist"
+}
+
+
+## Handle running poudriere bulk on pkglist
+handle_poudriere_bulk_pkglist() {
+ if wants_term; then
+ $terminal -e $doas poudriere bulk -j "$jail" -f "$pkglist"
+ else
+ $doas poudriere bulk -j "$jail" -f "$pkglist"
+ fi
+}
+
+
+## Main
+action=$(get_action)
+case $action in
+ 1)
+ # 1. print pkg-descr
+ handle_print_pkg_desc
+ ;;
+ 2)
+ # 2. set options
+ handle_poudriere_options_single $(get_port)
+ ;;
+ 3)
+ # 3. set options, add to pkglist
+ handle_poudriere_options_single $(handle_append_pkglist $(get_port))
+ ;;
+ 4)
+ # 4. set options, build pkg
+ handle_poudriere_bulk_single $(handle_poudriere_options_single $(get_port))
+ ;;
+ 5)
+ # 5. set options, build pkg, add to pkglist
+ handle_poudriere_bulk_single $(handle_poudriere_options_single $(handle_append_pkglist $(get_port)))
+ ;;
+ 6)
+ # 6. add to pkglist
+ handle_append_pkglist $(get_port)
+ ;;
+ 7)
+ # 7. set options on pkglist
+ handle_poudriere_options_pkglist
+ ;;
+ 8)
+ # 8. build entire pkglist (lengthy and intensive!)
+ handle_poudriere_bulk_pkglist
+ ;;
+ *)
+ exit $NO_ACTION_PROVIDED
+ ;;
+esac