aboutsummaryrefslogtreecommitdiff
path: root/src/nix/show-config.cc
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-01-30 09:46:43 -0500
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-01-30 09:46:43 -0500
commitadb36080342488c0414a944c20c949938132e153 (patch)
tree485992ab68908a240b534a545a9724107de0cf14 /src/nix/show-config.cc
parent4540e7b940ca56db821fe7c7d7d79fafa488f55e (diff)
parentf3e272ba02c3167b65a635389394f97a733440ca (diff)
Merge branch 'small-storePath-cleanups' into path-info
Diffstat (limited to 'src/nix/show-config.cc')
-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());