"""XDG-compliant path constants for DevFlow.""" import os from pathlib import Path def _xdg(env_var: str, fallback: str) -> Path: return Path(os.environ.get(env_var, fallback)) HOME = Path.home() CONFIG_DIR = _xdg("XDG_CONFIG_HOME", str(HOME / ".config")) / "devflow" DATA_DIR = _xdg("XDG_DATA_HOME", str(HOME / ".local" / "share")) / "devflow" STATE_DIR = _xdg("XDG_STATE_HOME", str(HOME / ".local" / "state")) / "devflow" MANIFEST_FILE = CONFIG_DIR / "manifest.yaml" CONFIG_FILE = CONFIG_DIR / "config" DOTFILES_DIR = DATA_DIR / "dotfiles" PACKAGES_DIR = DATA_DIR / "packages" SCRATCH_DIR = DATA_DIR / "scratch" PROJECTS_DIR = HOME / "projects" LINKED_STATE = STATE_DIR / "linked.json" INSTALLED_STATE = STATE_DIR / "installed.json" # Self-hosted flow config paths (from dotfiles repo) DOTFILES_FLOW_CONFIG = DOTFILES_DIR / "flow" / ".config" / "flow" DOTFILES_MANIFEST = DOTFILES_FLOW_CONFIG / "manifest.yaml" DOTFILES_CONFIG = DOTFILES_FLOW_CONFIG / "config" def ensure_dirs() -> None: """Create all required directories if they don't exist.""" for d in (CONFIG_DIR, DATA_DIR, STATE_DIR, PACKAGES_DIR, SCRATCH_DIR): d.mkdir(parents=True, exist_ok=True)