diff --git a/src/common/init.c b/src/common/init.c index f812d8b7b..326d571d0 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -331,6 +331,7 @@ static void destroyConfig(FFinstance* instance) static void destroyState(FFinstance* instance) { ffPlatformDestroy(&instance->state.platform); + yyjson_doc_free(instance->state.configDoc); } void ffDestroyInstance(FFinstance* instance) diff --git a/src/common/option.c b/src/common/option.c index e151788be..f9bdbcff6 100644 --- a/src/common/option.c +++ b/src/common/option.c @@ -105,19 +105,14 @@ bool ffOptionParseBoolean(const char* str) ); } -void ffOptionParseColor(const char* key, const char* value, FFstrbuf* buffer) +void ffOptionParseColor(const char* value, FFstrbuf* buffer) { - if(value == NULL) - { - fprintf(stderr, "Error: usage: %s \n", key); - exit(477); - } ffStrbufEnsureFree(buffer, 63); while(*value != '\0') { #define FF_APPEND_COLOR_CODE_COND(prefix, code) \ - if(strncasecmp(value, #prefix, strlen(#prefix))) { ffStrbufAppendS(buffer, code); value += strlen(#prefix); } + if(strncasecmp(value, #prefix, strlen(#prefix)) == 0) { ffStrbufAppendS(buffer, code); value += strlen(#prefix); } FF_APPEND_COLOR_CODE_COND(reset_, "0;") else FF_APPEND_COLOR_CODE_COND(bright_, "1;") diff --git a/src/common/option.h b/src/common/option.h index 0c8d29b1b..e0ca7feca 100644 --- a/src/common/option.h +++ b/src/common/option.h @@ -21,6 +21,6 @@ void ffOptionParseString(const char* argumentKey, const char* value, FFstrbuf* b FF_C_NODISCARD uint32_t ffOptionParseUInt32(const char* argumentKey, const char* value); FF_C_NODISCARD int ffOptionParseEnum(const char* argumentKey, const char* requestedKey, FFKeyValuePair pairs[]); FF_C_NODISCARD bool ffOptionParseBoolean(const char* str); -void ffOptionParseColor(const char* key, const char* value, FFstrbuf* buffer); +void ffOptionParseColor(const char* value, FFstrbuf* buffer); void ffOptionInitModuleArg(FFModuleArgs* args); void ffOptionDestroyModuleArg(FFModuleArgs* args); diff --git a/src/fastfetch.c b/src/fastfetch.c index 301caeddc..685e6c1d6 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -496,8 +496,16 @@ static void listConfigPaths(FFinstance* instance) { FF_LIST_FOR_EACH(FFstrbuf, folder, instance->state.platform.configDirs) { - ffStrbufAppendS(folder, "fastfetch/config.conf"); - printf("%s%s\n", folder->chars, ffPathExists(folder->chars, FF_PATHTYPE_FILE) ? " (*)" : ""); + bool exists = false; + ffStrbufAppendS(folder, "fastfetch/config.jsonc"); + exists = ffPathExists(folder->chars, FF_PATHTYPE_FILE); + if (!exists) + { + ffStrbufSubstrBefore(folder, folder->length - (uint32_t) strlen("jsonc")); + ffStrbufAppendS(folder, "conf"); + exists = ffPathExists(folder->chars, FF_PATHTYPE_FILE); + } + printf("%s%s\n", folder->chars, exists ? " (*)" : ""); } } @@ -512,6 +520,23 @@ static void listDataPaths(FFinstance* instance) static void parseOption(FFinstance* instance, FFdata* data, const char* key, const char* value); +static bool parseJsoncFile(FFinstance* instance, const char* path) +{ + yyjson_doc* doc = yyjson_read_file(path, YYJSON_READ_ALLOW_COMMENTS | YYJSON_READ_ALLOW_TRAILING_COMMAS | YYJSON_READ_ALLOW_INF_AND_NAN, NULL, NULL); + if (doc) + { + instance->state.configDoc = doc; + const char* error = ffParseLogoJsonConfig(instance); + if (error) + { + fputs(error, stderr); + exit(477); + } + return true; + } + return false; +} + static bool parseConfigFile(FFinstance* instance, FFdata* data, const char* path) { FILE* file = fopen(path, "r"); @@ -662,35 +687,6 @@ static inline bool startsWith(const char* str, const char* compareTo) return strncasecmp(str, compareTo, strlen(compareTo)) == 0; } -static void optionParseColor(const char* key, const char* value, FFstrbuf* buffer) -{ - optionCheckString(key, value, buffer); - - while(*value != '\0') - { - #define FF_APPEND_COLOR_CODE_COND(prefix, code) \ - if(startsWith(value, #prefix)) { ffStrbufAppendS(buffer, code); value += strlen(#prefix); } - - FF_APPEND_COLOR_CODE_COND(reset_, "0;") - else FF_APPEND_COLOR_CODE_COND(bright_, "1;") - else FF_APPEND_COLOR_CODE_COND(black, "30") - else FF_APPEND_COLOR_CODE_COND(red, "31") - else FF_APPEND_COLOR_CODE_COND(green, "32") - else FF_APPEND_COLOR_CODE_COND(yellow, "33") - else FF_APPEND_COLOR_CODE_COND(blue, "34") - else FF_APPEND_COLOR_CODE_COND(magenta, "35") - else FF_APPEND_COLOR_CODE_COND(cyan, "36") - else FF_APPEND_COLOR_CODE_COND(white, "37") - else - { - ffStrbufAppendC(buffer, *value); - ++value; - } - - #undef FF_APPEND_COLOR_CODE_COND - } -} - static uint32_t optionParseUInt32(const char* key, const char* value) { if(value == NULL) @@ -914,12 +910,19 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con else if(strcasecmp(key, "--separator") == 0) optionParseString(key, value, &instance->config.keyValueSeparator); else if(strcasecmp(key, "--color-keys") == 0) - optionParseColor(key, value, &instance->config.colorKeys); + { + optionCheckString(key, value, &instance->config.colorKeys); + ffOptionParseColor(value, &instance->config.colorKeys); + } else if(strcasecmp(key, "--color-title") == 0) - optionParseColor(key, value, &instance->config.colorTitle); + { + optionCheckString(key, value, &instance->config.colorTitle); + ffOptionParseColor(value, &instance->config.colorTitle); + } else if(strcasecmp(key, "-c") == 0 || strcasecmp(key, "--color") == 0) { - optionParseColor(key, value, &instance->config.colorKeys); + optionCheckString(key, value, &instance->config.colorKeys); + ffOptionParseColor(value, &instance->config.colorKeys); ffStrbufSet(&instance->config.colorTitle, &instance->config.colorKeys); } else if(strcasecmp(key, "--binary-prefix") == 0) @@ -1066,6 +1069,17 @@ error: static void parseConfigFiles(FFinstance* instance, FFdata* data) { + for(uint32_t i = instance->state.platform.configDirs.length; i > 0; --i) + { + FFstrbuf* dir = ffListGet(&instance->state.platform.configDirs, i - 1); + uint32_t dirLength = dir->length; + + ffStrbufAppendS(dir, "fastfetch/config.jsonc"); + bool success = parseJsoncFile(instance, dir->chars); + ffStrbufSubstrBefore(dir, dirLength); + if (success) return; + } + for(uint32_t i = instance->state.platform.configDirs.length; i > 0; --i) { if(!data->loadUserConfig) @@ -1225,20 +1239,23 @@ int main(int argc, const char** argv) parseConfigFiles(&instance, &data); parseArguments(&instance, &data, argc, argv); - //If we don't have a custom structure, use the default one - if(data.structure.length == 0) - ffStrbufAppendS(&data.structure, FASTFETCH_DATATEXT_STRUCTURE); - - if(ffStrbufContainIgnCaseS(&data.structure, FF_CPUUSAGE_MODULE_NAME)) - ffPrepareCPUUsage(); - - if(instance.config.multithreading) + if(!instance.state.configDoc) { - if(ffStrbufContainIgnCaseS(&data.structure, FF_PUBLICIP_MODULE_NAME)) - ffPreparePublicIp(&instance.config.publicIP); + //If we don't have a custom structure, use the default one + if(data.structure.length == 0) + ffStrbufAppendS(&data.structure, FASTFETCH_DATATEXT_STRUCTURE); - if(ffStrbufContainIgnCaseS(&data.structure, FF_WEATHER_MODULE_NAME)) - ffPrepareWeather(&instance.config.weather); + if(ffStrbufContainIgnCaseS(&data.structure, FF_CPUUSAGE_MODULE_NAME)) + ffPrepareCPUUsage(); + + if(instance.config.multithreading) + { + if(ffStrbufContainIgnCaseS(&data.structure, FF_PUBLICIP_MODULE_NAME)) + ffPreparePublicIp(&instance.config.publicIP); + + if(ffStrbufContainIgnCaseS(&data.structure, FF_WEATHER_MODULE_NAME)) + ffPrepareWeather(&instance.config.weather); + } } ffStart(&instance); diff --git a/src/fastfetch.h b/src/fastfetch.h index 4bdeac603..b1bfb2d52 100644 --- a/src/fastfetch.h +++ b/src/fastfetch.h @@ -7,6 +7,7 @@ #include #include +#include #include "util/FFstrbuf.h" #include "util/FFlist.h" @@ -135,6 +136,7 @@ typedef struct FFstate uint32_t titleLength; FFPlatform platform; + yyjson_doc* configDoc; } FFstate; typedef struct FFinstance diff --git a/src/logo/logo.h b/src/logo/logo.h index 9d3878c66..0bc74ea0e 100644 --- a/src/logo/logo.h +++ b/src/logo/logo.h @@ -30,5 +30,6 @@ bool ffLogoPrintImageIfExists(FFinstance* instance, FFLogoType type, bool printE void ffInitLogoOptions(FFLogoOptions* options); bool ffParseLogoCommandOptions(FFLogoOptions* options, const char* key, const char* value); void ffDestroyLogoOptions(FFLogoOptions* options); +const char* ffParseLogoJsonConfig(FFinstance* instance); #endif diff --git a/src/logo/option.c b/src/logo/option.c index 033885635..0239bf5ab 100644 --- a/src/logo/option.c +++ b/src/logo/option.c @@ -1,5 +1,7 @@ #include "logo/logo.h" +#include "common/jsonconfig.h" + void ffInitLogoOptions(FFLogoOptions* options) { ffStrbufInit(&options->source); @@ -72,8 +74,12 @@ logoType: fprintf(stderr, "Error: invalid --color-[1-9] index: %c\n", key[13]); exit(472); } - - ffOptionParseColor(key, value, &options->colors[index]); + if(value == NULL) + { + fprintf(stderr, "Error: usage: %s \n", key); + exit(477); + } + ffOptionParseColor(value, &options->colors[index]); } else if(strcasecmp(subKey, "width") == 0) options->width = ffOptionParseUInt32(key, value); @@ -181,3 +187,147 @@ void ffDestroyLogoOptions(FFLogoOptions* options) for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i) ffStrbufDestroy(&options->colors[i]); } + +const char* ffParseLogoJsonConfig(FFinstance* instance) +{ + FFLogoOptions* options = &instance->config.logo; + + yyjson_val* const root = yyjson_doc_get_root(instance->state.configDoc); + assert(root); + + if (!yyjson_is_obj(root)) + return "Invalid JSON config format. Root value must be an object"; + + yyjson_val* object = yyjson_obj_get(root, "logo"); + if (!object) return NULL; + if (!yyjson_is_obj(object)) return "Property 'logo' must be an object"; + + yyjson_val *key_, *val; + size_t idx, max; + yyjson_obj_foreach(object, idx, max, key_, val) + { + const char* key = yyjson_get_str(key_); + + if (strcasecmp(key, "type") == 0) + { + int value; + const char* error = ffJsonConfigParseEnum(val, &value, (FFKeyValuePair[]) { + { "auto", FF_LOGO_TYPE_AUTO }, + { "builtin", FF_LOGO_TYPE_BUILTIN }, + { "file", FF_LOGO_TYPE_FILE }, + { "file-raw", FF_LOGO_TYPE_FILE_RAW }, + { "data", FF_LOGO_TYPE_DATA }, + { "data-raw", FF_LOGO_TYPE_DATA_RAW }, + { "sixel", FF_LOGO_TYPE_IMAGE_SIXEL }, + { "kitty", FF_LOGO_TYPE_IMAGE_KITTY }, + { "iterm", FF_LOGO_TYPE_IMAGE_ITERM }, + { "chafa", FF_LOGO_TYPE_IMAGE_CHAFA }, + { "raw", FF_LOGO_TYPE_IMAGE_RAW }, + { "none", FF_LOGO_TYPE_NONE }, + {}, + }); + + if (error) return error; + options->type = (FFLogoType) value; + continue; + } + else if (strcasecmp(key, "source") == 0) + { + ffStrbufSetS(&options->source, yyjson_get_str(val)); + continue; + } + else if (strcasecmp(key, "color") == 0) + { + if (!yyjson_is_obj(val)) + return "Property 'color' must be an object"; + + yyjson_val *key_c, *valc; + size_t idxc, maxc; + yyjson_obj_foreach(val, idxc, maxc, key_c, valc) + { + const char* keyc = yyjson_get_str(key_c); + uint32_t index = (uint32_t) strtoul(keyc, NULL, 10); + if (index < 1 || index > 9) + return "Keys of property 'color' must be a number between 1 to 9"; + + ffOptionParseColor(yyjson_get_str(valc), &options->colors[index - 1]); + } + continue; + } + else if (strcasecmp(key, "width") == 0) + { + uint32_t value = (uint32_t) yyjson_get_uint(val); + if (value == 0) + return "Logo width must be a possitive integer"; + options->width = value; + continue; + } + else if (strcasecmp(key, "height") == 0) + { + uint32_t value = (uint32_t) yyjson_get_uint(val); + if (value == 0) + return "Logo height must be a possitive integer"; + options->height = value; + continue; + } + else if (strcasecmp(key, "padding") == 0) + { + if (!yyjson_is_obj(val)) + return "Logo padding must be an object"; + + #define FF_PARSE_PADDING_POSITON(pos, paddingPos) \ + yyjson_val* pos = yyjson_obj_get(val, #pos); \ + if (pos) \ + { \ + if (!yyjson_is_uint(pos)) \ + return "Logo padding values must be possitive integers"; \ + options->paddingPos = (uint32_t) yyjson_get_uint(pos); \ + } + FF_PARSE_PADDING_POSITON(left, paddingLeft); + FF_PARSE_PADDING_POSITON(top, paddingTop); + FF_PARSE_PADDING_POSITON(right, paddingRight); + #undef FF_PARSE_PADDING_POSITON + continue; + } + else if (strcasecmp(key, "printRemaining")) + { + options->printRemaining = yyjson_get_bool(val); + continue; + } + else if (strcasecmp(key, "preserveAspectRadio")) + { + options->preserveAspectRadio = yyjson_get_bool(val); + continue; + } + else if (strcasecmp(key, "chafa")) + { + if (!yyjson_is_obj(val)) + return "Chafa config must be an object"; + + yyjson_val* fgOnly = yyjson_obj_get(val, "fgOnly"); + if (fgOnly) + options->chafaFgOnly = yyjson_get_bool(fgOnly); + + yyjson_val* symbols = yyjson_obj_get(val, "symbols"); + if (symbols) + ffStrbufAppendS(&options->chafaSymbols, yyjson_get_str(symbols)); + + yyjson_val* canvasMode = yyjson_obj_get(val, "canvasMode"); + if (canvasMode) + options->chafaCanvasMode = (uint32_t) yyjson_get_uint(canvasMode); + + yyjson_val* colorSpace = yyjson_obj_get(val, "colorSpace"); + if (colorSpace) + options->chafaColorSpace = (uint32_t) yyjson_get_uint(colorSpace); + + yyjson_val* ditherMode = yyjson_obj_get(val, "ditherMode"); + if (ditherMode) + options->chafaDitherMode = (uint32_t) yyjson_get_uint(ditherMode); + continue; + } + else + return "Unknown logo key"; + } + + return NULL; +} diff --git a/src/modules/battery/battery.h b/src/modules/battery/battery.h index 524a265d0..d9f39acea 100644 --- a/src/modules/battery/battery.h +++ b/src/modules/battery/battery.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BATTERY_MODULE_NAME "Battery" diff --git a/src/modules/bios/bios.h b/src/modules/bios/bios.h index 990a432d5..ca01b0902 100644 --- a/src/modules/bios/bios.h +++ b/src/modules/bios/bios.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BIOS_MODULE_NAME "Bios" diff --git a/src/modules/bluetooth/bluetooth.h b/src/modules/bluetooth/bluetooth.h index 230ab5c0a..1834330e5 100644 --- a/src/modules/bluetooth/bluetooth.h +++ b/src/modules/bluetooth/bluetooth.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BLUETOOTH_MODULE_NAME "Bluetooth" diff --git a/src/modules/board/board.h b/src/modules/board/board.h index d2afbfd82..e10c4f61b 100644 --- a/src/modules/board/board.h +++ b/src/modules/board/board.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BOARD_MODULE_NAME "Board" diff --git a/src/modules/break/break.h b/src/modules/break/break.h index f313774fe..2c534d341 100644 --- a/src/modules/break/break.h +++ b/src/modules/break/break.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BREAK_MODULE_NAME "Break" diff --git a/src/modules/brightness/brightness.h b/src/modules/brightness/brightness.h index 00c5f13f7..b4c089424 100644 --- a/src/modules/brightness/brightness.h +++ b/src/modules/brightness/brightness.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_BRIGHTNESS_MODULE_NAME "Brightness" diff --git a/src/modules/chassis/chassis.h b/src/modules/chassis/chassis.h index 566198e17..1a85b2727 100644 --- a/src/modules/chassis/chassis.h +++ b/src/modules/chassis/chassis.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_CHASSIS_MODULE_NAME "Chassis" diff --git a/src/modules/colors/colors.h b/src/modules/colors/colors.h index cfd7860e4..990ae4348 100644 --- a/src/modules/colors/colors.h +++ b/src/modules/colors/colors.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_COLORS_MODULE_NAME "Colors" diff --git a/src/modules/command/command.h b/src/modules/command/command.h index fd1a8705f..63ca643fb 100644 --- a/src/modules/command/command.h +++ b/src/modules/command/command.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_COMMAND_MODULE_NAME "Command" diff --git a/src/modules/cpu/cpu.h b/src/modules/cpu/cpu.h index de9cb9c41..1a8f32922 100644 --- a/src/modules/cpu/cpu.h +++ b/src/modules/cpu/cpu.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_CPU_MODULE_NAME "CPU" diff --git a/src/modules/cpuusage/cpuusage.h b/src/modules/cpuusage/cpuusage.h index 2bde09f0d..bd12de8a6 100644 --- a/src/modules/cpuusage/cpuusage.h +++ b/src/modules/cpuusage/cpuusage.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_CPUUSAGE_MODULE_NAME "CPUUsage" diff --git a/src/modules/cursor/cursor.h b/src/modules/cursor/cursor.h index 210915883..f36975aa7 100644 --- a/src/modules/cursor/cursor.h +++ b/src/modules/cursor/cursor.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_CURSOR_MODULE_NAME "Cursor" diff --git a/src/modules/custom/custom.h b/src/modules/custom/custom.h index 7be41c0a6..fec8099b3 100644 --- a/src/modules/custom/custom.h +++ b/src/modules/custom/custom.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_CUSTOM_MODULE_NAME "Custom" diff --git a/src/modules/datetime/datetime.h b/src/modules/datetime/datetime.h index c845a8e6f..01b67701b 100644 --- a/src/modules/datetime/datetime.h +++ b/src/modules/datetime/datetime.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_DATETIME_MODULE_NAME "DateTime" diff --git a/src/modules/de/de.h b/src/modules/de/de.h index 8530bf6e3..3d7d6f729 100644 --- a/src/modules/de/de.h +++ b/src/modules/de/de.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_DE_MODULE_NAME "DE" diff --git a/src/modules/disk/disk.h b/src/modules/disk/disk.h index efba1e7fc..82886a257 100644 --- a/src/modules/disk/disk.h +++ b/src/modules/disk/disk.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_DISK_MODULE_NAME "Disk" diff --git a/src/modules/display/display.h b/src/modules/display/display.h index 8781d4e41..62a4c210e 100644 --- a/src/modules/display/display.h +++ b/src/modules/display/display.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_DISPLAY_MODULE_NAME "Display" diff --git a/src/modules/font/font.h b/src/modules/font/font.h index ba1c8fade..c26987d29 100644 --- a/src/modules/font/font.h +++ b/src/modules/font/font.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_FONT_MODULE_NAME "Font" diff --git a/src/modules/gamepad/gamepad.h b/src/modules/gamepad/gamepad.h index 0c4c96ddb..f08b01937 100644 --- a/src/modules/gamepad/gamepad.h +++ b/src/modules/gamepad/gamepad.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_GAMEPAD_MODULE_NAME "Gamepad" diff --git a/src/modules/gpu/gpu.h b/src/modules/gpu/gpu.h index aa9c11374..ee8a61826 100644 --- a/src/modules/gpu/gpu.h +++ b/src/modules/gpu/gpu.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_GPU_MODULE_NAME "GPU" diff --git a/src/modules/host/host.h b/src/modules/host/host.h index 8bbc53f41..43d51f3d4 100644 --- a/src/modules/host/host.h +++ b/src/modules/host/host.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_HOST_MODULE_NAME "Host" diff --git a/src/modules/icons/icons.h b/src/modules/icons/icons.h index 46867bd23..ea49656f7 100644 --- a/src/modules/icons/icons.h +++ b/src/modules/icons/icons.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_ICONS_MODULE_NAME "Icons" diff --git a/src/modules/jsonconfig/jsonconfig.c b/src/modules/jsonconfig/jsonconfig.c index fa4a5768a..4f4019e11 100644 --- a/src/modules/jsonconfig/jsonconfig.c +++ b/src/modules/jsonconfig/jsonconfig.c @@ -162,30 +162,9 @@ static bool parseModuleJsonObject(FFinstance* instance, const char* type, yyjson } } -static inline void wrapYyjsonFree(yyjson_doc** doc) -{ - assert(doc); - if (*doc) - yyjson_doc_free(*doc); -} - static const char* printJsonConfig(FFinstance* instance) { - FF_STRBUF_AUTO_DESTROY content = ffStrbufCreate(); - FF_LIST_FOR_EACH(FFstrbuf, filename, instance->state.platform.configDirs) - { - uint32_t oldLength = filename->length; - ffStrbufAppendS(filename, "fastfetch/config.jsonc"); - bool success = ffAppendFileBuffer(filename->chars, &content); - ffStrbufSubstrBefore(filename, oldLength); - if (success) break; - } - - yyjson_doc* __attribute__((__cleanup__(wrapYyjsonFree))) doc = yyjson_read_opts(content.chars, content.length, YYJSON_READ_ALLOW_COMMENTS | YYJSON_READ_ALLOW_TRAILING_COMMAS | YYJSON_READ_ALLOW_INF_AND_NAN, NULL, NULL); - if (!doc) - return "Failed to parse JSON config file"; - - yyjson_val* const root = yyjson_doc_get_root(doc); + yyjson_val* const root = yyjson_doc_get_root(instance->state.configDoc); assert(root); if (!yyjson_is_obj(root)) @@ -193,7 +172,7 @@ static const char* printJsonConfig(FFinstance* instance) yyjson_val* modules = yyjson_obj_get(root, "modules"); if (!modules) return "Property 'modules' is not found"; - if (!yyjson_is_arr(modules)) return "modules must be an array of strings or objects"; + if (!yyjson_is_arr(modules)) return "Property 'modules' must be an array of strings or objects"; yyjson_val* item; size_t idx, max; diff --git a/src/modules/kernel/kernel.h b/src/modules/kernel/kernel.h index 25d840cc6..4e21eb3dd 100644 --- a/src/modules/kernel/kernel.h +++ b/src/modules/kernel/kernel.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_KERNEL_MODULE_NAME "Kernel" diff --git a/src/modules/locale/locale.h b/src/modules/locale/locale.h index c41290b9f..93d3e820c 100644 --- a/src/modules/locale/locale.h +++ b/src/modules/locale/locale.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_LOCALE_MODULE_NAME "Locale" diff --git a/src/modules/localip/localip.h b/src/modules/localip/localip.h index 7ab4fd1fa..d758f4fab 100644 --- a/src/modules/localip/localip.h +++ b/src/modules/localip/localip.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_LOCALIP_MODULE_NAME "LocalIp" diff --git a/src/modules/media/media.h b/src/modules/media/media.h index f7a43bac4..f35421504 100644 --- a/src/modules/media/media.h +++ b/src/modules/media/media.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_MEDIA_MODULE_NAME "Media" diff --git a/src/modules/memory/memory.h b/src/modules/memory/memory.h index 4a7fbba98..c5bf8e733 100644 --- a/src/modules/memory/memory.h +++ b/src/modules/memory/memory.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_MEMORY_MODULE_NAME "Memory" diff --git a/src/modules/opencl/opencl.h b/src/modules/opencl/opencl.h index 633929889..479e2e231 100644 --- a/src/modules/opencl/opencl.h +++ b/src/modules/opencl/opencl.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_OPENCL_MODULE_NAME "OpenCL" diff --git a/src/modules/opengl/opengl.h b/src/modules/opengl/opengl.h index 2c85af45c..a5b88b23d 100644 --- a/src/modules/opengl/opengl.h +++ b/src/modules/opengl/opengl.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_OPENGL_MODULE_NAME "OpenGL" diff --git a/src/modules/os/os.h b/src/modules/os/os.h index 3f5299fc1..55036fed1 100644 --- a/src/modules/os/os.h +++ b/src/modules/os/os.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_OS_MODULE_NAME "OS" diff --git a/src/modules/packages/packages.h b/src/modules/packages/packages.h index 6798d26e5..8aec1a0fc 100644 --- a/src/modules/packages/packages.h +++ b/src/modules/packages/packages.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_PACKAGES_MODULE_NAME "Packages" diff --git a/src/modules/player/player.h b/src/modules/player/player.h index c480366d6..1825d2f9e 100644 --- a/src/modules/player/player.h +++ b/src/modules/player/player.h @@ -2,7 +2,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_PLAYER_MODULE_NAME "Player" diff --git a/src/modules/poweradapter/poweradapter.h b/src/modules/poweradapter/poweradapter.h index f8762fb38..f8cca4c6c 100644 --- a/src/modules/poweradapter/poweradapter.h +++ b/src/modules/poweradapter/poweradapter.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_POWERADAPTER_MODULE_NAME "PowerAdapter" diff --git a/src/modules/processes/processes.h b/src/modules/processes/processes.h index 1dd195d78..6aa952574 100644 --- a/src/modules/processes/processes.h +++ b/src/modules/processes/processes.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_PROCESSES_MODULE_NAME "Processes" diff --git a/src/modules/publicip/publicip.h b/src/modules/publicip/publicip.h index 98b3083d4..618d054ff 100644 --- a/src/modules/publicip/publicip.h +++ b/src/modules/publicip/publicip.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_PUBLICIP_MODULE_NAME "PublicIp" diff --git a/src/modules/separator/separator.h b/src/modules/separator/separator.h index 46ca7f80a..6da53e559 100644 --- a/src/modules/separator/separator.h +++ b/src/modules/separator/separator.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_SEPARATOR_MODULE_NAME "Separator" diff --git a/src/modules/shell/shell.h b/src/modules/shell/shell.h index f3e75bcbd..0225b6291 100644 --- a/src/modules/shell/shell.h +++ b/src/modules/shell/shell.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_SHELL_MODULE_NAME "Shell" diff --git a/src/modules/sound/sound.h b/src/modules/sound/sound.h index f0ba01b9b..0ebfe328f 100644 --- a/src/modules/sound/sound.h +++ b/src/modules/sound/sound.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_SOUND_MODULE_NAME "Sound" diff --git a/src/modules/swap/swap.h b/src/modules/swap/swap.h index b561f146b..6945f854c 100644 --- a/src/modules/swap/swap.h +++ b/src/modules/swap/swap.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_SWAP_MODULE_NAME "Swap" diff --git a/src/modules/terminal/terminal.h b/src/modules/terminal/terminal.h index 02c350255..5f2045e78 100644 --- a/src/modules/terminal/terminal.h +++ b/src/modules/terminal/terminal.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_TERMINAL_MODULE_NAME "Terminal" diff --git a/src/modules/terminalfont/terminalfont.h b/src/modules/terminalfont/terminalfont.h index d7c1be2b8..25f974261 100644 --- a/src/modules/terminalfont/terminalfont.h +++ b/src/modules/terminalfont/terminalfont.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_TERMINALFONT_MODULE_NAME "TerminalFont" diff --git a/src/modules/theme/theme.h b/src/modules/theme/theme.h index ee9b2cc16..ae332f49e 100644 --- a/src/modules/theme/theme.h +++ b/src/modules/theme/theme.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_THEME_MODULE_NAME "Theme" diff --git a/src/modules/title/title.h b/src/modules/title/title.h index e67fe8f3c..1b1c9460b 100644 --- a/src/modules/title/title.h +++ b/src/modules/title/title.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_TITLE_MODULE_NAME "Title" diff --git a/src/modules/uptime/uptime.h b/src/modules/uptime/uptime.h index b9f909759..e19da5157 100644 --- a/src/modules/uptime/uptime.h +++ b/src/modules/uptime/uptime.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_UPTIME_MODULE_NAME "Uptime" diff --git a/src/modules/users/users.h b/src/modules/users/users.h index d17b685d6..fa96d0dc4 100644 --- a/src/modules/users/users.h +++ b/src/modules/users/users.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_USERS_MODULE_NAME "Users" diff --git a/src/modules/vulkan/vulkan.h b/src/modules/vulkan/vulkan.h index 751c29722..68a3b8385 100644 --- a/src/modules/vulkan/vulkan.h +++ b/src/modules/vulkan/vulkan.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_VULKAN_MODULE_NAME "Vulkan" diff --git a/src/modules/wallpaper/wallpaper.h b/src/modules/wallpaper/wallpaper.h index 7e77f49df..bd2dbbbca 100644 --- a/src/modules/wallpaper/wallpaper.h +++ b/src/modules/wallpaper/wallpaper.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_WALLPAPER_MODULE_NAME "Wallpaper" diff --git a/src/modules/weather/weather.h b/src/modules/weather/weather.h index 2cbba0e1c..70c34b61f 100644 --- a/src/modules/weather/weather.h +++ b/src/modules/weather/weather.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_WEATHER_MODULE_NAME "Weather" diff --git a/src/modules/wifi/wifi.h b/src/modules/wifi/wifi.h index a9e21d1e8..99070d07b 100644 --- a/src/modules/wifi/wifi.h +++ b/src/modules/wifi/wifi.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_WIFI_MODULE_NAME "Wifi" diff --git a/src/modules/wm/wm.h b/src/modules/wm/wm.h index 74e999ad2..2f18b1c16 100644 --- a/src/modules/wm/wm.h +++ b/src/modules/wm/wm.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_WM_MODULE_NAME "WM" diff --git a/src/modules/wmtheme/wmtheme.h b/src/modules/wmtheme/wmtheme.h index 34fcfe6ab..5bb11cb3f 100644 --- a/src/modules/wmtheme/wmtheme.h +++ b/src/modules/wmtheme/wmtheme.h @@ -1,7 +1,6 @@ #pragma once #include "fastfetch.h" -#include #define FF_WMTHEME_MODULE_NAME "WMTheme"