#!/bin/sh set -eu usage () { echo "Usage: $(basename "$0") [-d] [$(list_supported | tr '\n' '|')]" } header () { printf '\n\e[1;92m=== %s ====\e[0m\n\n' "$*" >&2 } fail() { printf '\e[1;91m%s\e[0m\n' "$*" >&2 exit 1 } has() { command -v "$1" >/dev/null 2>&1 } _apt () { has apt-get || fail apt-get not found. header Updating APT if [ -n "${DOWNLOAD_ONLY:-}" ] then sudo /bin/sh -c 'apt-get update && apt-get dist-upgrade -o DPkg::Lock::Timeout=300 --download-only --yes && apt-get autoclean' else sudo /bin/sh -c 'apt-get update && apt-get dist-upgrade -o DPkg::Lock::Timeout=300 --yes --auto-remove --purge && apt-get autoclean' fi } _flatpak() { has flatpak || fail flatpak not found. header Updating Flatpak flatpak --system update --appstream if [ -n "${DOWNLOAD_ONLY:-}" ] then flatpak --system update --assumeyes --no-deploy else flatpak --system update --assumeyes flatpak --system uninstall --unused --assumeyes fi } _workbench() { has wb || fail wb not found. ! wb -i || fail Cannot update the workbench container from inside the workbench container. header Updating Workbench if [ -n "${DOWNLOAD_ONLY:-}" ] then wb --dry-update else wb --update fi } _pkg_add() { has pkg_add || fail pkg_add not found. header Updating Workbench if [ -n "${DOWNLOAD_ONLY:-}" ] then doas pkg_add -un else doas pkg_add -u } _all() { ! has apt-get || _apt ! has pkg_add || _pkg_add ! has flatpak || _flatpak ! { has wb || wb -i; } || _workbench } list_supported() { ! has apt-get || echo apt ! has pkg_add || echo pkg_add ! has flatpak || echo flatpak ! has wb || wb -i || echo workbench printf '%s' all } while getopts 'dhl' opt do case "$opt" in d) DOWNLOAD_ONLY=1;; h) usage; exit;; l) list_supported; exit;; *) usage; exit 1;; esac done shift "$(( OPTIND - 1 ))" if [ "$#" -eq 0 ] then _all elif [ "$#" -gt 1 ] then usage exit 1 else case "$1" in all) _all;; apt) _apt;; flatpak) _flatpak;; workbench|wb) _workbench;; pkg|pkg_add) _pkg_add;; *) usage; exit 1;; esac fi