Files
snack/detect/detect_linux.go
Tai Groot eb999ad391 feat(aur): implement native AUR client
Native Go implementation using the AUR RPC v5 API for search/info
queries and git+makepkg+pacman for building and installing packages.

Implements:
- Manager (full: Install, Remove, Purge, Upgrade, Update, List, Search,
  Info, IsInstalled, Version)
- VersionQuerier (LatestVersion, ListUpgrades, UpgradeAvailable, VersionCmp)
- Cleaner (Autoremove via pacman, Clean build dir)
- PackageUpgrader (UpgradePackages)

Key design decisions:
- No CLI wrapper (paru/yay) — uses AUR RPC API directly + git clone
- Packages are built with makepkg and installed via pacman -U
- Foreign packages (pacman -Qm) are treated as AUR packages for List
- Batch RPC queries (rpcInfoMulti) for efficient upgrade checks
- Configurable build directory and makepkg flags
- Not added to detect.Default() candidates (AUR supplements pacman,
  not replaces it) but available via detect.ByName("aur")
2026-03-05 22:50:35 +00:00

34 lines
1014 B
Go

//go:build linux
package detect
import (
"github.com/gogrlx/snack"
"github.com/gogrlx/snack/apk"
"github.com/gogrlx/snack/apt"
"github.com/gogrlx/snack/aur"
"github.com/gogrlx/snack/dnf"
"github.com/gogrlx/snack/flatpak"
"github.com/gogrlx/snack/pacman"
"github.com/gogrlx/snack/snap"
)
// candidates returns manager factories in probe order for Linux.
// The first available manager wins for Default().
func candidates() []managerFactory {
return []managerFactory{
func() snack.Manager { return apt.New() },
func() snack.Manager { return dnf.New() },
func() snack.Manager { return pacman.New() },
func() snack.Manager { return apk.New() },
func() snack.Manager { return flatpak.New() },
func() snack.Manager { return snap.New() },
}
}
// allManagers returns all known manager factories (for ByName).
// Includes supplemental managers like AUR that aren't primary candidates.
func allManagers() []managerFactory {
return append(candidates(), func() snack.Manager { return aur.New() })
}