aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCole Helbling <cole.e.helbling@outlook.com>2023-01-12 13:42:17 -0800
committerCole Helbling <cole.e.helbling@outlook.com>2023-01-12 13:56:35 -0800
commit1fc74afbbae1ae3e78e3c0d2096e81c1e24f9d52 (patch)
treef1162c4e4d5e0c4e0ee8c6e6eb18e91b7ae260c1
parenteaa20f25747eb025c7c4e69fa83f0e455a65393f (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.cc31
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());