diff options
Diffstat (limited to 'abraham-porter.sh')
-rwxr-xr-x | abraham-porter.sh | 155 |
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 |