mirror of
https://github.com/caelestia-dots/cli.git
synced 2026-06-20 07:50:00 -05:00
feat: add install command
Not wired yet
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import json
|
||||
from dataclasses import dataclass, field
|
||||
|
||||
from caelestia.utils.io import warn
|
||||
from caelestia.utils.paths import atomic_dump, dots_state_path
|
||||
|
||||
|
||||
@dataclass
|
||||
class DotsState:
|
||||
# The AUR helper selected selected at install time
|
||||
aur_helper: str = "paru"
|
||||
|
||||
# The git rev of currently applied dots version
|
||||
applied_rev: str | None = None
|
||||
|
||||
# The currently enabled components
|
||||
enabled_components: list[str] = field(default_factory=list)
|
||||
|
||||
# Previously installed packages/local packages
|
||||
packages: list[str] = field(default_factory=list)
|
||||
local_packages: dict[str, list[str]] = field(default_factory=dict)
|
||||
|
||||
@staticmethod
|
||||
def load() -> "DotsState":
|
||||
try:
|
||||
data = json.loads(dots_state_path.read_text())
|
||||
except FileNotFoundError:
|
||||
return DotsState()
|
||||
except json.JSONDecodeError:
|
||||
warn("failed to parse current dots state.")
|
||||
return DotsState()
|
||||
|
||||
return DotsState(
|
||||
aur_helper=data.get("aur_helper"),
|
||||
applied_rev=data.get("applied_rev"),
|
||||
enabled_components=data.get("enabled_components", []),
|
||||
packages=data.get("packages", []),
|
||||
local_packages=data.get("local_packages", {}),
|
||||
)
|
||||
|
||||
def save(self) -> None:
|
||||
atomic_dump(
|
||||
dots_state_path,
|
||||
{
|
||||
"aur_helper": self.aur_helper,
|
||||
"applied_rev": self.applied_rev,
|
||||
"enabled_components": self.enabled_components,
|
||||
"packages": self.packages,
|
||||
"local_packages": self.local_packages,
|
||||
},
|
||||
)
|
||||
Reference in New Issue
Block a user