summary refs log tree commit diff
path: root/mp.sh
blob: 1f924a76ab27e53042dfa03d91f0aa497a9d9ce4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/env sh
set -e

war() {
	echo "warn: $1" >&2
}
die() {
	echo "err: $1" >&2
	exit 1
}
ok() {
	echo "ok: $1" >&2
}

if command -v doas >/dev/null 2>&1; then
	rx() {
		doas "$@"
	}
	return
elif command -v sudo >/dev/null 2>&1; then
	rx() {
		sudo "$@"
	}
	return
else
	die "permission elevator not found."
fi

wd="/usr/local/mp"
ports="/usr/local/ports/ports"
ports_repo="https://codeberg.org/Druid520/ports.git"
status="$wd/status"
_installed="$wd/installed"
installed="$wd/extinstalled"

cfg="/etc/mp.conf"
if [ -f "$cfg" ]; then
	. "$cfg"
else
	war "cfg not found, creating one."
	rx touch "$cfg"
fi

mp_add() {
	rx cp -r "$ports/$1" "$wd/$1"
	(cd "$wd/$1" && . pkg.conf && rx sh ./add.sh && rx echo "$pkg_name" >> "$_installed" && rx echo "$pkg_name-$pkg_ver ($pkg_license)" >> "$installed")
}
mp_del() {
	(cd "$wd/$1" && . pkg.conf && rx sh ./del.sh && rx sed "s/$pkg_name//g" "$_installed" && rx sed "s/$pkg_name-$pkg_ver ($pkg_license)//g" "$installed")
	rx rm -rf "$wd/$1"
}
mp_upd() {
	(cd "$ports" && rx git pull)
	if [ "$1" = "*" ]; then
		for pkg in $(cat "$_installed"); do
			(cd "$wd/$pkg" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh)
		done
		return
	fi
	(cd "$wd/$1" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh)
}
mp_init() {
	if [ -f "$status" ]; then
		return
	fi

	war "uninitialized, initializing."
	rx git clone "$ports_repo" "$ports" --depth 1
	rx mkdir -p "$wd"
	rx touch "$installed" "$_installed" "$status"
}

mp_init
if [ $# -ne 2 ]; then
	die "bad usage. usage: mp <a/d/u> <pkg>."
elif [ "$1" = "a" ]; then
	mp_add "$2"
elif [ "$1" = "d" ]; then
	mp_del "$2"
elif [ "$1" = "u" ]; then
	mp_upd "$2"
else
	die "bad usage. usage: mp <a/d/u> <pkg>."
fi