diff --git a/doc/json_schema.json b/doc/json_schema.json index b099900da..ddb007448 100644 --- a/doc/json_schema.json +++ b/doc/json_schema.json @@ -344,10 +344,19 @@ "binaryPrefix": { "type": "string", "title": "Set the binary prefix to used when printing bytes", - "enum": [ - "iec", - "si", - "jedec" + "oneOf": [ + { + "const": "iec", + "description": "1024 Bytes = 1 KiB, 1024 KiB = 1 MiB, ... (standard)" + }, + { + "const": "si", + "description": "1000 Bytes = 1 KB, 1000 KB = 1 MB, ..." + }, + { + "const": "jedec", + "description": "1024 Bytes = 1 kB, 1024 K = 1 MB, ..." + } ] }, "sizeNdigits": { @@ -602,10 +611,10 @@ "oneOf": [ { "title": "Break", - "description": "Print a empty line", "properties": { "type": { - "const": "break" + "const": "break", + "description": "Print a empty line" } }, "additionalProperties": false diff --git a/src/fastfetch.c b/src/fastfetch.c index 234d58e81..6524bfc5b 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -652,6 +652,7 @@ static void run(FFdata* data) static void migrateConfig(FFdata* data) { ffOptionsGenerateLogoJsonConfig(&instance.config.logo, instance.state.migrateConfigDoc); + ffOptionsGenerateDisplayJsonConfig(&instance.config.display, instance.state.migrateConfigDoc); ffMigrateCommandOptionToJsonc(data); } diff --git a/src/options/display.c b/src/options/display.c index 5386d8b5c..6391bc87f 100644 --- a/src/options/display.c +++ b/src/options/display.c @@ -296,3 +296,128 @@ void ffOptionsDestroyDisplay(FFOptionsDisplay* options) ffStrbufDestroy(&options->barCharElapsed); ffStrbufDestroy(&options->barCharTotal); } + +void ffOptionsGenerateDisplayJsonConfig(FFOptionsDisplay* options, yyjson_mut_doc* doc) +{ + __attribute__((__cleanup__(ffOptionsDestroyDisplay))) FFOptionsDisplay defaultOptions; + ffOptionsInitDisplay(&defaultOptions); + + yyjson_mut_val* obj = yyjson_mut_obj(doc); + + if (options->stat != defaultOptions.stat) + yyjson_mut_obj_add_bool(doc, obj, "stat", options->stat); + + if (options->pipe != defaultOptions.pipe) + yyjson_mut_obj_add_bool(doc, obj, "pipe", options->pipe); + + if (options->showErrors != defaultOptions.showErrors) + yyjson_mut_obj_add_bool(doc, obj, "showErrors", options->showErrors); + + if (options->disableLinewrap != defaultOptions.disableLinewrap) + yyjson_mut_obj_add_bool(doc, obj, "disableLinewrap", options->disableLinewrap); + + if (options->hideCursor != defaultOptions.hideCursor) + yyjson_mut_obj_add_bool(doc, obj, "hideCursor", options->hideCursor); + + if (!ffStrbufEqual(&options->keyValueSeparator, &defaultOptions.keyValueSeparator)) + yyjson_mut_obj_add_strbuf(doc, obj, "separator", &options->keyValueSeparator); + + { + yyjson_mut_val* color = yyjson_mut_obj(doc); + if (!ffStrbufEqual(&options->colorKeys, &defaultOptions.colorKeys)) + yyjson_mut_obj_add_strbuf(doc, color, "keys", &options->colorKeys); + if (!ffStrbufEqual(&options->colorTitle, &defaultOptions.colorTitle)) + yyjson_mut_obj_add_strbuf(doc, color, "title", &options->colorTitle); + if (yyjson_mut_obj_size(color) > 0) + { + if (yyjson_mut_obj_size(color) == 2 && ffStrbufEqual(&options->colorKeys, &options->colorTitle)) + yyjson_mut_obj_add_strbuf(doc, obj, "color", &options->colorKeys); + else + yyjson_mut_obj_add_val(doc, obj, "color", color); + } + } + + if (options->brightColor != defaultOptions.brightColor) + yyjson_mut_obj_add_bool(doc, obj, "brightColor", options->brightColor); + + if (options->binaryPrefixType != defaultOptions.binaryPrefixType) + { + switch (options->binaryPrefixType) + { + case FF_BINARY_PREFIX_TYPE_IEC: + yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "iec"); + break; + case FF_BINARY_PREFIX_TYPE_SI: + yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "si"); + break; + case FF_BINARY_PREFIX_TYPE_JEDEC: + yyjson_mut_obj_add_str(doc, obj, "binaryPrefix", "jedec"); + break; + + } + } + + if (options->sizeNdigits != defaultOptions.sizeNdigits) + yyjson_mut_obj_add_uint(doc, obj, "sizeNdigits", options->sizeNdigits); + + if (options->sizeMaxPrefix != defaultOptions.sizeMaxPrefix && options->sizeMaxPrefix <= 8) + { + yyjson_mut_obj_add_str(doc, obj, "sizeMaxPrefix", ((const char* []) { + "B", + "kB", + "MB", + "GB", + "TB", + "PB", + "EB", + "ZB", + "YB", + })[options->sizeMaxPrefix]); + } + + if (options->temperatureUnit != defaultOptions.temperatureUnit) + { + switch (options->temperatureUnit) + { + case FF_TEMPERATURE_UNIT_CELSIUS: + yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "C"); + break; + case FF_TEMPERATURE_UNIT_FAHRENHEIT: + yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "F"); + break; + case FF_TEMPERATURE_UNIT_KELVIN: + yyjson_mut_obj_add_str(doc, obj, "temperatureUnit", "K"); + break; + } + } + + if (options->percentType != defaultOptions.percentType) + yyjson_mut_obj_add_uint(doc, obj, "percentType", options->percentType); + + if (options->percentNdigits != defaultOptions.percentNdigits) + yyjson_mut_obj_add_uint(doc, obj, "percentNdigits", options->percentNdigits); + + { + yyjson_mut_val* bar = yyjson_mut_obj(doc); + if (!ffStrbufEqual(&options->barCharElapsed, &defaultOptions.barCharElapsed)) + yyjson_mut_obj_add_strbuf(doc, bar, "charElapsed", &options->barCharElapsed); + if (!ffStrbufEqual(&options->barCharTotal, &defaultOptions.barCharTotal)) + yyjson_mut_obj_add_strbuf(doc, bar, "charTotal", &options->barCharTotal); + if (options->barBorder != defaultOptions.barBorder) + yyjson_mut_obj_add_bool(doc, bar, "border", options->barBorder); + if (options->barWidth != defaultOptions.barWidth) + yyjson_mut_obj_add_uint(doc, bar, "width", options->barWidth); + + if (yyjson_mut_obj_size(bar) > 0) + yyjson_mut_obj_add_val(doc, obj, "bar", bar); + } + + if (options->noBuffer != defaultOptions.noBuffer) + yyjson_mut_obj_add_bool(doc, obj, "noBuffer", options->noBuffer); + + if (options->keyWidth != defaultOptions.keyWidth) + yyjson_mut_obj_add_uint(doc, obj, "keyWidth", options->keyWidth); + + if (yyjson_mut_obj_size(obj) > 0) + yyjson_mut_obj_add_val(doc, doc->root, "display", obj); +} diff --git a/src/options/display.h b/src/options/display.h index 9bc9aee2b..4591734c5 100644 --- a/src/options/display.h +++ b/src/options/display.h @@ -49,3 +49,4 @@ const char* ffOptionsParseDisplayJsonConfig(FFOptionsDisplay* options, yyjson_va bool ffOptionsParseDisplayCommandLine(FFOptionsDisplay* options, const char* key, const char* value); void ffOptionsInitDisplay(FFOptionsDisplay* options); void ffOptionsDestroyDisplay(FFOptionsDisplay* options); +void ffOptionsGenerateDisplayJsonConfig(FFOptionsDisplay* options, yyjson_mut_doc* doc);