diff options
author | Cole Helbling <cole.e.helbling@outlook.com> | 2023-01-12 13:42:17 -0800 |
---|---|---|
committer | Cole Helbling <cole.e.helbling@outlook.com> | 2023-01-12 13:56:35 -0800 |
commit | 1fc74afbbae1ae3e78e3c0d2096e81c1e24f9d52 (patch) | |
tree | f1162c4e4d5e0c4e0ee8c6e6eb18e91b7ae260c1 | |
parent | eaa20f25747eb025c7c4e69fa83f0e455a65393f (diff) |
nix/show-config: allow getting the value of a specific setting
Instead of needing to run `nix show-config --json | jq -r
'."warn-dirty".value'` to view the value of `warn-dirty`, you can now
run `nix show-config warn-dirty`.
-rw-r--r-- | src/nix/show-config.cc | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/src/nix/show-config.cc b/src/nix/show-config.cc index 29944e748..3530584f9 100644 --- a/src/nix/show-config.cc +++ b/src/nix/show-config.cc @@ -9,15 +9,44 @@ using namespace nix; struct CmdShowConfig : Command, MixJSON { + std::optional<std::string> name; + + CmdShowConfig() { + expectArgs({ + .label = {"name"}, + .optional = true, + .handler = {&name}, + }); + } + std::string description() override { - return "show the Nix configuration"; + 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<std::string, Config::SettingInfo> 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()); |