forked from lix-project/lix
nix flake add: Handle ~/.config/nix not existing
Fixes $ nix flake add fnord github:edolstra/fnord error: opening file '/home/eelco/.config/nix/registry.json': No such file or directory
This commit is contained in:
parent
42be60c6af
commit
f9c7176a87
|
@ -23,16 +23,20 @@ std::unique_ptr<FlakeRegistry> readRegistry(const Path & path)
|
||||||
{
|
{
|
||||||
auto registry = std::make_unique<FlakeRegistry>();
|
auto registry = std::make_unique<FlakeRegistry>();
|
||||||
|
|
||||||
auto json = nlohmann::json::parse(readFile(path));
|
try {
|
||||||
|
auto json = nlohmann::json::parse(readFile(path));
|
||||||
|
|
||||||
auto version = json.value("version", 0);
|
auto version = json.value("version", 0);
|
||||||
if (version != 1)
|
if (version != 1)
|
||||||
throw Error("flake registry '%s' has unsupported version %d", path, version);
|
throw Error("flake registry '%s' has unsupported version %d", path, version);
|
||||||
|
|
||||||
auto flakes = json["flakes"];
|
auto flakes = json["flakes"];
|
||||||
for (auto i = flakes.begin(); i != flakes.end(); ++i) {
|
for (auto i = flakes.begin(); i != flakes.end(); ++i) {
|
||||||
FlakeRegistry::Entry entry{FlakeRef(i->value("uri", ""))};
|
FlakeRegistry::Entry entry{FlakeRef(i->value("uri", ""))};
|
||||||
registry->entries.emplace(i.key(), entry);
|
registry->entries.emplace(i.key(), entry);
|
||||||
|
}
|
||||||
|
} catch (SysError & e) {
|
||||||
|
if (e.errNo != ENOENT) throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
return registry;
|
return registry;
|
||||||
|
@ -47,6 +51,7 @@ void writeRegistry(FlakeRegistry registry, Path path)
|
||||||
for (auto elem : registry.entries) {
|
for (auto elem : registry.entries) {
|
||||||
json["flakes"][elem.first] = { {"uri", elem.second.ref.to_string()} };
|
json["flakes"][elem.first] = { {"uri", elem.second.ref.to_string()} };
|
||||||
}
|
}
|
||||||
|
createDirs(dirOf(path));
|
||||||
writeFile(path, json.dump(4)); // The '4' is the number of spaces used in the indentation in the json file.
|
writeFile(path, json.dump(4)); // The '4' is the number of spaces used in the indentation in the json file.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue