#!/usr/bin/env python3 import json from app.common import bash_wrapper import shutil def traverse_json_base(json_dict: dict, path: list[str]): final_paths = [] for key, value in json_dict.items(): if isinstance(value, dict): keys = value.keys() if "type" in keys and value["type"] in [ "nixos-configuration", "derivation", ]: final_paths += [".".join(path + [key])] else: final_paths += traverse_json_base(value, path + [key]) return final_paths def traverse_json(json_dict: dict): return traverse_json_base(json_dict, []) def get_derivations(path_to_flake: str): nix_path = shutil.which("nix") flake_show = bash_wrapper(f"{nix_path} flake show --json", path=path_to_flake) if flake_show[1] != 0: raise RuntimeError("flake show returned non-zero exit code") flake_show_json = json.loads(flake_show[0]) derivations = traverse_json(flake_show_json) return derivations