#!/bin/bash set -euo pipefail source ${HOME}/bin/script_framework.sh TARGET="${HOME}/.local/share/arch-package-index" # Check for pacman (and with it for Archlinux) which pacman >/dev/null 2>&1 || { fail "Tool 'pacman' not found: This script only works for Archlinux" } # Check for comm to be installed which comm >/dev/null 2>&1 || { fail "Please install 'comm' utility" } # Ensure the target dir exists mkdir -p ${TARGET} # CD into target dir pushd ${TARGET} >/dev/null 2>&1 if ! [ -d .git ]; then step "Initializing empty git dir" git init -q fi [ -f groups.txt ] || { warn "No groups.txt found, creating one with 'base' group." warn "You might want to edit your ${TARGET}/groups.txt and add more groups installed on your system..." echo "base" >groups.txt } step "Collecting installed packages..." # Collect packages not contained in groups pacman -Qgq $(cat groups.txt) | sort >group-packages.txt # Collect packages comm -23 <(pacman -Qeq | sort) group-packages.txt >non-group-packages.txt comm -23 <(pacman -Qeqn | sort) group-packages.txt >official-packages.txt comm -23 non-group-packages.txt official-packages.txt >aur-packages.txt # Remove temporary stores rm group-packages.txt non-group-packages.txt info "Package files updated" step "Creating update commit..." git_files=( aur-packages.txt groups.txt official-packages.txt ) git add "${git_files[@]}" git commit -q --no-gpg-sign -m 'Update from arch-package-index' "${git_files[@]}" popd >/dev/null 2>&1