Files
MHW-Mod-Manager/squashfs-root/usr/share/mhwmm/core/paths.py
T

66 lines
1.6 KiB
Python

"""XDG directories and library layout."""
from __future__ import annotations
import os
from dataclasses import dataclass
from pathlib import Path
APP_DIRNAME = "mhwilds-mod-manager"
@dataclass(frozen=True)
class Paths:
data_dir: Path
config_dir: Path
@classmethod
def default(cls) -> "Paths":
home = Path.home()
data = Path(os.environ.get("XDG_DATA_HOME") or home / ".local/share")
conf = Path(os.environ.get("XDG_CONFIG_HOME") or home / ".config")
return cls(data / APP_DIRNAME, conf / APP_DIRNAME)
@property
def mods_dir(self) -> Path:
return self.data_dir / "mods"
@property
def downloads_dir(self) -> Path:
return self.data_dir / "downloads"
@property
def state_dir(self) -> Path:
return self.data_dir / "state"
@property
def backup_dir(self) -> Path:
return self.state_dir / "backup"
@property
def trash_dir(self) -> Path:
return self.state_dir / "trash"
@property
def manifest_file(self) -> Path:
return self.state_dir / "deployed.json"
@property
def baseline_file(self) -> Path:
return self.state_dir / "pak-baseline.json"
@property
def settings_file(self) -> Path:
return self.config_dir / "settings.json"
@property
def profiles_file(self) -> Path:
return self.config_dir / "profiles.json"
@property
def secrets_file(self) -> Path:
return self.config_dir / "secrets.json"
def ensure(self) -> None:
for d in (self.mods_dir, self.downloads_dir, self.state_dir, self.backup_dir, self.config_dir):
d.mkdir(parents=True, exist_ok=True)