From 665c7cd5d339c239c5330883c26e4e366edab4c3 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Fri, 20 Jun 2025 15:02:23 +0800 Subject: [PATCH 01/45] Packaging: update debian stuff [ci skip] --- debian/changelog | 6 ++++++ debian/files | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 6e1e23fe68..cb8543611d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +fastfetch (2.46.0) jammy; urgency=medium + + * Update to 2.46.0 + + -- Carter Li Fri, 20 Jun 2025 15:01:21 +0800 + fastfetch (2.45.0) jammy; urgency=medium * Update to 2.45.0 diff --git a/debian/files b/debian/files index 806f0dbe1f..7ba3c5e95f 100644 --- a/debian/files +++ b/debian/files @@ -1 +1 @@ -fastfetch_2.45.0_source.buildinfo universe/utils optional +fastfetch_2.46.0_source.buildinfo universe/utils optional From c13da56959d74f219e528ceb573c2e26299e0398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 20 Jun 2025 19:28:03 +0800 Subject: [PATCH 02/45] OS (macOS): remove useless code --- src/detection/os/os_apple.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/detection/os/os_apple.m b/src/detection/os/os_apple.m index e404e0d429..5da14ad451 100644 --- a/src/detection/os/os_apple.m +++ b/src/detection/os/os_apple.m @@ -64,7 +64,7 @@ static bool detectOSCodeName(FFOSResult* os) case 6: ffStrbufSetStatic(&os->codename, "Snow Leopard"); return true; case 5: ffStrbufSetStatic(&os->codename, "Leopard"); return true; case 4: ffStrbufSetStatic(&os->codename, "Tiger"); return true; - case 3: ffStrbufSetStatic(&os->codename, "Panther"); ffStrbufSetStatic(&os->prettyName, "Mac OS X"); return true; + case 3: ffStrbufSetStatic(&os->codename, "Panther"); return true; case 2: ffStrbufSetStatic(&os->codename, "Jaguar"); return true; case 1: ffStrbufSetStatic(&os->codename, "Puma"); return true; case 0: ffStrbufSetStatic(&os->codename, "Cheetah"); return true; From 55249c2294ad062fe088c78636d3fb6c65e1cc98 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sat, 21 Jun 2025 20:35:26 +0800 Subject: [PATCH 03/45] BIOS (SunOS): detect BIOS type --- CMakeLists.txt | 1 + src/detection/bios/bios_windows.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 27b8957b81..cc930e4625 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1637,6 +1637,7 @@ elseif(SunOS) PRIVATE "proc" PRIVATE "zfs" PRIVATE "nvpair" + PRIVATE "devinfo" ) elseif(ANDROID) CHECK_LIBRARY_EXISTS(-l:libandroid-wordexp.a wordexp "" HAVE_LIBANDROID_WORDEXP_STATIC) diff --git a/src/detection/bios/bios_windows.c b/src/detection/bios/bios_windows.c index 500a335683..ea1977b1af 100644 --- a/src/detection/bios/bios_windows.c +++ b/src/detection/bios/bios_windows.c @@ -32,6 +32,10 @@ typedef struct _SYSTEM_BOOT_ENVIRONMENT_INFORMATION #include #include + +#elif __sun +#include +#include #endif typedef struct FFSmbiosBios @@ -59,6 +63,7 @@ typedef struct FFSmbiosBios static_assert(offsetof(FFSmbiosBios, ExtendedBiosRomSize) == 0x18, "FFSmbiosBios: Wrong struct alignment"); + const char* ffDetectBios(FFBiosResult* bios) { const FFSmbiosHeaderTable* smbiosTable = ffGetSmbiosHeaderTable(); @@ -94,6 +99,17 @@ const char* ffDetectBios(FFBiosResult* bios) default: break; } } + #elif __sun + di_node_t rootNode = di_init("/", DINFOPROP); + if (rootNode != DI_NODE_NIL) + { + char* efiVersion = NULL; + if (di_prop_lookup_strings(DDI_DEV_T_ANY, rootNode, "efi-version", &efiVersion) > 0) + ffStrbufSetStatic(&bios->type, "UEFI"); + else + ffStrbufSetStatic(&bios->type, "BIOS"); + } + di_fini(rootNode); #elif __HAIKU__ || __OpenBSD__ // Currently SMBIOS detection is supported in legancy BIOS only ffStrbufSetStatic(&bios->type, "BIOS"); From a9f021ccb905eeddff72133f3d6f4ec4c5479563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 21 Jun 2025 19:02:17 +0800 Subject: [PATCH 04/45] Chore: remove useless semicolons --- src/logo/image/im6.c | 2 +- src/logo/image/im7.c | 2 +- src/logo/image/image.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/logo/image/im6.c b/src/logo/image/im6.c index cee4ace6e1..4893eeaade 100644 --- a/src/logo/image/im6.c +++ b/src/logo/image/im6.c @@ -15,7 +15,7 @@ static void* logoResize(const void* image, size_t width, size_t height, void* ex FFLogoImageResult ffLogoPrintImageIM6(FFLogoRequestData* requestData) { FF_LIBRARY_LOAD(imageMagick, FF_LOGO_IMAGE_RESULT_INIT_ERROR, "libMagickCore-6.Q16HDRI" FF_LIBRARY_EXTENSION, 8, "libMagickCore-6.Q16" FF_LIBRARY_EXTENSION, 8) - FF_LIBRARY_LOAD_SYMBOL_ADDRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR); + FF_LIBRARY_LOAD_SYMBOL_ADDRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR) FFLogoImageResult result = ffLogoPrintImageImpl(requestData, &(FFIMData) { .resizeFunc = logoResize, diff --git a/src/logo/image/im7.c b/src/logo/image/im7.c index 45451f1d0b..b33c0ccf94 100644 --- a/src/logo/image/im7.c +++ b/src/logo/image/im7.c @@ -19,7 +19,7 @@ FFLogoImageResult ffLogoPrintImageIM7(FFLogoRequestData* requestData) "libMagickCore-7.Q16" FF_LIBRARY_EXTENSION, 11, "libMagickCore-7.Q16HDRI-10" FF_LIBRARY_EXTENSION, -1 // Required for Windows ) - FF_LIBRARY_LOAD_SYMBOL_ADDRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR); + FF_LIBRARY_LOAD_SYMBOL_ADDRESS(imageMagick, ffResizeImage, ResizeImage, FF_LOGO_IMAGE_RESULT_INIT_ERROR) FFLogoImageResult result = ffLogoPrintImageImpl(requestData, &(FFIMData) { .resizeFunc = logoResize, diff --git a/src/logo/image/image.c b/src/logo/image/image.c index 5454605212..56aa0a2ec9 100644 --- a/src/logo/image/image.c +++ b/src/logo/image/image.c @@ -708,8 +708,8 @@ static bool printImageChafa(FFLogoRequestData* requestData, const ImageData* ima FFLogoImageResult ffLogoPrintImageImpl(FFLogoRequestData* requestData, const FFIMData* imData) { - FF_LIBRARY_LOAD_SYMBOL(imData->library, MagickCoreGenesis, FF_LOGO_IMAGE_RESULT_INIT_ERROR); - FF_LIBRARY_LOAD_SYMBOL(imData->library, MagickCoreTerminus, FF_LOGO_IMAGE_RESULT_INIT_ERROR); + FF_LIBRARY_LOAD_SYMBOL(imData->library, MagickCoreGenesis, FF_LOGO_IMAGE_RESULT_INIT_ERROR) + FF_LIBRARY_LOAD_SYMBOL(imData->library, MagickCoreTerminus, FF_LOGO_IMAGE_RESULT_INIT_ERROR) FF_LIBRARY_LOAD_SYMBOL(imData->library, AcquireExceptionInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR) FF_LIBRARY_LOAD_SYMBOL(imData->library, DestroyExceptionInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR) FF_LIBRARY_LOAD_SYMBOL(imData->library, AcquireImageInfo, FF_LOGO_IMAGE_RESULT_INIT_ERROR) From ca049997b1705ba9ee77d4603fb38170523c29a6 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sat, 21 Jun 2025 23:00:34 +0800 Subject: [PATCH 05/45] GPU (SunOS): rework GPU detection --- src/detection/gpu/gpu_sunos.c | 121 ++++++++++++++-------------------- 1 file changed, 49 insertions(+), 72 deletions(-) diff --git a/src/detection/gpu/gpu_sunos.c b/src/detection/gpu/gpu_sunos.c index b4d775c4ae..837bd8cd9a 100644 --- a/src/detection/gpu/gpu_sunos.c +++ b/src/detection/gpu/gpu_sunos.c @@ -1,83 +1,60 @@ #include "gpu.h" -#include "common/io/io.h" -#include "common/processing.h" +#include "util/stringUtils.h" -const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist* gpus) -{ - // SunOS requires root permission to query PCI device list, except `/usr/bin/scanpci` - // Same behavior can be observed with `cp $(which scanpci) /tmp/ && /tmp/scanpci` - - FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate(); - const char* error = ffProcessAppendStdOut(&buffer, (char* const[]) { - "/usr/bin/scanpci", - "-v", - NULL, - }); - if (error) - return error; - - if (!ffStrbufStartsWithS(&buffer, "\npci ")) - return "Invalid scanpci result"; +#include - // pci bus 0x0000 cardnum 0x00 function 0x00: vendor 0x1414 device 0x008e - // Device unknown - // CardVendor 0x0000 card 0x0000 (Card unknown) - // STATUS 0x0010 COMMAND 0x0007 - // CLASS 0x03 0x02 0x00 REVISION 0x00 - // BIST 0x00 HEADER 0x00 LATENCY 0x00 CACHE 0x00 - // MAX_LAT 0x00 MIN_GNT 0x00 INT_PIN 0x00 INT_LINE 0x00 - - for ( - const char* pclass = strstr(buffer.chars, "\n CLASS 0x03 "); - pclass; - pclass = strstr(pclass, "\n CLASS 0x03 ") - ) +static int walkDevTree(di_node_t node, FFlist* gpus) +{ + if (ffStrEquals(di_node_name(node), "display")) { - // find the start of device entry - const char* pstart = memrchr(buffer.chars, '\n', (size_t) (pclass - buffer.chars)); - if (pstart == NULL) - return "PCI info not found, invalid scanpci result"; - while (pstart[1] != 'p') + int* vendorId; + int* deviceId; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "vendor-id", &vendorId) > 0 + && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-id", &deviceId) > 0) { - pstart = memrchr(buffer.chars, '\n', (size_t) (pstart - buffer.chars - 1)); - if (pstart == NULL) - return "PCI info not found, invalid scanpci result"; + FFGPUResult* gpu = (FFGPUResult*)ffListAdd(gpus); + ffStrbufInitS(&gpu->vendor, ffGPUGetVendorString((uint16_t) *vendorId)); + ffStrbufInit(&gpu->name); + ffStrbufInitS(&gpu->driver, di_driver_name(node)); + ffStrbufInitStatic(&gpu->platformApi, "libdevinfo"); + ffStrbufInit(&gpu->memoryType); + gpu->index = FF_GPU_INDEX_UNSET; + gpu->temperature = FF_GPU_TEMP_UNSET; + gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; + gpu->coreUsage = FF_GPU_CORE_USAGE_UNSET; + gpu->type = FF_GPU_TYPE_UNKNOWN; + gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; + gpu->deviceId = strtoul(di_bus_addr(node), NULL, 16); + gpu->frequency = FF_GPU_FREQUENCY_UNSET; + + if (gpu->vendor.chars == FF_GPU_VENDOR_NAME_AMD) + { + int* revId; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "revision-id", &revId) > 0) + ffGPUQueryAmdGpuName((uint16_t) *deviceId, (uint8_t) *revId, gpu); + } + + if (gpu->name.length == 0) + { + uint8_t subclass = 0; // assume VGA + int* classCode; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "class-code", &classCode) > 0) + subclass = (uint8_t) (*classCode & 0xFFFF); + ffGPUFillVendorAndName(subclass, (uint16_t) *vendorId, (uint16_t) *deviceId, gpu); + } } - ++pstart; - - uint32_t vendorId, deviceId; - if (sscanf(pstart, "pci %*[^:]: vendor %x device %x", - &vendorId, &deviceId) != 2) - return "PCI info not found, invalid scanpci result"; - - pclass += strlen("\n CLASS 0x03 "); - uint32_t subclass = (uint32_t) strtoul(pclass, NULL, 16); - pclass += strlen("0x02 0x00 REVISION "); - uint32_t revision = (uint32_t) strtoul(pclass, NULL, 16); - - FFGPUResult* gpu = (FFGPUResult*)ffListAdd(gpus); - ffStrbufInitStatic(&gpu->vendor, ffGPUGetVendorString(vendorId)); - ffStrbufInit(&gpu->memoryType); - ffStrbufInit(&gpu->name); - ffStrbufInit(&gpu->driver); - ffStrbufInitStatic(&gpu->platformApi, "/usr/bin/scanpci"); - gpu->index = FF_GPU_INDEX_UNSET; - gpu->temperature = FF_GPU_TEMP_UNSET; - gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; - gpu->coreUsage = FF_GPU_CORE_USAGE_UNSET; - gpu->type = FF_GPU_TYPE_UNKNOWN; - gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; - gpu->deviceId = 0; - gpu->frequency = FF_GPU_FREQUENCY_UNSET; + } - if (gpu->vendor.chars == FF_GPU_VENDOR_NAME_AMD) - ffGPUQueryAmdGpuName((uint16_t) deviceId, (uint8_t) revision, gpu); + return DI_WALK_CONTINUE; +} - if (gpu->name.length == 0) - { - ffGPUFillVendorAndName((uint8_t) subclass, (uint16_t) vendorId, (uint16_t) deviceId, gpu); - } - } +const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist* gpus) +{ + di_node_t rootNode = di_init("/", DINFOCPYALL); + if (rootNode == DI_NODE_NIL) + return "di_init() failed"; + di_walk_node(rootNode, DI_WALK_CLDFIRST, gpus, (void*) walkDevTree); + di_fini(rootNode); return NULL; } From 7a73211484f48d081da501310b0888d593ec0c0d Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sat, 21 Jun 2025 23:46:17 +0800 Subject: [PATCH 06/45] Logo (Builtin): use FG_DEFAULT instead of FG_WHITE --- src/logo/builtin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/logo/builtin.c b/src/logo/builtin.c index dc453acee7..fe751a77d1 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -3455,7 +3455,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENINDIANA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OpenMamba From 65ff11a8d068eae97587beef7eef4103e9542fad Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sun, 22 Jun 2025 01:16:50 +0800 Subject: [PATCH 07/45] PhysicalDisk (SunOS): add support --- CMakeLists.txt | 2 +- .../physicaldisk/physicaldisk_sunos.c | 71 +++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 src/detection/physicaldisk/physicaldisk_sunos.c diff --git a/CMakeLists.txt b/CMakeLists.txt index cc930e4625..1c2910f861 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1062,7 +1062,7 @@ elseif(SunOS) src/detection/bluetoothradio/bluetoothradio_nosupport.c src/detection/disk/disk_sunos.c src/detection/dns/dns_linux.c - src/detection/physicaldisk/physicaldisk_nosupport.c + src/detection/physicaldisk/physicaldisk_sunos.c src/detection/physicalmemory/physicalmemory_linux.c src/detection/diskio/diskio_sunos.c src/detection/displayserver/linux/displayserver_linux.c diff --git a/src/detection/physicaldisk/physicaldisk_sunos.c b/src/detection/physicaldisk/physicaldisk_sunos.c new file mode 100644 index 0000000000..c510d43e6d --- /dev/null +++ b/src/detection/physicaldisk/physicaldisk_sunos.c @@ -0,0 +1,71 @@ +#include "physicaldisk.h" +#include "util/stringUtils.h" +#include "sys/scsi/generic/inquiry.h" + +#include + +struct FFWalkTreeBundle +{ + FFPhysicalDiskOptions* options; + FFlist* disks; +}; + +static int walkDevTree(di_node_t node, struct FFWalkTreeBundle* bundle) +{ + if (ffStrEquals(di_node_name(node), "sd")) + { + char* productId; + char* vendorId; + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-product-id", &productId) > 0 + && di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-vendor-id", &vendorId) > 0) + { + FF_STRBUF_AUTO_DESTROY name = ffStrbufCreateF("%s %s", vendorId, productId); + if (bundle->options->namePrefix.length && !ffStrbufStartsWithIgnCase(&name, &bundle->options->namePrefix)) + return DI_WALK_CONTINUE; + + FFPhysicalDiskResult* device = (FFPhysicalDiskResult*) ffListAdd(bundle->disks); + ffStrbufInitMove(&device->name, &name); + ffStrbufInit(&device->devPath); + ffStrbufInit(&device->serial); + ffStrbufInit(&device->revision); + ffStrbufInit(&device->interconnect); + device->temperature = FF_PHYSICALDISK_TEMP_UNSET; + device->type = FF_PHYSICALDISK_TYPE_NONE; + device->size = 0; + + char* buf; + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-serial-no", &buf) > 0) + ffStrbufSetS(&device->serial, buf); + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-revision-id", &buf) > 0) + ffStrbufSetS(&device->revision, buf); + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "class", &buf) > 0) + ffStrbufSetS(&device->interconnect, buf); + + device->type |= di_prop_find(DDI_DEV_T_ANY, node, "removable-media") ? FF_PHYSICALDISK_TYPE_REMOVABLE : FF_PHYSICALDISK_TYPE_FIXED; + + int* value; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-solid-state", &value) > 0) + device->type |= *value ? FF_PHYSICALDISK_TYPE_SSD : FF_PHYSICALDISK_TYPE_HDD; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "inquiry-device-type", &value) > 0) + device->type |= *value == DTYPE_DIRECT ? FF_PHYSICALDISK_TYPE_READWRITE : *value == DTYPE_RODIRECT ? FF_PHYSICALDISK_TYPE_READONLY : 0; + + int64_t* nblocks; + if (di_prop_lookup_int64(DDI_DEV_T_ANY, node, "device-nblocks", &nblocks) > 0 + && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-blksize", &value) > 0) + device->size = (uint64_t) ((uint64_t) *nblocks * (uint64_t) *value); + } + } + + return DI_WALK_CONTINUE; +} + +const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options) +{ + di_node_t rootNode = di_init("/", DINFOCPYALL); + if (rootNode == DI_NODE_NIL) + return "di_init() failed"; + di_walk_node(rootNode, DI_WALK_CLDFIRST, &(struct FFWalkTreeBundle) { options, result }, (void*) walkDevTree); + di_fini(rootNode); + + return NULL; +} From dbeb338bda808a4b9a9dc9198047fb555483184f Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sun, 22 Jun 2025 11:14:29 +0800 Subject: [PATCH 08/45] PhysicalDisk (SunOS): rework; support more device types --- .../physicaldisk/physicaldisk_sunos.c | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/src/detection/physicaldisk/physicaldisk_sunos.c b/src/detection/physicaldisk/physicaldisk_sunos.c index c510d43e6d..f3b4b3de89 100644 --- a/src/detection/physicaldisk/physicaldisk_sunos.c +++ b/src/detection/physicaldisk/physicaldisk_sunos.c @@ -3,6 +3,7 @@ #include "sys/scsi/generic/inquiry.h" #include +#include struct FFWalkTreeBundle { @@ -10,50 +11,49 @@ struct FFWalkTreeBundle FFlist* disks; }; -static int walkDevTree(di_node_t node, struct FFWalkTreeBundle* bundle) +static int walkDevTree(di_node_t node, di_minor_t minor, struct FFWalkTreeBundle* bundle) { - if (ffStrEquals(di_node_name(node), "sd")) + if (di_minor_spectype(minor) != S_IFCHR || !ffStrEquals(di_minor_name(minor), "a,raw")) return DI_WALK_CONTINUE; + + char* productId; + char* vendorId; + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-product-id", &productId) > 0 + && di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-vendor-id", &vendorId) > 0) { - char* productId; - char* vendorId; - if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-product-id", &productId) > 0 - && di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-vendor-id", &vendorId) > 0) - { - FF_STRBUF_AUTO_DESTROY name = ffStrbufCreateF("%s %s", vendorId, productId); - if (bundle->options->namePrefix.length && !ffStrbufStartsWithIgnCase(&name, &bundle->options->namePrefix)) - return DI_WALK_CONTINUE; + FF_STRBUF_AUTO_DESTROY name = ffStrbufCreateF("%s %s", vendorId, productId); + if (bundle->options->namePrefix.length && !ffStrbufStartsWithIgnCase(&name, &bundle->options->namePrefix)) + return DI_WALK_CONTINUE; - FFPhysicalDiskResult* device = (FFPhysicalDiskResult*) ffListAdd(bundle->disks); - ffStrbufInitMove(&device->name, &name); - ffStrbufInit(&device->devPath); - ffStrbufInit(&device->serial); - ffStrbufInit(&device->revision); - ffStrbufInit(&device->interconnect); - device->temperature = FF_PHYSICALDISK_TEMP_UNSET; - device->type = FF_PHYSICALDISK_TYPE_NONE; - device->size = 0; + FFPhysicalDiskResult* device = (FFPhysicalDiskResult*) ffListAdd(bundle->disks); + ffStrbufInitMove(&device->name, &name); + ffStrbufInitF(&device->devPath, "/devices%s", di_devfs_path(node)); + ffStrbufInit(&device->serial); + ffStrbufInit(&device->revision); + ffStrbufInit(&device->interconnect); + device->temperature = FF_PHYSICALDISK_TEMP_UNSET; + device->type = FF_PHYSICALDISK_TYPE_NONE; + device->size = 0; - char* buf; - if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-serial-no", &buf) > 0) - ffStrbufSetS(&device->serial, buf); - if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-revision-id", &buf) > 0) - ffStrbufSetS(&device->revision, buf); - if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "class", &buf) > 0) - ffStrbufSetS(&device->interconnect, buf); + char* buf; + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-serial-no", &buf) > 0) + ffStrbufSetS(&device->serial, buf); + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "inquiry-revision-id", &buf) > 0) + ffStrbufSetS(&device->revision, buf); + if (di_prop_lookup_strings(DDI_DEV_T_ANY, node, "class", &buf) > 0) + ffStrbufSetS(&device->interconnect, buf); - device->type |= di_prop_find(DDI_DEV_T_ANY, node, "removable-media") ? FF_PHYSICALDISK_TYPE_REMOVABLE : FF_PHYSICALDISK_TYPE_FIXED; + device->type |= di_prop_find(DDI_DEV_T_ANY, node, "removable-media") ? FF_PHYSICALDISK_TYPE_REMOVABLE : FF_PHYSICALDISK_TYPE_FIXED; - int* value; - if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-solid-state", &value) > 0) - device->type |= *value ? FF_PHYSICALDISK_TYPE_SSD : FF_PHYSICALDISK_TYPE_HDD; - if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "inquiry-device-type", &value) > 0) - device->type |= *value == DTYPE_DIRECT ? FF_PHYSICALDISK_TYPE_READWRITE : *value == DTYPE_RODIRECT ? FF_PHYSICALDISK_TYPE_READONLY : 0; + int* value; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-solid-state", &value) > 0) + device->type |= *value ? FF_PHYSICALDISK_TYPE_SSD : FF_PHYSICALDISK_TYPE_HDD; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "inquiry-device-type", &value) > 0) + device->type |= *value == DTYPE_DIRECT ? FF_PHYSICALDISK_TYPE_READWRITE : *value == DTYPE_RODIRECT ? FF_PHYSICALDISK_TYPE_READONLY : 0; - int64_t* nblocks; - if (di_prop_lookup_int64(DDI_DEV_T_ANY, node, "device-nblocks", &nblocks) > 0 - && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-blksize", &value) > 0) - device->size = (uint64_t) ((uint64_t) *nblocks * (uint64_t) *value); - } + int64_t* nblocks; + if (di_prop_lookup_int64(DDI_DEV_T_ANY, node, "device-nblocks", &nblocks) > 0 + && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-blksize", &value) > 0) + device->size = (uint64_t) ((uint64_t) *nblocks * (uint64_t) *value); } return DI_WALK_CONTINUE; @@ -64,7 +64,7 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options) di_node_t rootNode = di_init("/", DINFOCPYALL); if (rootNode == DI_NODE_NIL) return "di_init() failed"; - di_walk_node(rootNode, DI_WALK_CLDFIRST, &(struct FFWalkTreeBundle) { options, result }, (void*) walkDevTree); + di_walk_minor(rootNode, DDI_NT_BLOCK, DI_WALK_CLDFIRST, &(struct FFWalkTreeBundle) { options, result }, (void*) walkDevTree); di_fini(rootNode); return NULL; From 8ebc980c179494d183008eb1b67132b16b074ce7 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sun, 22 Jun 2025 11:20:19 +0800 Subject: [PATCH 09/45] GPU (SunOS): simplify --- src/detection/gpu/gpu_sunos.c | 69 +++++++++++++++++------------------ 1 file changed, 33 insertions(+), 36 deletions(-) diff --git a/src/detection/gpu/gpu_sunos.c b/src/detection/gpu/gpu_sunos.c index 837bd8cd9a..6802ee0993 100644 --- a/src/detection/gpu/gpu_sunos.c +++ b/src/detection/gpu/gpu_sunos.c @@ -3,45 +3,42 @@ #include -static int walkDevTree(di_node_t node, FFlist* gpus) +static int walkDevTree(di_node_t node, FF_MAYBE_UNUSED di_minor_t minor, FFlist* gpus) { - if (ffStrEquals(di_node_name(node), "display")) + int* vendorId; + int* deviceId; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "vendor-id", &vendorId) > 0 + && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-id", &deviceId) > 0) { - int* vendorId; - int* deviceId; - if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "vendor-id", &vendorId) > 0 - && di_prop_lookup_ints(DDI_DEV_T_ANY, node, "device-id", &deviceId) > 0) - { - FFGPUResult* gpu = (FFGPUResult*)ffListAdd(gpus); - ffStrbufInitS(&gpu->vendor, ffGPUGetVendorString((uint16_t) *vendorId)); - ffStrbufInit(&gpu->name); - ffStrbufInitS(&gpu->driver, di_driver_name(node)); - ffStrbufInitStatic(&gpu->platformApi, "libdevinfo"); - ffStrbufInit(&gpu->memoryType); - gpu->index = FF_GPU_INDEX_UNSET; - gpu->temperature = FF_GPU_TEMP_UNSET; - gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; - gpu->coreUsage = FF_GPU_CORE_USAGE_UNSET; - gpu->type = FF_GPU_TYPE_UNKNOWN; - gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; - gpu->deviceId = strtoul(di_bus_addr(node), NULL, 16); - gpu->frequency = FF_GPU_FREQUENCY_UNSET; + FFGPUResult* gpu = (FFGPUResult*)ffListAdd(gpus); + ffStrbufInitS(&gpu->vendor, ffGPUGetVendorString((uint16_t) *vendorId)); + ffStrbufInit(&gpu->name); + ffStrbufInitS(&gpu->driver, di_driver_name(node)); + ffStrbufInitStatic(&gpu->platformApi, "libdevinfo"); + ffStrbufInit(&gpu->memoryType); + gpu->index = FF_GPU_INDEX_UNSET; + gpu->temperature = FF_GPU_TEMP_UNSET; + gpu->coreCount = FF_GPU_CORE_COUNT_UNSET; + gpu->coreUsage = FF_GPU_CORE_USAGE_UNSET; + gpu->type = FF_GPU_TYPE_UNKNOWN; + gpu->dedicated.total = gpu->dedicated.used = gpu->shared.total = gpu->shared.used = FF_GPU_VMEM_SIZE_UNSET; + gpu->deviceId = strtoul(di_bus_addr(node), NULL, 16); + gpu->frequency = FF_GPU_FREQUENCY_UNSET; - if (gpu->vendor.chars == FF_GPU_VENDOR_NAME_AMD) - { - int* revId; - if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "revision-id", &revId) > 0) - ffGPUQueryAmdGpuName((uint16_t) *deviceId, (uint8_t) *revId, gpu); - } + if (gpu->vendor.chars == FF_GPU_VENDOR_NAME_AMD) + { + int* revId; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "revision-id", &revId) > 0) + ffGPUQueryAmdGpuName((uint16_t) *deviceId, (uint8_t) *revId, gpu); + } - if (gpu->name.length == 0) - { - uint8_t subclass = 0; // assume VGA - int* classCode; - if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "class-code", &classCode) > 0) - subclass = (uint8_t) (*classCode & 0xFFFF); - ffGPUFillVendorAndName(subclass, (uint16_t) *vendorId, (uint16_t) *deviceId, gpu); - } + if (gpu->name.length == 0) + { + uint8_t subclass = 0; // assume VGA + int* classCode; + if (di_prop_lookup_ints(DDI_DEV_T_ANY, node, "class-code", &classCode) > 0) + subclass = (uint8_t) (*classCode & 0xFFFF); + ffGPUFillVendorAndName(subclass, (uint16_t) *vendorId, (uint16_t) *deviceId, gpu); } } @@ -53,7 +50,7 @@ const char* ffDetectGPUImpl(FF_MAYBE_UNUSED const FFGPUOptions* options, FFlist* di_node_t rootNode = di_init("/", DINFOCPYALL); if (rootNode == DI_NODE_NIL) return "di_init() failed"; - di_walk_node(rootNode, DI_WALK_CLDFIRST, gpus, (void*) walkDevTree); + di_walk_minor(rootNode, DDI_NT_DISPLAY, DI_WALK_CLDFIRST, gpus, (void*) walkDevTree); di_fini(rootNode); return NULL; From 92fe44183dfebba016a6e30178c6237462e6c5e7 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sun, 22 Jun 2025 12:12:49 +0800 Subject: [PATCH 10/45] Shell (SunOS): ignore leading `-` --- src/common/processing_linux.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/common/processing_linux.c b/src/common/processing_linux.c index 032e774c1a..770ed60b63 100644 --- a/src/common/processing_linux.c +++ b/src/common/processing_linux.c @@ -279,8 +279,10 @@ void ffProcessGetInfoLinux(pid_t pid, FFstrbuf* processName, FFstrbuf* exe, cons psinfo_t proc; if (ffReadFileData(filePath, sizeof(proc), &proc) == sizeof(proc)) { - ffStrbufSetS(exe, proc.pr_psargs); - ffStrbufSubstrBeforeFirstC(exe, ' '); + const char* args = proc.pr_psargs; + if (args[0] == '-') ++args; + const char* end = strchr(args, ' '); + ffStrbufSetNS(exe, end ? (uint32_t) (end - args) : (uint32_t) strlen(args), args); } if (exePath) From 13b7bc89eb17a93b6be810022f043cd80ddaa7c9 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Sun, 22 Jun 2025 20:34:33 +0800 Subject: [PATCH 11/45] Sound (SunOS): rework; drop pulseaudio dependency --- CMakeLists.txt | 4 +- src/detection/sound/audio_oss_sunos.h | 909 ++++++++++++++++++++++++++ src/detection/sound/sound_sunos.c | 95 +++ 3 files changed, 1006 insertions(+), 2 deletions(-) create mode 100644 src/detection/sound/audio_oss_sunos.h create mode 100644 src/detection/sound/sound_sunos.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c2910f861..d766e9acf1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,7 +76,7 @@ cmake_dependent_option(ENABLE_EGL "Enable egl" ON "LINUX OR FreeBSD OR OpenBSD O cmake_dependent_option(ENABLE_GLX "Enable glx" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR ANDROID OR SunOS" OFF) cmake_dependent_option(ENABLE_OPENCL "Enable opencl" ON "LINUX OR FreeBSD OR OpenBSD OR NetBSD OR WIN32 OR ANDROID OR SunOS OR Haiku" OFF) cmake_dependent_option(ENABLE_FREETYPE "Enable freetype" ON "ANDROID" OFF) -cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX OR SunOS" OFF) +cmake_dependent_option(ENABLE_PULSE "Enable pulse" ON "LINUX" OFF) cmake_dependent_option(ENABLE_DDCUTIL "Enable ddcutil" ON "LINUX" OFF) cmake_dependent_option(ENABLE_DIRECTX_HEADERS "Enable DirectX headers for WSL" ON "LINUX" OFF) cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR DragonFly OR Haiku" OFF) @@ -1102,7 +1102,7 @@ elseif(SunOS) src/detection/poweradapter/poweradapter_nosupport.c src/detection/processes/processes_linux.c src/detection/gtk_qt/qt.c - src/detection/sound/sound_linux.c + src/detection/sound/sound_sunos.c src/detection/swap/swap_sunos.c src/detection/terminalfont/terminalfont_linux.c src/detection/terminalshell/terminalshell_linux.c diff --git a/src/detection/sound/audio_oss_sunos.h b/src/detection/sound/audio_oss_sunos.h new file mode 100644 index 0000000000..c5e4e07e75 --- /dev/null +++ b/src/detection/sound/audio_oss_sunos.h @@ -0,0 +1,909 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/* + * Copyright (C) 4Front Technologies 1996-2008. + * + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + + +#ifndef _SYS_AUDIO_OSS_H +#define _SYS_AUDIO_OSS_H + +#include +#include + +/* + * These are the ioctl calls for all Solaris /dev/dsp and /dev/mixer audio + * devices. + * + * Note that the contents of this file include definitions which exist + * primarily for compatibility. Many of the defines here are not + * actually implemented, but exist solely to facilitate compilation of + * programs from other operating systems. Other definitions here may + * not be fully supported or may otherwise be obsolete. There are many + * things in this file which should not be used on SunOS. + * + * Please read the documentation to determine which portions of the + * API are fully supported and recommended for use in new + * applications. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Buffer status queries. + * SNDCTL_DSP_GETOSPACE and SNDCTL_DSP_GETISPACE + */ +typedef struct audio_buf_info { + int fragments; /* # of available fragments */ + int fragstotal; /* Total # of fragments allocated */ + int fragsize; /* Size of a fragment in bytes */ + int bytes; /* Available space in bytes */ + /* Note! 'bytes' could be more than fragments*fragsize */ +} audio_buf_info; + +/* + * Sync groups for audio devices. + * SNDCTL_DSP_SYNCGROUP and SNDCTL_DSP_SYNCSTART + */ +typedef struct oss_syncgroup { + int id; + int mode; + int filler[16]; +} oss_syncgroup; + +/* + * SNDCTL_DSP_GETERROR + */ +typedef struct audio_errinfo { + int play_underruns; + int rec_overruns; + unsigned int play_ptradjust; + unsigned int rec_ptradjust; + int play_errorcount; + int rec_errorcount; + int play_lasterror; + int rec_lasterror; + int play_errorparm; + int rec_errorparm; + int filler[16]; +} audio_errinfo; + +/* + * SNDCTL_DSP_GETIPTR and SNDCTL_DSP_GETOPTR + */ +typedef struct count_info { + unsigned int bytes; /* Total # of bytes processed */ + int blocks; /* # of fragment transitions since last time */ + int ptr; /* Current DMA pointer value */ +} count_info; + +/* + * SNDCTL_DSP_CURENT_IPTR and SNDCTL_DSP_CURRENT_OPTR + */ +typedef struct { + long long samples; /* Total # of samples */ + int fifo_samples; /* Samples in device FIFO */ + int filler[32]; /* For future use */ +} oss_count_t; + +/* + * SNDCTL_DSP_GET_RECSRC_NAMES and SNDCTL_DSP_GET_PLAYTGT_NAMES + */ +#define OSS_ENUM_MAXVALUE 255 +typedef struct oss_mixer_enuminfo { + int dev; + int ctrl; + int nvalues; + int version; + short strindex[OSS_ENUM_MAXVALUE]; + char strings[3000]; +} oss_mixer_enuminfo; + +/* + * Digital interface (S/PDIF) control interface + * SNDCTL_DSP_READCTL and SNDCTL_DSP_WRITECTL + */ +typedef struct oss_digital_control { + unsigned int caps; +#define DIG_CBITIN_NONE 0x00000000 +#define DIG_CBITIN_LIMITED 0x00000001 +#define DIG_CBITIN_DATA 0x00000002 +#define DIG_CBITIN_BYTE0 0x00000004 +#define DIG_CBITIN_FULL 0x00000008 +#define DIG_CBITIN_MASK 0x0000000f +#define DIG_CBITOUT_NONE 0x00000000 +#define DIG_CBITOUT_LIMITED 0x00000010 +#define DIG_CBITOUT_BYTE0 0x00000020 +#define DIG_CBITOUT_FULL 0x00000040 +#define DIG_CBITOUT_DATA 0x00000080 +#define DIG_CBITOUT_MASK 0x000000f0 +#define DIG_UBITIN 0x00000100 +#define DIG_UBITOUT 0x00000200 +#define DIG_VBITOUT 0x00000400 +#define DIG_OUTRATE 0x00000800 +#define DIG_INRATE 0x00001000 +#define DIG_INBITS 0x00002000 +#define DIG_OUTBITS 0x00004000 +#define DIG_EXACT 0x00010000 +#define DIG_PRO 0x00020000 +#define DIG_CONSUMER 0x00040000 +#define DIG_PASSTHROUGH 0x00080000 +#define DIG_OUTSEL 0x00100000 + + unsigned int valid; +#define VAL_CBITIN 0x00000001 +#define VAL_UBITIN 0x00000002 +#define VAL_CBITOUT 0x00000004 +#define VAL_UBITOUT 0x00000008 +#define VAL_ISTATUS 0x00000010 +#define VAL_IRATE 0x00000020 +#define VAL_ORATE 0x00000040 +#define VAL_INBITS 0x00000080 +#define VAL_OUTBITS 0x00000100 +#define VAL_REQUEST 0x00000200 +#define VAL_OUTSEL 0x00000400 + +#define VAL_OUTMASK (VAL_CBITOUT|VAL_UBITOUT|VAL_ORATE|VAL_OUTBITS|VAL_OUTSEL) + + unsigned int request; + unsigned int param; +#define SPD_RQ_PASSTHROUGH 1 + + unsigned char cbitin[24]; + unsigned char ubitin[24]; + unsigned char cbitout[24]; + unsigned char ubitout[24]; + + unsigned int outsel; +#define OUTSEL_DIGITAL 1 +#define OUTSEL_ANALOG 2 +#define OUTSEL_BOTH (OUTSEL_DIGITAL|OUTSEL_ANALOG) + + int in_data; /* Audio/data if autodetectable by receiver */ +#define IND_UNKNOWN 0 +#define IND_AUDIO 1 +#define IND_DATA 2 + + int in_locked; /* Receiver locked */ +#define LOCK_NOT_INDICATED 0 +#define LOCK_UNLOCKED 1 +#define LOCK_LOCKED 2 + + int in_quality; /* Input signal quality */ +#define IN_QUAL_NOT_INDICATED 0 +#define IN_QUAL_POOR 1 +#define IN_QUAL_GOOD 2 + + int in_vbit; + int out_vbit; /* V bits */ +#define VBIT_NOT_INDICATED 0 +#define VBIT_OFF 1 +#define VBIT_ON 2 + + unsigned int in_errors; /* Various input error conditions */ +#define INERR_CRC 0x0001 +#define INERR_QCODE_CRC 0x0002 +#define INERR_PARITY 0x0004 +#define INERR_BIPHASE 0x0008 + + int srate_in; + int srate_out; + int bits_in; + int bits_out; + + int filler[32]; +} oss_digital_control; + +/* + * The "new" mixer API. + * + * This improved mixer API makes it possible to access every possible feature + * of every possible device. However you should read the mixer programming + * section of the OSS API Developer's Manual. There is no chance that you + * could use this interface correctly just by examining this header. + */ +#define OSS_VERSION 0x040003 +#define SOUND_VERSION OSS_VERSION + +typedef struct oss_sysinfo { + char product[32]; /* E.g. SunOS Audio */ + char version[32]; /* E.g. 4.0a */ + int versionnum; /* See OSS_GETVERSION */ + char options[128]; /* NOT SUPPORTED */ + + int numaudios; /* # of audio/dsp devices */ + int openedaudio[8]; /* Mask of audio devices are busy */ + + int numsynths; /* NOT SUPPORTED, always 0 */ + int nummidis; /* NOT SUPPORTED, always 0 */ + int numtimers; /* NOT SUPPORTED, always 0 */ + int nummixers; /* # of mixer devices */ + + int openedmidi[8]; /* Mask of midi devices are busy */ + int numcards; /* Number of sound cards in the system */ + int numaudioengines; /* Number of audio engines in the system */ + char license[16]; /* E.g. "GPL" or "CDDL" */ + char revision_info[256]; /* For internal use */ + int filler[172]; /* For future expansion */ +} oss_sysinfo; + +typedef struct oss_mixext { + int dev; /* Mixer device number */ + int ctrl; /* Extension number */ + int type; /* Entry type */ +#define MIXT_DEVROOT 0 /* Device root entry */ +#define MIXT_GROUP 1 /* Controller group */ +#define MIXT_ONOFF 2 /* OFF (0) or ON (1) */ +#define MIXT_ENUM 3 /* Enumerated (0 to maxvalue) */ +#define MIXT_MONOSLIDER 4 /* Mono slider (0 to 255) */ +#define MIXT_STEREOSLIDER 5 /* Stereo slider (dual 0 to 255) */ +#define MIXT_MESSAGE 6 /* (Readable) textual message */ +#define MIXT_MONOVU 7 /* VU meter value (mono) */ +#define MIXT_STEREOVU 8 /* VU meter value (stereo) */ +#define MIXT_MONOPEAK 9 /* VU meter peak value (mono) */ +#define MIXT_STEREOPEAK 10 /* VU meter peak value (stereo) */ +#define MIXT_RADIOGROUP 11 /* Radio button group */ +#define MIXT_MARKER 12 /* Separator between entries */ +#define MIXT_VALUE 13 /* Decimal value entry */ +#define MIXT_HEXVALUE 14 /* Hexadecimal value entry */ +#define MIXT_MONODB 15 /* OBSOLETE */ +#define MIXT_STEREODB 16 /* OBSOLETE */ +#define MIXT_SLIDER 17 /* Slider (mono, 31 bit int range) */ +#define MIXT_3D 18 +#define MIXT_MONOSLIDER16 19 /* Mono slider (0-32767) */ +#define MIXT_STEREOSLIDER16 20 /* Stereo slider (dual 0-32767) */ +#define MIXT_MUTE 21 /* Mute=1, unmute=0 */ + + /* Possible value range (minvalue to maxvalue) */ + /* Note that maxvalue may also be smaller than minvalue */ + int maxvalue; + int minvalue; + + int flags; +#define MIXF_READABLE 0x00000001 /* Has readable value */ +#define MIXF_WRITEABLE 0x00000002 /* Has writeable value */ +#define MIXF_POLL 0x00000004 /* May change itself */ +#define MIXF_HZ 0x00000008 /* Hertz scale */ +#define MIXF_STRING 0x00000010 /* Use dynamic extensions for value */ +#define MIXF_DYNAMIC 0x00000010 /* Supports dynamic extensions */ +#define MIXF_OKFAIL 0x00000020 /* Interpret value as 1=OK, 0=FAIL */ +#define MIXF_FLAT 0x00000040 /* NOT SUPPORTED */ +#define MIXF_LEGACY 0x00000080 /* NOT SUPPORTED */ +#define MIXF_CENTIBEL 0x00000100 /* Centibel (0.1 dB) step size */ +#define MIXF_DECIBEL 0x00000200 /* Step size of 1 dB */ +#define MIXF_MAINVOL 0x00000400 /* Main volume control */ +#define MIXF_PCMVOL 0x00000800 /* PCM output volume control */ +#define MIXF_RECVOL 0x00001000 /* PCM recording volume control */ +#define MIXF_MONVOL 0x00002000 /* Input->output monitor volume */ +#define MIXF_WIDE 0x00004000 /* NOT SUPPORTED */ +#define MIXF_DESCR 0x00008000 /* NOT SUPPORTED */ +#define MIXF_DISABLE 0x00010000 /* Control has been disabled */ + + char id[16]; /* Mnemonic ID (internal use) */ + int parent; /* Entry# of parent (-1 if root) */ + + int dummy; /* NOT SUPPORTED */ + + int timestamp; + + char data[64]; /* Misc data (entry type dependent) */ + unsigned char enum_present[32]; /* Mask of allowed enum values */ + int control_no; /* NOT SUPPORTED, always -1 */ + + unsigned int desc; /* Scope flags, etc */ +#define MIXEXT_SCOPE_MASK 0x0000003f +#define MIXEXT_SCOPE_OTHER 0x00000000 +#define MIXEXT_SCOPE_INPUT 0x00000001 +#define MIXEXT_SCOPE_OUTPUT 0x00000002 +#define MIXEXT_SCOPE_MONITOR 0x00000003 +#define MIXEXT_SCOPE_RECSWITCH 0x00000004 + + char extname[32]; + int update_counter; +#ifdef _KERNEL + int filler[6]; + int enumbit; +#else + int filler[7]; +#endif +} oss_mixext; + +typedef struct oss_mixext_root { + char id[16]; + char name[48]; +} oss_mixext_root; + +typedef struct oss_mixer_value { + int dev; + int ctrl; + int value; + int flags; /* Reserved for future use. Initialize to 0 */ + int timestamp; /* Must be set to oss_mixext.timestamp */ + int filler[8]; /* Reserved for future use. Initialize to 0 */ +} oss_mixer_value; + +#define OSS_LONGNAME_SIZE 64 +#define OSS_LABEL_SIZE 16 +#define OSS_DEVNODE_SIZE 32 +typedef char oss_longname_t[OSS_LONGNAME_SIZE]; +typedef char oss_label_t[OSS_LABEL_SIZE]; +typedef char oss_devnode_t[OSS_DEVNODE_SIZE]; + + +typedef struct oss_audioinfo { + int dev; /* Audio device number */ + char name[64]; + int busy; /* 0, OPEN_READ, OPEN_WRITE, OPEN_READWRITE */ + int pid; /* Process ID, not used in SunOS */ + int caps; /* PCM_CAP_INPUT, PCM_CAP_OUTPUT */ + int iformats; /* Supported input formats */ + int oformats; /* Supported output formats */ + int magic; /* Internal use only */ + char cmd[64]; /* Command using the device (if known) */ + int card_number; + int port_number; + int mixer_dev; + int legacy_device; /* Obsolete field. Replaced by devnode */ + int enabled; /* 1=enabled, 0=device not ready */ + int flags; /* internal use only - no practical meaning */ + int min_rate; /* Minimum sample rate */ + int max_rate; /* Maximum sample rate */ + int min_channels; /* Minimum number of channels */ + int max_channels; /* Maximum number of channels */ + int binding; /* DSP_BIND_FRONT, etc. 0 means undefined */ + int rate_source; + char handle[32]; +#define OSS_MAX_SAMPLE_RATES 20 /* Cannot be changed */ + unsigned int nrates; /* Array of supported sample rates */ + unsigned int rates[OSS_MAX_SAMPLE_RATES]; + oss_longname_t song_name; /* Song name (if given) */ + oss_label_t label; /* Device label (if given) */ + int latency; /* In usecs, -1=unknown */ + oss_devnode_t devnode; /* Device special file name (absolute path) */ + int next_play_engine; + int next_rec_engine; + int filler[184]; +} oss_audioinfo; + +typedef struct oss_mixerinfo { + int dev; + char id[16]; + char name[32]; + int modify_counter; + int card_number; + int port_number; + char handle[32]; + int magic; /* Reserved */ + int enabled; /* Reserved */ + int caps; +#define MIXER_CAP_VIRTUAL 0x00000001 +#define MIXER_CAP_LAYOUT_B 0x00000002 /* For internal use only */ +#define MIXER_CAP_NARROW 0x00000004 /* Conserve horiz space */ + int flags; /* Reserved */ + int nrext; + /* + * The priority field can be used to select the default + * (motherboard) mixer device. The mixer with the highest + * priority is the most preferred one. -2 or less means that + * this device cannot be used as the default mixer. + */ + int priority; + oss_devnode_t devnode; /* Device special file name (absolute path) */ + int legacy_device; + int filler[245]; /* Reserved */ +} oss_mixerinfo; + +typedef struct oss_card_info { + int card; + char shortname[16]; + char longname[128]; + int flags; + char hw_info[400]; + int intr_count; + int ack_count; + int filler[154]; +} oss_card_info; + +typedef struct mixer_info { /* OBSOLETE */ + char id[16]; + char name[32]; + int modify_counter; + int card_number; + int port_number; + char handle[32]; +} mixer_info; + +#define MAX_PEAK_CHANNELS 128 +typedef unsigned short oss_peaks_t[MAX_PEAK_CHANNELS]; + +/* For use with SNDCTL_DSP_GET_CHNORDER */ +#define CHID_UNDEF 0 +#define CHID_L 1 +#define CHID_R 2 +#define CHID_C 3 +#define CHID_LFE 4 +#define CHID_LS 5 +#define CHID_RS 6 +#define CHID_LR 7 +#define CHID_RR 8 +#define CHNORDER_UNDEF 0x0000000000000000ULL +#define CHNORDER_NORMAL 0x0000000087654321ULL + + +#define OSSIOCPARM_MASK 0x1fff /* parameters must be < 8192 bytes */ +#define OSSIOC_VOID 0x00000000 /* no parameters */ +#define OSSIOC_OUT 0x20000000 /* copy out parameters */ +#define OSSIOC_IN 0x40000000 /* copy in parameters */ +#define OSSIOC_INOUT (OSSIOC_IN|OSSIOC_OUT) +#define OSSIOC_SZ(t) ((sizeof (t) & OSSIOCPARM_MASK) << 16) +#define OSSIOC_GETSZ(x) (((x) >> 16) & OSSIOCPARM_MASK) + +#define __OSSIO(x, y) ((int)(OSSIOC_VOID|(x<<8)|y)) +#define __OSSIOR(x, y, t) ((int)(OSSIOC_OUT|OSSIOC_SZ(t)|(x<<8)|y)) +#define __OSSIOW(x, y, t) ((int)(OSSIOC_IN|OSSIOC_SZ(t)|(x<<8)|y)) +#define __OSSIOWR(x, y, t) ((int)(OSSIOC_INOUT|OSSIOC_SZ(t)|(x<<8)|y)) + +#define SNDCTL_SYSINFO __OSSIOR('X', 1, oss_sysinfo) +#define OSS_SYSINFO SNDCTL_SYSINFO /* Old name */ + +#define SNDCTL_MIX_NRMIX __OSSIOR('X', 2, int) +#define SNDCTL_MIX_NREXT __OSSIOWR('X', 3, int) +#define SNDCTL_MIX_EXTINFO __OSSIOWR('X', 4, oss_mixext) +#define SNDCTL_MIX_READ __OSSIOWR('X', 5, oss_mixer_value) +#define SNDCTL_MIX_WRITE __OSSIOWR('X', 6, oss_mixer_value) + +#define SNDCTL_AUDIOINFO __OSSIOWR('X', 7, oss_audioinfo) +#define SNDCTL_MIX_ENUMINFO __OSSIOWR('X', 8, oss_mixer_enuminfo) +#define SNDCTL_MIDIINFO __OSSIO('X', 9) +#define SNDCTL_MIXERINFO __OSSIOWR('X', 10, oss_mixerinfo) +#define SNDCTL_CARDINFO __OSSIOWR('X', 11, oss_card_info) +#define SNDCTL_ENGINEINFO __OSSIOWR('X', 12, oss_audioinfo) +#define SNDCTL_AUDIOINFO_EX __OSSIOWR('X', 13, oss_audioinfo) +#define SNDCTL_MIX_DESCRIPTION __OSSIOWR('X', 14, oss_mixer_enuminfo) + +/* ioctl codes 'X', 200-255 are reserved for internal use */ + +/* + * Few more "globally" available ioctl calls. + */ +#define SNDCTL_SETSONG __OSSIOW('Y', 2, oss_longname_t) +#define SNDCTL_GETSONG __OSSIOR('Y', 2, oss_longname_t) +#define SNDCTL_SETNAME __OSSIOW('Y', 3, oss_longname_t) +#define SNDCTL_SETLABEL __OSSIOW('Y', 4, oss_label_t) +#define SNDCTL_GETLABEL __OSSIOR('Y', 4, oss_label_t) + +/* + * IOCTL commands for /dev/dsp + */ +#define SNDCTL_DSP_HALT __OSSIO('P', 0) +#define SNDCTL_DSP_RESET SNDCTL_DSP_HALT /* Old name */ +#define SNDCTL_DSP_SYNC __OSSIO('P', 1) +#define SNDCTL_DSP_SPEED __OSSIOWR('P', 2, int) + +#define SNDCTL_DSP_STEREO __OSSIOWR('P', 3, int) /* OBSOLETE */ + +#define SNDCTL_DSP_GETBLKSIZE __OSSIOWR('P', 4, int) +#define SNDCTL_DSP_SAMPLESIZE SNDCTL_DSP_SETFMT +#define SNDCTL_DSP_CHANNELS __OSSIOWR('P', 6, int) +#define SNDCTL_DSP_POST __OSSIO('P', 8) +#define SNDCTL_DSP_SUBDIVIDE __OSSIOWR('P', 9, int) +#define SNDCTL_DSP_SETFRAGMENT __OSSIOWR('P', 10, int) + +#define SNDCTL_DSP_GETFMTS __OSSIOR('P', 11, int) /* Returns a mask */ +#define SNDCTL_DSP_SETFMT __OSSIOWR('P', 5, int) /* Selects ONE fmt */ + +#define SNDCTL_DSP_GETOSPACE __OSSIOR('P', 12, audio_buf_info) +#define SNDCTL_DSP_GETISPACE __OSSIOR('P', 13, audio_buf_info) +#define SNDCTL_DSP_NONBLOCK __OSSIO('P', 14) /* Obsolete */ +#define SNDCTL_DSP_GETCAPS __OSSIOR('P', 15, int) + +#define SNDCTL_DSP_GETTRIGGER __OSSIOR('P', 16, int) +#define SNDCTL_DSP_SETTRIGGER __OSSIOW('P', 16, int) + +#define SNDCTL_DSP_GETIPTR __OSSIOR('P', 17, count_info) +#define SNDCTL_DSP_GETOPTR __OSSIOR('P', 18, count_info) + +#define SNDCTL_DSP_SETSYNCRO __OSSIO('P', 21) +#define SNDCTL_DSP_SETDUPLEX __OSSIO('P', 22) + +#define SNDCTL_DSP_PROFILE __OSSIOW('P', 23, int) /* OBSOLETE */ +#define APF_NORMAL 0 /* Normal applications */ +#define APF_NETWORK 1 /* Underruns caused by "external" delay */ +#define APF_CPUINTENS 2 /* Underruns caused by "overheating" the CPU */ + + +#define SNDCTL_DSP_GETODELAY __OSSIOR('P', 23, int) + +#define SNDCTL_DSP_GETPLAYVOL __OSSIOR('P', 24, int) +#define SNDCTL_DSP_SETPLAYVOL __OSSIOWR('P', 24, int) +#define SNDCTL_DSP_GETERROR __OSSIOR('P', 25, audio_errinfo) + +#define SNDCTL_DSP_READCTL __OSSIOWR('P', 26, oss_digital_control) +#define SNDCTL_DSP_WRITECTL __OSSIOWR('P', 27, oss_digital_control) + +#define SNDCTL_DSP_SYNCGROUP __OSSIOWR('P', 28, oss_syncgroup) +#define SNDCTL_DSP_SYNCSTART __OSSIOW('P', 29, int) + +#define SNDCTL_DSP_COOKEDMODE __OSSIOW('P', 30, int) + +#define SNDCTL_DSP_SILENCE __OSSIO('P', 31) +#define SNDCTL_DSP_SKIP __OSSIO('P', 32) + +#define SNDCTL_DSP_HALT_INPUT __OSSIO('P', 33) +#define SNDCTL_DSP_RESET_INPUT SNDCTL_DSP_HALT_INPUT /* Old name */ +#define SNDCTL_DSP_HALT_OUTPUT __OSSIO('P', 34) +#define SNDCTL_DSP_RESET_OUTPUT SNDCTL_DSP_HALT_OUTPUT /* Old name */ + +#define SNDCTL_DSP_LOW_WATER __OSSIOW('P', 34, int) + +#define SNDCTL_DSP_CURRENT_IPTR __OSSIOR('P', 35, oss_count_t) +#define SNDCTL_DSP_CURRENT_OPTR __OSSIOR('P', 36, oss_count_t) + +#define SNDCTL_DSP_GET_RECSRC_NAMES __OSSIOR('P', 37, oss_mixer_enuminfo) +#define SNDCTL_DSP_GET_RECSRC __OSSIOR('P', 38, int) +#define SNDCTL_DSP_SET_RECSRC __OSSIOWR('P', 38, int) + +#define SNDCTL_DSP_GET_PLAYTGT_NAMES __OSSIOR('P', 39, oss_mixer_enuminfo) +#define SNDCTL_DSP_GET_PLAYTGT __OSSIOR('P', 40, int) +#define SNDCTL_DSP_SET_PLAYTGT __OSSIOWR('P', 40, int) +#define SNDCTL_DSP_GETRECVOL __OSSIOR('P', 41, int) +#define SNDCTL_DSP_SETRECVOL __OSSIOWR('P', 41, int) + +#define SNDCTL_DSP_GET_CHNORDER __OSSIOR('P', 42, unsigned long long) +#define SNDCTL_DSP_SET_CHNORDER __OSSIOWR('P', 42, unsigned long long) + +#define SNDCTL_DSP_GETIPEAKS __OSSIOR('P', 43, oss_peaks_t) +#define SNDCTL_DSP_GETOPEAKS __OSSIOR('P', 44, oss_peaks_t) + +#define SNDCTL_DSP_POLICY __OSSIOW('P', 45, int) /* See the manual */ + +#define SNDCTL_DSP_GETCHANNELMASK __OSSIOWR('P', 64, int) +#define SNDCTL_DSP_BIND_CHANNEL __OSSIOWR('P', 65, int) + +/* + * These definitions are here for the benefit of compiling application + * code. Most of these are NOT implemented in the Solaris code, + * however. This is the older 3.x OSS API, and only the master input and + * output levels are actually supported. + */ +#define SOUND_MIXER_NRDEVICES 28 +#define SOUND_MIXER_VOLUME 0 +#define SOUND_MIXER_BASS 1 +#define SOUND_MIXER_TREBLE 2 +#define SOUND_MIXER_SYNTH 3 +#define SOUND_MIXER_PCM 4 +#define SOUND_MIXER_SPEAKER 5 +#define SOUND_MIXER_LINE 6 +#define SOUND_MIXER_MIC 7 +#define SOUND_MIXER_CD 8 +#define SOUND_MIXER_IMIX 9 /* Recording monitor */ +#define SOUND_MIXER_ALTPCM 10 +#define SOUND_MIXER_RECLEV 11 /* Recording level */ +#define SOUND_MIXER_IGAIN 12 /* Input gain */ +#define SOUND_MIXER_OGAIN 13 /* Output gain */ +#define SOUND_MIXER_LINE1 14 /* Input source 1 (aux1) */ +#define SOUND_MIXER_LINE2 15 /* Input source 2 (aux2) */ +#define SOUND_MIXER_LINE3 16 /* Input source 3 (line) */ +#define SOUND_MIXER_DIGITAL1 17 /* Digital I/O 1 */ +#define SOUND_MIXER_DIGITAL2 18 /* Digital I/O 2 */ +#define SOUND_MIXER_DIGITAL3 19 /* Digital I/O 3 */ +#define SOUND_MIXER_PHONE 20 /* Phone */ +#define SOUND_MIXER_MONO 21 /* Mono Output */ +#define SOUND_MIXER_VIDEO 22 /* Video/TV (audio) in */ +#define SOUND_MIXER_RADIO 23 /* Radio in */ +#define SOUND_MIXER_DEPTH 24 /* Surround depth */ +#define SOUND_MIXER_REARVOL 25 /* Rear/Surround speaker vol */ +#define SOUND_MIXER_CENTERVOL 26 /* Center/LFE speaker vol */ +#define SOUND_MIXER_SIDEVOL 27 /* Side-Surround (8speaker) vol */ +#define SOUND_MIXER_SURRVOL SOUND_MIXER_SIDEVOL +#define SOUND_ONOFF_MIN 28 +#define SOUND_ONOFF_MAX 30 +#define SOUND_MIXER_NONE 31 + +#define SOUND_MIXER_RECSRC 0xff /* Recording sources */ +#define SOUND_MIXER_DEVMASK 0xfe /* Supported devices */ +#define SOUND_MIXER_RECMASK 0xfd /* Recording sources */ +#define SOUND_MIXER_CAPS 0xfc /* Mixer capabilities (do not use) */ +#define SOUND_MIXER_STEREODEVS 0xfb /* Mixer channels supporting stereo */ +#define SOUND_MIXER_OUTSRC 0xfa +#define SOUND_MIXER_OUTMASK 0xf9 + +#define SOUND_MIXER_ENHANCE SOUND_MIXER_NONE +#define SOUND_MIXER_MUTE SOUND_MIXER_NONE +#define SOUND_MIXER_LOUD SOUND_MIXER_NONE + +#define SOUND_MASK_VOLUME (1 << SOUND_MIXER_VOLUME) +#define SOUND_MASK_BASS (1 << SOUND_MIXER_BASS) +#define SOUND_MASK_TREBLE (1 << SOUND_MIXER_TREBLE) +#define SOUND_MASK_SYNTH (1 << SOUND_MIXER_SYNTH) +#define SOUND_MASK_PCM (1 << SOUND_MIXER_PCM) +#define SOUND_MASK_SPEAKER (1 << SOUND_MIXER_SPEAKER) +#define SOUND_MASK_LINE (1 << SOUND_MIXER_LINE) +#define SOUND_MASK_MIC (1 << SOUND_MIXER_MIC) +#define SOUND_MASK_CD (1 << SOUND_MIXER_CD) +#define SOUND_MASK_IMIX (1 << SOUND_MIXER_IMIX) +#define SOUND_MASK_ALTPCM (1 << SOUND_MIXER_ALTPCM) +#define SOUND_MASK_RECLEV (1 << SOUND_MIXER_RECLEV) +#define SOUND_MASK_IGAIN (1 << SOUND_MIXER_IGAIN) +#define SOUND_MASK_OGAIN (1 << SOUND_MIXER_OGAIN) +#define SOUND_MASK_LINE1 (1 << SOUND_MIXER_LINE1) +#define SOUND_MASK_LINE2 (1 << SOUND_MIXER_LINE2) +#define SOUND_MASK_LINE3 (1 << SOUND_MIXER_LINE3) +#define SOUND_MASK_DIGITAL1 (1 << SOUND_MIXER_DIGITAL1) +#define SOUND_MASK_DIGITAL2 (1 << SOUND_MIXER_DIGITAL2) +#define SOUND_MASK_DIGITAL3 (1 << SOUND_MIXER_DIGITAL3) +#define SOUND_MASK_MONO (1 << SOUND_MIXER_MONO) +#define SOUND_MASK_PHONE (1 << SOUND_MIXER_PHONE) +#define SOUND_MASK_RADIO (1 << SOUND_MIXER_RADIO) +#define SOUND_MASK_VIDEO (1 << SOUND_MIXER_VIDEO) +#define SOUND_MASK_DEPTH (1 << SOUND_MIXER_DEPTH) +#define SOUND_MASK_REARVOL (1 << SOUND_MIXER_REARVOL) +#define SOUND_MASK_CENTERVOL (1 << SOUND_MIXER_CENTERVOL) +#define SOUND_MASK_SIDEVOL (1 << SOUND_MIXER_SIDEVOL) +#define SOUND_MASK_SURRVOL SOUND_MASK_SIDEVOL +#define SOUND_MASK_MUTE (1 << SOUND_MIXER_MUTE) +#define SOUND_MASK_ENHANCE (1 << SOUND_MIXER_ENHANCE) +#define SOUND_MASK_LOUD (1 << SOUND_MIXER_LOUD) + +/* + * Again, DO NOT USE the following two macros. They are here for SOURCE + * COMPATIBILITY ONLY. + */ +#define SOUND_DEVICE_LABELS { \ + "Vol ", "Bass ", "Treble", "Synth", "Pcm ", "Speaker ", "Line ", \ + "Mic ", "CD ", "Mix ", "Pcm2 ", "Rec ", "IGain", "OGain", \ + "Aux1", "Aux2", "Aux3", "Digital1", "Digital2", "Digital3", \ + "Phone", "Mono", "Video", "Radio", "Depth", \ + "Rear", "Center", "Side" } + +#define SOUND_DEVICE_NAMES { \ + "vol", "bass", "treble", "synth", "pcm", "speaker", "line", \ + "mic", "cd", "mix", "pcm2", "rec", "igain", "ogain", \ + "aux1", "aux2", "aux3", "dig1", "dig2", "dig3", \ + "phone", "mono", "video", "radio", "depth", \ + "rear", "center", "side" } + +#define MIXER_READ(dev) __OSSIOR('M', dev, int) +#define MIXER_WRITE(dev) __OSSIOWR('M', dev, int) +#define SOUND_MIXER_INFO __OSSIOR('M', 101, mixer_info) +#define OSS_GETVERSION __OSSIOR('M', 118, int) + +/* + * These macros are useful for some applications. They are implemented + * as soft values for the application, and do not affect real hardware. + */ +#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME) +#define SOUND_MIXER_READ_OGAIN MIXER_READ(SOUND_MIXER_OGAIN) +#define SOUND_MIXER_READ_PCM MIXER_READ(SOUND_MIXER_PCM) +#define SOUND_MIXER_READ_IGAIN MIXER_READ(SOUND_MIXER_IGAIN) +#define SOUND_MIXER_READ_RECLEV MIXER_READ(SOUND_MIXER_RECLEV) +#define SOUND_MIXER_READ_RECSRC MIXER_READ(SOUND_MIXER_RECSRC) +#define SOUND_MIXER_READ_DEVMASK MIXER_READ(SOUND_MIXER_DEVMASK) +#define SOUND_MIXER_READ_RECMASK MIXER_READ(SOUND_MIXER_RECMASK) +#define SOUND_MIXER_READ_CAPS MIXER_READ(SOUND_MIXER_CAPS) +#define SOUND_MIXER_READ_STEREODEVS MIXER_READ(SOUND_MIXER_STEREODEVS) +#define SOUND_MIXER_READ_RECGAIN __OSSIOR('M', 119, int) +#define SOUND_MIXER_READ_MONGAIN __OSSIOR('M', 120, int) + +#define SOUND_MIXER_WRITE_VOLUME MIXER_WRITE(SOUND_MIXER_VOLUME) +#define SOUND_MIXER_WRITE_OGAIN MIXER_WRITE(SOUND_MIXER_OGAIN) +#define SOUND_MIXER_WRITE_PCM MIXER_WRITE(SOUND_MIXER_PCM) +#define SOUND_MIXER_WRITE_IGAIN MIXER_WRITE(SOUND_MIXER_IGAIN) +#define SOUND_MIXER_WRITE_RECLEV MIXER_WRITE(SOUND_MIXER_RECLEV) +#define SOUND_MIXER_WRITE_RECSRC MIXER_WRITE(SOUND_MIXER_RECSRC) +#define SOUND_MIXER_WRITE_RECGAIN __OSSIOWR('M', 119, int) +#define SOUND_MIXER_WRITE_MONGAIN __OSSIOWR('M', 120, int) + +/* + * These macros are here for source compatibility. They intentionally don't + * map to any real hardware. NOT SUPPORTED! + */ +#define SOUND_MIXER_READ_BASS MIXER_READ(SOUND_MIXER_BASS) +#define SOUND_MIXER_READ_TREBLE MIXER_READ(SOUND_MIXER_TREBLE) +#define SOUND_MIXER_READ_SYNTH MIXER_READ(SOUND_MIXER_SYNTH) +#define SOUND_MIXER_READ_SPEAKER MIXER_READ(SOUND_MIXER_SPEAKER) +#define SOUND_MIXER_READ_LINE MIXER_READ(SOUND_MIXER_LINE) +#define SOUND_MIXER_READ_MIC MIXER_READ(SOUND_MIXER_MIC) +#define SOUND_MIXER_READ_CD MIXER_READ(SOUND_MIXER_CD) +#define SOUND_MIXER_READ_IMIX MIXER_READ(SOUND_MIXER_IMIX) +#define SOUND_MIXER_READ_ALTPCM MIXER_READ(SOUND_MIXER_ALTPCM) +#define SOUND_MIXER_READ_LINE1 MIXER_READ(SOUND_MIXER_LINE1) +#define SOUND_MIXER_READ_LINE2 MIXER_READ(SOUND_MIXER_LINE2) +#define SOUND_MIXER_READ_LINE3 MIXER_READ(SOUND_MIXER_LINE3) + +#define SOUND_MIXER_WRITE_BASS MIXER_WRITE(SOUND_MIXER_BASS) +#define SOUND_MIXER_WRITE_TREBLE MIXER_WRITE(SOUND_MIXER_TREBLE) +#define SOUND_MIXER_WRITE_SYNTH MIXER_WRITE(SOUND_MIXER_SYNTH) +#define SOUND_MIXER_WRITE_SPEAKER MIXER_WRITE(SOUND_MIXER_SPEAKER) +#define SOUND_MIXER_WRITE_LINE MIXER_WRITE(SOUND_MIXER_LINE) +#define SOUND_MIXER_WRITE_MIC MIXER_WRITE(SOUND_MIXER_MIC) +#define SOUND_MIXER_WRITE_CD MIXER_WRITE(SOUND_MIXER_CD) +#define SOUND_MIXER_WRITE_IMIX MIXER_WRITE(SOUND_MIXER_IMIX) +#define SOUND_MIXER_WRITE_ALTPCM MIXER_WRITE(SOUND_MIXER_ALTPCM) +#define SOUND_MIXER_WRITE_LINE1 MIXER_WRITE(SOUND_MIXER_LINE1) +#define SOUND_MIXER_WRITE_LINE2 MIXER_WRITE(SOUND_MIXER_LINE2) +#define SOUND_MIXER_WRITE_LINE3 MIXER_WRITE(SOUND_MIXER_LINE3) + +/* + * Audio encoding types (Note! U8=8 and S16_LE=16 for compatibility) + */ +#define AFMT_QUERY 0x00000000 /* Return current fmt */ +#define AFMT_MU_LAW 0x00000001 +#define AFMT_A_LAW 0x00000002 +#define AFMT_IMA_ADPCM 0x00000004 +#define AFMT_U8 0x00000008 +#define AFMT_S16_LE 0x00000010 +#define AFMT_S16_BE 0x00000020 +#define AFMT_S8 0x00000040 +#define AFMT_U16_LE 0x00000080 +#define AFMT_U16_BE 0x00000100 +#define AFMT_MPEG 0x00000200 /* NOT SUPPORTED: MPEG (2) audio */ +#define AFMT_AC3 0x00000400 /* NOT SUPPORTED: AC3 compressed */ +#define AFMT_VORBIS 0x00000800 /* NOT SUPPORTED: Ogg Vorbis */ +#define AFMT_S32_LE 0x00001000 +#define AFMT_S32_BE 0x00002000 +#define AFMT_FLOAT 0x00004000 /* NOT SUPPORTED: IEEE double float */ +#define AFMT_S24_LE 0x00008000 /* LSB aligned in 32 bit word */ +#define AFMT_S24_BE 0x00010000 /* LSB aligned in 32 bit word */ +#define AFMT_SPDIF_RAW 0x00020000 /* NOT SUPPORTED: Raw S/PDIF frames */ +#define AFMT_S24_PACKED 0x00040000 /* 24 bit packed little endian */ +/* + * Some big endian/little endian handling macros (native endian and + * opposite endian formats). + */ +#if defined(_BIG_ENDIAN) +#define AFMT_S16_NE AFMT_S16_BE +#define AFMT_U16_NE AFMT_U16_BE +#define AFMT_S32_NE AFMT_S32_BE +#define AFMT_S24_NE AFMT_S24_BE +#define AFMT_S16_OE AFMT_S16_LE +#define AFMT_S32_OE AFMT_S32_LE +#define AFMT_S24_OE AFMT_S24_LE +#else +#define AFMT_S16_NE AFMT_S16_LE +#define AFMT_U16_NE AFMT_U16_LE +#define AFMT_S32_NE AFMT_S32_LE +#define AFMT_S24_NE AFMT_S24_LE +#define AFMT_S16_OE AFMT_S16_BE +#define AFMT_S32_OE AFMT_S32_BE +#define AFMT_S24_OE AFMT_S24_BE +#endif + +/* + * SNDCTL_DSP_GETCAPS bits + */ +#define PCM_CAP_REVISION 0x000000ff /* Revision level (0 to 255) */ +#define PCM_CAP_DUPLEX 0x00000100 /* Full duplex rec/play */ +#define PCM_CAP_REALTIME 0x00000200 /* NOT SUPPORTED */ +#define PCM_CAP_BATCH 0x00000400 /* NOT SUPPORTED */ +#define PCM_CAP_COPROC 0x00000800 /* NOT SUPPORTED */ +#define PCM_CAP_TRIGGER 0x00001000 /* Supports SETTRIGGER */ +#define PCM_CAP_MMAP 0x00002000 /* Supports mmap() */ +#define PCM_CAP_MULTI 0x00004000 /* Supports multiple open */ +#define PCM_CAP_BIND 0x00008000 /* Supports channel binding */ +#define PCM_CAP_INPUT 0x00010000 /* Supports recording */ +#define PCM_CAP_OUTPUT 0x00020000 /* Supports playback */ +#define PCM_CAP_VIRTUAL 0x00040000 /* Virtual device */ +#define PCM_CAP_ANALOGOUT 0x00100000 /* NOT SUPPORTED */ +#define PCM_CAP_ANALOGIN 0x00200000 /* NOT SUPPORTED */ +#define PCM_CAP_DIGITALOUT 0x00400000 /* NOT SUPPORTED */ +#define PCM_CAP_DIGITALIN 0x00800000 /* NOT SUPPORTED */ +#define PCM_CAP_ADMASK 0x00f00000 /* NOT SUPPORTED */ +#define PCM_CAP_SHADOW 0x01000000 /* "Shadow" device */ +#define PCM_CAP_CH_MASK 0x06000000 /* See DSP_CH_MASK below */ +#define PCM_CAP_HIDDEN 0x08000000 /* NOT SUPPORTED */ +#define PCM_CAP_FREERATE 0x10000000 +#define PCM_CAP_MODEM 0x20000000 /* NOT SUPPORTED */ +#define PCM_CAP_DEFAULT 0x40000000 /* "Default" device */ + +/* + * Preferred channel usage. These bits can be used to give + * recommendations to the application. Used by few drivers. For + * example if ((caps & DSP_CH_MASK) == DSP_CH_MONO) means that the + * device works best in mono mode. However it doesn't necessarily mean + * that the device cannot be used in stereo. These bits should only be + * used by special applications such as multi track hard disk + * recorders to find out the initial setup. However the user should be + * able to override this selection. + * + * To find out which modes are actually supported the application + * should try to select them using SNDCTL_DSP_CHANNELS. + */ +#define DSP_CH_MASK 0x06000000 /* Mask */ +#define DSP_CH_ANY 0x00000000 /* No preferred mode */ +#define DSP_CH_MONO 0x02000000 +#define DSP_CH_STEREO 0x04000000 +#define DSP_CH_MULTI 0x06000000 /* More than two channels */ + + +/* + * The PCM_CAP_* capability names used to be known as DSP_CAP_*, so + * it's necessary to define the older names too. + */ +#define DSP_CAP_ADMASK PCM_CAP_ADMASK +#define DSP_CAP_ANALOGIN PCM_CAP_ANALOGIN +#define DSP_CAP_ANALOGOUT PCM_CAP_ANALOGOUT +#define DSP_CAP_BATCH PCM_CAP_BATCH +#define DSP_CAP_BIND PCM_CAP_BIND +#define DSP_CAP_COPROC PCM_CAP_COPROC +#define DSP_CAP_DEFAULT PCM_CAP_DEFAULT +#define DSP_CAP_DIGITALIN PCM_CAP_DIGITALIN +#define DSP_CAP_DIGITALOUT PCM_CAP_DIGITALOUT +#define DSP_CAP_DUPLEX PCM_CAP_DUPLEX +#define DSP_CAP_FREERATE PCM_CAP_FREERATE +#define DSP_CAP_HIDDEN PCM_CAP_HIDDEN +#define DSP_CAP_INPUT PCM_CAP_INPUT +#define DSP_CAP_MMAP PCM_CAP_MMAP +#define DSP_CAP_MODEM PCM_CAP_MODEM +#define DSP_CAP_MULTI PCM_CAP_MULTI +#define DSP_CAP_OUTPUT PCM_CAP_OUTPUT +#define DSP_CAP_REALTIME PCM_CAP_REALTIME +#define DSP_CAP_REVISION PCM_CAP_REVISION +#define DSP_CAP_SHADOW PCM_CAP_SHADOW +#define DSP_CAP_TRIGGER PCM_CAP_TRIGGER +#define DSP_CAP_VIRTUAL PCM_CAP_VIRTUAL + +/* + * SNDCTL_DSP_GETTRIGGER and SNDCTL_DSP_SETTRIGGER + */ +#define PCM_ENABLE_INPUT 0x00000001 +#define PCM_ENABLE_OUTPUT 0x00000002 + +/* + * SNDCTL_DSP_BIND_CHANNEL + */ +#define DSP_BIND_QUERY 0x00000000 +#define DSP_BIND_FRONT 0x00000001 +#define DSP_BIND_SURR 0x00000002 +#define DSP_BIND_CENTER_LFE 0x00000004 +#define DSP_BIND_HANDSET 0x00000008 +#define DSP_BIND_MIC 0x00000010 +#define DSP_BIND_MODEM1 0x00000020 +#define DSP_BIND_MODEM2 0x00000040 +#define DSP_BIND_I2S 0x00000080 +#define DSP_BIND_SPDIF 0x00000100 +#define DSP_BIND_REAR 0x00000200 + +/* + * SOUND_MIXER_READ_CAPS + */ +#define SOUND_CAP_EXCL_INPUT 0x00000001 +#define SOUND_CAP_NOLEGACY 0x00000004 +#define SOUND_CAP_NORECSRC 0x00000008 + +/* + * The following ioctl is for internal use only -- it is used to + * coordinate /dev/sndstat numbering with file names in /dev/sound. + * Applications must not use it. (This is duplicated in sys/audioio.h + * as well.) + */ +#define SNDCTL_SUN_SEND_NUMBER __OSSIOW('X', 200, int) + +#ifdef __cplusplus +} +#endif + +#endif /* _SYS_AUDIO_OSS_H */ diff --git a/src/detection/sound/sound_sunos.c b/src/detection/sound/sound_sunos.c new file mode 100644 index 0000000000..d6e43eedef --- /dev/null +++ b/src/detection/sound/sound_sunos.c @@ -0,0 +1,95 @@ +#include "sound.h" +#include "common/io/io.h" +#include "util/stringUtils.h" + +#include +#include +#if __has_include() + #include +#else + // Strangely, they don't provide this file on default installation + #include "audio_oss_sunos.h" +#endif + +const char* ffDetectSound(FFlist* devices) +{ + int defaultDev; + { + char mixerp[12]; + ssize_t plen = readlink("/dev/audio", mixerp, ARRAY_SIZE(mixerp)); + if (plen < 6) + return "readlink(/dev/audio) failed"; + defaultDev = mixerp[plen - 1] - '0'; + if (defaultDev < 0 || defaultDev > 9) + return "Invalid mixer device"; + } + + char path[] = "/dev/mixer0"; + + FF_STRBUF_AUTO_DESTROY sndstat = ffStrbufCreate(); + + struct oss_sysinfo info = { .nummixers = 9 }; + + // The implementation is very different from *BSD's. They call it OSS4 + for (int idev = 0; idev < info.nummixers; ++idev) + { + path[strlen("/dev/mixer")] = (char) ('0' + idev); + FF_AUTO_CLOSE_FD int fd = open(path, O_RDWR | O_CLOEXEC); + if (fd < 0) break; + + if (idev == 0) + { + if (ioctl(fd, SNDCTL_SYSINFO, &info) != 0) + return "ioctl(SNDCTL_SYSINFO) failed"; + if (ffAppendFDBuffer(fd, &sndstat)) + ffStrbufSubstrAfterFirstS(&sndstat, "\nMixers:"); + } + + struct oss_mixerinfo mi = {}; + if (ioctl(fd, SNDCTL_MIXERINFO, &mi) < 0) + continue; + + int volume = -1; + for (int iext = 0; iext < mi.nrext; ++iext) + { + struct oss_mixext me = { .dev = mi.dev, .ctrl = iext }; + if (ioctl(fd, SNDCTL_MIX_EXTINFO, &me) < 0) + continue; + if (me.flags & MIXF_PCMVOL) + { + struct oss_mixer_value mv = { .dev = mi.dev, .ctrl = iext, .timestamp = me.timestamp }; + if (ioctl(fd, SNDCTL_MIX_READ, &mv) >= 0) + { + mv.value -= me.minvalue; + me.maxvalue -= me.minvalue; + volume = (uint8_t) ((mv.value * 100 + me.maxvalue / 2) / me.maxvalue); + } + break; + } + } + if (volume == -1) continue; + + FFSoundDevice* device = ffListAdd(devices); + ffStrbufInitS(&device->identifier, path); + char buf[16]; + int bufLen = snprintf(buf, ARRAY_SIZE(buf), "\n%d: ", mi.dev); + assert(bufLen > 3); + const char* pLine = memmem(sndstat.chars, sndstat.length, buf, (size_t) bufLen); + if (pLine) + { + pLine += bufLen; + const char* pEnd = strchr(pLine, '\n'); + if (!pEnd) pEnd = sndstat.chars + sndstat.length; + ffStrbufInitNS(&device->name, (uint32_t) (pEnd - pLine), pLine); + } + else + ffStrbufInitS(&device->name, mi.name); + ffStrbufTrimRightSpace(&device->name); + ffStrbufInitF(&device->platformApi, "%s %s", info.product, info.version); + device->volume = (uint8_t) volume; + device->active = !!mi.enabled; + device->main = defaultDev == idev; + } + + return NULL; +} From 049701a8a9be93ec101c1192ee34183a68ea1fb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 23 Jun 2025 16:13:40 +0800 Subject: [PATCH 12/45] CI (FreeBSD): run with 14.3 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 25be05ee0d..c5e0545916 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -552,7 +552,7 @@ jobs: architecture: x86-64 cpu_count: 4 shell: bash - version: '14.2' + version: '14.3' run: | uname -a sudo pkg update From ed1883909abee023c56ce4e339d1d043ef19599e Mon Sep 17 00:00:00 2001 From: Carter Li Date: Mon, 23 Jun 2025 18:30:04 +0800 Subject: [PATCH 13/45] OS (Linux): detect DietPi Fix #1816 --- src/detection/os/os_linux.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index a7150cda8f..1ccee3d8e8 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -233,12 +233,31 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) } else if (ffStrbufContainS(&instance.state.platform.sysinfo.release, "+rpt-rpi-")) { - // Raspberry Pi OS - ffStrbufSetS(&result->id, "raspbian"); ffStrbufSetS(&result->idLike, "debian"); - ffStrbufSetS(&result->name, "Raspberry Pi OS"); - ffStrbufSetS(&result->prettyName, "Raspberry Pi OS"); - return true; + if (ffPathExists("/boot/dietpi/.version", FF_PATHTYPE_FILE)) + { + // DietPi + ffStrbufSetS(&result->id, "dietpi"); + ffStrbufSetS(&result->name, "DietPi"); + ffStrbufClear(&result->version); + FF_STRBUF_AUTO_DESTROY sub = ffStrbufCreate(); + FF_STRBUF_AUTO_DESTROY rc = ffStrbufCreate(); + if (ffParsePropFileValues("/boot/dietpi/.version", 3, (FFpropquery[]) { + {"G_DIETPI_VERSION_CORE=", &result->version}, + {"G_DIETPI_VERSION_SUB=", &sub}, + {"G_DIETPI_VERSION_RC=", &rc}, + })) ffStrbufAppendF(&result->version, ".%s.%s", sub.chars, rc.chars); + ffStrbufSet(&result->versionID, &result->version); + ffStrbufSetF(&result->prettyName, "DietPi %s", result->version.chars); + } + else + { + // Raspberry Pi OS + ffStrbufSetS(&result->id, "raspbian"); + ffStrbufSetS(&result->name, "Raspberry Pi OS"); + ffStrbufSetS(&result->prettyName, "Raspberry Pi OS"); + return true; + } } else if (ffStrbufEndsWithS(&instance.state.platform.sysinfo.release, "+truenas")) { From 8d59d14b80210dd1945d0aca5043b1a369700522 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 23 Jun 2025 19:41:31 +0800 Subject: [PATCH 14/45] OS (Linux): clean up dietpi related code --- src/detection/os/os_linux.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index 1ccee3d8e8..5058826173 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -237,27 +237,26 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) if (ffPathExists("/boot/dietpi/.version", FF_PATHTYPE_FILE)) { // DietPi - ffStrbufSetS(&result->id, "dietpi"); - ffStrbufSetS(&result->name, "DietPi"); - ffStrbufClear(&result->version); + ffStrbufSetStatic(&result->id, "dietpi"); + ffStrbufSetStatic(&result->name, "DietPi"); + ffStrbufSetStatic(&result->prettyName, "DietPi"); + FF_STRBUF_AUTO_DESTROY core = ffStrbufCreate(); FF_STRBUF_AUTO_DESTROY sub = ffStrbufCreate(); FF_STRBUF_AUTO_DESTROY rc = ffStrbufCreate(); if (ffParsePropFileValues("/boot/dietpi/.version", 3, (FFpropquery[]) { - {"G_DIETPI_VERSION_CORE=", &result->version}, + {"G_DIETPI_VERSION_CORE=", &core}, {"G_DIETPI_VERSION_SUB=", &sub}, {"G_DIETPI_VERSION_RC=", &rc}, - })) ffStrbufAppendF(&result->version, ".%s.%s", sub.chars, rc.chars); - ffStrbufSet(&result->versionID, &result->version); - ffStrbufSetF(&result->prettyName, "DietPi %s", result->version.chars); + })) ffStrbufAppendF(&result->prettyName, " %s.%s.%s", core.chars, sub.chars, rc.chars); } else { // Raspberry Pi OS - ffStrbufSetS(&result->id, "raspbian"); - ffStrbufSetS(&result->name, "Raspberry Pi OS"); - ffStrbufSetS(&result->prettyName, "Raspberry Pi OS"); - return true; + ffStrbufSetStatic(&result->id, "raspbian"); + ffStrbufSetStatic(&result->name, "Raspberry Pi OS"); + ffStrbufSetStatic(&result->prettyName, "Raspberry Pi OS"); } + return true; } else if (ffStrbufEndsWithS(&instance.state.platform.sysinfo.release, "+truenas")) { From 29d7a1acac12e42beffa9a811faf31bf606d9378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 23 Jun 2025 19:41:57 +0800 Subject: [PATCH 15/45] OS (Linux): use `ffStrbufSetStatic` where applicatable --- src/detection/os/os_linux.c | 128 ++++++++++++++++++------------------ 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index 5058826173..68ba155247 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -47,7 +47,7 @@ FF_MAYBE_UNUSED static bool detectArmbianVersion(FFOSResult* result) // - `Armbian_Security` for images with kali repo added // - `Armbian-unofficial` for an unofficial image built from source, e.g. during development and testing if (ffStrbufStartsWithS(&result->prettyName, "Armbian")) - ffStrbufSetS(&result->name, "Armbian"); + ffStrbufSetStatic(&result->name, "Armbian"); else return false; ffStrbufSet(&result->idLike, &result->id); @@ -69,113 +69,113 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) return; else if(ffStrbufStartsWithS(&result->prettyName, "Linux Lite ")) { - ffStrbufSetS(&result->name, "Linux Lite"); - ffStrbufSetS(&result->id, "linuxlite"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Linux Lite"); + ffStrbufSetStatic(&result->id, "linuxlite"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); ffStrbufSetS(&result->versionID, result->prettyName.chars + strlen("Linux Lite ")); return; } else if(ffStrbufStartsWithS(&result->prettyName, "Rhino Linux ")) { - ffStrbufSetS(&result->name, "Rhino Linux"); - ffStrbufSetS(&result->id, "rhinolinux"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Rhino Linux"); + ffStrbufSetStatic(&result->id, "rhinolinux"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); ffStrbufSetS(&result->versionID, result->prettyName.chars + strlen("Rhino Linux ")); return; } else if(ffStrbufStartsWithS(&result->prettyName, "VanillaOS ")) { - ffStrbufSetS(&result->id, "vanilla"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->id, "vanilla"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); } if(ffStrContains(xdgConfigDirs, "kde") || ffStrContains(xdgConfigDirs, "plasma") || ffStrContains(xdgConfigDirs, "kubuntu")) { - ffStrbufSetS(&result->name, "Kubuntu"); - ffStrbufSetS(&result->prettyName, "Kubuntu"); - ffStrbufSetS(&result->id, "kubuntu"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Kubuntu"); + ffStrbufSetStatic(&result->prettyName, "Kubuntu"); + ffStrbufSetStatic(&result->id, "kubuntu"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "xfce") || ffStrContains(xdgConfigDirs, "xubuntu")) { - ffStrbufSetS(&result->name, "Xubuntu"); - ffStrbufSetS(&result->prettyName, "Xubuntu"); - ffStrbufSetS(&result->id, "xubuntu"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Xubuntu"); + ffStrbufSetStatic(&result->prettyName, "Xubuntu"); + ffStrbufSetStatic(&result->id, "xubuntu"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "lxqt") || ffStrContains(xdgConfigDirs, "lubuntu")) { - ffStrbufSetS(&result->name, "Lubuntu"); - ffStrbufSetS(&result->prettyName, "Lubuntu"); - ffStrbufSetS(&result->id, "lubuntu"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Lubuntu"); + ffStrbufSetStatic(&result->prettyName, "Lubuntu"); + ffStrbufSetStatic(&result->id, "lubuntu"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "budgie")) { - ffStrbufSetS(&result->name, "Ubuntu Budgie"); - ffStrbufSetS(&result->prettyName, "Ubuntu Budgie"); - ffStrbufSetS(&result->id, "ubuntu-budgie"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu Budgie"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu Budgie"); + ffStrbufSetStatic(&result->id, "ubuntu-budgie"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "cinnamon")) { - ffStrbufSetS(&result->name, "Ubuntu Cinnamon"); - ffStrbufSetS(&result->prettyName, "Ubuntu Cinnamon"); - ffStrbufSetS(&result->id, "ubuntu-cinnamon"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu Cinnamon"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu Cinnamon"); + ffStrbufSetStatic(&result->id, "ubuntu-cinnamon"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "mate")) { - ffStrbufSetS(&result->name, "Ubuntu MATE"); - ffStrbufSetS(&result->prettyName, "Ubuntu MATE"); - ffStrbufSetS(&result->id, "ubuntu-mate"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu MATE"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu MATE"); + ffStrbufSetStatic(&result->id, "ubuntu-mate"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "studio")) { - ffStrbufSetS(&result->name, "Ubuntu Studio"); - ffStrbufSetS(&result->prettyName, "Ubuntu Studio"); - ffStrbufSetS(&result->id, "ubuntu-studio"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu Studio"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu Studio"); + ffStrbufSetStatic(&result->id, "ubuntu-studio"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "sway")) { - ffStrbufSetS(&result->name, "Ubuntu Sway"); - ffStrbufSetS(&result->prettyName, "Ubuntu Sway"); - ffStrbufSetS(&result->id, "ubuntu-sway"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu Sway"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu Sway"); + ffStrbufSetStatic(&result->id, "ubuntu-sway"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "touch")) { - ffStrbufSetS(&result->name, "Ubuntu Touch"); - ffStrbufSetS(&result->prettyName, "Ubuntu Touch"); - ffStrbufSetS(&result->id, "ubuntu-touch"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "Ubuntu Touch"); + ffStrbufSetStatic(&result->prettyName, "Ubuntu Touch"); + ffStrbufSetStatic(&result->id, "ubuntu-touch"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } if(ffStrContains(xdgConfigDirs, "lliurex")) { - ffStrbufSetS(&result->name, "LliureX"); - ffStrbufSetS(&result->prettyName, "LliureX"); - ffStrbufSetS(&result->id, "lliurex"); - ffStrbufSetS(&result->idLike, "ubuntu"); + ffStrbufSetStatic(&result->name, "LliureX"); + ffStrbufSetStatic(&result->prettyName, "LliureX"); + ffStrbufSetStatic(&result->id, "lliurex"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); return; } } @@ -196,8 +196,8 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) return true; else if (ffStrbufStartsWithS(&result->name, "Loc-OS")) { - ffStrbufSetS(&result->id, "locos"); - ffStrbufSetS(&result->idLike, "debian"); + ffStrbufSetStatic(&result->id, "locos"); + ffStrbufSetStatic(&result->idLike, "debian"); return true; } else if (ffStrbufEqualS(&result->name, "Parrot Security")) @@ -210,15 +210,15 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) else if (ffStrbufStartsWithS(&result->name, "Lilidog GNU/Linux")) { // https://github.com/fastfetch-cli/fastfetch/issues/1373 - ffStrbufSetS(&result->id, "lilidog"); - ffStrbufSetS(&result->idLike, "debian"); + ffStrbufSetStatic(&result->id, "lilidog"); + ffStrbufSetStatic(&result->idLike, "debian"); return true; } else if (access("/usr/bin/pveversion", X_OK) == 0) { - ffStrbufSetS(&result->id, "pve"); - ffStrbufSetS(&result->idLike, "debian"); - ffStrbufSetS(&result->name, "Proxmox VE"); + ffStrbufSetStatic(&result->id, "pve"); + ffStrbufSetStatic(&result->idLike, "debian"); + ffStrbufSetStatic(&result->name, "Proxmox VE"); ffStrbufClear(&result->versionID); if (ffProcessAppendStdOut(&result->versionID, (char* const[]) { "/usr/bin/dpkg-query", @@ -256,15 +256,15 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) ffStrbufSetStatic(&result->name, "Raspberry Pi OS"); ffStrbufSetStatic(&result->prettyName, "Raspberry Pi OS"); } - return true; + return true; } else if (ffStrbufEndsWithS(&instance.state.platform.sysinfo.release, "+truenas")) { // TrueNAS Scale - ffStrbufSetS(&result->id, "truenas-scale"); - ffStrbufSetS(&result->idLike, "debian"); - ffStrbufSetS(&result->name, "TrueNAS Scale"); - ffStrbufSetS(&result->prettyName, "TrueNAS Scale"); + ffStrbufSetStatic(&result->id, "truenas-scale"); + ffStrbufSetStatic(&result->idLike, "debian"); + ffStrbufSetStatic(&result->name, "TrueNAS Scale"); + ffStrbufSetStatic(&result->prettyName, "TrueNAS Scale"); return true; } else @@ -273,9 +273,9 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) FF_STRBUF_AUTO_DESTROY lsbRelease = ffStrbufCreate(); if (ffAppendFileBuffer("/etc/lsb-release", &lsbRelease) && ffStrbufContainS(&lsbRelease, "DISTRIB_ID=MX")) { - ffStrbufSetS(&result->id, "mx"); - ffStrbufSetS(&result->idLike, "debian"); - ffStrbufSetS(&result->name, "MX"); + ffStrbufSetStatic(&result->id, "mx"); + ffStrbufSetStatic(&result->idLike, "debian"); + ffStrbufSetStatic(&result->name, "MX"); ffStrbufClear(&result->version); ffParsePropLines(lsbRelease.chars, "DISTRIB_RELEASE=", &result->version); From e68f766b4d0a7f9017b027ad0756775ceeed8b79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 23 Jun 2025 22:10:50 +0800 Subject: [PATCH 16/45] OS (Linux): improve RPIOS detection Ref: https://github.com/fastfetch-cli/fastfetch/issues/1816#issuecomment-2996316164 --- src/detection/os/os_linux.c | 47 ++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index 68ba155247..b47f4db2be 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -231,31 +231,30 @@ FF_MAYBE_UNUSED static bool detectDebianDerived(FFOSResult* result) ffStrbufSetF(&result->prettyName, "Proxmox VE %s", result->versionID.chars); return true; } - else if (ffStrbufContainS(&instance.state.platform.sysinfo.release, "+rpt-rpi-")) + else if (ffPathExists("/etc/rpi-issue", FF_PATHTYPE_FILE)) { - ffStrbufSetS(&result->idLike, "debian"); - if (ffPathExists("/boot/dietpi/.version", FF_PATHTYPE_FILE)) - { - // DietPi - ffStrbufSetStatic(&result->id, "dietpi"); - ffStrbufSetStatic(&result->name, "DietPi"); - ffStrbufSetStatic(&result->prettyName, "DietPi"); - FF_STRBUF_AUTO_DESTROY core = ffStrbufCreate(); - FF_STRBUF_AUTO_DESTROY sub = ffStrbufCreate(); - FF_STRBUF_AUTO_DESTROY rc = ffStrbufCreate(); - if (ffParsePropFileValues("/boot/dietpi/.version", 3, (FFpropquery[]) { - {"G_DIETPI_VERSION_CORE=", &core}, - {"G_DIETPI_VERSION_SUB=", &sub}, - {"G_DIETPI_VERSION_RC=", &rc}, - })) ffStrbufAppendF(&result->prettyName, " %s.%s.%s", core.chars, sub.chars, rc.chars); - } - else - { - // Raspberry Pi OS - ffStrbufSetStatic(&result->id, "raspbian"); - ffStrbufSetStatic(&result->name, "Raspberry Pi OS"); - ffStrbufSetStatic(&result->prettyName, "Raspberry Pi OS"); - } + // Raspberry Pi OS + ffStrbufSetStatic(&result->id, "raspbian"); + ffStrbufSetStatic(&result->idLike, "debian"); + ffStrbufSetStatic(&result->name, "Raspberry Pi OS"); + ffStrbufSetStatic(&result->prettyName, "Raspberry Pi OS"); + return true; + } + else if (ffPathExists("/boot/dietpi/.version", FF_PATHTYPE_FILE)) + { + // DietPi + ffStrbufSetStatic(&result->id, "dietpi"); + ffStrbufSetStatic(&result->name, "DietPi"); + ffStrbufSetStatic(&result->prettyName, "DietPi"); + ffStrbufSetStatic(&result->idLike, "debian"); + FF_STRBUF_AUTO_DESTROY core = ffStrbufCreate(); + FF_STRBUF_AUTO_DESTROY sub = ffStrbufCreate(); + FF_STRBUF_AUTO_DESTROY rc = ffStrbufCreate(); + if (ffParsePropFileValues("/boot/dietpi/.version", 3, (FFpropquery[]) { + {"G_DIETPI_VERSION_CORE=", &core}, + {"G_DIETPI_VERSION_SUB=", &sub}, + {"G_DIETPI_VERSION_RC=", &rc}, + })) ffStrbufAppendF(&result->prettyName, " %s.%s.%s", core.chars, sub.chars, rc.chars); return true; } else if (ffStrbufEndsWithS(&instance.state.platform.sysinfo.release, "+truenas")) From 45cbc6de83ec23265f33763720a3ec0aeada8b0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 25 Jun 2025 09:17:13 +0800 Subject: [PATCH 17/45] OS (macOS): force reporting 26 on macOS Tahoe Fix #1809 --- src/detection/os/os_apple.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/detection/os/os_apple.m b/src/detection/os/os_apple.m index 5da14ad451..654d328895 100644 --- a/src/detection/os/os_apple.m +++ b/src/detection/os/os_apple.m @@ -25,6 +25,11 @@ static void parseSystemVersion(FFOSResult* os) ffStrbufInitS(&os->version, value.UTF8String); if((value = dict[@"ProductBuildVersion"])) ffStrbufInitS(&os->buildID, value.UTF8String); + if (ffStrbufStartsWithS(&os->version, "16.")) + { + // macOS 26 Tahoe. #1809 + os->version.chars[0] = '2'; + } } static bool detectOSCodeName(FFOSResult* os) From 863c5583ef43380ad7ecb392953f1a2ada6fca2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 25 Jun 2025 13:42:46 +0800 Subject: [PATCH 18/45] GPU (OpenBSD): fix pci.ids file location Fix #1819 Signed-off-by: kevlo --- src/detection/gpu/gpu_pci.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/detection/gpu/gpu_pci.c b/src/detection/gpu/gpu_pci.c index 11fd3ab106..47992f4b2c 100644 --- a/src/detection/gpu/gpu_pci.c +++ b/src/detection/gpu/gpu_pci.c @@ -45,8 +45,10 @@ static const FFstrbuf* loadPciIds() if (pciids.length == 0) ffReadFileBuffer(FASTFETCH_TARGET_DIR_USR "/local/share/hwdata/pci.ids", &pciids); } - #elif __FreeBSD__ || __OpenBSD__ || __NetBSD__ + #elif __FreeBSD__ || __NetBSD__ ffReadFileBuffer(_PATH_LOCALBASE "/share/pciids/pci.ids", &pciids); + #elif __OpenBSD__ + ffReadFileBuffer(_PATH_LOCALBASE "/share/hwdata/pci.ids", &pciids); #elif __sun ffReadFileBuffer(FASTFETCH_TARGET_DIR_ROOT "/usr/share/hwdata/pci.ids", &pciids); #elif __HAIKU__ From addf67462156ef75f97650ffb3f090e13f3b076a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 26 Jun 2025 21:31:16 +0800 Subject: [PATCH 19/45] OS (Linux): append version string for Ubuntu variants --- src/detection/os/os_linux.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index b47f4db2be..b87a9ce7bc 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -92,7 +92,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "kde") || ffStrContains(xdgConfigDirs, "plasma") || ffStrContains(xdgConfigDirs, "kubuntu")) { ffStrbufSetStatic(&result->name, "Kubuntu"); - ffStrbufSetStatic(&result->prettyName, "Kubuntu"); + ffStrbufSetF(&result->prettyName, "Kubuntu %s", result->version.chars); ffStrbufSetStatic(&result->id, "kubuntu"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -101,7 +101,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "xfce") || ffStrContains(xdgConfigDirs, "xubuntu")) { ffStrbufSetStatic(&result->name, "Xubuntu"); - ffStrbufSetStatic(&result->prettyName, "Xubuntu"); + ffStrbufSetF(&result->prettyName, "Xubuntu %s", result->version.chars); ffStrbufSetStatic(&result->id, "xubuntu"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -110,7 +110,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "lxqt") || ffStrContains(xdgConfigDirs, "lubuntu")) { ffStrbufSetStatic(&result->name, "Lubuntu"); - ffStrbufSetStatic(&result->prettyName, "Lubuntu"); + ffStrbufSetF(&result->prettyName, "Lubuntu %s", result->version.chars); ffStrbufSetStatic(&result->id, "lubuntu"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -119,7 +119,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "budgie")) { ffStrbufSetStatic(&result->name, "Ubuntu Budgie"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu Budgie"); + ffStrbufSetF(&result->prettyName, "Ubuntu Budgie %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-budgie"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -128,7 +128,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "cinnamon")) { ffStrbufSetStatic(&result->name, "Ubuntu Cinnamon"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu Cinnamon"); + ffStrbufSetF(&result->prettyName, "Ubuntu Cinnamon %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-cinnamon"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -137,7 +137,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "mate")) { ffStrbufSetStatic(&result->name, "Ubuntu MATE"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu MATE"); + ffStrbufSetF(&result->prettyName, "Ubuntu MATE %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-mate"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -146,7 +146,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "studio")) { ffStrbufSetStatic(&result->name, "Ubuntu Studio"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu Studio"); + ffStrbufSetF(&result->prettyName, "Ubuntu Studio %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-studio"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -155,7 +155,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "sway")) { ffStrbufSetStatic(&result->name, "Ubuntu Sway"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu Sway"); + ffStrbufSetF(&result->prettyName, "Ubuntu Sway %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-sway"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -164,7 +164,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "touch")) { ffStrbufSetStatic(&result->name, "Ubuntu Touch"); - ffStrbufSetStatic(&result->prettyName, "Ubuntu Touch"); + ffStrbufSetF(&result->prettyName, "Ubuntu Touch %s", result->version.chars); ffStrbufSetStatic(&result->id, "ubuntu-touch"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; @@ -173,7 +173,7 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) if(ffStrContains(xdgConfigDirs, "lliurex")) { ffStrbufSetStatic(&result->name, "LliureX"); - ffStrbufSetStatic(&result->prettyName, "LliureX"); + ffStrbufSetF(&result->prettyName, "LliureX %s", result->version.chars); ffStrbufSetStatic(&result->id, "lliurex"); ffStrbufSetStatic(&result->idLike, "ubuntu"); return; From 9832a0e45b356f040f0430689025dd1f611fba19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 26 Jun 2025 21:32:46 +0800 Subject: [PATCH 20/45] GPU (FreeBSD): fix compiling when libdrm is not available Fix #1820 --- src/detection/gpu/gpu_bsd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/detection/gpu/gpu_bsd.c b/src/detection/gpu/gpu_bsd.c index 20556b66f7..3d46055460 100644 --- a/src/detection/gpu/gpu_bsd.c +++ b/src/detection/gpu/gpu_bsd.c @@ -212,11 +212,13 @@ static const char* detectByPci(const FFGPUOptions* options, FFlist* gpus) const char* ffDetectGPUImpl(const FFGPUOptions* options, FFlist* gpus) { + #if FF_HAVE_DRM if (options->detectionMethod == FF_GPU_DETECTION_METHOD_AUTO) { detectByDrm(options, gpus); if (gpus->length > 0) return NULL; } + #endif return detectByPci(options, gpus); } From 86e5a5997b9e72dd1b5ce17ac438b461d85c1575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 26 Jun 2025 21:44:06 +0800 Subject: [PATCH 21/45] Display (FreeBSD): silence a compiler warning --- src/detection/displayserver/linux/drm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/detection/displayserver/linux/drm.c b/src/detection/displayserver/linux/drm.c index c62c544e55..d3a5e99549 100644 --- a/src/detection/displayserver/linux/drm.c +++ b/src/detection/displayserver/linux/drm.c @@ -440,7 +440,7 @@ static const char* drmConnectLibdrm(FFDisplayServerResult* result) #endif -const char* ffdsConnectDrm(FFDisplayServerResult* result) +const char* ffdsConnectDrm(FF_MAYBE_UNUSED FFDisplayServerResult* result) { #ifdef FF_HAVE_DRM if (instance.config.general.dsForceDrm != FF_DS_FORCE_DRM_TYPE_SYSFS_ONLY) From bdbc885811b0763c6dec8430ad850cabb15d8a52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 26 Jun 2025 22:35:59 +0800 Subject: [PATCH 22/45] Logo (Builtin): `:%s/FG_WHITE/FG_DEFAULT/g` To improve visibility on white background --- src/logo/builtin.c | 803 ++++++++++++++++++++++----------------------- 1 file changed, 401 insertions(+), 402 deletions(-) diff --git a/src/logo/builtin.c b/src/logo/builtin.c index fe751a77d1..50812b9270 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -6,7 +6,7 @@ const FFlogo ffLogoUnknown = { .names = {"unknown"}, .lines = FASTFETCH_DATATEXT_LOGO_UNKNOWN, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = "", .colorTitle = "", @@ -21,7 +21,6 @@ static const FFlogo A[] = { FF_COLOR_FG_256 "15", FF_COLOR_FG_256 "14", FF_COLOR_FG_256 "16", - FF_COLOR_FG_256 "24", } }, // Adélie @@ -30,7 +29,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ADELIE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, }, }, @@ -60,10 +59,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AIX, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AlmaLinux { @@ -96,7 +95,7 @@ static const FFlogo A[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -108,7 +107,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ALPINE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -120,7 +119,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ALPINE2_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -131,7 +130,7 @@ static const FFlogo A[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT | FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ALPINE3_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -153,7 +152,7 @@ static const FFlogo A[] = { .colors = { FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLACK, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_YELLOW, .colorTitle = FF_COLOR_FG_YELLOW, @@ -164,7 +163,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AMAZON, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, } }, // AmazonLinux @@ -172,7 +171,7 @@ static const FFlogo A[] = { .names = {"Amazon Linux", "amzn"}, .lines = FASTFETCH_DATATEXT_LOGO_AMAZON_LINUX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_256 "178", } }, @@ -181,10 +180,10 @@ static const FFlogo A[] = { .names = {"AmogOS"}, .lines = FASTFETCH_DATATEXT_LOGO_AMOGOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_CYAN, }, // Anarchy @@ -192,10 +191,10 @@ static const FFlogo A[] = { .names = {"Anarchy"}, .lines = FASTFETCH_DATATEXT_LOGO_ANARCHY, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Android @@ -204,7 +203,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ANDROID, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -229,7 +228,7 @@ static const FFlogo A[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Antergos { @@ -250,21 +249,21 @@ static const FFlogo A[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AnushOS { .names = {"AnushOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ANUSHOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOsRetro { @@ -272,10 +271,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOSRETRO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOsRetro_small { @@ -284,10 +283,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOSRETRO_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOS { @@ -306,10 +305,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOS_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Aperture { @@ -326,7 +325,7 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Apple { @@ -362,10 +361,10 @@ static const FFlogo A[] = { .names = {"Apricity"}, .lines = FASTFETCH_DATATEXT_LOGO_APRICITY, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ArchBox { @@ -375,7 +374,7 @@ static const FFlogo A[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Archcraft { @@ -444,7 +443,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCH_OLD, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorTitle = FF_COLOR_FG_DEFAULT, .colorKeys = FF_COLOR_FG_BLUE, @@ -478,17 +477,17 @@ static const FFlogo A[] = { .colors = { FF_COLOR_FG_256 "237", FF_COLOR_FG_256 "130", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_256 "130", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Armbian { .names = {"Armbian"}, .lines = FASTFETCH_DATATEXT_LOGO_ARMBIAN, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, }, @@ -539,7 +538,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -551,7 +550,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCO_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -562,10 +561,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARSELINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Arya { @@ -587,7 +586,7 @@ static const FFlogo A[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, FF_COLOR_FG_BLUE, }, @@ -604,7 +603,7 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLACK, FF_COLOR_FG_LIGHT_CYAN, }, @@ -639,10 +638,10 @@ static const FFlogo A[] = { .names = {"astOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ASTOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Astra { @@ -650,10 +649,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ASTRA_LINUX, .colors = { FF_COLOR_FG_LIGHT_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ataraxia { @@ -683,11 +682,11 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ATHENAOS_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Aurora { @@ -697,7 +696,7 @@ static const FFlogo A[] = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Azos @@ -756,7 +755,7 @@ static const FFlogo B[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_GREEN, }, // BlackArch @@ -779,7 +778,7 @@ static const FFlogo B[] = { FF_COLOR_FG_BLACK, }, .colorKeys = FF_COLOR_FG_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlackPanther { @@ -801,7 +800,7 @@ static const FFlogo B[] = { FF_COLOR_FG_MAGENTA, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlankOn { @@ -809,20 +808,20 @@ static const FFlogo B[] = { .lines = FASTFETCH_DATATEXT_LOGO_BLANKON, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlueLight { .names = {"BlueLight"}, .lines = FASTFETCH_DATATEXT_LOGO_BLUELIGHT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Bodhi @@ -830,7 +829,7 @@ static const FFlogo B[] = { .names = {"Bodhi"}, .lines = FASTFETCH_DATATEXT_LOGO_BODHI, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_GREEN, }, @@ -865,23 +864,23 @@ static const FFlogo B[] = { .lines = FASTFETCH_DATATEXT_LOGO_BSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, FF_COLOR_FG_YELLOW, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BunsenLabs { .names = {"BunsenLabs"}, .lines = FASTFETCH_DATATEXT_LOGO_BUNSENLABS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LAST {}, @@ -916,11 +915,11 @@ static const FFlogo C[] = { .names = {"Calculate"}, .lines = FASTFETCH_DATATEXT_LOGO_CALCULATE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CalinixOS { @@ -979,10 +978,10 @@ static const FFlogo C[] = { .names = {"Center"}, .lines = FASTFETCH_DATATEXT_LOGO_CENTER, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CentOS { @@ -993,7 +992,7 @@ static const FFlogo C[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_YELLOW, @@ -1024,7 +1023,7 @@ static const FFlogo C[] = { FF_COLOR_FG_256 "72" }, .colorKeys = FF_COLOR_FG_256 "108", - .colorTitle = FF_COLOR_MODE_BOLD FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_MODE_BOLD FF_COLOR_FG_DEFAULT, }, // Chakra { @@ -1042,10 +1041,10 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CHALETOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chapeau { @@ -1053,10 +1052,10 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CHAPEAU, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chimera { @@ -1076,10 +1075,10 @@ static const FFlogo C[] = { .names = {"ChonkySealOS"}, .lines = FASTFETCH_DATATEXT_LOGO_CHONKYSEALOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chrom { @@ -1090,7 +1089,7 @@ static const FFlogo C[] = { FF_COLOR_FG_RED, FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_RED, @@ -1100,10 +1099,10 @@ static const FFlogo C[] = { .names = {"Cleanjaro"}, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CleanjaroSmall { @@ -1111,10 +1110,10 @@ static const FFlogo C[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ClearLinux { @@ -1167,7 +1166,7 @@ static const FFlogo C[] = { .names = {"Codex Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_CODEX, .colors = { - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, }, // Condres @@ -1188,11 +1187,11 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_COREOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Common Torizon { @@ -1209,7 +1208,7 @@ static const FFlogo C[] = { .names = {"Cosmic"}, .lines = FASTFETCH_DATATEXT_LOGO_COSMIC, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_YELLOW, FF_COLOR_FG_LIGHT_RED, @@ -1225,7 +1224,7 @@ static const FFlogo C[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -1238,7 +1237,7 @@ static const FFlogo C[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -1281,7 +1280,7 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CUTEFISHOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, }, @@ -1332,7 +1331,7 @@ static const FFlogo D[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DarkOS { @@ -1354,7 +1353,7 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DEBIAN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -1386,10 +1385,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DESAOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Devuan { @@ -1429,10 +1428,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRACOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFly { @@ -1440,10 +1439,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFlySmall { @@ -1452,10 +1451,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_SMALL, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFlyOld { @@ -1464,11 +1463,11 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DraugerOS { @@ -1476,10 +1475,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAUGER, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Droidian { @@ -1512,10 +1511,10 @@ static const FFlogo E[] = { .names = {"Elementary"}, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ElementarySmall { @@ -1523,21 +1522,21 @@ static const FFlogo E[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Elive { .names = {"Elive"}, .lines = FASTFETCH_DATATEXT_LOGO_ELIVE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_CYAN, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_CYAN, }, // EncryptOS @@ -1579,20 +1578,20 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_ENDLESS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Enso { .names = {"Enso"}, .lines = FASTFETCH_DATATEXT_LOGO_ENSO, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // EshanizedOS { @@ -1600,7 +1599,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_ESHANIZEDOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // EuroLinux @@ -1609,10 +1608,10 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EUROLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // evolinx { @@ -1630,7 +1629,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // EvolutionOSSmall @@ -1640,7 +1639,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // EvolutionOS_old @@ -1650,7 +1649,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS_OLD, .colors = { FF_COLOR_FG_LIGHT_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // eweOS @@ -1658,7 +1657,7 @@ static const FFlogo E[] = { .names = {"eweOS"}, .lines = FASTFETCH_DATATEXT_LOGO_EWEOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_LIGHT_RED, FF_COLOR_FG_LIGHT_BLACK, @@ -1671,7 +1670,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EXHERBO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -1714,7 +1713,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1728,7 +1727,7 @@ static const FFlogo F[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, FF_COLOR_FG_BLUE, }, @@ -1763,7 +1762,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_OLD, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1775,7 +1774,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_SILVERBLUE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -1788,7 +1787,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_KINOITE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1800,7 +1799,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_SERICEA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1812,11 +1811,11 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_COREOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FemboyOS { @@ -1826,7 +1825,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Feren { @@ -1836,7 +1835,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Filotimo { @@ -1846,7 +1845,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Finnix { @@ -1854,10 +1853,10 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FINNIX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Floflis { @@ -1867,14 +1866,14 @@ static const FFlogo F[] = { FF_COLOR_FG_LIGHT_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FreeBSD { .names = {"Freebsd"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEBSD, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, @@ -1896,10 +1895,10 @@ static const FFlogo F[] = { .names = {"FreeMiNT"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEMINT, .colors = { - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Frugalware { @@ -1907,10 +1906,10 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FRUGALWARE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Funtoo { @@ -1918,17 +1917,17 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FUNTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Furreto { .names = {"Furreto"}, .lines = FASTFETCH_DATATEXT_LOGO_FURRETO, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_MAGENTA, }, .colorKeys = FF_COLOR_FG_CYAN, @@ -1945,10 +1944,10 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GALLIUMOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Garuda { @@ -1987,7 +1986,7 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GENTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_MAGENTA, @@ -1999,7 +1998,7 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GENTOO_SMALL, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_MAGENTA, @@ -2059,9 +2058,9 @@ static const FFlogo G[] = { .names = {"GNU"}, .lines = FASTFETCH_DATATEXT_LOGO_GNU, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_RED, }, // GoboLinux @@ -2082,16 +2081,16 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GrapheneOS { .names = {"GrapheneOS"}, .lines = FASTFETCH_DATATEXT_LOGO_GRAPHENEOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Grombyang @@ -2114,7 +2113,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GuixSmall { @@ -2125,7 +2124,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GXDE { @@ -2181,11 +2180,11 @@ static const FFlogo H[] = { .lines = FASTFETCH_DATATEXT_LOGO_HAMONIKR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_256 "99" }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HarDClanZ { @@ -2193,18 +2192,18 @@ static const FFlogo H[] = { .lines = FASTFETCH_DATATEXT_LOGO_HARDCLANZ, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HardenedBSD { .names = {"HardenedBSD"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEBSD, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, @@ -2215,7 +2214,7 @@ static const FFlogo H[] = { .names = {"HarmonyOS"}, .lines = FASTFETCH_DATATEXT_LOGO_HARMONYOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -2255,9 +2254,9 @@ static const FFlogo H[] = { .names = {"Huayra"}, .lines = FASTFETCH_DATATEXT_LOGO_HUAYRA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Hybrid @@ -2300,7 +2299,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HyperbolaSmall { @@ -2311,7 +2310,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HydraPWK { @@ -2335,7 +2334,7 @@ static const FFlogo I[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // InstantOS { @@ -2354,7 +2353,7 @@ static const FFlogo I[] = { .lines = FASTFETCH_DATATEXT_LOGO_INTERIX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, @@ -2368,7 +2367,7 @@ static const FFlogo I[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ironclad { @@ -2377,7 +2376,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_BLACK, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Itc @@ -2387,7 +2386,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_RED, }, // LAST @@ -2417,10 +2416,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KAISEN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Kali { @@ -2461,10 +2460,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KAOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KernelOS { @@ -2481,7 +2480,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KDELINUX, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT } }, // KDE Neon @@ -2499,11 +2498,11 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KIBOJOE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KISSLinux { @@ -2511,7 +2510,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KISS, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_MAGENTA, @@ -2523,10 +2522,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KOGAION, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Korora { @@ -2534,10 +2533,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KORORA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KrassOS { @@ -2545,10 +2544,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KRASSOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KSLinux { @@ -2556,10 +2555,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KSLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Kubuntu { @@ -2567,7 +2566,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2579,7 +2578,7 @@ static const FFlogo K[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLACK }, .colorKeys = FF_COLOR_FG_BLUE, @@ -2597,7 +2596,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_256 "14", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // LangitKetujuh @@ -2606,7 +2605,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LANGITKETUJUH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2617,10 +2616,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LAXEROS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LEDE { @@ -2628,10 +2627,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LEDE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LibreELEC { @@ -2640,7 +2639,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_GREEN, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, FF_COLOR_FG_MAGENTA, }, @@ -2655,7 +2654,7 @@ static const FFlogo L[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Lingmo OS { @@ -2663,7 +2662,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINGMO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2684,19 +2683,19 @@ static const FFlogo L[] = { .names = {"Linux", "linux-generic"}, .lines = FASTFETCH_DATATEXT_LOGO_LINUX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxFromScratch { .names = {"LinuxFromScratch", "lfs"}, .lines = FASTFETCH_DATATEXT_LOGO_LFS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, }, @@ -2710,11 +2709,11 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUX_SMALL, .colors = { FF_COLOR_FG_BLACK, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxLight { @@ -2722,10 +2721,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXLITE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxLightSmall { @@ -2734,10 +2733,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXLITE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxMint { @@ -2745,7 +2744,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2757,7 +2756,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2769,7 +2768,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT_OLD, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2782,7 +2781,7 @@ static const FFlogo L[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LliureX { @@ -2791,7 +2790,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // LMDE @@ -2800,10 +2799,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LMDE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Loc-OS { @@ -2812,7 +2811,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_YELLOW, .colorTitle = FF_COLOR_FG_RED, @@ -2823,7 +2822,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Lunar @@ -2832,11 +2831,11 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LUNAR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LAST {}, @@ -2940,10 +2939,10 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MAGEIA, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MageiaSmall { @@ -2952,10 +2951,10 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MAGEIA_SMALL, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Magix { @@ -3018,10 +3017,10 @@ static const FFlogo M[] = { .names = {"MassOS", "mass"}, .lines = FASTFETCH_DATATEXT_LOGO_MASSOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MatuusOS { @@ -3042,7 +3041,7 @@ static const FFlogo M[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Mauna { @@ -3074,17 +3073,17 @@ static const FFlogo M[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidnightBSD { .names = {"MidnightBSD"}, .lines = FASTFETCH_DATATEXT_LOGO_MIDNIGHTBSD, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidOS { @@ -3094,7 +3093,7 @@ static const FFlogo M[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidOSOld { @@ -3103,10 +3102,10 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Minix { @@ -3114,7 +3113,7 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MINIX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, @@ -3128,7 +3127,7 @@ static const FFlogo M[] = { FF_COLOR_FG_256 "29", }, .colorKeys = FF_COLOR_FG_256 "29", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MOS { @@ -3145,7 +3144,7 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MSYS2, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_MAGENTA, @@ -3156,7 +3155,7 @@ static const FFlogo M[] = { .names = {"MX", "MX Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_MX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3167,7 +3166,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3178,7 +3177,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX2, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3194,7 +3193,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NAMIB, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Nekos @@ -3203,7 +3202,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NEKOS, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, }, @@ -3212,8 +3211,8 @@ static const FFlogo N[] = { .names = {"Neptune"}, .lines = FASTFETCH_DATATEXT_LOGO_NEPTUNE, .colors = { - FF_COLOR_FG_WHITE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_DEFAULT, }, }, // NetRunner @@ -3222,7 +3221,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NETRUNNER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // NexaLinux @@ -3240,7 +3239,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NITRUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // NixOS @@ -3288,10 +3287,10 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NETBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NetBSD2 { @@ -3300,10 +3299,10 @@ static const FFlogo N[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NetBSD Small { @@ -3312,20 +3311,20 @@ static const FFlogo N[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Nobara { .names = {"nobara", "nobara-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_NOBARA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NomadBSD { @@ -3335,7 +3334,7 @@ static const FFlogo N[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NurOS { @@ -3343,7 +3342,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NUROS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Nurunner @@ -3352,7 +3351,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NURUNNER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // NuTyX @@ -3375,7 +3374,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OBARUN, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OBRevenge @@ -3384,7 +3383,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OBREVENGE, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OmniOS @@ -3392,7 +3391,7 @@ static const FFlogo O[] = { .names = {"OmniOS"}, .lines = FASTFETCH_DATATEXT_LOGO_OMNIOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, FF_COLOR_FG_LIGHT_BLACK, } @@ -3409,10 +3408,10 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENKYLIN, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenBSD { @@ -3420,13 +3419,13 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENBSD, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenBSDSmall { @@ -3435,10 +3434,10 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENBSD_SMALL, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenEuler { @@ -3446,7 +3445,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENEULER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OpenIndiana @@ -3463,7 +3462,7 @@ static const FFlogo O[] = { .names = {"OpenMamba"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENMAMBA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_GREEN, }, }, @@ -3473,7 +3472,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSTAGE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OpenSuse @@ -3482,7 +3481,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3511,7 +3510,7 @@ static const FFlogo O[] = { .names = {"opensuse-leap"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3522,7 +3521,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3532,7 +3531,7 @@ static const FFlogo O[] = { .names = {"opensuse-tumbleweed"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3543,7 +3542,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_SMALL, .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3554,7 +3553,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3564,7 +3563,7 @@ static const FFlogo O[] = { .names = {"opensuse-slowroll", "opensuse-tumbleweed-slowroll"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_SLOWROLL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3587,14 +3586,14 @@ static const FFlogo O[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OPNsense { .names = {"OPNsense"}, .lines = FASTFETCH_DATATEXT_LOGO_OPNSENSE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_256 "202", }, }, @@ -3606,18 +3605,18 @@ static const FFlogo O[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Orchid { .names = {"orchid"}, .lines = FASTFETCH_DATATEXT_LOGO_ORCHID, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // OrchidSmall @@ -3626,11 +3625,11 @@ static const FFlogo O[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ORCHID_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Oreon @@ -3648,7 +3647,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OS_ELBRUS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OSMC @@ -3657,7 +3656,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OSMC, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // OSX @@ -3700,7 +3699,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PACBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Panwah @@ -3708,7 +3707,7 @@ static const FFlogo P[] = { .names = {"Panwah"}, .lines = FASTFETCH_DATATEXT_LOGO_PANWAH, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, FF_COLOR_FG_BLACK, }, @@ -3740,7 +3739,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PARCH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, }, @@ -3759,7 +3758,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PARROT, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Parsix @@ -3769,7 +3768,7 @@ static const FFlogo P[] = { .colors = { FF_COLOR_FG_YELLOW, FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLACK, }, }, @@ -3779,7 +3778,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PCBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PCLinuxOS @@ -3788,7 +3787,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PCLINUXOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PearOS @@ -3819,7 +3818,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PENTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Peppermint @@ -3828,7 +3827,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PEPPERMINT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Peropesis @@ -3836,7 +3835,7 @@ static const FFlogo P[] = { .names = {"Peropesis", "Peropesis Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_PEROPESIS, .colors = { - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, }, // PhyOS @@ -3845,7 +3844,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PHYOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PikaOS @@ -3862,7 +3861,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PISI, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PNMLinux @@ -3872,7 +3871,7 @@ static const FFlogo P[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_256 "202" }, }, @@ -3882,7 +3881,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POP, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_CYAN, .colorTitle = FF_COLOR_FG_CYAN, @@ -3904,7 +3903,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PORTEUS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PostMarketOS @@ -3913,7 +3912,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POSTMARKETOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PostMarketOSSmall @@ -3923,7 +3922,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POSTMARKETOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Proxmox @@ -3931,10 +3930,10 @@ static const FFlogo P[] = { .names = {"Proxmox", "pve"}, .lines = FASTFETCH_DATATEXT_LOGO_PROXMOX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_256 "202" }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_256 "202", }, // PuffOS @@ -3943,7 +3942,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUFFOS, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Puppy @@ -3952,7 +3951,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUPPY, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PureOS @@ -3961,7 +3960,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUREOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // PureOSSmall @@ -3971,7 +3970,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUREOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // LAST @@ -4024,7 +4023,7 @@ static const FFlogo Q[] = { .lines = FASTFETCH_DATATEXT_LOGO_QUIBIAN, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Quirinux @@ -4032,7 +4031,7 @@ static const FFlogo Q[] = { .names = {"Quirinux"}, .lines = FASTFETCH_DATATEXT_LOGO_QUIRINUX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_MAGENTA, }, }, @@ -4079,7 +4078,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RAVYNOS, .colors = { FF_COLOR_FG_256 "15", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // RebornOS @@ -4111,7 +4110,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDCORE, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // RedHatEnterpriseLinux @@ -4142,7 +4141,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RHEL_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // RedOS @@ -4151,7 +4150,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorTitle = FF_COLOR_FG_RED, .colorKeys = FF_COLOR_FG_RED, @@ -4163,7 +4162,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDOS_SMALL, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorTitle = FF_COLOR_FG_RED, .colorKeys = FF_COLOR_FG_RED, @@ -4183,18 +4182,18 @@ static const FFlogo R[] = { .names = {"Refracted Devuan", "refracted-devuan"}, .lines = FASTFETCH_DATATEXT_LOGO_REFRACTED_DEVUAN, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Regata { .names = {"Regata"}, .lines = FASTFETCH_DATATEXT_LOGO_REGATA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, @@ -4208,7 +4207,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REGOLITH, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // RhaymOS @@ -4217,7 +4216,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RHAYMOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // RockyLinux @@ -4276,7 +4275,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SABAYON, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Sabotage @@ -4284,10 +4283,10 @@ static const FFlogo S[] = { .names = {"Sabotage"}, .lines = FASTFETCH_DATATEXT_LOGO_SABOTAGE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Sailfish { @@ -4306,7 +4305,7 @@ static const FFlogo S[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // SalientOS @@ -4315,7 +4314,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SALIENTOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Salix @@ -4351,7 +4350,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SCIENTIFIC, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, }, @@ -4360,7 +4359,7 @@ static const FFlogo S[] = { .names = {"Serpent OS"}, .lines = FASTFETCH_DATATEXT_LOGO_SERPENT_OS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Semc @@ -4379,7 +4378,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SEPTOR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, }, @@ -4398,7 +4397,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SHARKLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // ShastraOS @@ -4407,7 +4406,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SHASTRAOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Shebang @@ -4415,8 +4414,8 @@ static const FFlogo S[] = { .names = {"Shebang"}, .lines = FASTFETCH_DATATEXT_LOGO_SHEBANG, .colors = { - FF_COLOR_FG_WHITE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_DEFAULT, }, }, // Siduction @@ -4425,7 +4424,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SIDUCTION, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, } }, // SkiffOS @@ -4434,7 +4433,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SKIFFOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // SleeperOS @@ -4443,7 +4442,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLEEPEROS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, } }, // SleeperOS @@ -4453,7 +4452,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLEEPEROS_SMALL, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, } }, // Slitaz @@ -4488,7 +4487,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLACKWARE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4500,10 +4499,10 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLACKWARE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // SmartOS { @@ -4511,7 +4510,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SMARTOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // SnigdhaOS @@ -4520,7 +4519,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SNIGDHAOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Soda @@ -4529,7 +4528,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SODA, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Source Mage @@ -4537,10 +4536,10 @@ static const FFlogo S[] = { .names = {"Source Mage", "Source Mage GNU/Linux", "source_mage", "sourcemage"}, .lines = FASTFETCH_DATATEXT_LOGO_SOURCE_MAGE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Solaris { @@ -4550,7 +4549,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // SolarisSmall { @@ -4561,7 +4560,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Solus { @@ -4569,10 +4568,10 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SOLUS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Sparky { @@ -4580,7 +4579,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SPARKY, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, }, // Star @@ -4588,8 +4587,8 @@ static const FFlogo S[] = { .names = {"Star"}, .lines = FASTFETCH_DATATEXT_LOGO_STAR, .colors = { - FF_COLOR_FG_WHITE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_DEFAULT, }, }, // Starry @@ -4600,7 +4599,7 @@ static const FFlogo S[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // StockLinux { @@ -4608,7 +4607,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STOCK_LINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // SteamOS @@ -4617,7 +4616,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4628,7 +4627,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4639,7 +4638,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4650,7 +4649,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE + FF_COLOR_FG_DEFAULT }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -4661,7 +4660,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SULIN, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // SummitOS @@ -4699,7 +4698,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SWAGARCH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // LAST @@ -4713,7 +4712,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_T2, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLUE, }, @@ -4724,7 +4723,7 @@ static const FFlogo T[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_T2_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_BLUE, }, }, @@ -4734,7 +4733,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_TAILS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Tatra @@ -4752,7 +4751,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_TEARCH, .colors = { FF_COLOR_FG_256 "39", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // TileOS @@ -4801,7 +4800,7 @@ static const FFlogo T[] = { .names = {"Tuxedo OS", "tuxedo"}, .lines = FASTFETCH_DATATEXT_LOGO_TUXEDO_OS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, }, @@ -4814,7 +4813,7 @@ static const FFlogo T[] = { FF_COLOR_FG_RED, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // LAST @@ -4828,11 +4827,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX, .colors = { FF_COLOR_FG_256 "38", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UBLinuxSmall { @@ -4841,11 +4840,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX_SMALL, .colors = { FF_COLOR_FG_256 "38", - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ubuntu { @@ -4873,7 +4872,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -4885,7 +4884,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_OLD2, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, @@ -4908,11 +4907,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_BUDGIE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuCinnamon { @@ -4920,7 +4919,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_CINNAMON, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // UbuntuGNOME @@ -4930,7 +4929,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -4942,11 +4941,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_KYLIN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuMate { @@ -4954,10 +4953,10 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_MATE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuKde { @@ -4965,7 +4964,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_KUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4976,7 +4975,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_STUDIO, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // UbuntuSway @@ -4985,7 +4984,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_SWAY, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // UbuntuTouch @@ -4994,7 +4993,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_TOUCH, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // UbuntuUnity @@ -5003,7 +5002,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_UNITY, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Ultramarine @@ -5012,7 +5011,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_ULTRAMARINE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Ultramarine Small @@ -5021,7 +5020,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_ULTRAMARINE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Unifi @@ -5029,8 +5028,8 @@ static const FFlogo U[] = { .names = {"Unifi"}, .lines = FASTFETCH_DATATEXT_LOGO_UNIFI, .colors = { - FF_COLOR_FG_WHITE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_DEFAULT, }, }, // Univalent @@ -5048,7 +5047,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UNIVENTION, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // UOS @@ -5058,7 +5057,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_YELLOW, }, // UrukOS @@ -5068,7 +5067,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_LIGHT_BLUE, FF_COLOR_FG_LIGHT_BLUE, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_LIGHT_BLUE, FF_COLOR_FG_BLUE, } @@ -5093,10 +5092,10 @@ static const FFlogo V[] = { .names = {"Valhalla", "valhallaos", "valhalla-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_VALHALLA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Vanilla { @@ -5157,7 +5156,7 @@ static const FFlogo V[] = { FF_COLOR_FG_256 "8", FF_COLOR_FG_256 "15", FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Vzlinux @@ -5166,7 +5165,7 @@ static const FFlogo V[] = { .lines = FASTFETCH_DATATEXT_LOGO_VZLINUX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, }, @@ -5212,7 +5211,7 @@ static const FFlogo V[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_GREEN, }, // LAST @@ -5226,7 +5225,7 @@ static const FFlogo W[] = { .lines = FASTFETCH_DATATEXT_LOGO_WII_LINUX, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Windows2025 @@ -5280,7 +5279,7 @@ static const FFlogo W[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Windows { From 1da8367f55444d9c05eb9b7f1034635101ac6d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 27 Jun 2025 13:51:07 +0800 Subject: [PATCH 23/45] Media (macOS): simplify now playing handling Also improve performance --- CMakeLists.txt | 5 -- src/data/nowPlaying.scptd | 24 ------ src/detection/media/media_apple.m | 139 ++++++++++++++---------------- src/fastfetch_datatext.h.in | 4 - 4 files changed, 65 insertions(+), 107 deletions(-) delete mode 100644 src/data/nowPlaying.scptd diff --git a/CMakeLists.txt b/CMakeLists.txt index d766e9acf1..1ceb20a634 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -326,11 +326,6 @@ endif() fastfetch_encode_c_string("${DATATEXT_JSON_HELP}" DATATEXT_JSON_HELP) fastfetch_load_text(src/data/structure.txt DATATEXT_STRUCTURE) -if(APPLE) - # See src/detection/media/media_apple.m - fastfetch_load_text(src/data/nowPlaying.scptd DATATEXT_NOWPLAYING) -endif() - configure_file(src/fastfetch_config.h.in fastfetch_config.h @ONLY) configure_file(src/fastfetch_datatext.h.in fastfetch_datatext.h @ONLY) if(APPLE) diff --git a/src/data/nowPlaying.scptd b/src/data/nowPlaying.scptd deleted file mode 100644 index 21ce405016..0000000000 --- a/src/data/nowPlaying.scptd +++ /dev/null @@ -1,24 +0,0 @@ -use scripting additions -use framework "/System/Library/PrivateFrameworks/MediaRemote.framework" - -set MRNowPlayingRequest to current application's NSClassFromString("MRNowPlayingRequest") - -if MRNowPlayingRequest's localNowPlayingItem() is missing value then - return -end if - -if MRNowPlayingRequest's localIsPlaying() then - set status to "Playing" -else - set status to "Paused" -end if - -set infoDict to MRNowPlayingRequest's localNowPlayingItem()'s nowPlayingInfo() -set bundleObj to MRNowPlayingRequest's localNowPlayingPlayerPath()'s client() - -return status & " -" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoTitle" as text) & " -" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoArtist" as text) & " -" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoAlbum" as text) & " -" & (bundleObj's bundleIdentifier() as text) & " -" & (bundleObj's displayName() as text) diff --git a/src/detection/media/media_apple.m b/src/detection/media/media_apple.m index 1d2356ad22..88cfe81bff 100644 --- a/src/detection/media/media_apple.m +++ b/src/detection/media/media_apple.m @@ -1,94 +1,85 @@ #include "fastfetch.h" #include "detection/media/media.h" -#include "common/library.h" #include "common/processing.h" -#include "util/apple/cf_helpers.h" -#include "util/apple/osascript.h" -#include "fastfetch_datatext.h" #import -#import -extern void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t dispatcher, void(^callback)(_Nullable CFDictionaryRef info)) __attribute__((weak_import)); -extern void MRMediaRemoteGetNowPlayingClient(dispatch_queue_t dispatcher, void (^callback)(_Nullable id clientObj)) __attribute__((weak_import)); -extern CFStringRef MRNowPlayingClientGetBundleIdentifier(id clientObj) __attribute__((weak_import)); -extern CFStringRef MRNowPlayingClientGetParentAppBundleIdentifier(id clientObj) __attribute__((weak_import)); -void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, void (^callback)(BOOL playing)) __attribute__((weak_import)); +@interface MRContentItem : NSObject +@property (nonatomic, readonly, copy) NSDictionary* nowPlayingInfo; +@end -static const char* getMediaByMediaRemote(FFMediaResult* result) -{ - #define FF_TEST_FN_EXISTANCE(fn) if (!fn) return "MediaRemote function " #fn " is not available" - FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingInfo); - FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingClient); - FF_TEST_FN_EXISTANCE(MRNowPlayingClientGetBundleIdentifier); - FF_TEST_FN_EXISTANCE(MRNowPlayingClientGetParentAppBundleIdentifier); - FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingApplicationIsPlaying); - #undef FF_TEST_FN_EXISTANCE +@interface MRClient : NSObject +@property (nonatomic, copy) NSString* bundleIdentifier; +@property (nonatomic, copy) NSString* displayName; +@end - dispatch_group_t group = dispatch_group_create(); - dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); - - dispatch_group_enter(group); - MRMediaRemoteGetNowPlayingApplicationIsPlaying(queue, ^(BOOL playing) { - ffStrbufSetStatic(&result->status, playing ? "Playing" : "Paused"); - dispatch_group_leave(group); - }); - - dispatch_group_enter(group); - __block const char* error = NULL; - MRMediaRemoteGetNowPlayingInfo(queue, ^(_Nullable CFDictionaryRef info) { - if(info != nil) - { - error = ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song); - if(!error) - { - ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist); - ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album); - } - } - else - error = "MRMediaRemoteGetNowPlayingInfo() failed"; - - dispatch_group_leave(group); - }); +@interface MRPlayerPath : NSObject +@property (nonatomic, copy) MRClient* client; +@end - dispatch_group_enter(group); - MRMediaRemoteGetNowPlayingClient(queue, ^(_Nullable id clientObj) { - if (clientObj != nil) - { - CFStringRef identifier = MRNowPlayingClientGetBundleIdentifier(clientObj); - if (identifier == nil) - identifier = MRNowPlayingClientGetParentAppBundleIdentifier(clientObj); - if (identifier != nil) - ffCfStrGetString(identifier, &result->playerId); - } - dispatch_group_leave(group); - }); +@interface MRNowPlayingRequest ++ (bool)localIsPlaying; ++ (MRContentItem*)localNowPlayingItem; ++ (MRPlayerPath*)localNowPlayingPlayerPath; +@end - dispatch_group_wait(group, DISPATCH_TIME_FOREVER); - // Don't dispatch_release because we are using ARC +static const char* getMediaByMediaRemote(FFMediaResult* result) +{ + if (!NSClassFromString(@"MRNowPlayingRequest")) + return "MediaRemote framework is not available"; + if (!MRNowPlayingRequest.localNowPlayingItem) + return "No media found"; + ffStrbufSetStatic(&result->status, MRNowPlayingRequest.localIsPlaying ? "Playing" : "Paused"); - if(result->playerId.length > 0) - { - char buf[128]; - snprintf(buf, ARRAY_SIZE(buf), "name of app id \"%s\"", result->playerId.chars); - ffOsascript(buf, &result->player); - } + NSDictionary* infoDict = MRNowPlayingRequest.localNowPlayingItem.nowPlayingInfo; + ffStrbufSetS(&result->song, infoDict[@"kMRMediaRemoteNowPlayingInfoTitle"].UTF8String); + ffStrbufSetS(&result->artist, infoDict[@"kMRMediaRemoteNowPlayingInfoArtist"].UTF8String); + ffStrbufSetS(&result->album, infoDict[@"kMRMediaRemoteNowPlayingInfoAlbum"].UTF8String); - if(result->song.length > 0) - return NULL; + MRClient* bundleObj = MRNowPlayingRequest.localNowPlayingPlayerPath.client; + ffStrbufSetS(&result->playerId, bundleObj.bundleIdentifier.UTF8String); + ffStrbufSetS(&result->player, bundleObj.displayName.UTF8String); + return NULL; +} - return error; +__attribute__((visibility("default"), used)) +int ffPrintMediaByMediaRemote(void) +{ + FFMediaResult media = { + .status = ffStrbufCreate(), + .song = ffStrbufCreate(), + .artist = ffStrbufCreate(), + .album = ffStrbufCreate(), + .playerId = ffStrbufCreate(), + .player = ffStrbufCreate(), + }; + if (getMediaByMediaRemote(&media) != NULL) + return 1; + ffStrbufPutTo(&media.status, stdout); + ffStrbufPutTo(&media.song, stdout); + ffStrbufPutTo(&media.artist, stdout); + ffStrbufPutTo(&media.album, stdout); + ffStrbufPutTo(&media.playerId, stdout); + ffStrbufPutTo(&media.player, stdout); + ffStrbufDestroy(&media.status); + ffStrbufDestroy(&media.song); + ffStrbufDestroy(&media.artist); + ffStrbufDestroy(&media.album); + ffStrbufDestroy(&media.playerId); + ffStrbufDestroy(&media.player); + return 0; } -static const char* getMediaByOsascript(FFMediaResult* result) +static const char* getMediaByAuthorizedProcess(FFMediaResult* result) { + // #1737 + FF_STRBUF_AUTO_DESTROY script = ffStrbufCreateF("import ctypes;ctypes.CDLL('%s').ffPrintMediaByMediaRemote()", instance.state.platform.exePath.chars); FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate(); - // The script must be executed by `/usr/bin/osascript`. `ffOsascript` doesn't work here + const char* error = ffProcessAppendStdOut(&buffer, (char* const[]) { - "/usr/bin/osascript", - "-e", - FASTFETCH_DATATEXT_NOWPLAYING, + "/usr/bin/python3", // Must be signed by Apple. Homebrew python doesn't work + "-c", + script.chars, nil }); if (error) return error; @@ -107,7 +98,7 @@ void ffDetectMediaImpl(FFMediaResult* media) { const char* error; if (@available(macOS 15.4, *)) - error = getMediaByOsascript(media); + error = getMediaByAuthorizedProcess(media); else error = getMediaByMediaRemote(media); if (error) ffStrbufAppendS(&media->error, error); diff --git a/src/fastfetch_datatext.h.in b/src/fastfetch_datatext.h.in index f40367a921..5c73b9d498 100644 --- a/src/fastfetch_datatext.h.in +++ b/src/fastfetch_datatext.h.in @@ -2,7 +2,3 @@ #define FASTFETCH_DATATEXT_JSON_HELP @DATATEXT_JSON_HELP@ #define FASTFETCH_DATATEXT_STRUCTURE @DATATEXT_STRUCTURE@ - -#ifdef __APPLE__ - #define FASTFETCH_DATATEXT_NOWPLAYING @DATATEXT_NOWPLAYING@ -#endif From ad0ddfd7f168444b8e22239c85e1c573c94ca12b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Fri, 27 Jun 2025 15:58:12 +0800 Subject: [PATCH 24/45] Media (macOS): support old macOS version --- src/detection/media/media_apple.m | 102 ++++++++++++++++++++---------- 1 file changed, 69 insertions(+), 33 deletions(-) diff --git a/src/detection/media/media_apple.m b/src/detection/media/media_apple.m index 88cfe81bff..57e4bcd23e 100644 --- a/src/detection/media/media_apple.m +++ b/src/detection/media/media_apple.m @@ -1,45 +1,73 @@ #include "fastfetch.h" #include "detection/media/media.h" #include "common/processing.h" +#include "util/apple/cf_helpers.h" #import +#import -@interface MRContentItem : NSObject -@property (nonatomic, readonly, copy) NSDictionary* nowPlayingInfo; -@end +// https://github.com/andrewwiik/iOS-Blocks/blob/master/Widgets/Music/MediaRemote.h +extern void MRMediaRemoteGetNowPlayingInfo(dispatch_queue_t dispatcher, void(^callback)(_Nullable CFDictionaryRef info)) __attribute__((weak_import)); +extern void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, void (^callback)(BOOL playing)) __attribute__((weak_import)); +extern void MRMediaRemoteGetNowPlayingApplicationDisplayID(dispatch_queue_t queue, void (^callback)(_Nullable CFStringRef displayID)) __attribute__((weak_import)); +extern void MRMediaRemoteGetNowPlayingApplicationDisplayName(int unknown, dispatch_queue_t queue, void (^callback)(_Nullable CFStringRef name)) __attribute__((weak_import)); -@interface MRClient : NSObject -@property (nonatomic, copy) NSString* bundleIdentifier; -@property (nonatomic, copy) NSString* displayName; -@end +static const char* getMediaByMediaRemote(FFMediaResult* result) +{ + #define FF_TEST_FN_EXISTANCE(fn) if (!fn) return "MediaRemote function " #fn " is not available" + FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingInfo); + FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingApplicationIsPlaying); + #undef FF_TEST_FN_EXISTANCE -@interface MRPlayerPath : NSObject -@property (nonatomic, copy) MRClient* client; -@end + dispatch_group_t group = dispatch_group_create(); + dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); -@interface MRNowPlayingRequest -+ (bool)localIsPlaying; -+ (MRContentItem*)localNowPlayingItem; -+ (MRPlayerPath*)localNowPlayingPlayerPath; -@end + dispatch_group_enter(group); + __block const char* error = NULL; + MRMediaRemoteGetNowPlayingInfo(queue, ^(_Nullable CFDictionaryRef info) { + if(info != nil) + { + ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoTitle"), &result->song); + ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoArtist"), &result->artist); + ffCfDictGetString(info, CFSTR("kMRMediaRemoteNowPlayingInfoAlbum"), &result->album); + } + else + error = "MRMediaRemoteGetNowPlayingInfo() failed"; -static const char* getMediaByMediaRemote(FFMediaResult* result) -{ - if (!NSClassFromString(@"MRNowPlayingRequest")) - return "MediaRemote framework is not available"; - if (!MRNowPlayingRequest.localNowPlayingItem) - return "No media found"; - ffStrbufSetStatic(&result->status, MRNowPlayingRequest.localIsPlaying ? "Playing" : "Paused"); - - NSDictionary* infoDict = MRNowPlayingRequest.localNowPlayingItem.nowPlayingInfo; - ffStrbufSetS(&result->song, infoDict[@"kMRMediaRemoteNowPlayingInfoTitle"].UTF8String); - ffStrbufSetS(&result->artist, infoDict[@"kMRMediaRemoteNowPlayingInfoArtist"].UTF8String); - ffStrbufSetS(&result->album, infoDict[@"kMRMediaRemoteNowPlayingInfoAlbum"].UTF8String); - - MRClient* bundleObj = MRNowPlayingRequest.localNowPlayingPlayerPath.client; - ffStrbufSetS(&result->playerId, bundleObj.bundleIdentifier.UTF8String); - ffStrbufSetS(&result->player, bundleObj.displayName.UTF8String); - return NULL; + dispatch_group_leave(group); + }); + + dispatch_group_enter(group); + MRMediaRemoteGetNowPlayingApplicationIsPlaying(queue, ^(BOOL playing) { + ffStrbufSetStatic(&result->status, playing ? "Playing" : "Paused"); + dispatch_group_leave(group); + }); + + if (MRMediaRemoteGetNowPlayingApplicationDisplayID) + { + dispatch_group_enter(group); + MRMediaRemoteGetNowPlayingApplicationDisplayID(queue, ^(_Nullable CFStringRef displayID) { + ffCfStrGetString(displayID, &result->playerId); + dispatch_group_leave(group); + }); + } + + if (MRMediaRemoteGetNowPlayingApplicationDisplayName) + { + dispatch_group_enter(group); + MRMediaRemoteGetNowPlayingApplicationDisplayName(0, queue, ^(_Nullable CFStringRef name) { + ffCfStrGetString(name, &result->player); + dispatch_group_leave(group); + }); + } + + dispatch_group_wait(group, DISPATCH_TIME_FOREVER); + // Don't dispatch_release because we are using ARC + + if(result->song.length > 0) + return NULL; + + return error; } __attribute__((visibility("default"), used)) @@ -101,5 +129,13 @@ void ffDetectMediaImpl(FFMediaResult* media) error = getMediaByAuthorizedProcess(media); else error = getMediaByMediaRemote(media); - if (error) ffStrbufAppendS(&media->error, error); + if (error) + ffStrbufAppendS(&media->error, error); + else if (media->player.length == 0 && media->playerId.length > 0) + { + ffStrbufSet(&media->player, &media->playerId); + if (ffStrbufStartsWithIgnCaseS(&media->player, "com.")) + ffStrbufSubstrAfter(&media->player, strlen("com.") - 1); + ffStrbufReplaceAllC(&media->player, '.', ' '); + } } From 974c658fffdbe2fcbd1dffcba6ea9ac1b9c622f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Sat, 28 Jun 2025 23:39:01 +0800 Subject: [PATCH 25/45] README: add the OpenBSD and DragonFly installation method [ci skip] Fix https://github.com/fastfetch-cli/fastfetch/issues/1819#issuecomment-3015070008 --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 6e413021ec..29fa713629 100644 --- a/README.md +++ b/README.md @@ -69,13 +69,12 @@ If fastfetch is not packaged for your distribution or an outdated version is pac You may also download the program directly from [the GitHub releases page](https://github.com/fastfetch-cli/fastfetch/releases/latest) in the form of an archive file. -### FreeBSD +### BSD systems -* `pkg install fastfetch` - -### NetBSD - -* `pkgin in fastfetch` +* FreeBSD: `pkg install fastfetch` +* NetBSD: `pkgin in fastfetch` +* OpenBSD: `pkg_add fastfetch` (Snapshots only) +* DragonFly BSD: `pkg install fastfetch` (Snapshots only) ### Android (Termux) From 40e57b76988eedf4b12be9fb5f173a87f164b321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Jun 2025 19:16:08 +0800 Subject: [PATCH 26/45] IO: increase `PROC_FILE_BUFFSIZ` to avoid possible short reads --- src/common/io/io.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/common/io/io.h b/src/common/io/io.h index bfa3721112..2bb6e6e23b 100644 --- a/src/common/io/io.h +++ b/src/common/io/io.h @@ -19,8 +19,7 @@ #define FF_INVALID_FD (-1) // procfs's file can be changed between read calls such as /proc/meminfo and /proc/uptime. // one safe way to read correct data is reading the whole file in a single read syscall - // 8192 comes from procps-ng: https://gitlab.com/procps-ng/procps/-/blob/master/library/meminfo.c?ref_type=heads#L39 - #define PROC_FILE_BUFFSIZ 8192 + #define PROC_FILE_BUFFSIZ (32 * 1024) #endif static inline FFNativeFD FFUnixFD2NativeFD(int unixfd) From d94cdf442492f9fff35b0d37ffed111a19cee406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Jun 2025 19:36:46 +0800 Subject: [PATCH 27/45] CpuUsage (Linux / BSD): include interrupt and softirq times in CPU usage calculations --- src/detection/cpuusage/cpuusage_bsd.c | 4 ++-- src/detection/cpuusage/cpuusage_linux.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/detection/cpuusage/cpuusage_bsd.c b/src/detection/cpuusage/cpuusage_bsd.c index 5b9312d9e2..4ed135eaba 100644 --- a/src/detection/cpuusage/cpuusage_bsd.c +++ b/src/detection/cpuusage/cpuusage_bsd.c @@ -42,8 +42,8 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) for (uint32_t i = 0; i < coreCount; ++i) { uint64_t* cpTime = cpTimes[i]; - uint64_t inUse = cpTime[CP_USER] + cpTime[CP_NICE] + cpTime[CP_SYS]; - uint64_t total = inUse + cpTime[CP_INTR] + cpTime[CP_IDLE]; + uint64_t inUse = cpTime[CP_USER] + cpTime[CP_NICE] + cpTime[CP_SYS] + cpTime[CP_INTR]; + uint64_t total = inUse + cpTime[CP_IDLE]; FFCpuUsageInfo* info = (FFCpuUsageInfo*) ffListAdd(cpuTimes); *info = (FFCpuUsageInfo) { diff --git a/src/detection/cpuusage/cpuusage_linux.c b/src/detection/cpuusage/cpuusage_linux.c index 5136b34893..02544630c1 100644 --- a/src/detection/cpuusage/cpuusage_linux.c +++ b/src/detection/cpuusage/cpuusage_linux.c @@ -31,8 +31,8 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) { if(sscanf(start, "cpu%*d%" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64 "%" PRIu64 "%*[^\n]\n", &user, &nice, &system, &idle, &iowait, &irq, &softirq) == 7) { - uint64_t inUse = user + nice + system; - uint64_t total = inUse + idle + iowait + irq + softirq; + uint64_t inUse = user + nice + system + irq + softirq; + uint64_t total = inUse + idle + iowait; FFCpuUsageInfo* info = (FFCpuUsageInfo*) ffListAdd(cpuTimes); *info = (FFCpuUsageInfo) { From ec7f14ab96793191f96aee8c3877b9c3e1d5e073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Jun 2025 19:37:04 +0800 Subject: [PATCH 28/45] CpuUsage (Windows): refine KernelTime calculation by removing unused DPC and interrupt time --- src/detection/cpuusage/cpuusage_windows.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/detection/cpuusage/cpuusage_windows.c b/src/detection/cpuusage/cpuusage_windows.c index 21c582b134..6acb70f685 100644 --- a/src/detection/cpuusage/cpuusage_windows.c +++ b/src/detection/cpuusage/cpuusage_windows.c @@ -20,11 +20,8 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) { SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION* coreInfo = pinfo + i; - // KernelTime includes idle time. - LONGLONG dpcTime = coreInfo->Reserved1[0].QuadPart; - LONGLONG interruptTime = coreInfo->Reserved1[1].QuadPart; + // KernelTime includes IdleTime and DpcTime. coreInfo->KernelTime.QuadPart -= coreInfo->IdleTime.QuadPart; - coreInfo->KernelTime.QuadPart += dpcTime + interruptTime; uint64_t inUse = (uint64_t) (coreInfo->UserTime.QuadPart + coreInfo->KernelTime.QuadPart); uint64_t total = inUse + (uint64_t)coreInfo->IdleTime.QuadPart; From 2406015c8196c7ac1abff9923237c62f33be6cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Mon, 30 Jun 2025 19:41:59 +0800 Subject: [PATCH 29/45] Terminal (Linux): ignore `init` and `systemd` --- src/detection/terminalshell/terminalshell_linux.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/detection/terminalshell/terminalshell_linux.c b/src/detection/terminalshell/terminalshell_linux.c index b09cb0a3c9..3414d148f5 100644 --- a/src/detection/terminalshell/terminalshell_linux.c +++ b/src/detection/terminalshell/terminalshell_linux.c @@ -109,6 +109,8 @@ static pid_t getTerminalInfo(FFTerminalResult* result, pid_t pid) ffStrbufEqualS(&result->processName, "chezmoi") || // #762 ffStrbufEqualS(&result->processName, "proot") || ffStrbufEqualS(&result->processName, "script") || + ffStrbufEqualS(&result->processName, "init") || + ffStrbufEqualS(&result->processName, "systemd") || #ifdef __linux__ ffStrbufStartsWithS(&result->processName, "flatpak-") || // #707 #endif From 1854953d8cdb606f829030ab193ccef2d17a6845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Jul 2025 14:57:40 +0800 Subject: [PATCH 30/45] Chore (Windows): move `perflib_.h` to somewhere global --- src/detection/cpu/cpu_windows.c | 2 +- src/{detection/cpu => util/windows}/perflib_.h | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/{detection/cpu => util/windows}/perflib_.h (100%) diff --git a/src/detection/cpu/cpu_windows.c b/src/detection/cpu/cpu_windows.c index 2cb1eef347..f27ec806a7 100644 --- a/src/detection/cpu/cpu_windows.c +++ b/src/detection/cpu/cpu_windows.c @@ -5,7 +5,7 @@ #include "util/smbiosHelper.h" #include -#include "perflib_.h" +#include "util/windows/perflib_.h" #include static inline void ffPerfCloseQueryHandle(HANDLE* phQuery) diff --git a/src/detection/cpu/perflib_.h b/src/util/windows/perflib_.h similarity index 100% rename from src/detection/cpu/perflib_.h rename to src/util/windows/perflib_.h From d5b56be4ffbb67625c54faae853ebb39ba7abe26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Jul 2025 20:32:45 +0800 Subject: [PATCH 31/45] CMake (SunOS): drop pciaccess dependency --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ceb20a634..71e9a50a38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,7 @@ cmake_dependent_option(ENABLE_DIRECTX_HEADERS "Enable DirectX headers for WSL" O cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR DragonFly OR Haiku" OFF) cmake_dependent_option(ENABLE_THREADS "Enable multithreading" ON "Threads_FOUND" OFF) cmake_dependent_option(ENABLE_LIBZFS "Enable libzfs" ON "LINUX OR FreeBSD OR SunOS" OFF) -cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD OR SunOS" OFF) +cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD" OFF) option(ENABLE_SYSTEM_YYJSON "Use system provided (instead of fastfetch embedded) yyjson library" OFF) option(ENABLE_ASAN "Build fastfetch with ASAN (address sanitizer)" OFF) From 4abb18373598e986af7a0204010a23d021fdf8e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Jul 2025 20:53:46 +0800 Subject: [PATCH 32/45] CPUUsage(Windows): add new method using Windows Performance Library --- CMakeLists.txt | 5 + src/detection/cpuusage/cpuusage.c | 9 ++ src/detection/cpuusage/cpuusage_windows.c | 109 ++++++++++++++++++++++ src/modules/cpuusage/cpuusage.c | 9 ++ src/util/windows/perflib_.h | 7 ++ 5 files changed, 139 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 71e9a50a38..4c101356a1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,6 +83,7 @@ cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR Dragon cmake_dependent_option(ENABLE_THREADS "Enable multithreading" ON "Threads_FOUND" OFF) cmake_dependent_option(ENABLE_LIBZFS "Enable libzfs" ON "LINUX OR FreeBSD OR SunOS" OFF) cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD" OFF) +cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calcuate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" ON "WIN32" OFF) option(ENABLE_SYSTEM_YYJSON "Use system provided (instead of fastfetch embedded) yyjson library" OFF) option(ENABLE_ASAN "Build fastfetch with ASAN (address sanitizer)" OFF) @@ -1231,6 +1232,10 @@ add_library(libfastfetch OBJECT ${LIBFASTFETCH_SRC} ) +if(ENABLE_CPUUSAGE_PERFLIB) + target_compile_definitions(libfastfetch PUBLIC FF_ENABLE_CPUUSAGE_PERFLIB) +endif() + if(yyjson_FOUND) target_compile_definitions(libfastfetch PUBLIC FF_USE_SYSTEM_YYJSON) target_link_libraries(libfastfetch PUBLIC yyjson::yyjson) diff --git a/src/detection/cpuusage/cpuusage.c b/src/detection/cpuusage/cpuusage.c index d89c54919d..b9b944d323 100644 --- a/src/detection/cpuusage/cpuusage.c +++ b/src/detection/cpuusage/cpuusage.c @@ -5,12 +5,14 @@ #include static FFlist cpuTimes1; +static uint64_t startTime; void ffPrepareCPUUsage(void) { assert(cpuTimes1.elementSize == 0); ffListInit(&cpuTimes1, sizeof(FFCpuUsageInfo)); ffGetCpuUsageInfo(&cpuTimes1); + startTime = ffTimeGetNow(); } const char* ffGetCpuUsageResult(FFCPUUsageOptions* options, FFlist* result) @@ -23,6 +25,12 @@ const char* ffGetCpuUsageResult(FFCPUUsageOptions* options, FFlist* result) if(error) return error; ffTimeSleep(options->waitTime); } + else + { + uint64_t elapsedTime = ffTimeGetNow() - startTime; + if (elapsedTime < options->waitTime) + ffTimeSleep(options->waitTime - (uint32_t)elapsedTime); + } if(cpuTimes1.length == 0) return "No CPU cores found"; @@ -57,5 +65,6 @@ const char* ffGetCpuUsageResult(FFCPUUsageOptions* options, FFlist* result) cpuTime1->inUseAll = cpuTime2->inUseAll; cpuTime1->totalAll = cpuTime2->totalAll; } + startTime = ffTimeGetNow(); return NULL; } diff --git a/src/detection/cpuusage/cpuusage_windows.c b/src/detection/cpuusage/cpuusage_windows.c index 6acb70f685..5847676c11 100644 --- a/src/detection/cpuusage/cpuusage_windows.c +++ b/src/detection/cpuusage/cpuusage_windows.c @@ -3,6 +3,7 @@ #include "util/mallocHelper.h" +#if !FF_ENABLE_CPUUSAGE_PERFLIB #include #include @@ -35,3 +36,111 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) return NULL; } +#else +#include +#include "util/windows/perflib_.h" +#include + +static inline void ffPerfCloseQueryHandle(HANDLE* phQuery) +{ + if (*phQuery != NULL) + { + PerfCloseQueryHandle(*phQuery); + *phQuery = NULL; + } +} + +const char* ffGetCpuUsageInfo(FFlist* cpuTimes) +{ + struct FFPerfQuerySpec + { + PERF_COUNTER_IDENTIFIER Identifier; + WCHAR Name[16]; + } querySpec = { + .Identifier = { + // Processor Information GUID + // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{383487a6-3676-4870-a4e7-d45b30c35629}\{b4fc721a-0378-476f-89ba-a5a79f810b36} + .CounterSetGuid = { 0xb4fc721a, 0x0378, 0x476f, {0x89, 0xba, 0xa5, 0xa7, 0x9f, 0x81, 0x0b, 0x36} }, + .Size = sizeof(querySpec), + .CounterId = PERF_WILDCARD_COUNTER, // https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-perflib-functions-to-consume-counter-data + .InstanceId = PERF_WILDCARD_COUNTER, + }, + .Name = PERF_WILDCARD_INSTANCE, + }; + + __attribute__((__cleanup__(ffPerfCloseQueryHandle))) + HANDLE hQuery = NULL; + + if (PerfOpenQueryHandle(NULL, &hQuery) != ERROR_SUCCESS) + return "PerfOpenQueryHandle() failed"; + + if (PerfAddCounters(hQuery, &querySpec.Identifier, sizeof(querySpec)) != ERROR_SUCCESS) + return "PerfAddCounters() failed"; + + if (querySpec.Identifier.Status != ERROR_SUCCESS) + return "PerfAddCounters() reports invalid identifier"; + + DWORD dataSize = 0; + if (PerfQueryCounterData(hQuery, NULL, 0, &dataSize) != ERROR_NOT_ENOUGH_MEMORY) + return "PerfQueryCounterData(NULL) failed"; + + if (dataSize <= sizeof(PERF_DATA_HEADER) + sizeof(PERF_COUNTER_HEADER)) + return "instance doesn't exist"; + + FF_AUTO_FREE PERF_DATA_HEADER* const pDataHeader = (PERF_DATA_HEADER*)malloc(dataSize); + if (PerfQueryCounterData(hQuery, pDataHeader, dataSize, &dataSize) != ERROR_SUCCESS) + return "PerfQueryCounterData(pDataHeader) failed"; + + PERF_COUNTER_HEADER* pCounterHeader = (PERF_COUNTER_HEADER*)(pDataHeader + 1); + if (pCounterHeader->dwType != PERF_COUNTERSET) + return "Invalid counter type"; + + PERF_MULTI_COUNTERS* pMultiCounters = (PERF_MULTI_COUNTERS*)(pCounterHeader + 1); + if (pMultiCounters->dwCounters == 0) + return "No CPU counters found"; + + PERF_MULTI_INSTANCES* pMultiInstances = (PERF_MULTI_INSTANCES*)((BYTE*)pMultiCounters + pMultiCounters->dwSize); + if (pMultiInstances->dwInstances == 0) + return "No CPU instances found"; + + PERF_INSTANCE_HEADER* pInstanceHeader = (PERF_INSTANCE_HEADER*)(pMultiInstances + 1); + for (DWORD iInstance = 0; iInstance < pMultiInstances->dwInstances; ++iInstance) + { + const wchar_t* instanceName = (const wchar_t*)((BYTE*)pInstanceHeader + sizeof(*pInstanceHeader)); + + PERF_COUNTER_DATA* pCounterData = (PERF_COUNTER_DATA*)((BYTE*)pInstanceHeader + pInstanceHeader->Size); + + uint64_t processorUtility = UINT64_MAX, utilityBase = UINT64_MAX; + for (ULONG iCounter = 0; iCounter != pMultiCounters->dwCounters; iCounter++) + { + DWORD* pCounterIds = (DWORD*)(pMultiCounters + 1); + // https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-perflib-functions-to-consume-counter-data + switch (pCounterIds[iCounter]) { + case 26: // % Processor Utility (#26, Type=PERF_AVERAGE_BULK) + assert(pCounterData->dwDataSize == sizeof(uint64_t)); + processorUtility = *(uint64_t*)(pCounterData + 1); + break; + case 27: // % Utility Base (#27, Type=PERF_AVERAGE_BASE) + assert(pCounterData->dwDataSize == sizeof(uint32_t)); + utilityBase = *(uint32_t*)(pCounterData + 1) * 100LLU; + break; + } + + pCounterData = (PERF_COUNTER_DATA*)((BYTE*)pCounterData + pCounterData->dwSize); + } + + if (wcschr(instanceName, L'_') == NULL /* ignore `_Total` */ && processorUtility != UINT64_MAX && utilityBase != UINT64_MAX) + { + FFCpuUsageInfo* info = (FFCpuUsageInfo*) ffListAdd(cpuTimes); + *info = (FFCpuUsageInfo) { + .inUseAll = processorUtility, + .totalAll = utilityBase, + }; + } + + pInstanceHeader = (PERF_INSTANCE_HEADER*)pCounterData; + } + + return NULL; +} +#endif diff --git a/src/modules/cpuusage/cpuusage.c b/src/modules/cpuusage/cpuusage.c index 7149c667a7..639a498f76 100644 --- a/src/modules/cpuusage/cpuusage.c +++ b/src/modules/cpuusage/cpuusage.c @@ -27,6 +27,11 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) if (*percent == *percent) { sumValue += *percent; + + #if FF_ENABLE_CPUUSAGE_PERFLIB + // Windows may return values greater than 100%, cap them to 100% + if (*percent > 100) *percent = 100; + #endif if (*percent > maxValue) { maxValue = *percent; @@ -42,6 +47,10 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) ++index; } double avgValue = sumValue / (double) valueCount; + #if FF_ENABLE_CPUUSAGE_PERFLIB + // See above comment + if (avgValue > 100) avgValue = 100; + #endif FFPercentageTypeFlags percentType = options->percent.type == 0 ? instance.config.display.percentType : options->percent.type; diff --git a/src/util/windows/perflib_.h b/src/util/windows/perflib_.h index 5c6a3febcb..0d261b9636 100644 --- a/src/util/windows/perflib_.h +++ b/src/util/windows/perflib_.h @@ -63,6 +63,13 @@ typedef struct _PERF_COUNTER_HEADER { // If dwType == PERF_COUNTERSET: PERF_MULTI_COUNTERS block + PERF_MULTI_INSTANCES block. } PERF_COUNTER_HEADER, * PPERF_COUNTER_HEADER; +typedef struct _PERF_MULTI_INSTANCES { + ULONG dwTotalSize; // = sizeof(PERF_MULTI_INSTANCES) + sizeof(instance data blocks...) + ULONG dwInstances; // Number of instance data blocks. + // Followed by: + // Instance data blocks...; +} PERF_MULTI_INSTANCES, * PPERF_MULTI_INSTANCES; + typedef struct _PERF_MULTI_COUNTERS { ULONG dwSize; // sizeof(PERF_MULTI_COUNTERS) + sizeof(CounterIds) ULONG dwCounters; // Number of counter ids. From 0e61d1134d3fd3f676959f2c39d7058f7cfa8ec1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Jul 2025 21:05:37 +0800 Subject: [PATCH 33/45] CMake: fix typo --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c101356a1..97e46baddc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR Dragon cmake_dependent_option(ENABLE_THREADS "Enable multithreading" ON "Threads_FOUND" OFF) cmake_dependent_option(ENABLE_LIBZFS "Enable libzfs" ON "LINUX OR FreeBSD OR SunOS" OFF) cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD" OFF) -cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calcuate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" ON "WIN32" OFF) +cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calculate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" ON "WIN32" OFF) option(ENABLE_SYSTEM_YYJSON "Use system provided (instead of fastfetch embedded) yyjson library" OFF) option(ENABLE_ASAN "Build fastfetch with ASAN (address sanitizer)" OFF) From 18a6929662a729d201fb4e2b8c66c6e1c6847081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Tue, 1 Jul 2025 22:08:08 +0800 Subject: [PATCH 34/45] CPUUsage (Windows): disable `ENABLE_CPUUSAGE_PERFLIB` by default Because Windows 7 doesn't support it --- CMakeLists.txt | 2 +- src/common/init.c | 3 +++ src/detection/cpuusage/cpuusage_windows.c | 5 ++++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 97e46baddc..47acb5dea2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,7 @@ cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR Dragon cmake_dependent_option(ENABLE_THREADS "Enable multithreading" ON "Threads_FOUND" OFF) cmake_dependent_option(ENABLE_LIBZFS "Enable libzfs" ON "LINUX OR FreeBSD OR SunOS" OFF) cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD" OFF) -cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calculate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" ON "WIN32" OFF) +cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calculate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" OFF "WIN32" OFF) option(ENABLE_SYSTEM_YYJSON "Use system provided (instead of fastfetch embedded) yyjson library" OFF) option(ENABLE_ASAN "Build fastfetch with ASAN (address sanitizer)" OFF) diff --git a/src/common/init.c b/src/common/init.c index 8b6032c03e..542a546f4a 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -265,6 +265,9 @@ void ffListFeatures(void) #if FF_HAVE_EMBEDDED_PCIIDS "Embedded pciids\n" #endif + #if FF_ENABLE_CPUUSAGE_PERFLIB + "CPUUsage perflib\n" + #endif "" , stdout); } diff --git a/src/detection/cpuusage/cpuusage_windows.c b/src/detection/cpuusage/cpuusage_windows.c index 5847676c11..578a87f57c 100644 --- a/src/detection/cpuusage/cpuusage_windows.c +++ b/src/detection/cpuusage/cpuusage_windows.c @@ -129,8 +129,11 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) pCounterData = (PERF_COUNTER_DATA*)((BYTE*)pCounterData + pCounterData->dwSize); } - if (wcschr(instanceName, L'_') == NULL /* ignore `_Total` */ && processorUtility != UINT64_MAX && utilityBase != UINT64_MAX) + if (wcschr(instanceName, L'_') == NULL /* ignore `_Total` */) { + if (processorUtility == UINT64_MAX) + return "Counter \"% Processor Utility\" are not supported"; + FFCpuUsageInfo* info = (FFCpuUsageInfo*) ffListAdd(cpuTimes); *info = (FFCpuUsageInfo) { .inUseAll = processorUtility, From 2e5769def236614ed3201b4bcefd74ce89346a2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 2 Jul 2025 09:40:48 +0800 Subject: [PATCH 35/45] OS (Linux): add support of Xubuntu Fix #1825 --- src/detection/os/os_linux.c | 9 +++++++++ src/logo/ascii/xubuntu.txt | 19 +++++++++++++++++++ src/logo/builtin.c | 9 +++++++++ 3 files changed, 37 insertions(+) create mode 100644 src/logo/ascii/xubuntu.txt diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index b87a9ce7bc..a876ef6792 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -170,6 +170,15 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) return; } + if(ffStrContains(xdgConfigDirs, "xubuntu")) + { + ffStrbufSetStatic(&result->name, "Xubuntu"); + ffStrbufSetF(&result->prettyName, "Xubuntu %s", result->version.chars); + ffStrbufSetStatic(&result->id, "xubuntu"); + ffStrbufSetStatic(&result->idLike, "ubuntu"); + return; + } + if(ffStrContains(xdgConfigDirs, "lliurex")) { ffStrbufSetStatic(&result->name, "LliureX"); diff --git a/src/logo/ascii/xubuntu.txt b/src/logo/ascii/xubuntu.txt new file mode 100644 index 0000000000..5b52ed44ce --- /dev/null +++ b/src/logo/ascii/xubuntu.txt @@ -0,0 +1,19 @@ + __ygg@@@@@@@@@ggy__ + _yg@@@@@@@@@@@@@@@@@@@@@gy_ + _a@@@@@@@@@@@@@@@@@@@@@@@@@@@@@y_ + _a@@@@@@@@@@@@@@@@@@@@@@@$2#$1@@@@@@@@@g_ + a@@@@@@@@@@@@@$2###$1@@@@@@@@$2##$1@@@@$2##$1@@@@@k + g@@@@@@@$2###$1@@@$2#####$1@@@@@@@$2##$1@@$2###$1@@@@@@@k + a@@@@@@@@$2#####$1@$2#####$1@@@@@@$2##$1@@$2###$1@@@@@@@@@k +j@@@@@@@@@$2############$1@@@@@$2##$1@$2###$1@@@@@@@@@@@k +g@@@@@@@@@$2#####################$1@@@@@@@@@@@@@@ +@@@@@@@@@$2##########################$1@@@@@@@@@@ +0@@@@@@@@$2###########################$1@@@@@@@@@ +~@@@@@@@$2############################$1@@@@@@@@F + 9@@@@@@$2##########################$1@@@@@@@@@P + 4@@@@@@$2######################$1@@@@@@@@@@@P + ~@@@@@@$2################$1@@@@@@@@@@@@@@@F + `4@@@@@@$2#######$1@@@@@@@@@@@@@@@@@@@@P` + `~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F` + ~~4@@@@@@@@@@@@@@@@@@@@@P~~ + `~~=R@@@@@@@@@P=~~~ \ No newline at end of file diff --git a/src/logo/builtin.c b/src/logo/builtin.c index 50812b9270..bbfcb3d9d5 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -5380,6 +5380,15 @@ static const FFlogo X[] = { FF_COLOR_FG_CYAN, }, }, + // Xubuntu + { + .names = {"Xubuntu"}, + .lines = FASTFETCH_DATATEXT_LOGO_XUBUNTU, + .colors = { + FF_COLOR_FG_256 "25", + FF_COLOR_FG_DEFAULT, + }, + }, // LAST {}, }; From 98738b6920f4920e58f6e1c649b5f6e934e5aead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Wed, 2 Jul 2025 19:32:18 +0800 Subject: [PATCH 36/45] CPUUsage (Windows): detect perflib support dynamically based on OS version --- src/common/init.c | 3 - src/detection/cpuusage/cpuusage_windows.c | 107 +++++++++++++--------- src/modules/cpuusage/cpuusage.c | 5 +- 3 files changed, 69 insertions(+), 46 deletions(-) diff --git a/src/common/init.c b/src/common/init.c index 542a546f4a..8b6032c03e 100644 --- a/src/common/init.c +++ b/src/common/init.c @@ -265,9 +265,6 @@ void ffListFeatures(void) #if FF_HAVE_EMBEDDED_PCIIDS "Embedded pciids\n" #endif - #if FF_ENABLE_CPUUSAGE_PERFLIB - "CPUUsage perflib\n" - #endif "" , stdout); } diff --git a/src/detection/cpuusage/cpuusage_windows.c b/src/detection/cpuusage/cpuusage_windows.c index 578a87f57c..f88e0928be 100644 --- a/src/detection/cpuusage/cpuusage_windows.c +++ b/src/detection/cpuusage/cpuusage_windows.c @@ -3,11 +3,13 @@ #include "util/mallocHelper.h" -#if !FF_ENABLE_CPUUSAGE_PERFLIB #include #include +#include +#include +#include "util/windows/perflib_.h" -const char* ffGetCpuUsageInfo(FFlist* cpuTimes) +static const char* getInfoByNqsi(FFlist* cpuTimes) { ULONG size = 0; if(NtQuerySystemInformation(SystemProcessorPerformanceInformation, NULL, 0, &size) != STATUS_INFO_LENGTH_MISMATCH) @@ -36,49 +38,53 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) return NULL; } -#else -#include -#include "util/windows/perflib_.h" -#include -static inline void ffPerfCloseQueryHandle(HANDLE* phQuery) +static const char* getInfoByPerflib(FFlist* cpuTimes) { - if (*phQuery != NULL) + static HANDLE hQuery = NULL; + + if (hQuery == NULL) { - PerfCloseQueryHandle(*phQuery); - *phQuery = NULL; + struct FFPerfQuerySpec + { + PERF_COUNTER_IDENTIFIER Identifier; + WCHAR Name[16]; + } querySpec = { + .Identifier = { + // Processor Information GUID + // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{383487a6-3676-4870-a4e7-d45b30c35629}\{b4fc721a-0378-476f-89ba-a5a79f810b36} + .CounterSetGuid = { 0xb4fc721a, 0x0378, 0x476f, {0x89, 0xba, 0xa5, 0xa7, 0x9f, 0x81, 0x0b, 0x36} }, + .Size = sizeof(querySpec), + .CounterId = PERF_WILDCARD_COUNTER, // https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-perflib-functions-to-consume-counter-data + .InstanceId = PERF_WILDCARD_COUNTER, + }, + .Name = PERF_WILDCARD_INSTANCE, + }; + + if (PerfOpenQueryHandle(NULL, &hQuery) != ERROR_SUCCESS) + { + PerfCloseQueryHandle(hQuery); + hQuery = INVALID_HANDLE_VALUE; + return "PerfOpenQueryHandle() failed"; + } + + if (PerfAddCounters(hQuery, &querySpec.Identifier, sizeof(querySpec)) != ERROR_SUCCESS) + { + PerfCloseQueryHandle(hQuery); + hQuery = INVALID_HANDLE_VALUE; + return "PerfAddCounters() failed"; + } + + if (querySpec.Identifier.Status != ERROR_SUCCESS) + { + PerfCloseQueryHandle(hQuery); + hQuery = INVALID_HANDLE_VALUE; + return "PerfAddCounters() reports invalid identifier"; + } } -} -const char* ffGetCpuUsageInfo(FFlist* cpuTimes) -{ - struct FFPerfQuerySpec - { - PERF_COUNTER_IDENTIFIER Identifier; - WCHAR Name[16]; - } querySpec = { - .Identifier = { - // Processor Information GUID - // HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\_V2Providers\{383487a6-3676-4870-a4e7-d45b30c35629}\{b4fc721a-0378-476f-89ba-a5a79f810b36} - .CounterSetGuid = { 0xb4fc721a, 0x0378, 0x476f, {0x89, 0xba, 0xa5, 0xa7, 0x9f, 0x81, 0x0b, 0x36} }, - .Size = sizeof(querySpec), - .CounterId = PERF_WILDCARD_COUNTER, // https://learn.microsoft.com/en-us/windows/win32/perfctrs/using-the-perflib-functions-to-consume-counter-data - .InstanceId = PERF_WILDCARD_COUNTER, - }, - .Name = PERF_WILDCARD_INSTANCE, - }; - - __attribute__((__cleanup__(ffPerfCloseQueryHandle))) - HANDLE hQuery = NULL; - - if (PerfOpenQueryHandle(NULL, &hQuery) != ERROR_SUCCESS) - return "PerfOpenQueryHandle() failed"; - - if (PerfAddCounters(hQuery, &querySpec.Identifier, sizeof(querySpec)) != ERROR_SUCCESS) - return "PerfAddCounters() failed"; - - if (querySpec.Identifier.Status != ERROR_SUCCESS) - return "PerfAddCounters() reports invalid identifier"; + if (hQuery == INVALID_HANDLE_VALUE) + return "Init hQuery failed"; DWORD dataSize = 0; if (PerfQueryCounterData(hQuery, NULL, 0, &dataSize) != ERROR_NOT_ENOUGH_MEMORY) @@ -146,4 +152,23 @@ const char* ffGetCpuUsageInfo(FFlist* cpuTimes) return NULL; } -#endif + +const char* ffGetCpuUsageInfo(FFlist* cpuTimes) +{ + #if __aarch64__ + static uint8_t winver = 10; // Assume Windows 10 or later for WoA + #else + static uint8_t winver = 0; + if (winver == 0) + winver = (uint8_t) ffStrbufToUInt(&instance.state.platform.sysinfo.release, 1); + #endif + + if (winver >= 10) + { + if (getInfoByPerflib(cpuTimes) == NULL) return NULL; + ffListClear(cpuTimes); + winver = 1; // Fall back to NQSI + } + + return getInfoByNqsi(cpuTimes); +} diff --git a/src/modules/cpuusage/cpuusage.c b/src/modules/cpuusage/cpuusage.c index 639a498f76..6124311c7f 100644 --- a/src/modules/cpuusage/cpuusage.c +++ b/src/modules/cpuusage/cpuusage.c @@ -28,10 +28,11 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) { sumValue += *percent; - #if FF_ENABLE_CPUUSAGE_PERFLIB + #if WIN32 // Windows may return values greater than 100%, cap them to 100% if (*percent > 100) *percent = 100; #endif + if (*percent > maxValue) { maxValue = *percent; @@ -47,7 +48,7 @@ void ffPrintCPUUsage(FFCPUUsageOptions* options) ++index; } double avgValue = sumValue / (double) valueCount; - #if FF_ENABLE_CPUUSAGE_PERFLIB + #if WIN32 // See above comment if (avgValue > 100) avgValue = 100; #endif From 74ae84e719bf93b22e705e349adedffe9074eeb6 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 3 Jul 2025 09:01:24 +0800 Subject: [PATCH 37/45] Revert "Logo (Builtin): `:%s/FG_WHITE/FG_DEFAULT/g`" This reverts commit bdbc885811b0763c6dec8430ad850cabb15d8a52. --- src/logo/builtin.c | 802 ++++++++++++++++++++++----------------------- 1 file changed, 401 insertions(+), 401 deletions(-) diff --git a/src/logo/builtin.c b/src/logo/builtin.c index bbfcb3d9d5..ac4a95b139 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -6,7 +6,7 @@ const FFlogo ffLogoUnknown = { .names = {"unknown"}, .lines = FASTFETCH_DATATEXT_LOGO_UNKNOWN, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = "", .colorTitle = "", @@ -29,7 +29,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ADELIE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, }, }, @@ -59,10 +59,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AIX, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // AlmaLinux { @@ -95,7 +95,7 @@ static const FFlogo A[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -107,7 +107,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ALPINE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -119,7 +119,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ALPINE2_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -130,7 +130,7 @@ static const FFlogo A[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT | FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ALPINE3_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -152,7 +152,7 @@ static const FFlogo A[] = { .colors = { FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLACK, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_YELLOW, .colorTitle = FF_COLOR_FG_YELLOW, @@ -163,7 +163,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AMAZON, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, } }, // AmazonLinux @@ -171,7 +171,7 @@ static const FFlogo A[] = { .names = {"Amazon Linux", "amzn"}, .lines = FASTFETCH_DATATEXT_LOGO_AMAZON_LINUX, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "178", } }, @@ -180,10 +180,10 @@ static const FFlogo A[] = { .names = {"AmogOS"}, .lines = FASTFETCH_DATATEXT_LOGO_AMOGOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_CYAN, }, // Anarchy @@ -191,10 +191,10 @@ static const FFlogo A[] = { .names = {"Anarchy"}, .lines = FASTFETCH_DATATEXT_LOGO_ANARCHY, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_BLUE, }, // Android @@ -203,7 +203,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ANDROID, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -228,7 +228,7 @@ static const FFlogo A[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Antergos { @@ -249,21 +249,21 @@ static const FFlogo A[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // AnushOS { .names = {"AnushOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ANUSHOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // AoscOsRetro { @@ -271,10 +271,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOSRETRO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // AoscOsRetro_small { @@ -283,10 +283,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOSRETRO_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // AoscOS { @@ -305,10 +305,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOS_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Aperture { @@ -325,7 +325,7 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Apple { @@ -361,10 +361,10 @@ static const FFlogo A[] = { .names = {"Apricity"}, .lines = FASTFETCH_DATATEXT_LOGO_APRICITY, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // ArchBox { @@ -374,7 +374,7 @@ static const FFlogo A[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Archcraft { @@ -443,7 +443,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCH_OLD, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorTitle = FF_COLOR_FG_DEFAULT, .colorKeys = FF_COLOR_FG_BLUE, @@ -477,17 +477,17 @@ static const FFlogo A[] = { .colors = { FF_COLOR_FG_256 "237", FF_COLOR_FG_256 "130", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_256 "130", - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Armbian { .names = {"Armbian"}, .lines = FASTFETCH_DATATEXT_LOGO_ARMBIAN, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, }, @@ -538,7 +538,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -550,7 +550,7 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARCO_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -561,10 +561,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ARSELINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Arya { @@ -586,7 +586,7 @@ static const FFlogo A[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, FF_COLOR_FG_BLUE, }, @@ -603,7 +603,7 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLACK, FF_COLOR_FG_LIGHT_CYAN, }, @@ -638,10 +638,10 @@ static const FFlogo A[] = { .names = {"astOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ASTOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // Astra { @@ -649,10 +649,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ASTRA_LINUX, .colors = { FF_COLOR_FG_LIGHT_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Ataraxia { @@ -682,11 +682,11 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_ATHENAOS_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Aurora { @@ -696,7 +696,7 @@ static const FFlogo A[] = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Azos @@ -755,7 +755,7 @@ static const FFlogo B[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_GREEN, }, // BlackArch @@ -778,7 +778,7 @@ static const FFlogo B[] = { FF_COLOR_FG_BLACK, }, .colorKeys = FF_COLOR_FG_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // BlackPanther { @@ -800,7 +800,7 @@ static const FFlogo B[] = { FF_COLOR_FG_MAGENTA, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // BlankOn { @@ -808,20 +808,20 @@ static const FFlogo B[] = { .lines = FASTFETCH_DATATEXT_LOGO_BLANKON, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // BlueLight { .names = {"BlueLight"}, .lines = FASTFETCH_DATATEXT_LOGO_BLUELIGHT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_BLUE, }, // Bodhi @@ -829,7 +829,7 @@ static const FFlogo B[] = { .names = {"Bodhi"}, .lines = FASTFETCH_DATATEXT_LOGO_BODHI, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_GREEN, }, @@ -864,23 +864,23 @@ static const FFlogo B[] = { .lines = FASTFETCH_DATATEXT_LOGO_BSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, FF_COLOR_FG_YELLOW, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // BunsenLabs { .names = {"BunsenLabs"}, .lines = FASTFETCH_DATATEXT_LOGO_BUNSENLABS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // LAST {}, @@ -915,11 +915,11 @@ static const FFlogo C[] = { .names = {"Calculate"}, .lines = FASTFETCH_DATATEXT_LOGO_CALCULATE, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // CalinixOS { @@ -978,10 +978,10 @@ static const FFlogo C[] = { .names = {"Center"}, .lines = FASTFETCH_DATATEXT_LOGO_CENTER, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // CentOS { @@ -992,7 +992,7 @@ static const FFlogo C[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_YELLOW, @@ -1023,7 +1023,7 @@ static const FFlogo C[] = { FF_COLOR_FG_256 "72" }, .colorKeys = FF_COLOR_FG_256 "108", - .colorTitle = FF_COLOR_MODE_BOLD FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_MODE_BOLD FF_COLOR_FG_WHITE, }, // Chakra { @@ -1041,10 +1041,10 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CHALETOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Chapeau { @@ -1052,10 +1052,10 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CHAPEAU, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Chimera { @@ -1075,10 +1075,10 @@ static const FFlogo C[] = { .names = {"ChonkySealOS"}, .lines = FASTFETCH_DATATEXT_LOGO_CHONKYSEALOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // Chrom { @@ -1089,7 +1089,7 @@ static const FFlogo C[] = { FF_COLOR_FG_RED, FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_RED, @@ -1099,10 +1099,10 @@ static const FFlogo C[] = { .names = {"Cleanjaro"}, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // CleanjaroSmall { @@ -1110,10 +1110,10 @@ static const FFlogo C[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // ClearLinux { @@ -1166,7 +1166,7 @@ static const FFlogo C[] = { .names = {"Codex Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_CODEX, .colors = { - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, }, // Condres @@ -1187,11 +1187,11 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_COREOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Common Torizon { @@ -1208,7 +1208,7 @@ static const FFlogo C[] = { .names = {"Cosmic"}, .lines = FASTFETCH_DATATEXT_LOGO_COSMIC, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_YELLOW, FF_COLOR_FG_LIGHT_RED, @@ -1224,7 +1224,7 @@ static const FFlogo C[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -1237,7 +1237,7 @@ static const FFlogo C[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_BLUE, @@ -1280,7 +1280,7 @@ static const FFlogo C[] = { .lines = FASTFETCH_DATATEXT_LOGO_CUTEFISHOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, }, @@ -1331,7 +1331,7 @@ static const FFlogo D[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // DarkOS { @@ -1353,7 +1353,7 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DEBIAN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -1385,10 +1385,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DESAOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Devuan { @@ -1428,10 +1428,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRACOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // DragonFly { @@ -1439,10 +1439,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // DragonFlySmall { @@ -1451,10 +1451,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_SMALL, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // DragonFlyOld { @@ -1463,11 +1463,11 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // DraugerOS { @@ -1475,10 +1475,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAUGER, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Droidian { @@ -1511,10 +1511,10 @@ static const FFlogo E[] = { .names = {"Elementary"}, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // ElementarySmall { @@ -1522,21 +1522,21 @@ static const FFlogo E[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Elive { .names = {"Elive"}, .lines = FASTFETCH_DATATEXT_LOGO_ELIVE, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_CYAN, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_CYAN, }, // EncryptOS @@ -1578,20 +1578,20 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_ENDLESS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Enso { .names = {"Enso"}, .lines = FASTFETCH_DATATEXT_LOGO_ENSO, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // EshanizedOS { @@ -1599,7 +1599,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_ESHANIZEDOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // EuroLinux @@ -1608,10 +1608,10 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EUROLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // evolinx { @@ -1629,7 +1629,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // EvolutionOSSmall @@ -1639,7 +1639,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // EvolutionOS_old @@ -1649,7 +1649,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EVOLUTIONOS_OLD, .colors = { FF_COLOR_FG_LIGHT_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // eweOS @@ -1657,7 +1657,7 @@ static const FFlogo E[] = { .names = {"eweOS"}, .lines = FASTFETCH_DATATEXT_LOGO_EWEOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_YELLOW, FF_COLOR_FG_LIGHT_RED, FF_COLOR_FG_LIGHT_BLACK, @@ -1670,7 +1670,7 @@ static const FFlogo E[] = { .lines = FASTFETCH_DATATEXT_LOGO_EXHERBO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -1713,7 +1713,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1727,7 +1727,7 @@ static const FFlogo F[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, FF_COLOR_FG_BLUE, }, @@ -1762,7 +1762,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_OLD, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1774,7 +1774,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_SILVERBLUE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -1787,7 +1787,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_KINOITE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1799,7 +1799,7 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_SERICEA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -1811,11 +1811,11 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FEDORA_COREOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // FemboyOS { @@ -1825,7 +1825,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Feren { @@ -1835,7 +1835,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Filotimo { @@ -1845,7 +1845,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Finnix { @@ -1853,10 +1853,10 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FINNIX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Floflis { @@ -1866,14 +1866,14 @@ static const FFlogo F[] = { FF_COLOR_FG_LIGHT_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // FreeBSD { .names = {"Freebsd"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEBSD, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, @@ -1895,10 +1895,10 @@ static const FFlogo F[] = { .names = {"FreeMiNT"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEMINT, .colors = { - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // Frugalware { @@ -1906,10 +1906,10 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FRUGALWARE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Funtoo { @@ -1917,17 +1917,17 @@ static const FFlogo F[] = { .lines = FASTFETCH_DATATEXT_LOGO_FUNTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Furreto { .names = {"Furreto"}, .lines = FASTFETCH_DATATEXT_LOGO_FURRETO, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_MAGENTA, }, .colorKeys = FF_COLOR_FG_CYAN, @@ -1944,10 +1944,10 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GALLIUMOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Garuda { @@ -1986,7 +1986,7 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GENTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_MAGENTA, @@ -1998,7 +1998,7 @@ static const FFlogo G[] = { .lines = FASTFETCH_DATATEXT_LOGO_GENTOO_SMALL, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, .colorTitle = FF_COLOR_FG_MAGENTA, @@ -2058,9 +2058,9 @@ static const FFlogo G[] = { .names = {"GNU"}, .lines = FASTFETCH_DATATEXT_LOGO_GNU, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_RED, }, // GoboLinux @@ -2081,16 +2081,16 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // GrapheneOS { .names = {"GrapheneOS"}, .lines = FASTFETCH_DATATEXT_LOGO_GRAPHENEOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_BLUE, }, // Grombyang @@ -2113,7 +2113,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // GuixSmall { @@ -2124,7 +2124,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // GXDE { @@ -2180,11 +2180,11 @@ static const FFlogo H[] = { .lines = FASTFETCH_DATATEXT_LOGO_HAMONIKR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "99" }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // HarDClanZ { @@ -2192,18 +2192,18 @@ static const FFlogo H[] = { .lines = FASTFETCH_DATATEXT_LOGO_HARDCLANZ, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // HardenedBSD { .names = {"HardenedBSD"}, .lines = FASTFETCH_DATATEXT_LOGO_FREEBSD, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, @@ -2214,7 +2214,7 @@ static const FFlogo H[] = { .names = {"HarmonyOS"}, .lines = FASTFETCH_DATATEXT_LOGO_HARMONYOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -2254,9 +2254,9 @@ static const FFlogo H[] = { .names = {"Huayra"}, .lines = FASTFETCH_DATATEXT_LOGO_HUAYRA, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_BLUE, }, // Hybrid @@ -2299,7 +2299,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // HyperbolaSmall { @@ -2310,7 +2310,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // HydraPWK { @@ -2334,7 +2334,7 @@ static const FFlogo I[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // InstantOS { @@ -2353,7 +2353,7 @@ static const FFlogo I[] = { .lines = FASTFETCH_DATATEXT_LOGO_INTERIX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, @@ -2367,7 +2367,7 @@ static const FFlogo I[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Ironclad { @@ -2376,7 +2376,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_BLACK, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Itc @@ -2386,7 +2386,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_RED, }, // LAST @@ -2416,10 +2416,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KAISEN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Kali { @@ -2460,10 +2460,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KAOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // KernelOS { @@ -2480,7 +2480,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KDELINUX, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE } }, // KDE Neon @@ -2498,11 +2498,11 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KIBOJOE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // KISSLinux { @@ -2510,7 +2510,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KISS, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_MAGENTA, @@ -2522,10 +2522,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KOGAION, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Korora { @@ -2533,10 +2533,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KORORA, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // KrassOS { @@ -2544,10 +2544,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KRASSOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // KSLinux { @@ -2555,10 +2555,10 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KSLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Kubuntu { @@ -2566,7 +2566,7 @@ static const FFlogo K[] = { .lines = FASTFETCH_DATATEXT_LOGO_KUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2578,7 +2578,7 @@ static const FFlogo K[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLACK }, .colorKeys = FF_COLOR_FG_BLUE, @@ -2596,7 +2596,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_256 "14", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // LangitKetujuh @@ -2605,7 +2605,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LANGITKETUJUH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2616,10 +2616,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LAXEROS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LEDE { @@ -2627,10 +2627,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LEDE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LibreELEC { @@ -2639,7 +2639,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_GREEN, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, FF_COLOR_FG_MAGENTA, }, @@ -2654,7 +2654,7 @@ static const FFlogo L[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Lingmo OS { @@ -2662,7 +2662,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINGMO, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -2683,19 +2683,19 @@ static const FFlogo L[] = { .names = {"Linux", "linux-generic"}, .lines = FASTFETCH_DATATEXT_LOGO_LINUX, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // LinuxFromScratch { .names = {"LinuxFromScratch", "lfs"}, .lines = FASTFETCH_DATATEXT_LOGO_LFS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, }, @@ -2709,11 +2709,11 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUX_SMALL, .colors = { FF_COLOR_FG_BLACK, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // LinuxLight { @@ -2721,10 +2721,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXLITE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LinuxLightSmall { @@ -2733,10 +2733,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXLITE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LinuxMint { @@ -2744,7 +2744,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2756,7 +2756,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2768,7 +2768,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUXMINT_OLD, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -2781,7 +2781,7 @@ static const FFlogo L[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LliureX { @@ -2790,7 +2790,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_BLUE, }, // LMDE @@ -2799,10 +2799,10 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LMDE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Loc-OS { @@ -2811,7 +2811,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLACK, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_YELLOW, .colorTitle = FF_COLOR_FG_RED, @@ -2822,7 +2822,7 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Lunar @@ -2831,11 +2831,11 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LUNAR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // LAST {}, @@ -2939,10 +2939,10 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MAGEIA, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // MageiaSmall { @@ -2951,10 +2951,10 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MAGEIA_SMALL, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Magix { @@ -3017,10 +3017,10 @@ static const FFlogo M[] = { .names = {"MassOS", "mass"}, .lines = FASTFETCH_DATATEXT_LOGO_MASSOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // MatuusOS { @@ -3041,7 +3041,7 @@ static const FFlogo M[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Mauna { @@ -3073,17 +3073,17 @@ static const FFlogo M[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // MidnightBSD { .names = {"MidnightBSD"}, .lines = FASTFETCH_DATATEXT_LOGO_MIDNIGHTBSD, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // MidOS { @@ -3093,7 +3093,7 @@ static const FFlogo M[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // MidOSOld { @@ -3102,10 +3102,10 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_LIGHT_BLACK, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Minix { @@ -3113,7 +3113,7 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MINIX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, @@ -3127,7 +3127,7 @@ static const FFlogo M[] = { FF_COLOR_FG_256 "29", }, .colorKeys = FF_COLOR_FG_256 "29", - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // MOS { @@ -3144,7 +3144,7 @@ static const FFlogo M[] = { .lines = FASTFETCH_DATATEXT_LOGO_MSYS2, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_MAGENTA, @@ -3155,7 +3155,7 @@ static const FFlogo M[] = { .names = {"MX", "MX Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_MX, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3166,7 +3166,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3177,7 +3177,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX2, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3193,7 +3193,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NAMIB, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Nekos @@ -3202,7 +3202,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NEKOS, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, }, @@ -3211,8 +3211,8 @@ static const FFlogo N[] = { .names = {"Neptune"}, .lines = FASTFETCH_DATATEXT_LOGO_NEPTUNE, .colors = { - FF_COLOR_FG_DEFAULT, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, + FF_COLOR_FG_WHITE, }, }, // NetRunner @@ -3221,7 +3221,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NETRUNNER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // NexaLinux @@ -3239,7 +3239,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NITRUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // NixOS @@ -3287,10 +3287,10 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NETBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // NetBSD2 { @@ -3299,10 +3299,10 @@ static const FFlogo N[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // NetBSD Small { @@ -3311,20 +3311,20 @@ static const FFlogo N[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Nobara { .names = {"nobara", "nobara-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_NOBARA, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // NomadBSD { @@ -3334,7 +3334,7 @@ static const FFlogo N[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // NurOS { @@ -3342,7 +3342,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NUROS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Nurunner @@ -3351,7 +3351,7 @@ static const FFlogo N[] = { .lines = FASTFETCH_DATATEXT_LOGO_NURUNNER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // NuTyX @@ -3374,7 +3374,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OBARUN, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OBRevenge @@ -3383,7 +3383,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OBREVENGE, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OmniOS @@ -3391,7 +3391,7 @@ static const FFlogo O[] = { .names = {"OmniOS"}, .lines = FASTFETCH_DATATEXT_LOGO_OMNIOS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, FF_COLOR_FG_LIGHT_BLACK, } @@ -3408,10 +3408,10 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENKYLIN, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // OpenBSD { @@ -3419,13 +3419,13 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENBSD, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // OpenBSDSmall { @@ -3434,10 +3434,10 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENBSD_SMALL, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // OpenEuler { @@ -3445,7 +3445,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENEULER, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OpenIndiana @@ -3462,7 +3462,7 @@ static const FFlogo O[] = { .names = {"OpenMamba"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENMAMBA, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_GREEN, }, }, @@ -3472,7 +3472,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSTAGE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OpenSuse @@ -3481,7 +3481,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3510,7 +3510,7 @@ static const FFlogo O[] = { .names = {"opensuse-leap"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3521,7 +3521,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3531,7 +3531,7 @@ static const FFlogo O[] = { .names = {"opensuse-tumbleweed"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3542,7 +3542,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_SMALL, .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3553,7 +3553,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3563,7 +3563,7 @@ static const FFlogo O[] = { .names = {"opensuse-slowroll", "opensuse-tumbleweed-slowroll"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_SLOWROLL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3586,14 +3586,14 @@ static const FFlogo O[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // OPNsense { .names = {"OPNsense"}, .lines = FASTFETCH_DATATEXT_LOGO_OPNSENSE, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "202", }, }, @@ -3605,18 +3605,18 @@ static const FFlogo O[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Orchid { .names = {"orchid"}, .lines = FASTFETCH_DATATEXT_LOGO_ORCHID, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_MAGENTA, }, // OrchidSmall @@ -3625,11 +3625,11 @@ static const FFlogo O[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ORCHID_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Oreon @@ -3647,7 +3647,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OS_ELBRUS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OSMC @@ -3656,7 +3656,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OSMC, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // OSX @@ -3699,7 +3699,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PACBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Panwah @@ -3707,7 +3707,7 @@ static const FFlogo P[] = { .names = {"Panwah"}, .lines = FASTFETCH_DATATEXT_LOGO_PANWAH, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, FF_COLOR_FG_BLACK, }, @@ -3739,7 +3739,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PARCH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, }, @@ -3758,7 +3758,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PARROT, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Parsix @@ -3768,7 +3768,7 @@ static const FFlogo P[] = { .colors = { FF_COLOR_FG_YELLOW, FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLACK, }, }, @@ -3778,7 +3778,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PCBSD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PCLinuxOS @@ -3787,7 +3787,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PCLINUXOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PearOS @@ -3818,7 +3818,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PENTOO, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Peppermint @@ -3827,7 +3827,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PEPPERMINT, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Peropesis @@ -3835,7 +3835,7 @@ static const FFlogo P[] = { .names = {"Peropesis", "Peropesis Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_PEROPESIS, .colors = { - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, }, // PhyOS @@ -3844,7 +3844,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PHYOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PikaOS @@ -3861,7 +3861,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PISI, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PNMLinux @@ -3871,7 +3871,7 @@ static const FFlogo P[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "202" }, }, @@ -3881,7 +3881,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POP, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_CYAN, .colorTitle = FF_COLOR_FG_CYAN, @@ -3903,7 +3903,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PORTEUS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PostMarketOS @@ -3912,7 +3912,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POSTMARKETOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PostMarketOSSmall @@ -3922,7 +3922,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_POSTMARKETOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Proxmox @@ -3930,10 +3930,10 @@ static const FFlogo P[] = { .names = {"Proxmox", "pve"}, .lines = FASTFETCH_DATATEXT_LOGO_PROXMOX, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "202" }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_256 "202", }, // PuffOS @@ -3942,7 +3942,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUFFOS, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Puppy @@ -3951,7 +3951,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUPPY, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PureOS @@ -3960,7 +3960,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUREOS, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // PureOSSmall @@ -3970,7 +3970,7 @@ static const FFlogo P[] = { .lines = FASTFETCH_DATATEXT_LOGO_PUREOS_SMALL, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // LAST @@ -4023,7 +4023,7 @@ static const FFlogo Q[] = { .lines = FASTFETCH_DATATEXT_LOGO_QUIBIAN, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Quirinux @@ -4031,7 +4031,7 @@ static const FFlogo Q[] = { .names = {"Quirinux"}, .lines = FASTFETCH_DATATEXT_LOGO_QUIRINUX, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_MAGENTA, }, }, @@ -4078,7 +4078,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RAVYNOS, .colors = { FF_COLOR_FG_256 "15", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // RebornOS @@ -4110,7 +4110,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDCORE, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // RedHatEnterpriseLinux @@ -4141,7 +4141,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RHEL_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // RedOS @@ -4150,7 +4150,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorTitle = FF_COLOR_FG_RED, .colorKeys = FF_COLOR_FG_RED, @@ -4162,7 +4162,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REDOS_SMALL, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorTitle = FF_COLOR_FG_RED, .colorKeys = FF_COLOR_FG_RED, @@ -4182,18 +4182,18 @@ static const FFlogo R[] = { .names = {"Refracted Devuan", "refracted-devuan"}, .lines = FASTFETCH_DATATEXT_LOGO_REFRACTED_DEVUAN, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Regata { .names = {"Regata"}, .lines = FASTFETCH_DATATEXT_LOGO_REGATA, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, @@ -4207,7 +4207,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_REGOLITH, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // RhaymOS @@ -4216,7 +4216,7 @@ static const FFlogo R[] = { .lines = FASTFETCH_DATATEXT_LOGO_RHAYMOS, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // RockyLinux @@ -4275,7 +4275,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SABAYON, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Sabotage @@ -4283,10 +4283,10 @@ static const FFlogo S[] = { .names = {"Sabotage"}, .lines = FASTFETCH_DATATEXT_LOGO_SABOTAGE, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Sailfish { @@ -4305,7 +4305,7 @@ static const FFlogo S[] = { FF_COLOR_FG_GREEN, FF_COLOR_FG_RED, FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // SalientOS @@ -4314,7 +4314,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SALIENTOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Salix @@ -4350,7 +4350,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SCIENTIFIC, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, }, @@ -4359,7 +4359,7 @@ static const FFlogo S[] = { .names = {"Serpent OS"}, .lines = FASTFETCH_DATATEXT_LOGO_SERPENT_OS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Semc @@ -4378,7 +4378,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SEPTOR, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, }, @@ -4397,7 +4397,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SHARKLINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // ShastraOS @@ -4406,7 +4406,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SHASTRAOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Shebang @@ -4414,8 +4414,8 @@ static const FFlogo S[] = { .names = {"Shebang"}, .lines = FASTFETCH_DATATEXT_LOGO_SHEBANG, .colors = { - FF_COLOR_FG_DEFAULT, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, + FF_COLOR_FG_WHITE, }, }, // Siduction @@ -4424,7 +4424,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SIDUCTION, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, } }, // SkiffOS @@ -4433,7 +4433,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SKIFFOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // SleeperOS @@ -4442,7 +4442,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLEEPEROS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, } }, // SleeperOS @@ -4452,7 +4452,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLEEPEROS_SMALL, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, } }, // Slitaz @@ -4487,7 +4487,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLACKWARE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4499,10 +4499,10 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SLACKWARE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // SmartOS { @@ -4510,7 +4510,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SMARTOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // SnigdhaOS @@ -4519,7 +4519,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SNIGDHAOS, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Soda @@ -4528,7 +4528,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SODA, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Source Mage @@ -4536,10 +4536,10 @@ static const FFlogo S[] = { .names = {"Source Mage", "Source Mage GNU/Linux", "source_mage", "sourcemage"}, .lines = FASTFETCH_DATATEXT_LOGO_SOURCE_MAGE, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Solaris { @@ -4549,7 +4549,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // SolarisSmall { @@ -4560,7 +4560,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Solus { @@ -4568,10 +4568,10 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SOLUS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Sparky { @@ -4579,7 +4579,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SPARKY, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, }, // Star @@ -4587,8 +4587,8 @@ static const FFlogo S[] = { .names = {"Star"}, .lines = FASTFETCH_DATATEXT_LOGO_STAR, .colors = { - FF_COLOR_FG_DEFAULT, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, + FF_COLOR_FG_WHITE, }, }, // Starry @@ -4599,7 +4599,7 @@ static const FFlogo S[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // StockLinux { @@ -4607,7 +4607,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STOCK_LINUX, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // SteamOS @@ -4616,7 +4616,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMOS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4627,7 +4627,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4638,7 +4638,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4649,7 +4649,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_STEAMDECK, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT + FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -4660,7 +4660,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SULIN, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // SummitOS @@ -4698,7 +4698,7 @@ static const FFlogo S[] = { .lines = FASTFETCH_DATATEXT_LOGO_SWAGARCH, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // LAST @@ -4712,7 +4712,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_T2, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, FF_COLOR_FG_BLUE, }, @@ -4723,7 +4723,7 @@ static const FFlogo T[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_T2_SMALL, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, }, @@ -4733,7 +4733,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_TAILS, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Tatra @@ -4751,7 +4751,7 @@ static const FFlogo T[] = { .lines = FASTFETCH_DATATEXT_LOGO_TEARCH, .colors = { FF_COLOR_FG_256 "39", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // TileOS @@ -4800,7 +4800,7 @@ static const FFlogo T[] = { .names = {"Tuxedo OS", "tuxedo"}, .lines = FASTFETCH_DATATEXT_LOGO_TUXEDO_OS, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, }, @@ -4813,7 +4813,7 @@ static const FFlogo T[] = { FF_COLOR_FG_RED, FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // LAST @@ -4827,11 +4827,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX, .colors = { FF_COLOR_FG_256 "38", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // UBLinuxSmall { @@ -4840,11 +4840,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBLINUX_SMALL, .colors = { FF_COLOR_FG_256 "38", - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Ubuntu { @@ -4872,7 +4872,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, .colorTitle = FF_COLOR_FG_RED, @@ -4884,7 +4884,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_OLD2, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, @@ -4907,11 +4907,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_BUDGIE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // UbuntuCinnamon { @@ -4919,7 +4919,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_CINNAMON, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // UbuntuGNOME @@ -4929,7 +4929,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_BLUE, FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_BLUE, @@ -4941,11 +4941,11 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_KYLIN, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // UbuntuMate { @@ -4953,10 +4953,10 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_MATE, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // UbuntuKde { @@ -4964,7 +4964,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_KUBUNTU, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -4975,7 +4975,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_STUDIO, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // UbuntuSway @@ -4984,7 +4984,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_SWAY, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // UbuntuTouch @@ -4993,7 +4993,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_TOUCH, .colors = { FF_COLOR_FG_YELLOW, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // UbuntuUnity @@ -5002,7 +5002,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UBUNTU_UNITY, .colors = { FF_COLOR_FG_MAGENTA, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Ultramarine @@ -5011,7 +5011,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_ULTRAMARINE, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Ultramarine Small @@ -5020,7 +5020,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_ULTRAMARINE_SMALL, .colors = { FF_COLOR_FG_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Unifi @@ -5028,8 +5028,8 @@ static const FFlogo U[] = { .names = {"Unifi"}, .lines = FASTFETCH_DATATEXT_LOGO_UNIFI, .colors = { - FF_COLOR_FG_DEFAULT, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, + FF_COLOR_FG_WHITE, }, }, // Univalent @@ -5047,7 +5047,7 @@ static const FFlogo U[] = { .lines = FASTFETCH_DATATEXT_LOGO_UNIVENTION, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // UOS @@ -5057,7 +5057,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_YELLOW, }, // UrukOS @@ -5067,7 +5067,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_LIGHT_BLUE, FF_COLOR_FG_LIGHT_BLUE, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_LIGHT_BLUE, FF_COLOR_FG_BLUE, } @@ -5092,10 +5092,10 @@ static const FFlogo V[] = { .names = {"Valhalla", "valhallaos", "valhalla-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_VALHALLA, .colors = { - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, - .colorKeys = FF_COLOR_FG_DEFAULT, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_WHITE, }, // Vanilla { @@ -5156,7 +5156,7 @@ static const FFlogo V[] = { FF_COLOR_FG_256 "8", FF_COLOR_FG_256 "15", FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Vzlinux @@ -5165,7 +5165,7 @@ static const FFlogo V[] = { .lines = FASTFETCH_DATATEXT_LOGO_VZLINUX, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, }, @@ -5211,7 +5211,7 @@ static const FFlogo V[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_DEFAULT, + .colorKeys = FF_COLOR_FG_WHITE, .colorTitle = FF_COLOR_FG_GREEN, }, // LAST @@ -5225,7 +5225,7 @@ static const FFlogo W[] = { .lines = FASTFETCH_DATATEXT_LOGO_WII_LINUX, .colors = { FF_COLOR_FG_CYAN, - FF_COLOR_FG_DEFAULT, + FF_COLOR_FG_WHITE, }, }, // Windows2025 @@ -5279,7 +5279,7 @@ static const FFlogo W[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_WHITE, }, // Windows { From c574af97a4240964f128d7654b0290d622242cb8 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 3 Jul 2025 09:33:04 +0800 Subject: [PATCH 38/45] Logo (Builtin): fix colors of DragonFly --- src/logo/ascii/dragonfly.txt | 2 +- src/logo/builtin.c | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/logo/ascii/dragonfly.txt b/src/logo/ascii/dragonfly.txt index 185ea87cc8..95357ad2f0 100644 --- a/src/logo/ascii/dragonfly.txt +++ b/src/logo/ascii/dragonfly.txt @@ -1,6 +1,6 @@ $2,--, $1| $2,--, $2| `-, $1,^, $2,-' | -$2 `, `-, $3(/ \) $2,-' ,' +$2 `, `-, $1(/ \) $2,-' ,' $2 `-, `-,$1/ \$2,-' ,-' $2 `------$1( )$2------' $2 ,----------$1( )$2----------, diff --git a/src/logo/builtin.c b/src/logo/builtin.c index ac4a95b139..5c4e7e12cc 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -1439,10 +1439,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFlySmall { @@ -1451,10 +1451,10 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_SMALL, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFlyOld { From f1cc4a7805af94e986b468aec808e25d3ffd1d92 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 3 Jul 2025 09:36:39 +0800 Subject: [PATCH 39/45] Logo (Builtin): fix colors of raw Linux logo --- src/logo/builtin.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/logo/builtin.c b/src/logo/builtin.c index 5c4e7e12cc..76cfb25474 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -2684,11 +2684,11 @@ static const FFlogo L[] = { .lines = FASTFETCH_DATATEXT_LOGO_LINUX, .colors = { FF_COLOR_FG_WHITE, - FF_COLOR_FG_BLACK, + FF_COLOR_FG_LIGHT_BLACK, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_YELLOW, }, // LinuxFromScratch { From 818473102c08b75fa9f153bb23bebd55c429e4e3 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Thu, 3 Jul 2025 09:39:32 +0800 Subject: [PATCH 40/45] Logo (Builtin): always use `FG_DEFAULT` on title and keys --- src/logo/builtin.c | 368 +++++++++++++++++++++++---------------------- 1 file changed, 185 insertions(+), 183 deletions(-) diff --git a/src/logo/builtin.c b/src/logo/builtin.c index 76cfb25474..76d123a698 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -6,10 +6,8 @@ const FFlogo ffLogoUnknown = { .names = {"unknown"}, .lines = FASTFETCH_DATATEXT_LOGO_UNKNOWN, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = "", - .colorTitle = "", }; static const FFlogo A[] = { @@ -62,7 +60,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AlmaLinux { @@ -130,7 +128,7 @@ static const FFlogo A[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT | FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ALPINE3_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_BLUE, @@ -183,7 +181,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_CYAN, }, // Anarchy @@ -194,7 +192,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Android @@ -219,7 +217,7 @@ static const FFlogo A[] = { .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, }, - //AnduinOS + // AnduinOS { .names = {"anduinos"}, .lines = FASTFETCH_DATATEXT_LOGO_ANDUINOS, @@ -228,7 +226,7 @@ static const FFlogo A[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Antergos { @@ -249,9 +247,9 @@ static const FFlogo A[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, - // AnushOS + // AnushOS { .names = {"AnushOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ANUSHOS, @@ -262,8 +260,8 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOsRetro { @@ -274,7 +272,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOsRetro_small { @@ -286,7 +284,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // AoscOS { @@ -305,10 +303,10 @@ static const FFlogo A[] = { .lines = FASTFETCH_DATATEXT_LOGO_AOSCOS_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Aperture { @@ -325,7 +323,7 @@ static const FFlogo A[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Apple { @@ -361,10 +359,10 @@ static const FFlogo A[] = { .names = {"Apricity"}, .lines = FASTFETCH_DATATEXT_LOGO_APRICITY, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ArchBox { @@ -374,7 +372,7 @@ static const FFlogo A[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Archcraft { @@ -480,7 +478,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_256 "130", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Armbian { @@ -490,6 +488,8 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_RED, }, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_RED, }, // Armbian2 { @@ -499,6 +499,8 @@ static const FFlogo A[] = { .colors = { FF_COLOR_FG_RED, }, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_RED, }, // Artix { @@ -564,7 +566,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Arya { @@ -638,10 +640,10 @@ static const FFlogo A[] = { .names = {"astOS"}, .lines = FASTFETCH_DATATEXT_LOGO_ASTOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Astra { @@ -652,7 +654,7 @@ static const FFlogo A[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ataraxia { @@ -686,7 +688,7 @@ static const FFlogo A[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Aurora { @@ -755,7 +757,7 @@ static const FFlogo B[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_GREEN, }, // BlackArch @@ -778,7 +780,7 @@ static const FFlogo B[] = { FF_COLOR_FG_BLACK, }, .colorKeys = FF_COLOR_FG_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlackPanther { @@ -800,7 +802,7 @@ static const FFlogo B[] = { FF_COLOR_FG_MAGENTA, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlankOn { @@ -811,7 +813,7 @@ static const FFlogo B[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BlueLight { @@ -821,7 +823,7 @@ static const FFlogo B[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Bodhi @@ -870,17 +872,17 @@ static const FFlogo B[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // BunsenLabs { .names = {"BunsenLabs"}, .lines = FASTFETCH_DATATEXT_LOGO_BUNSENLABS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LAST {}, @@ -919,7 +921,7 @@ static const FFlogo C[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CalinixOS { @@ -978,10 +980,10 @@ static const FFlogo C[] = { .names = {"Center"}, .lines = FASTFETCH_DATATEXT_LOGO_CENTER, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CentOS { @@ -1044,7 +1046,7 @@ static const FFlogo C[] = { FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chapeau { @@ -1055,7 +1057,7 @@ static const FFlogo C[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chimera { @@ -1075,10 +1077,10 @@ static const FFlogo C[] = { .names = {"ChonkySealOS"}, .lines = FASTFETCH_DATATEXT_LOGO_CHONKYSEALOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Chrom { @@ -1099,10 +1101,10 @@ static const FFlogo C[] = { .names = {"Cleanjaro"}, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // CleanjaroSmall { @@ -1110,10 +1112,10 @@ static const FFlogo C[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_CLEANJARO_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ClearLinux { @@ -1191,7 +1193,7 @@ static const FFlogo C[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Common Torizon { @@ -1331,7 +1333,7 @@ static const FFlogo D[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DarkOS { @@ -1388,7 +1390,7 @@ static const FFlogo D[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Devuan { @@ -1417,9 +1419,9 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DIETPI, .colors = { FF_COLOR_FG_GREEN, - FF_COLOR_FG_BLACK, + FF_COLOR_FG_LIGHT_BLACK, }, - .colorKeys = FF_COLOR_FG_GREEN, + .colorKeys = FF_COLOR_FG_LIGHT_BLACK, .colorTitle = FF_COLOR_FG_GREEN, }, // DracOS @@ -1431,7 +1433,7 @@ static const FFlogo D[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DragonFly { @@ -1463,11 +1465,11 @@ static const FFlogo D[] = { .lines = FASTFETCH_DATATEXT_LOGO_DRAGONFLY_OLD, .colors = { FF_COLOR_FG_RED, - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // DraugerOS { @@ -1478,7 +1480,7 @@ static const FFlogo D[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Droidian { @@ -1511,10 +1513,10 @@ static const FFlogo E[] = { .names = {"Elementary"}, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // ElementarySmall { @@ -1522,10 +1524,10 @@ static const FFlogo E[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_ELEMENTARY_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Elive { @@ -1536,7 +1538,7 @@ static const FFlogo E[] = { FF_COLOR_FG_LIGHT_CYAN, FF_COLOR_FG_CYAN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_CYAN, }, // EncryptOS @@ -1581,17 +1583,17 @@ static const FFlogo E[] = { FF_COLOR_FG_WHITE }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Enso { .names = {"Enso"}, .lines = FASTFETCH_DATATEXT_LOGO_ENSO, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // EshanizedOS { @@ -1611,9 +1613,9 @@ static const FFlogo E[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, - // evolinx + // Evolinx { .names = {"Evolinx"}, .lines = FASTFETCH_DATATEXT_LOGO_EVOLINX, @@ -1716,7 +1718,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraAsahiRemix { @@ -1743,7 +1745,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, { .names = {"Fedora2_small"}, @@ -1753,7 +1755,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraOld { @@ -1765,7 +1767,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraSilverblue { @@ -1778,7 +1780,7 @@ static const FFlogo F[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraKinoite { @@ -1790,7 +1792,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraSericea { @@ -1802,7 +1804,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_BLUE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FedoraCoreOS { @@ -1815,7 +1817,7 @@ static const FFlogo F[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FemboyOS { @@ -1825,7 +1827,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Feren { @@ -1835,7 +1837,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Filotimo { @@ -1845,7 +1847,7 @@ static const FFlogo F[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Finnix { @@ -1856,7 +1858,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Floflis { @@ -1866,7 +1868,7 @@ static const FFlogo F[] = { FF_COLOR_FG_LIGHT_CYAN, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // FreeBSD { @@ -1897,8 +1899,8 @@ static const FFlogo F[] = { .colors = { FF_COLOR_FG_WHITE }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Frugalware { @@ -1909,7 +1911,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Funtoo { @@ -1920,7 +1922,7 @@ static const FFlogo F[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Furreto { @@ -1947,7 +1949,7 @@ static const FFlogo G[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Garuda { @@ -2058,9 +2060,9 @@ static const FFlogo G[] = { .names = {"GNU"}, .lines = FASTFETCH_DATATEXT_LOGO_GNU, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_RED, }, // GoboLinux @@ -2081,16 +2083,16 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_MAGENTA, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GrapheneOS { .names = {"GrapheneOS"}, .lines = FASTFETCH_DATATEXT_LOGO_GRAPHENEOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Grombyang @@ -2113,7 +2115,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GuixSmall { @@ -2124,7 +2126,7 @@ static const FFlogo G[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // GXDE { @@ -2184,7 +2186,7 @@ static const FFlogo H[] = { FF_COLOR_FG_256 "99" }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HarDClanZ { @@ -2196,7 +2198,7 @@ static const FFlogo H[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HardenedBSD { @@ -2254,9 +2256,9 @@ static const FFlogo H[] = { .names = {"Huayra"}, .lines = FASTFETCH_DATATEXT_LOGO_HUAYRA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // Hybrid @@ -2299,7 +2301,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HyperbolaSmall { @@ -2310,7 +2312,7 @@ static const FFlogo H[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // HydraPWK { @@ -2334,7 +2336,7 @@ static const FFlogo I[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // InstantOS { @@ -2367,7 +2369,7 @@ static const FFlogo I[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ironclad { @@ -2376,7 +2378,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_BLACK, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Itc @@ -2386,7 +2388,7 @@ static const FFlogo I[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_RED, }, // LAST @@ -2419,7 +2421,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Kali { @@ -2463,7 +2465,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KernelOS { @@ -2502,7 +2504,7 @@ static const FFlogo K[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KISSLinux { @@ -2525,7 +2527,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Korora { @@ -2536,7 +2538,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KrassOS { @@ -2547,7 +2549,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // KSLinux { @@ -2558,7 +2560,7 @@ static const FFlogo K[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Kubuntu { @@ -2619,7 +2621,7 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LEDE { @@ -2630,7 +2632,7 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LibreELEC { @@ -2654,7 +2656,7 @@ static const FFlogo L[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Lingmo OS { @@ -2712,8 +2714,8 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_YELLOW, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxLight { @@ -2724,7 +2726,7 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxLightSmall { @@ -2736,7 +2738,7 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LinuxMint { @@ -2781,7 +2783,7 @@ static const FFlogo L[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LliureX { @@ -2790,7 +2792,7 @@ static const FFlogo L[] = { .colors = { FF_COLOR_FG_BLUE, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_BLUE, }, // LMDE @@ -2802,7 +2804,7 @@ static const FFlogo L[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Loc-OS { @@ -2835,7 +2837,7 @@ static const FFlogo L[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // LAST {}, @@ -2942,7 +2944,7 @@ static const FFlogo M[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MageiaSmall { @@ -2954,7 +2956,7 @@ static const FFlogo M[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Magix { @@ -3017,10 +3019,10 @@ static const FFlogo M[] = { .names = {"MassOS", "mass"}, .lines = FASTFETCH_DATATEXT_LOGO_MASSOS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MatuusOS { @@ -3041,7 +3043,7 @@ static const FFlogo M[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_CYAN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Mauna { @@ -3073,17 +3075,17 @@ static const FFlogo M[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidnightBSD { .names = {"MidnightBSD"}, .lines = FASTFETCH_DATATEXT_LOGO_MIDNIGHTBSD, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidOS { @@ -3093,7 +3095,7 @@ static const FFlogo M[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MidOSOld { @@ -3105,7 +3107,7 @@ static const FFlogo M[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Minix { @@ -3127,7 +3129,7 @@ static const FFlogo M[] = { FF_COLOR_FG_256 "29", }, .colorKeys = FF_COLOR_FG_256 "29", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // MOS { @@ -3155,7 +3157,7 @@ static const FFlogo M[] = { .names = {"MX", "MX Linux"}, .lines = FASTFETCH_DATATEXT_LOGO_MX, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3166,7 +3168,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX_SMALL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3177,7 +3179,7 @@ static const FFlogo M[] = { .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .lines = FASTFETCH_DATATEXT_LOGO_MX2, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, .colorTitle = FF_COLOR_FG_CYAN, @@ -3290,7 +3292,7 @@ static const FFlogo N[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NetBSD2 { @@ -3302,7 +3304,7 @@ static const FFlogo N[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NetBSD Small { @@ -3314,17 +3316,17 @@ static const FFlogo N[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Nobara { .names = {"nobara", "nobara-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_NOBARA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NomadBSD { @@ -3334,7 +3336,7 @@ static const FFlogo N[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // NurOS { @@ -3411,7 +3413,7 @@ static const FFlogo O[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenBSD { @@ -3425,7 +3427,7 @@ static const FFlogo O[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenBSDSmall { @@ -3437,7 +3439,7 @@ static const FFlogo O[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OpenEuler { @@ -3510,7 +3512,7 @@ static const FFlogo O[] = { .names = {"opensuse-leap"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3521,7 +3523,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_LEAP_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3531,7 +3533,7 @@ static const FFlogo O[] = { .names = {"opensuse-tumbleweed"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3542,7 +3544,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_SMALL, .type = FF_LOGO_LINE_TYPE_SMALL_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3553,7 +3555,7 @@ static const FFlogo O[] = { .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_TUMBLEWEED_OLD, .type = FF_LOGO_LINE_TYPE_ALTER_BIT, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3563,7 +3565,7 @@ static const FFlogo O[] = { .names = {"opensuse-slowroll", "opensuse-tumbleweed-slowroll"}, .lines = FASTFETCH_DATATEXT_LOGO_OPENSUSE_SLOWROLL, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_GREEN, .colorTitle = FF_COLOR_FG_GREEN, @@ -3586,7 +3588,7 @@ static const FFlogo O[] = { FF_COLOR_FG_BLUE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // OPNsense { @@ -3605,7 +3607,7 @@ static const FFlogo O[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Orchid { @@ -3616,7 +3618,7 @@ static const FFlogo O[] = { FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // OrchidSmall @@ -3629,7 +3631,7 @@ static const FFlogo O[] = { FF_COLOR_FG_MAGENTA, FF_COLOR_FG_MAGENTA, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_MAGENTA, }, // Oreon @@ -3933,7 +3935,7 @@ static const FFlogo P[] = { FF_COLOR_FG_WHITE, FF_COLOR_FG_256 "202" }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_256 "202", }, // PuffOS @@ -4186,7 +4188,7 @@ static const FFlogo R[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_LIGHT_BLACK, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Regata { @@ -4283,10 +4285,10 @@ static const FFlogo S[] = { .names = {"Sabotage"}, .lines = FASTFETCH_DATATEXT_LOGO_SABOTAGE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Sailfish { @@ -4359,7 +4361,7 @@ static const FFlogo S[] = { .names = {"Serpent OS"}, .lines = FASTFETCH_DATATEXT_LOGO_SERPENT_OS, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, }, // Semc @@ -4502,7 +4504,7 @@ static const FFlogo S[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // SmartOS { @@ -4536,10 +4538,10 @@ static const FFlogo S[] = { .names = {"Source Mage", "Source Mage GNU/Linux", "source_mage", "sourcemage"}, .lines = FASTFETCH_DATATEXT_LOGO_SOURCE_MAGE, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Solaris { @@ -4549,7 +4551,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // SolarisSmall { @@ -4560,7 +4562,7 @@ static const FFlogo S[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Solus { @@ -4571,7 +4573,7 @@ static const FFlogo S[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Sparky { @@ -4599,7 +4601,7 @@ static const FFlogo S[] = { FF_COLOR_FG_GREEN, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // StockLinux { @@ -4831,7 +4833,7 @@ static const FFlogo U[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UBLinuxSmall { @@ -4844,7 +4846,7 @@ static const FFlogo U[] = { FF_COLOR_FG_LIGHT_BLACK, }, .colorKeys = FF_COLOR_FG_256 "38", - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Ubuntu { @@ -4911,7 +4913,7 @@ static const FFlogo U[] = { FF_COLOR_FG_RED, }, .colorKeys = FF_COLOR_FG_BLUE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuCinnamon { @@ -4945,7 +4947,7 @@ static const FFlogo U[] = { FF_COLOR_FG_YELLOW, }, .colorKeys = FF_COLOR_FG_RED, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuMate { @@ -4956,7 +4958,7 @@ static const FFlogo U[] = { FF_COLOR_FG_WHITE, }, .colorKeys = FF_COLOR_FG_GREEN, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // UbuntuKde { @@ -5057,7 +5059,7 @@ static const FFlogo U[] = { .colors = { FF_COLOR_FG_RED, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_YELLOW, }, // UrukOS @@ -5092,10 +5094,10 @@ static const FFlogo V[] = { .names = {"Valhalla", "valhallaos", "valhalla-linux"}, .lines = FASTFETCH_DATATEXT_LOGO_VALHALLA, .colors = { - FF_COLOR_FG_WHITE, + FF_COLOR_FG_DEFAULT, }, - .colorKeys = FF_COLOR_FG_WHITE, - .colorTitle = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Vanilla { @@ -5211,7 +5213,7 @@ static const FFlogo V[] = { .colors = { FF_COLOR_FG_GREEN, }, - .colorKeys = FF_COLOR_FG_WHITE, + .colorKeys = FF_COLOR_FG_DEFAULT, .colorTitle = FF_COLOR_FG_GREEN, }, // LAST @@ -5279,7 +5281,7 @@ static const FFlogo W[] = { FF_COLOR_FG_CYAN, }, .colorKeys = FF_COLOR_FG_YELLOW, - .colorTitle = FF_COLOR_FG_WHITE, + .colorTitle = FF_COLOR_FG_DEFAULT, }, // Windows { From 8c74c54bb01bc67dd365e530da7bafab78c584ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 3 Jul 2025 10:21:55 +0800 Subject: [PATCH 41/45] README --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a9bcf47762..cc422fde79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,30 @@ +# 2.47.0 + +Features: +* Various improvements for Solaris / OpenIndiana support + * Support BIOS (UEFI or legency) type detection (BIOS) + * Support physical disk detection (PhysicalDisk) + * Remove leading `-` for login shells (Shell) + * Improve performance of GPU detection (GPU) + * Drop `libpciaccess` dependency + * Use native API to detect sound devices (Sound) + * Drop `PulseAudio` dependency +* Improve DietPi OS and Raspberry Pi OS detection (#1816, OS, Linux) +* Force reporting 26 on macOS Tahoe (OS, macOS) +* Fix pci.ids file location (#1819, GPU, OpenBSD) +* Append version string for Ubuntu variants (OS, Linux) +* Improve visibility on white-background terminals (Logo) +* Improve performance of now playing handling (Media, macOS) +* Increase `PROC_FILE_BUFFSIZ` to avoid possible short reads (Linux) + * Fix potential bugs for `DiskIO`, `NetIO` and `CPUUsage` modules +* Improve accuracy of CPU usage calculations by include interrupt and softirq times (CPUUsage, Linux / *BSD) +* Ignore `init` and `systemd` processes when detecting terminal (Terminal, Linux) +* Improve accuracy of CPU usage detection on Windows 10+ with perflib which matches values reported by taskmgr well (CPUUsage, Windows) + +Logos: +* Improve colors of OpenIndiana +* Add Xubuntu + # 2.46.0 Features: From 3ed6acf3ca3923440462cf72e51e7e2d327328c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 3 Jul 2025 10:45:41 +0800 Subject: [PATCH 42/45] Release: v2.47.0 --- CHANGELOG.md | 28 ++++++++++++++-------------- CMakeLists.txt | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc422fde79..d0c2d0c372 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,27 +2,27 @@ Features: * Various improvements for Solaris / OpenIndiana support - * Support BIOS (UEFI or legency) type detection (BIOS) + * Support BIOS (UEFI or legacy) type detection (BIOS) * Support physical disk detection (PhysicalDisk) - * Remove leading `-` for login shells (Shell) - * Improve performance of GPU detection (GPU) + * Remove leading `-` from login shells (Shell) + * Improve GPU detection performance (GPU) * Drop `libpciaccess` dependency * Use native API to detect sound devices (Sound) * Drop `PulseAudio` dependency * Improve DietPi OS and Raspberry Pi OS detection (#1816, OS, Linux) -* Force reporting 26 on macOS Tahoe (OS, macOS) -* Fix pci.ids file location (#1819, GPU, OpenBSD) -* Append version string for Ubuntu variants (OS, Linux) -* Improve visibility on white-background terminals (Logo) -* Improve performance of now playing handling (Media, macOS) +* Force reporting version 26 on macOS Tahoe (OS, macOS) +* Fix `pci.ids` file location (#1819, GPU, OpenBSD) +* Append version string to Ubuntu variants (OS, Linux) +* Improve performance of media detection for macOS 15.4+ (Media, macOS) * Increase `PROC_FILE_BUFFSIZ` to avoid possible short reads (Linux) - * Fix potential bugs for `DiskIO`, `NetIO` and `CPUUsage` modules -* Improve accuracy of CPU usage calculations by include interrupt and softirq times (CPUUsage, Linux / *BSD) -* Ignore `init` and `systemd` processes when detecting terminal (Terminal, Linux) -* Improve accuracy of CPU usage detection on Windows 10+ with perflib which matches values reported by taskmgr well (CPUUsage, Windows) + * Fix potential bugs in `DiskIO`, `NetIO` and `CPUUsage` modules +* Improve accuracy of CPU usage calculations by including interrupt and softirq times (CPUUsage, Linux / *BSD) +* Ignore `init` and `systemd` processes when detecting terminals (Terminal, Linux) +* Improve accuracy of CPU usage detection on Windows 10+ with perflib, which matches values reported by Task Manager (CPUUsage, Windows) Logos: -* Improve colors of OpenIndiana +* Improve visibility on white-background terminals for some logos by replacing white with the default foreground color + * According to Wikipedia, the default foreground color is implementation-defined. It's usually black for white themes and white for dark themes. However, some terminals, notably Konsole with the default theme, use a different color, which may cause issues with some logos. * Add Xubuntu # 2.46.0 @@ -39,7 +39,7 @@ Features: * Use `board-id` as board name if available (Board, macOS) * Intel only * Support shared VRAM usage detection for AMD GPUs (GPU, Linux) -* Use `perflib.h` instead of `pdh.h` for CPU temperature querying to get rid of pdh.dll (#1787, CPU, Windows) +* Use `perflib.h` instead of `pdh.h` for CPU temperature querying to get rid of `pdh.dll` dependency (#1787, CPU, Windows) * Support GPU info detection for old ATI radeon driver (#1810, GPU, Linux) * Add macOS 26 Tahoe support (macOS) * Report macOS 26 code name (OS) diff --git a/CMakeLists.txt b/CMakeLists.txt index 47acb5dea2..0385c259cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url project(fastfetch - VERSION 2.46.0 + VERSION 2.47.0 LANGUAGES C DESCRIPTION "Fast neofetch-like system information tool" HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch" From dba0672a11277c2f739e271668bc0d3c37d643eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 3 Jul 2025 10:47:40 +0800 Subject: [PATCH 43/45] CMake: remove the unused option `ENABLE_CPUUSAGE_PERFLIB` --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0385c259cf..967d532999 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,7 +83,6 @@ cmake_dependent_option(ENABLE_ELF "Enable libelf" ON "LINUX OR ANDROID OR Dragon cmake_dependent_option(ENABLE_THREADS "Enable multithreading" ON "Threads_FOUND" OFF) cmake_dependent_option(ENABLE_LIBZFS "Enable libzfs" ON "LINUX OR FreeBSD OR SunOS" OFF) cmake_dependent_option(ENABLE_PCIACCESS "Enable libpciaccess" ON "NetBSD OR OpenBSD" OFF) -cmake_dependent_option(ENABLE_CPUUSAGE_PERFLIB "Use perflib (Processor Information) to calculate CPU usage (used by task manager) instead of CPU times (used by all other *nix platforms)" OFF "WIN32" OFF) option(ENABLE_SYSTEM_YYJSON "Use system provided (instead of fastfetch embedded) yyjson library" OFF) option(ENABLE_ASAN "Build fastfetch with ASAN (address sanitizer)" OFF) @@ -1232,10 +1231,6 @@ add_library(libfastfetch OBJECT ${LIBFASTFETCH_SRC} ) -if(ENABLE_CPUUSAGE_PERFLIB) - target_compile_definitions(libfastfetch PUBLIC FF_ENABLE_CPUUSAGE_PERFLIB) -endif() - if(yyjson_FOUND) target_compile_definitions(libfastfetch PUBLIC FF_USE_SYSTEM_YYJSON) target_link_libraries(libfastfetch PUBLIC yyjson::yyjson) From fe5d739cba9e1eea5a87fc38f75e5cb2341ad688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 3 Jul 2025 10:51:42 +0800 Subject: [PATCH 44/45] Doc: update README [ci skip] --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0c2d0c372..4df7293738 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,6 @@ Features: * Drop `PulseAudio` dependency * Improve DietPi OS and Raspberry Pi OS detection (#1816, OS, Linux) * Force reporting version 26 on macOS Tahoe (OS, macOS) -* Fix `pci.ids` file location (#1819, GPU, OpenBSD) * Append version string to Ubuntu variants (OS, Linux) * Improve performance of media detection for macOS 15.4+ (Media, macOS) * Increase `PROC_FILE_BUFFSIZ` to avoid possible short reads (Linux) @@ -20,6 +19,10 @@ Features: * Ignore `init` and `systemd` processes when detecting terminals (Terminal, Linux) * Improve accuracy of CPU usage detection on Windows 10+ with perflib, which matches values reported by Task Manager (CPUUsage, Windows) +Bugfixes: +* Fix `pci.ids` file location (#1819, GPU, OpenBSD) +* Fix compiling on FreeBSD when `libdrm` support is disabled (#1820, GPU, FreeBSD) + Logos: * Improve visibility on white-background terminals for some logos by replacing white with the default foreground color * According to Wikipedia, the default foreground color is implementation-defined. It's usually black for white themes and white for dark themes. However, some terminals, notably Konsole with the default theme, use a different color, which may cause issues with some logos. From 8be64714ba084d780b2b2dfb731271804ce6bc0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E9=80=9A=E6=B4=B2?= Date: Thu, 3 Jul 2025 11:03:14 +0800 Subject: [PATCH 45/45] OS (Linux): remove duplicated code --- src/detection/os/os_linux.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index a876ef6792..b87a9ce7bc 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -170,15 +170,6 @@ FF_MAYBE_UNUSED static void getUbuntuFlavour(FFOSResult* result) return; } - if(ffStrContains(xdgConfigDirs, "xubuntu")) - { - ffStrbufSetStatic(&result->name, "Xubuntu"); - ffStrbufSetF(&result->prettyName, "Xubuntu %s", result->version.chars); - ffStrbufSetStatic(&result->id, "xubuntu"); - ffStrbufSetStatic(&result->idLike, "ubuntu"); - return; - } - if(ffStrContains(xdgConfigDirs, "lliurex")) { ffStrbufSetStatic(&result->name, "LliureX");