diff --git a/presets/verbose b/presets/verbose index 1b6865d1e..31e1e691d 100644 --- a/presets/verbose +++ b/presets/verbose @@ -1,7 +1,7 @@ --load-config all --os-format "System: {}; Name: {}; Pretty name: {}; ID: {}; ID like: {}; Variant: {}; Variant ID: {}; Version: {}; Version ID: {}; Version codename: {}; Build ID: {}; Architecture: {}" ---host-format "Family: {}; Name: {}; Version: {}" +--host-format "Family: "product_family: {}; product_name: {}; product_versio: {}; product_sku: {}; bios_date: {}; bios_release: {}; bios_vendor: {}; bios_version: {}; board_name: {}; board_vendor: {}; board_version: {}; chassis_type: {}; chassis_vendor: {}; chassis_version: {}; sys_vendor: {}" --kernel-format "Sysname: {}; Release: {}; Version: {}" --uptime-format "Days: {}; Hours: {}; Minutes: {}; Seconds: {}" --processes-format "Count: {}" diff --git a/src/fastfetch.c b/src/fastfetch.c index d9cae2c07..69b0c71f3 100644 --- a/src/fastfetch.c +++ b/src/fastfetch.c @@ -28,7 +28,7 @@ static void constructAndPrintCommandHelpFormat(const char* name, const char* def for(uint32_t i = 1; i <= numArgs; i++) printf(" {%u}: %s\n", i, va_arg(argp, const char*)); - printf("The default is something like \"%s\".\n", def); + printf("The default is something similar to \"%s\".\n", def); va_end(argp); } @@ -62,10 +62,22 @@ static inline void printCommandHelp(const char* command) } else if(strcasecmp(command, "host-format") == 0) { - constructAndPrintCommandHelpFormat("host", "{2} {3}", 3, - "Host family", - "Host name", - "Host version" + constructAndPrintCommandHelpFormat("host", "{2} {3}", 15, + "product family", + "product name", + "product version", + "product sku", + "bios date", + "bios release", + "bios vendor", + "bios version", + "board name", + "board vendor", + "board version", + "chassis type", + "chassis vendor", + "chassis version", + "sys vendor" ); } else if(strcasecmp(command, "kernel-format") == 0) diff --git a/src/modules/host.c b/src/modules/host.c index 50dc7219e..e5d6f2ab1 100644 --- a/src/modules/host.c +++ b/src/modules/host.c @@ -3,7 +3,7 @@ #include #define FF_HOST_MODULE_NAME "Host" -#define FF_HOST_NUM_FORMAT_ARGS 3 +#define FF_HOST_NUM_FORMAT_ARGS 15 static bool hostValueSet(FFstrbuf* value) { @@ -47,85 +47,135 @@ void ffPrintHost(FFinstance* instance) if(ffPrintFromCache(instance, FF_HOST_MODULE_NAME, &instance->config.hostKey, &instance->config.hostFormat, FF_HOST_NUM_FORMAT_ARGS)) return; - FFstrbuf family; - ffStrbufInit(&family); + FFstrbuf product_family; + ffStrbufInit(&product_family); #ifndef __ANDROID__ - getHostValue("/sys/devices/virtual/dmi/id/product_family", "/sys/class/dmi/id/product_family", &family); + getHostValue("/sys/devices/virtual/dmi/id/product_family", "/sys/class/dmi/id/product_family", &product_family); + if(!hostValueSet(&product_family)) + ffStrbufClear(&product_family); #else - ffSettingsGetAndroidProperty("ro.product.device", &family); + ffSettingsGetAndroidProperty("ro.product.device", &product_family); #endif - bool familySet = hostValueSet(&family); - FFstrbuf name; - ffStrbufInit(&name); + FFstrbuf product_name; + ffStrbufInit(&product_name); #ifndef __ANDROID__ - getHostValue("/sys/devices/virtual/dmi/id/product_name", "/sys/class/dmi/id/product_name", &name); + getHostValue("/sys/devices/virtual/dmi/id/product_name", "/sys/class/dmi/id/product_name", &product_name); - if(name.length == 0) - ffGetFileContent("/sys/firmware/devicetree/base/model", &name); + if(product_name.length == 0) + ffGetFileContent("/sys/firmware/devicetree/base/model", &product_name); - if(name.length == 0) - ffGetFileContent("/tmp/sysinfo/model", &name); + if(product_name.length == 0) + ffGetFileContent("/tmp/sysinfo/model", &product_name); - if(ffStrbufStartsWithS(&name, "Standard PC")) + if(ffStrbufStartsWithS(&product_name, "Standard PC")) { FFstrbuf copy; - ffStrbufInitCopy(©, &name); - ffStrbufSetS(&name, "KVM/QEMU "); - ffStrbufAppend(&name, ©); + ffStrbufInitCopy(©, &product_name); + ffStrbufSetS(&product_name, "KVM/QEMU "); + ffStrbufAppend(&product_name, ©); ffStrbufDestroy(©); } + + if(!hostValueSet(&product_name)) + ffStrbufClear(&product_name); #else - ffSettingsGetAndroidProperty("ro.product.brand", &name); - if(name.length > 0){ - name.chars[0] = (char) toupper(name.chars[0]); - ffStrbufAppendC(&name, ' '); + ffSettingsGetAndroidProperty("ro.product.brand", &product_name); + if(product_name.length > 0){ + product_name.chars[0] = (char) toupper(product_name.chars[0]); + ffStrbufAppendC(&product_name, ' '); } - if(!ffSettingsGetAndroidProperty("ro.product.model", &name)) - ffSettingsGetAndroidProperty("ro.product.name", &name); + if(!ffSettingsGetAndroidProperty("ro.product.model", &product_name)) + ffSettingsGetAndroidProperty("ro.product.name", &product_name); - ffStrbufTrimRight(&name, ' '); + ffStrbufTrimRight(&product_name, ' '); #endif - bool nameSet = hostValueSet(&name); - FFstrbuf version; - ffStrbufInit(&version); - #ifndef __ANDROID__ - getHostValue("/sys/devices/virtual/dmi/id/product_version", "/sys/class/dmi/id/product_version", &version); - #endif - bool versionSet = hostValueSet(&version); - - if(!familySet && !nameSet) + if(product_family.length == 0 && product_name.length == 0) { - ffStrbufDestroy(&family); - ffStrbufDestroy(&name); - ffStrbufDestroy(&version); - ffPrintError(instance, FF_HOST_MODULE_NAME, 0, &instance->config.hostKey, &instance->config.hostFormat, FF_HOST_NUM_FORMAT_ARGS, "neither family nor name is set by O.E.M."); + ffStrbufDestroy(&product_family); + ffStrbufDestroy(&product_name); + ffPrintError(instance, FF_HOST_MODULE_NAME, 0, &instance->config.hostKey, &instance->config.hostFormat, FF_HOST_NUM_FORMAT_ARGS, "neither product_family nor product_name is set by O.E.M."); return; } + #ifdef __ANDROID__ + #define FF_HOST_DATA(name) + FFstrbuf product_name; \ + ffStrbufInitA(&product_name, 0); + #else + #define FF_HOST_DATA(name) \ + FFstrbuf name; \ + ffStrbufInit(&name); \ + getHostValue("/sys/devices/virtual/dmi/id/"#name, "/sys/class/dmi/id/"#name, &name); \ + if(!hostValueSet(&name)) \ + ffStrbufClear(&name); + #endif + + FF_HOST_DATA(product_version) + FF_HOST_DATA(product_sku) + FF_HOST_DATA(bios_date) + FF_HOST_DATA(bios_release) + FF_HOST_DATA(bios_vendor) + FF_HOST_DATA(bios_version) + FF_HOST_DATA(board_name) + FF_HOST_DATA(board_vendor) + FF_HOST_DATA(board_version) + FF_HOST_DATA(chassis_type) + FF_HOST_DATA(chassis_vendor) + FF_HOST_DATA(chassis_version) + FF_HOST_DATA(sys_vendor) + FFstrbuf host; ffStrbufInit(&host); - if(nameSet) - ffStrbufAppend(&host, &name); + if(product_name.length > 0) + ffStrbufAppend(&host, &product_name); else - ffStrbufAppend(&host, &family); + ffStrbufAppend(&host, &product_family); - if(versionSet) + if(product_version.length > 0) { ffStrbufAppendC(&host, ' '); - ffStrbufAppend(&host, &version); + ffStrbufAppend(&host, &product_version); } ffPrintAndWriteToCache(instance, FF_HOST_MODULE_NAME, &instance->config.hostKey, &host, &instance->config.hostFormat, FF_HOST_NUM_FORMAT_ARGS, (FFformatarg[]) { - {FF_FORMAT_ARG_TYPE_STRBUF, &family}, - {FF_FORMAT_ARG_TYPE_STRBUF, &name}, - {FF_FORMAT_ARG_TYPE_STRBUF, &version} + {FF_FORMAT_ARG_TYPE_STRBUF, &product_family}, + {FF_FORMAT_ARG_TYPE_STRBUF, &product_name}, + {FF_FORMAT_ARG_TYPE_STRBUF, &product_version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &product_sku}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios_date}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios_release}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios_vendor}, + {FF_FORMAT_ARG_TYPE_STRBUF, &bios_version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &board_name}, + {FF_FORMAT_ARG_TYPE_STRBUF, &board_vendor}, + {FF_FORMAT_ARG_TYPE_STRBUF, &board_version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &chassis_type}, + {FF_FORMAT_ARG_TYPE_STRBUF, &chassis_vendor}, + {FF_FORMAT_ARG_TYPE_STRBUF, &chassis_version}, + {FF_FORMAT_ARG_TYPE_STRBUF, &sys_vendor} }); - ffStrbufDestroy(&family); - ffStrbufDestroy(&name); - ffStrbufDestroy(&version); + ffStrbufDestroy(&product_family); + ffStrbufDestroy(&product_name); + + //On Android, all of them get initialized without heap, so no need to destroy them. + #ifndef __ANDROID__ + ffStrbufDestroy(&product_version); + ffStrbufDestroy(&product_sku); + ffStrbufDestroy(&bios_date); + ffStrbufDestroy(&bios_release); + ffStrbufDestroy(&bios_vendor); + ffStrbufDestroy(&bios_version); + ffStrbufDestroy(&board_name); + ffStrbufDestroy(&board_vendor); + ffStrbufDestroy(&board_version); + ffStrbufDestroy(&chassis_type); + ffStrbufDestroy(&chassis_vendor); + ffStrbufDestroy(&chassis_version); + ffStrbufDestroy(&sys_vendor); + #endif }