200 lines
7.7 KiB
Bash
Executable File
200 lines
7.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ============================================================================
|
|
# build-end4-deps.sh — Build ALL end-4 (illogical-impulse) AUR dependencies
|
|
#
|
|
# This script builds every AUR package required by the end-4 dots-hyprland
|
|
# dotfiles that is NOT in the official Arch repos or chaotic-aur.
|
|
#
|
|
# It uses --noconfirm throughout so the entire run is non-interactive.
|
|
#
|
|
# Usage:
|
|
# ./localrepo/build-end4-deps.sh # build all
|
|
# ./localrepo/build-end4-deps.sh --quick # skip large AUR pkgs (use existing)
|
|
#
|
|
# After building, run ./localrepo/update.sh to refresh the repo database.
|
|
# ============================================================================
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_DIR="${SCRIPT_DIR}"
|
|
WORK_DIR=$(mktemp -d /tmp/end4-build.XXXXXX)
|
|
SKIP_LARGE=false
|
|
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--quick) SKIP_LARGE=true ;;
|
|
esac
|
|
done
|
|
|
|
# ── colours ──────────────────────────────────────────────────────────────────
|
|
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m'
|
|
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
|
|
ok() { echo -e "${GREEN}[OK]${NC} $*"; }
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
|
|
fail() { echo -e "${RED}[FAIL]${NC} $*"; }
|
|
|
|
# ── helper: build a single AUR package ───────────────────────────────────────
|
|
build_aur_pkg() {
|
|
local pkg="$1"
|
|
local src_url="https://aur.archlinux.org/cgit/aur.git/snapshot/${pkg}.tar.gz"
|
|
local pkg_dir="${WORK_DIR}/${pkg}"
|
|
|
|
info "Building AUR package: ${pkg}"
|
|
mkdir -p "${pkg_dir}"
|
|
if ! curl -fsSL "${src_url}" | tar xz -C "${WORK_DIR}"; then
|
|
fail "Failed to download ${pkg}"; return 1
|
|
fi
|
|
if ! (cd "${pkg_dir}" && makepkg -sfi --noconfirm --cleanbuild); then
|
|
fail "Failed to build ${pkg}"; return 1
|
|
fi
|
|
# Move built packages to localrepo
|
|
find "${pkg_dir}" -maxdepth 1 -name '*.pkg.tar.zst' -exec mv -f {} "${REPO_DIR}/" \;
|
|
ok "Built: ${pkg}"
|
|
return 0
|
|
}
|
|
|
|
# ── helper: build from a local PKGBUILD directory ────────────────────────────
|
|
build_local_pkgbuild() {
|
|
local pkg_dir="$1"
|
|
local pkg_name
|
|
pkg_name=$(basename "${pkg_dir}")
|
|
|
|
if ls "${REPO_DIR}"/illogical-impulse-"${pkg_name}"-*.pkg.tar.zst 1>/dev/null 2>&1; then
|
|
info "Package already exists in localrepo, skipping: ${pkg_name}"
|
|
return 0
|
|
fi
|
|
|
|
info "Building local PKGBUILD: ${pkg_name}"
|
|
if ! (cd "${pkg_dir}" && makepkg -sfi --noconfirm --cleanbuild); then
|
|
fail "Failed to build ${pkg_name}"; return 1
|
|
fi
|
|
find "${pkg_dir}" -maxdepth 1 -name '*.pkg.tar.zst' -exec mv -f {} "${REPO_DIR}/" \;
|
|
ok "Built: ${pkg_name}"
|
|
return 0
|
|
}
|
|
|
|
# ============================================================================
|
|
# 1. Build end-4 metapackages from local PKGBUILDs
|
|
# ============================================================================
|
|
info "═══ Step 1: Building end-4 metapackages ═══"
|
|
for pkg_dir in "${SCRIPT_DIR}"/end4-pkgbuilds/*/; do
|
|
build_local_pkgbuild "${pkg_dir}" || true
|
|
done
|
|
|
|
# ============================================================================
|
|
# 2. Build AUR dependencies required by end-4
|
|
# ============================================================================
|
|
info "═══ Step 2: Building AUR dependencies ═══"
|
|
|
|
# ── Theming & appearance ─────────────────────────────────────────────────────
|
|
AUR_THEMING=(
|
|
adw-gtk-theme-git
|
|
darkly-bin
|
|
ttf-material-symbols-variable-git
|
|
ttf-readex-pro
|
|
ttf-rubik-vf
|
|
ttf-twemoji
|
|
otf-space-grotesk
|
|
kde-material-you-colors-git
|
|
)
|
|
|
|
# ── end-4 specific / build-from-source packages ──────────────────────────────
|
|
# matugen — material you color generation tool
|
|
# speech-dispatcher — may need AUR build on some setups
|
|
AUR_TOOLS=(
|
|
matugen
|
|
python-rpypostprocess
|
|
tts
|
|
)
|
|
|
|
# ── Packages not in any standard repo ────────────────────────────────────────
|
|
AUR_MISSING=(
|
|
asciinema-agg
|
|
davs2
|
|
syncthingtray-qt6
|
|
varia
|
|
woeusb-ng
|
|
ttf-ms-fonts
|
|
)
|
|
|
|
# ── Large / complex builds (skipped with --quick) ────────────────────────────
|
|
AUR_LARGE=(
|
|
# quickshell is already built from end4-pkgbuilds above
|
|
)
|
|
|
|
# ── Run builds ───────────────────────────────────────────────────────────────
|
|
FAILED=()
|
|
|
|
for pkg in "${AUR_THEMING[@]}" "${AUR_TOOLS[@]}" "${AUR_MISSING[@]}"; do
|
|
build_aur_pkg "${pkg}" || FAILED+=("${pkg}")
|
|
done
|
|
|
|
if [[ "${SKIP_LARGE}" == false ]]; then
|
|
for pkg in "${AUR_LARGE[@]}"; do
|
|
build_aur_pkg "${pkg}" || FAILED+=("${pkg}")
|
|
done
|
|
fi
|
|
|
|
# ============================================================================
|
|
# 3. Build end-4 setup script dependencies (from dots-hyprland/setup)
|
|
# ============================================================================
|
|
info "═══ Step 3: Building end-4 setup helper packages ═══"
|
|
|
|
DOTS_DIR="${HOME}/dots-hyprland"
|
|
if [[ -d "${DOTS_DIR}" ]]; then
|
|
# Build any remaining metapackages from the dist-arch directory
|
|
for pkg_dir in "${DOTS_DIR}"/sdata/dist-arch/illogical-impulse-*/; do
|
|
pkg_name=$(basename "${pkg_dir}")
|
|
# Skip the ones we already built above
|
|
if ls "${REPO_DIR}"/illogical-impulse-"${pkg_name#illogical-impulse-}"-*.pkg.tar.zst 1>/dev/null 2>&1; then
|
|
info "Already built, skipping: ${pkg_name}"
|
|
continue
|
|
fi
|
|
# Only build packages that have a PKGBUILD (metapackages with depends=())
|
|
if [[ -f "${pkg_dir}/PKGBUILD" ]]; then
|
|
info "Building from dots-hyprland: ${pkg_name}"
|
|
(cd "${pkg_dir}" && makepkg -sfi --noconfirm --cleanbuild) || {
|
|
warn "Failed to build ${pkg_name} from dots-hyprland, skipping"
|
|
continue
|
|
}
|
|
find "${pkg_dir}" -maxdepth 1 -name '*.pkg.tar.zst' -exec mv -f {} "${REPO_DIR}/" \;
|
|
ok "Built: ${pkg_name}"
|
|
fi
|
|
done
|
|
else
|
|
warn "dots-hyprland not found at ${DOTS_DIR}, skipping dist-arch builds"
|
|
fi
|
|
|
|
# ============================================================================
|
|
# 4. Refresh local repository database
|
|
# ============================================================================
|
|
info "═══ Step 4: Refreshing local repository database ═══"
|
|
|
|
bash "${SCRIPT_DIR}/update.sh"
|
|
|
|
# ============================================================================
|
|
# 5. Cleanup & summary
|
|
# ============================================================================
|
|
rm -rf "${WORK_DIR}"
|
|
|
|
echo ""
|
|
echo "═══════════════════════════════════════════════════════════════"
|
|
if [[ ${#FAILED[@]} -gt 0 ]]; then
|
|
warn "Build completed with ${#FAILED[@]} failures:"
|
|
for f in "${FAILED[@]}"; do
|
|
echo " ✗ ${f}"
|
|
done
|
|
echo ""
|
|
echo "The following packages were built successfully into localrepo:"
|
|
else
|
|
ok "All builds completed successfully!"
|
|
fi
|
|
|
|
echo ""
|
|
echo "Packages in localrepo:"
|
|
for p in "${REPO_DIR}"/*.pkg.tar.zst; do
|
|
[[ -e "${p}" ]] || continue
|
|
echo " ✓ $(basename "${p}")"
|
|
done
|
|
echo "═══════════════════════════════════════════════════════════════"
|