51 lines
1.5 KiB
Python
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")
|