clan-core/pkgs/clan-cli/clan_cli/dirs.py

47 lines
1.4 KiB
Python
Raw Normal View History

import json
import os
import sys
from pathlib import Path
2023-07-28 10:12:37 +00:00
from .errors import ClanError
def get_clan_flake_toplevel() -> Path:
"""Returns the path to the toplevel of the clan flake"""
2023-07-28 10:12:37 +00:00
for project_file in [".clan-flake", ".git", ".hg", ".svn", "flake.nix"]:
initial_path = Path(os.getcwd())
path = Path(initial_path)
2023-07-28 10:35:41 +00:00
while path.parent != path:
if (path / project_file).exists():
return path
2023-07-28 10:12:37 +00:00
path = path.parent
raise ClanError("Could not find clan flake toplevel directory")
2023-07-29 12:21:28 +00:00
def user_config_dir() -> Path:
if sys.platform == "win32":
2023-07-29 12:21:28 +00:00
return Path(os.getenv("APPDATA", os.path.expanduser("~\\AppData\\Roaming\\")))
elif sys.platform == "darwin":
return Path(os.path.expanduser("~/Library/Application Support/"))
else:
2023-07-29 12:21:28 +00:00
return Path(os.getenv("XDG_CONFIG_HOME", os.path.expanduser("~/.config")))
def module_root() -> Path:
return Path(__file__).parent
def deps_flake() -> Path:
return (module_root() / "deps_flake").resolve()
def nixpkgs() -> Path:
# load the flake.lock json file from the deps_flake and return nodes.nixpkgs.path
with open(deps_flake() / "flake.lock") as f:
flake_lock = json.load(f)
return Path(flake_lock["nodes"]["nixpkgs"]["locked"]["path"])
def unfree_nixpkgs() -> Path:
return module_root() / "nixpkgs" / "unfree"