diff options
author | Eelco Dolstra <edolstra@gmail.com> | 2023-01-23 17:56:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-23 17:56:39 +0100 |
commit | f503ba1b8b5912083a6112e3cf082e3525ba258d (patch) | |
tree | e713e42b7ffc91de9f31971253f99a0b198108f4 | |
parent | 9b56683398de777219627c96be75c0195e630cb7 (diff) | |
parent | 7f195d058c0077a98c48116c7198d97ab194c74a (diff) |
Merge pull request #7595 from cole-h/show-setting-value
nix/show-config: allow getting the value of a specific setting
-rw-r--r-- | src/nix/show-config.cc | 31 | ||||
-rw-r--r-- | tests/config.sh | 5 |
2 files changed, 35 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()); diff --git a/tests/config.sh b/tests/config.sh index 3d0da3cef..723f575ed 100644 --- a/tests/config.sh +++ b/tests/config.sh @@ -51,3 +51,8 @@ exp_features=$(nix show-config | grep '^experimental-features' | cut -d '=' -f 2 [[ $prev != $exp_cores ]] [[ $exp_cores == "4242" ]] [[ $exp_features == "flakes nix-command" ]] + +# Test that it's possible to retrieve a single setting's value +val=$(nix show-config | grep '^warn-dirty' | cut -d '=' -f 2 | xargs) +val2=$(nix show-config warn-dirty) +[[ $val == $val2 ]] |