From 8535338e6f90e59206ad157142e968788a9a3ea0 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Fri, 19 Jun 2026 01:28:47 +1000 Subject: [PATCH] feat: add post package hook + deploy after package Deploy after package install on install command. Update command stays the same --- src/caelestia/subcommands/install.py | 3 ++- src/caelestia/utils/dots/manifest.py | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/caelestia/subcommands/install.py b/src/caelestia/subcommands/install.py index 4ce064d..da3e37d 100644 --- a/src/caelestia/subcommands/install.py +++ b/src/caelestia/subcommands/install.py @@ -38,11 +38,12 @@ class Command: legacy_dir = detect_legacy_repo() # Detect legacy repo first cause deploy overwrites legacy syms source, tip, manifest = self.fetch_manifest() - deployed = self.deploy_configs(source, manifest) try: installer, packages, local_packages = self.install_packages(source, manifest) except PackageError as e: fatal(e) + run_hooks(manifest, "post_package") + deployed = self.deploy_configs(source, manifest) run_hooks(manifest, "post_install") DotsState( diff --git a/src/caelestia/utils/dots/manifest.py b/src/caelestia/utils/dots/manifest.py index 297f3f6..8a516fb 100644 --- a/src/caelestia/utils/dots/manifest.py +++ b/src/caelestia/utils/dots/manifest.py @@ -66,6 +66,7 @@ class ManifestComponent: default: bool = False packages: list[str] = field(default_factory=list) entries: list[ManifestEntry] = field(default_factory=list) + post_package: list[str] = field(default_factory=list) post_install: list[str] = field(default_factory=list) post_update: list[str] = field(default_factory=list) @@ -80,8 +81,9 @@ class _ManifestData: class Manifest: components: dict[str, ManifestComponent] = field(default_factory=dict) packages: list[str] = field(default_factory=list) - post_install: list[str] = field(default_factory=list) - post_update: list[str] = field(default_factory=list) + post_package: list[str] = field(default_factory=list) # Post package install (install cmd only) + post_install: list[str] = field(default_factory=list) # Very end of install cmd + post_update: list[str] = field(default_factory=list) # Very end of update cmd _data: _ManifestData = field(default_factory=_ManifestData, init=False, repr=False) @property @@ -99,6 +101,7 @@ class Manifest: except tomllib.TOMLDecodeError as e: raise ManifestError(f"invalid TOML: {e}") from e + post_package = _validate_str_list(raw.get("post_package", []), "post_package") post_install = _validate_str_list(raw.get("post_install", []), "post_install") post_update = _validate_str_list(raw.get("post_update", []), "post_update") @@ -114,6 +117,7 @@ class Manifest: return Manifest( components=components, packages=packages, + post_package=post_package, post_install=post_install, post_update=post_update, ) @@ -218,6 +222,7 @@ def _parse_component(d: dict[str, Any]) -> ManifestComponent: default=bool(d.get("default", False)), packages=_validate_str_list(d.get("packages", []), f"component '{name}' packages"), entries=[_parse_entry(e) for e in d.get("entries", [])], + post_package=_validate_str_list(d.get("post_package", []), f"component '{name}' post_package"), post_install=_validate_str_list(d.get("post_install", []), f"component '{name}' post_install"), post_update=_validate_str_list(d.get("post_update", []), f"component '{name}' post_update"), )