diff options
Diffstat (limited to 'mp.sh')
| -rwxr-xr-x | mp.sh | 84 |
1 files changed, 84 insertions, 0 deletions
| diff --git a/mp.sh b/mp.sh new file mode 100755 index 0000000..1f924a7 --- /dev/null +++ b/mp.sh | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | #!/usr/bin/env sh | ||
| 2 | set -e | ||
| 3 | |||
| 4 | war() { | ||
| 5 | echo "warn: $1" >&2 | ||
| 6 | } | ||
| 7 | die() { | ||
| 8 | echo "err: $1" >&2 | ||
| 9 | exit 1 | ||
| 10 | } | ||
| 11 | ok() { | ||
| 12 | echo "ok: $1" >&2 | ||
| 13 | } | ||
| 14 | |||
| 15 | if command -v doas >/dev/null 2>&1; then | ||
| 16 | rx() { | ||
| 17 | doas "$@" | ||
| 18 | } | ||
| 19 | return | ||
| 20 | elif command -v sudo >/dev/null 2>&1; then | ||
| 21 | rx() { | ||
| 22 | sudo "$@" | ||
| 23 | } | ||
| 24 | return | ||
| 25 | else | ||
| 26 | die "permission elevator not found." | ||
| 27 | fi | ||
| 28 | |||
| 29 | wd="/usr/local/mp" | ||
| 30 | ports="/usr/local/ports/ports" | ||
| 31 | ports_repo="https://codeberg.org/Druid520/ports.git" | ||
| 32 | status="$wd/status" | ||
| 33 | _installed="$wd/installed" | ||
| 34 | installed="$wd/extinstalled" | ||
| 35 | |||
| 36 | cfg="/etc/mp.conf" | ||
| 37 | if [ -f "$cfg" ]; then | ||
| 38 | . "$cfg" | ||
| 39 | else | ||
| 40 | war "cfg not found, creating one." | ||
| 41 | rx touch "$cfg" | ||
| 42 | fi | ||
| 43 | |||
| 44 | mp_add() { | ||
| 45 | rx cp -r "$ports/$1" "$wd/$1" | ||
| 46 | (cd "$wd/$1" && . pkg.conf && rx sh ./add.sh && rx echo "$pkg_name" >> "$_installed" && rx echo "$pkg_name-$pkg_ver ($pkg_license)" >> "$installed") | ||
| 47 | } | ||
| 48 | mp_del() { | ||
| 49 | (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") | ||
| 50 | rx rm -rf "$wd/$1" | ||
| 51 | } | ||
| 52 | mp_upd() { | ||
| 53 | (cd "$ports" && rx git pull) | ||
| 54 | if [ "$1" = "*" ]; then | ||
| 55 | for pkg in $(cat "$_installed"); do | ||
| 56 | (cd "$wd/$pkg" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh) | ||
| 57 | done | ||
| 58 | return | ||
| 59 | fi | ||
| 60 | (cd "$wd/$1" && . pkg.conf && rx sh ./del.sh && rx sh ./add.sh) | ||
| 61 | } | ||
| 62 | mp_init() { | ||
| 63 | if [ -f "$status" ]; then | ||
| 64 | return | ||
| 65 | fi | ||
| 66 | |||
| 67 | war "uninitialized, initializing." | ||
| 68 | rx git clone "$ports_repo" "$ports" --depth 1 | ||
| 69 | rx mkdir -p "$wd" | ||
| 70 | rx touch "$installed" "$_installed" "$status" | ||
| 71 | } | ||
| 72 | |||
| 73 | mp_init | ||
| 74 | if [ $# -ne 2 ]; then | ||
| 75 | die "bad usage. usage: mp <a/d/u> <pkg>." | ||
| 76 | elif [ "$1" = "a" ]; then | ||
| 77 | mp_add "$2" | ||
| 78 | elif [ "$1" = "d" ]; then | ||
| 79 | mp_del "$2" | ||
| 80 | elif [ "$1" = "u" ]; then | ||
| 81 | mp_upd "$2" | ||
| 82 | else | ||
| 83 | die "bad usage. usage: mp <a/d/u> <pkg>." | ||
| 84 | fi | ||
