From 166d9f00d0b769365ed40f6f190558a37396f643 Mon Sep 17 00:00:00 2001 From: Krzysztof kuhy Rudnicki Date: Fri, 10 Jul 2026 17:35:38 +0200 Subject: [PATCH] Rename Arch package to todo-flutter to avoid AUR name collision The install script published the package as `todo`, colliding with the unrelated `aur/todo` CLI. pacman keyed on the shared name, so `yay -Sua` kept trying to "upgrade" this app to the AUR tool (and installing over it downgraded/replaced the app). Rename pkgname to `todo-flutter` (command stays `/usr/bin/todo`), add conflicts/replaces=('todo'), and remove any stale `todo`/`todo-debug` package before install so the shared /usr/bin/todo can't cause a file conflict. Co-Authored-By: Claude Opus 4.8 --- install_arch.sh | 80 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100755 install_arch.sh diff --git a/install_arch.sh b/install_arch.sh new file mode 100755 index 0000000..1a7c8b1 --- /dev/null +++ b/install_arch.sh @@ -0,0 +1,80 @@ +#!/bin/bash +# Builds the todo Flutter app and installs it as an Arch Linux package via pacman. +# Run from anywhere — uses the directory of this script as the repo root. +# Requires: flutter, base-devel (provides makepkg), sudo for pacman. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BUNDLE_DIR="$SCRIPT_DIR/build/linux/x64/release/bundle" +WORK_DIR="$(mktemp -d)" + +cleanup() { rm -rf "$WORK_DIR"; } +trap cleanup EXIT + +# Parse version from pubspec.yaml (strip build number: 1.0.0+1 → 1.0.0) +PKGVER="$(grep '^version:' "$SCRIPT_DIR/pubspec.yaml" | sed 's/^version:[[:space:]]*//' | sed 's/+.*//')" + +echo "==> Building todo $PKGVER (Flutter release)..." +cd "$SCRIPT_DIR" +flutter build linux --release + +echo "==> Generating PKGBUILD..." +# pkgname is 'todo-flutter', NOT 'todo': the AUR already ships an unrelated +# package literally named 'todo' (a todo.txt CLI). Sharing the name made pacman +# treat them as one package — `yay -Sua` kept trying to "upgrade" this app to +# the AUR tool. conflicts/replaces let a clean upgrade supersede any stray +# 'todo' still installed under the old name. +cat > "$WORK_DIR/PKGBUILD" < "\$pkgdir/usr/bin/todo" <<'WRAPPER' +#!/bin/bash +exec /opt/todo/todo "\$@" +WRAPPER + chmod 755 "\$pkgdir/usr/bin/todo" +} +EOF + +# Remove any package still installed under the old 'todo' name (this app's +# prior builds, or the unrelated AUR 'todo' CLI). Both own /usr/bin/todo and +# would cause a file conflict when todo-flutter installs. -Rdd skips dep checks +# so an installed todo-debug can't block removal. +for stale in todo todo-debug; do + if pacman -Qq "$stale" &>/dev/null; then + echo "==> Removing stale '$stale' package (name-collision cleanup)..." + sudo pacman -Rdd --noconfirm "$stale" + fi +done + +echo "==> Installing package via makepkg..." +cd "$WORK_DIR" +makepkg -sif --noconfirm + +# Remove stale wrappers that shadow /usr/bin/todo from the package. +# ~/.local/bin and /usr/local/bin both precede /usr/bin in PATH. +if [[ -f "$HOME/.local/bin/todo" ]]; then + echo "==> Removing old ~/.local/bin/todo..." + rm "$HOME/.local/bin/todo" +fi +if [[ -f "/usr/local/bin/todo" ]]; then + echo "==> Removing old /usr/local/bin/todo (requires sudo)..." + sudo rm "/usr/local/bin/todo" +fi + +echo "==> Done. 'todo' now runs version $PKGVER installed via pacman."