summaryrefslogblamecommitdiff
path: root/abraham-porter.sh
blob: 23be09ac7e7225df4bbf19bac2ffd9979aa139c7 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

         

                                        
                

                    
                                      

                                              
             






                    
                          





                                            
                                           



                 

                                          
                                                 




















                                                         
                      
























                                                                             
                                                    
                                                          
                                                     










                                                          
                                                        
                                                                  
                                                         


 
               
                                                       









                                       
       








































                                                                                                                            
#!/bin/sh

## Abraham Porter - do things with ports

## Configuration
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_ANOTHER_PROVIDED=6


## Gets a port name from the user with dmenu
get_port() {
	cwd=$(pwd)
	cd "$ports_dir"
	printf "%s\n" */* | dmenu -p "Port"
	cd "$cwd"
}


## 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"
	notify-send "Poudriere bulk started" "$port"
	$terminal -e $doas poudriere bulk -j "$jail" $port
	notify-send "Poudriere bulk finished" "$port"
}


## 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() {
	notify-send "Poudriere bulk started" "(pkglist)"
	$terminal -e $doas poudriere bulk -j "$jail" -f "$pkglist"
	notify-send "Poudriere bulk finished" "(pkglist)"
}


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