#include "command.hh" #include "common-args.hh" #include "shared.hh" #include "store-api.hh" #include using namespace nix; struct CmdConfig : virtual NixMultiCommand { CmdConfig() : MultiCommand(RegisterCommand::getCommandsFor({"config"})) { } std::string description() override { return "manipulate the Nix configuration"; } Category category() override { return catUtility; } void run() override { if (!command) throw UsageError("'nix config' requires a sub-command."); command->second->run(); } }; struct CmdConfigShow : Command, MixJSON { std::optional name; CmdConfigShow() { expectArgs({ .label = {"name"}, .optional = true, .handler = {&name}, }); } std::string description() override { return "show the Nix configuration or the value of a specific setting"; } Category category() override { return catUtility; } void run() override { if (name) { if (json) { throw UsageError("'--json' is not supported when specifying a setting name"); } std::map settings; globalConfig.getSettings(settings); auto setting = settings.find(*name); if (setting == settings.end()) { throw Error("could not find setting '%1%'", *name); } else { const auto & value = setting->second.value; logger->cout("%s", value); } return; } if (json) { // FIXME: use appropriate JSON types (bool, ints, etc). logger->cout("%s", globalConfig.toJSON().dump()); } else { logger->cout("%s", globalConfig.toKeyValue()); } } }; static auto rCmdConfig = registerCommand("config"); static auto rShowConfig = registerCommand2({"config", "show"});