Skip to content

Commit

Permalink
nix/show-config: allow getting the value of a specific setting
Browse files Browse the repository at this point in the history
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`.
  • Loading branch information
cole-h authored and iFreilicht committed Jan 28, 2023
1 parent 0a22465 commit e1bace1
Showing 1 changed file with 30 additions and 1 deletion.
31 changes: 30 additions & 1 deletion src/nix/show-config.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down

0 comments on commit e1bace1

Please sign in to comment.