66 lines
1.6 KiB
Python
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)
|