aboutsummaryrefslogtreecommitdiff
path: root/src/nix
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2023-03-21 12:58:14 +0100
committerEelco Dolstra <edolstra@gmail.com>2023-03-21 14:03:40 +0100
commit8d6d59cb1ba0a2cfe12f9f444a27833dc531c191 (patch)
treeeb164db30d593d53b7caff644e4c3f522fc5c400 /src/nix
parentcdfa59daa17d647308d8ac48a6b3e1a7328c3640 (diff)
nix store --help: Include store type documentation
Diffstat (limited to 'src/nix')
-rw-r--r--src/nix/describe-stores.cc2
-rw-r--r--src/nix/main.cc31
-rw-r--r--src/nix/store.cc7
-rw-r--r--src/nix/store.md9
4 files changed, 41 insertions, 8 deletions
diff --git a/src/nix/describe-stores.cc b/src/nix/describe-stores.cc
index eafcedd1f..ad6b2f0f8 100644
--- a/src/nix/describe-stores.cc
+++ b/src/nix/describe-stores.cc
@@ -22,7 +22,7 @@ struct CmdDescribeStores : Command, MixJSON
for (auto & implem : *Implementations::registered) {
auto storeConfig = implem.getConfig();
auto storeName = storeConfig->name();
- res[storeName] = storeConfig->toJSON();
+ res[storeName]["settings"] = storeConfig->toJSON();
}
if (json) {
logger->cout("%s", res);
diff --git a/src/nix/main.cc b/src/nix/main.cc
index 7b715f281..0ea6d7784 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -164,11 +164,28 @@ struct NixArgs : virtual MultiCommand, virtual MixCommonArgs
{
commands = RegisterCommand::getCommandsFor({});
}
+
+ std::string dumpCli()
+ {
+ auto res = nlohmann::json::object();
+
+ res["args"] = toJSON();
+
+ auto stores = nlohmann::json::object();
+ for (auto & implem : *Implementations::registered) {
+ auto storeConfig = implem.getConfig();
+ auto storeName = storeConfig->name();
+ stores[storeName]["settings"] = storeConfig->toJSON();
+ }
+ res["stores"] = std::move(stores);
+
+ return res.dump();
+ }
};
/* Render the help for the specified subcommand to stdout using
lowdown. */
-static void showHelp(std::vector<std::string> subcommand, MultiCommand & toplevel)
+static void showHelp(std::vector<std::string> subcommand, NixArgs & toplevel)
{
auto mdName = subcommand.empty() ? "nix" : fmt("nix3-%s", concatStringsSep("-", subcommand));
@@ -189,11 +206,11 @@ static void showHelp(std::vector<std::string> subcommand, MultiCommand & topleve
, "/"),
*vUtils);
- auto attrs = state.buildBindings(16);
- attrs.alloc("toplevel").mkString(toplevel.toJSON().dump());
+ auto vDump = state.allocValue();
+ vDump->mkString(toplevel.dumpCli());
auto vRes = state.allocValue();
- state.callFunction(*vGenerateManpage, state.allocValue()->mkAttrs(attrs), *vRes, noPos);
+ state.callFunction(*vGenerateManpage, *vDump, *vRes, noPos);
auto attr = vRes->attrs->get(state.symbols.create(mdName + ".md"));
if (!attr)
@@ -234,7 +251,7 @@ struct CmdHelp : Command
assert(parent);
MultiCommand * toplevel = parent;
while (toplevel->parent) toplevel = toplevel->parent;
- showHelp(subcommand, *toplevel);
+ showHelp(subcommand, dynamic_cast<NixArgs &>(*toplevel));
}
};
@@ -291,8 +308,8 @@ void mainWrapped(int argc, char * * argv)
NixArgs args;
- if (argc == 2 && std::string(argv[1]) == "__dump-args") {
- logger->cout("%s", args.toJSON());
+ if (argc == 2 && std::string(argv[1]) == "__dump-cli") {
+ logger->cout(args.dumpCli());
return;
}
diff --git a/src/nix/store.cc b/src/nix/store.cc
index 2879e03b3..72b037488 100644
--- a/src/nix/store.cc
+++ b/src/nix/store.cc
@@ -12,6 +12,13 @@ struct CmdStore : virtual NixMultiCommand
return "manipulate a Nix store";
}
+ std::string doc() override
+ {
+ return
+ #include "store.md"
+ ;
+ }
+
Category category() override { return catUtility; }
void run() override
diff --git a/src/nix/store.md b/src/nix/store.md
new file mode 100644
index 000000000..d80a3b1be
--- /dev/null
+++ b/src/nix/store.md
@@ -0,0 +1,9 @@
+R"(
+
+# Store types
+
+Nix supports different types of stores. These are listed below.
+
+@stores@
+
+)"