Files

51 lines
1.5 KiB
Python

"""Package concern loading for Decman profiles."""
from __future__ import annotations
from pathlib import Path
import decman
from decman.plugins import aur, pacman
from modules import npm_packages
ROOT = Path(__file__).resolve().parents[1]
PACKAGES = ROOT / "packages"
def _names(path: Path) -> set[str]:
return {
line.strip()
for line in path.read_text(encoding="utf-8").splitlines()
if line.strip()
}
class PackageConcern(decman.Module):
"""One named concern backed by native and AUR package lists."""
def __init__(self, concern: str) -> None:
super().__init__(f"packages:{concern}")
self.concern = concern
@pacman.packages
def native_packages(self) -> set[str]:
return _names(PACKAGES / f"{self.concern}-repo.txt")
@aur.packages
def aur_packages(self) -> set[str]:
return _names(PACKAGES / f"{self.concern}-aur.txt")
@npm_packages.packages
def global_npm_packages(self) -> set[str]:
path = PACKAGES / f"{self.concern}-npm.txt"
return _names(path) if path.exists() else set()
def configure_no_removal_guard() -> None:
"""Keep Decman from pruning current dependency-orphans during adoption."""
if decman.pacman is None or decman.aur is None:
raise decman.SourceError("pacman and AUR plugins must be available")
decman.pacman.ignored_packages |= _names(PACKAGES / "ignored/repo-dependencies.txt")
decman.aur.ignored_packages |= _names(PACKAGES / "ignored/aur-dependencies.txt")