#!/bin/bash # # Purpose : Keep HamPack current (run by CoreDesktop's `update`, and by install.sh) SELF="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" COREDESKTOP="$HOME/.local/share/coredesktop" source "$COREDESKTOP/utils.sh" # Config files and build steps refer to files in this repo through $HAMPACK_DIR export HAMPACK_DIR="$SELF" FAILED=() # Run one update step; a failure is reported but doesn't stop the later steps step() { local name="$1" shift echo "→ $name..." if ! "$@"; then echo "✗ $name failed." FAILED+=("$name") fi } remove_stale_files() { # The HamPack GUI app (a Go program) was removed, along with its source and build hook rm -f "$HOME/.local/bin/hampack" rm -f "$HOME/.local/share/applications/hampack.desktop" rm -f "$HOME"/.local/share/icons/hicolor/*/apps/computer.young.HamPack.png rm -rf "$HOME/.local/share/HamPack/hampack-src" rm -rf "$HOME/.local/share/HamPack/desktop/icons/hicolor" rm -f "$COREDESKTOP"/updates.d/*hampack-build* # Replaced by CoreDesktop's `update` and `sibling add` rm -f "$HOME/.local/bin/hampackupdate" "$HOME/.local/bin/hampackrefresh" # Paracon is now installed without the version in its file name rm -f "$HOME"/.local/bin/paracon_*.pyz # Hooks from before HamPack was a sibling; 71-siblings.sh now runs this script rm -f "$COREDESKTOP"/updates.d/[0-9][0-9][0-9]-hampack-* } install_tools() { mkdir -p "$HOME/.local/bin" install_script "$SELF/hampackremove" "$HOME/.local/bin/hampackremove" } install_hampack_packages() { source "$SELF/packages.conf" install_packages "${UTILITIES[@]}" && install_packages "${APPLICATIONS[@]}" } install_not1mm() { if command -v uv &> /dev/null && uv tool list 2> /dev/null | grep -q '^not1mm '; then uv tool upgrade not1mm else curl -LsSf uvx.sh/not1mm/install.sh | sh fi } # not1mm installs its own launcher only on first run, so install it up front install_not1mm_desktop() { local uv data uv=$(command -v uv || echo "$HOME/.local/bin/uv") data=$(echo "$("$uv" tool dir)"/not1mm/lib/python3*/site-packages/not1mm/data) [ -f "$data/k6gte-not1mm.desktop" ] || return 1 for size in 32 64 128; do xdg-icon-resource install --size "$size" --context apps --mode user \ "$data/k6gte.not1mm-$size.png" k6gte-not1mm || return 1 done xdg-desktop-menu install --mode user "$data/k6gte-not1mm.desktop" } install_dxpy() { wget -q https://raw.githubusercontent.com/HB9VQQ/dx.py/main/dx.py -O "$HOME/.local/bin/dx.py" && chmod +x "$HOME/.local/bin/dx.py" } install_desktop_files() { mkdir -p "$HOME/.local/share/applications" sed "s|\$HAMPACK_DIR|$SELF|g; s|\$HOME|$HOME|g" "$SELF/desktop/js8call.desktop" \ > "$HOME/.local/share/applications/js8call.desktop" && update-desktop-database "$HOME/.local/share/applications/" } # --- Main --- echo "Updating HamPack..." step "Removing stale HamPack files" remove_stale_files step "Installing HamPack tools" install_tools step "Installing HamPack packages" install_hampack_packages step "Installing Flatpak applications" bash "$SELF/install-flatpaks.sh" step "Installing pre-built binaries" bash "$SELF/install-binaries.sh" step "Installing compiled applications" bash "$SELF/install-compiled.sh" step "Installing Windows applications" bash "$SELF/install-windows-apps.sh" step "Installing not1mm" install_not1mm step "Installing not1mm desktop file" install_not1mm_desktop step "Installing dx.py" install_dxpy step "Installing desktop files" install_desktop_files if (( ${#FAILED[@]} > 0 )); then echo "HamPack updated, with errors in: ${FAILED[*]}" exit 1 fi echo "✓ HamPack updated."