mirror of
https://github.com/gogrlx/snack.git
synced 2026-04-02 05:08:42 -07:00
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")
34 lines
1014 B
Go
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() })
|
|
}
|