#include "types.hh" #include "flakeref.hh" #include namespace nix { static const size_t FLAG_REGISTRY = 0; static const size_t USER_REGISTRY = 1; static const size_t GLOBAL_REGISTRY = 2; struct Value; class EvalState; struct FlakeRegistry { std::map entries; }; struct LockFile { struct FlakeEntry { FlakeRef ref; std::map flakeEntries; std::map nonFlakeEntries; FlakeEntry(const FlakeRef & flakeRef) : ref(flakeRef) {}; }; std::map flakeEntries; std::map nonFlakeEntries; }; typedef std::vector> Registries; Path getUserRegistryPath(); enum RegistryAccess { DisallowRegistry, AllowRegistry, AllowRegistryAtTop }; void makeFlakeValue(EvalState & state, const FlakeRef & flakeRef, RegistryAccess registryAccess, Value & v); std::shared_ptr readRegistry(const Path &); void writeRegistry(const FlakeRegistry &, const Path &); struct FlakeSourceInfo { FlakeRef flakeRef; Path storePath; std::optional rev; std::optional revCount; // date FlakeSourceInfo(const FlakeRef & flakeRef) : flakeRef(flakeRef) { } }; struct Flake { FlakeId id; FlakeRef ref; std::string description; FlakeSourceInfo sourceInfo; std::vector requires; std::map nonFlakeRequires; Value * vProvides; // FIXME: gc Flake(const FlakeRef & flakeRef, FlakeSourceInfo && sourceInfo) : ref(flakeRef), sourceInfo(sourceInfo) {}; }; struct NonFlake { FlakeAlias alias; FlakeRef ref; Path path; // date // content hash NonFlake(const FlakeRef flakeRef) : ref(flakeRef) {}; }; std::shared_ptr getGlobalRegistry(); Flake getFlake(EvalState &, const FlakeRef &, bool impureIsAllowed); struct ResolvedFlake { Flake flake; std::vector flakeDeps; // The flake dependencies std::vector nonFlakeDeps; ResolvedFlake(const Flake & flake) : flake(flake) {} }; ResolvedFlake resolveFlake(EvalState &, const FlakeRef &, RegistryAccess registryAccess, bool isTopFlake = true); void updateLockFile(EvalState &, const Path & path); void gitCloneFlake (std::string flakeUri, EvalState &, Registries, Path); }