38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
"""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)
|