#!/bin/sh ## Configuration dmenu="rofi -dmenu" doas="doas" terminal="alacritty" pager="rofi -location 2 -width -81 -e" ports_dir="/usr/local/poudriere/ports/default" pkglist="$HOME/.pkglist" jail="121x64" ## Error codes OK=0 NO_ACTION_PROVIDED=3 NO_PORT_PROVIDED=4 NO_PKG_DESCR_FOUND=5 NO_WANT_TERM_PROVIDED=6 NO_WANT_ANOTHER_PROVIDED=7 ## Gets a port name from the user with dmenu get_port() { cwd=$(pwd) cd "$ports_dir" printf "%s\n" */* | $dmenu -p "Port" cd "$cwd" } ## Prompt user if they want to run command in a new term wants_term() { choice=$(printf "no\nyes\n" | $dmenu -p "Do you want to do this in a new terminal?") [ $choice = "no" ] && return 1 [ $choice = "yes" ] && return 0 exit $NO_WANT_TERM_PROVIDED } ## Gets an action from the user with dmenu get_action() { action=$($dmenu -p "Abraham Porter" << 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) $pager "$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 } get_another() { choice=$($dmenu -p "Do you want another?" << EOF no yes EOF ) [ $choice = "no" ] && return 1 [ $choice = "yes" ] && return 0 exit $NO_WANT_ANOTHER_PROVIDED } ## Main while true; do 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 get_another || exit OK done