Modules: refactor module option handling for static allocation

Moves module option structs out of global config and removes dynamic allocation, using static buffers and size assertions for safer, simpler management.

Refactors module initialization and destruction to work with isolated option structs, eliminating the need for the previous modules container and related code.

Unifies module option header usage and updates detection logic to leverage statically-sized option buffers, improving encapsulation and maintainability.

Simplifies module function signatures and reduces coupling between modules and config.

Enhances future extensibility and reliability by enforcing max size constraints and removing unnecessary indirections.
This commit is contained in:
李通洲
2025-08-04 14:25:14 +08:00
parent 559082806b
commit 75d2c668d0
289 changed files with 1449 additions and 1672 deletions
-1
View File
@@ -474,7 +474,6 @@ set(LIBFASTFETCH_SRC
src/modules/wmtheme/wmtheme.c
src/modules/zpool/zpool.c
src/options/display.c
src/options/modules.c
src/options/logo.c
src/options/general.c
src/util/edidHelper.c
+9 -3
View File
@@ -3,7 +3,12 @@
"display": {
"size": {
"maxPrefix": "MB",
"ndigits": 0
"ndigits": 0,
"spaceBeforeUnit": "never"
},
"freq": {
"ndigits": 3,
"spaceBeforeUnit": "never"
}
},
"modules": [
@@ -39,11 +44,12 @@
"cpu",
{
"type": "gpu",
"key": "GPU"
"key": "GPU",
"format": "{name}"
},
{
"type": "memory",
"format": "{} / {}"
"format": "{used} / {total}"
},
"break",
"colors"
+30 -12
View File
@@ -12,7 +12,6 @@
void ffPrepareCommandOption(FFdata* data)
{
FFOptionsModules* const options = &instance.config.modules;
//If we don't have a custom structure, use the default one
if(data->structure.length == 0)
ffStrbufAppendS(&data->structure, FASTFETCH_DATATEXT_STRUCTURE); // Cannot use `ffStrbufSetStatic` here because we will modify the string
@@ -21,22 +20,38 @@ void ffPrepareCommandOption(FFdata* data)
ffPrepareCPUUsage();
if(ffStrbufContainIgnCaseS(&data->structure, FF_DISKIO_MODULE_NAME))
ffPrepareDiskIO(&options->diskIo);
{
__attribute__((__cleanup__(ffDestroyDiskIOOptions))) FFDiskIOOptions options;
ffInitDiskIOOptions(&options);
ffPrepareDiskIO(&options);
}
if(ffStrbufContainIgnCaseS(&data->structure, FF_NETIO_MODULE_NAME))
ffPrepareNetIO(&options->netIo);
{
__attribute__((__cleanup__(ffDestroyNetIOOptions))) FFNetIOOptions options;
ffInitNetIOOptions(&options);
ffPrepareNetIO(&options);
}
if(instance.config.general.multithreading)
{
if(ffStrbufContainIgnCaseS(&data->structure, FF_PUBLICIP_MODULE_NAME))
ffPreparePublicIp(&options->publicIP);
{
__attribute__((__cleanup__(ffDestroyPublicIpOptions))) FFPublicIPOptions options;
ffInitPublicIpOptions(&options);
ffPreparePublicIp(&options);
}
if(ffStrbufContainIgnCaseS(&data->structure, FF_WEATHER_MODULE_NAME))
ffPrepareWeather(&options->weather);
{
__attribute__((__cleanup__(ffDestroyWeatherOptions))) FFWeatherOptions options;
ffInitWeatherOptions(&options);
ffPrepareWeather(&options);
}
}
}
static void genJsonConfig(FFModuleBaseInfo* baseInfo, yyjson_mut_doc* doc)
static void genJsonConfig(FFModuleBaseInfo* baseInfo, void* options, yyjson_mut_doc* doc)
{
yyjson_mut_val* modules = yyjson_mut_obj_get(doc->root, "modules");
if (!modules)
@@ -48,7 +63,7 @@ static void genJsonConfig(FFModuleBaseInfo* baseInfo, yyjson_mut_doc* doc)
yyjson_mut_obj_add_strbuf(doc, module, "type", &type);
if (baseInfo->generateJsonConfig)
baseInfo->generateJsonConfig(baseInfo, doc, module);
baseInfo->generateJsonConfig(options, doc, module);
if (yyjson_mut_obj_size(module) > 1)
yyjson_mut_arr_add_val(modules, module);
@@ -56,19 +71,19 @@ static void genJsonConfig(FFModuleBaseInfo* baseInfo, yyjson_mut_doc* doc)
yyjson_mut_arr_add_strbuf(doc, modules, &type);
}
static void genJsonResult(FFModuleBaseInfo* baseInfo, yyjson_mut_doc* doc)
static void genJsonResult(FFModuleBaseInfo* baseInfo, void* options, yyjson_mut_doc* doc)
{
yyjson_mut_val* module = yyjson_mut_arr_add_obj(doc, doc->root);
yyjson_mut_obj_add_str(doc, module, "type", baseInfo->name);
if (baseInfo->generateJsonResult)
baseInfo->generateJsonResult(baseInfo, doc, module);
baseInfo->generateJsonResult(options, doc, module);
else
yyjson_mut_obj_add_str(doc, module, "error", "Unsupported for JSON format");
}
static void parseStructureCommand(
const char* line,
void (*fn)(FFModuleBaseInfo *baseInfo, yyjson_mut_doc* jsonDoc),
void (*fn)(FFModuleBaseInfo* baseInfo, void* options, yyjson_mut_doc* jsonDoc),
yyjson_mut_doc* jsonDoc
)
{
@@ -79,10 +94,13 @@ static void parseStructureCommand(
FFModuleBaseInfo* baseInfo = *modules;
if (ffStrEqualsIgnCase(line, baseInfo->name))
{
uint8_t optionBuf[FF_OPTION_MAX_SIZE];
baseInfo->initOptions(optionBuf);
if (__builtin_expect(jsonDoc != NULL, false))
fn(baseInfo, jsonDoc);
fn(baseInfo, optionBuf, jsonDoc);
else
baseInfo->printModule(baseInfo);
baseInfo->printModule(optionBuf);
baseInfo->destroyOptions(optionBuf);
return;
}
}
+1 -8
View File
@@ -42,14 +42,13 @@ static void defaultConfig(void)
{
ffOptionsInitLogo(&instance.config.logo);
ffOptionsInitGeneral(&instance.config.general);
ffOptionsInitModules(&instance.config.modules);
ffOptionsInitDisplay(&instance.config.display);
}
void ffInitInstance(void)
{
#ifdef WIN32
//https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendations&view=msvc-170#utf-8-support
// https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendat>
setlocale(LC_ALL, ".UTF8");
#else
// Never use `setlocale(LC_ALL, "")`
@@ -96,11 +95,6 @@ static void chldSignalHandler(FF_MAYBE_UNUSED int signal)
void ffStart(void)
{
#ifdef FF_START_DETECTION_THREADS
if(instance.config.general.multithreading)
startDetectionThreads();
#endif
ffDisableLinewrap = instance.config.display.disableLinewrap && !instance.config.display.pipe && !instance.state.resultDoc;
ffHideCursor = instance.config.display.hideCursor && !instance.config.display.pipe && !instance.state.resultDoc;
@@ -150,7 +144,6 @@ static void destroyConfig(void)
{
ffOptionsDestroyLogo(&instance.config.logo);
ffOptionsDestroyGeneral(&instance.config.general);
ffOptionsDestroyModules(&instance.config.modules);
ffOptionsDestroyDisplay(&instance.config.display);
}
+24 -14
View File
@@ -99,12 +99,12 @@ const char* ffJsonConfigParseEnum(yyjson_val* val, int* result, FFKeyValuePair p
return "Invalid enum value type; must be a string or integer";
}
static inline void genJsonResult(FFModuleBaseInfo* baseInfo, yyjson_mut_doc* doc)
static inline void genJsonResult(FFModuleBaseInfo* baseInfo, void* options, yyjson_mut_doc* doc)
{
yyjson_mut_val* module = yyjson_mut_arr_add_obj(doc, doc->root);
yyjson_mut_obj_add_str(doc, module, "type", baseInfo->name);
if (baseInfo->generateJsonResult)
baseInfo->generateJsonResult(baseInfo, doc, module);
baseInfo->generateJsonResult(options, doc, module);
else
yyjson_mut_obj_add_str(doc, module, "error", "Unsupported for JSON format");
}
@@ -118,11 +118,14 @@ static bool parseModuleJsonObject(const char* type, yyjson_val* jsonVal, yyjson_
FFModuleBaseInfo* baseInfo = *modules;
if (ffStrEqualsIgnCase(type, baseInfo->name))
{
if (jsonVal) baseInfo->parseJsonObject(baseInfo, jsonVal);
uint8_t optionBuf[FF_OPTION_MAX_SIZE];
baseInfo->initOptions(optionBuf);
if (jsonVal) baseInfo->parseJsonObject(optionBuf, jsonVal);
if (__builtin_expect(jsonDoc != NULL, false))
genJsonResult(baseInfo, jsonDoc);
genJsonResult(baseInfo, optionBuf, jsonDoc);
else
baseInfo->printModule(baseInfo);
baseInfo->printModule(optionBuf);
baseInfo->destroyOptions(optionBuf);
return true;
}
}
@@ -131,7 +134,6 @@ static bool parseModuleJsonObject(const char* type, yyjson_val* jsonVal, yyjson_
static void prepareModuleJsonObject(const char* type, yyjson_val* module)
{
FFconfig* cfg = &instance.config;
switch (type[0])
{
case 'b': case 'B': {
@@ -142,32 +144,40 @@ static void prepareModuleJsonObject(const char* type, yyjson_val* module)
case 'd': case 'D': {
if (ffStrEqualsIgnCase(type, FF_DISKIO_MODULE_NAME))
{
if (module) cfg->modules.diskIo.moduleInfo.parseJsonObject(&cfg->modules.diskIo, module);
ffPrepareDiskIO(&cfg->modules.diskIo);
__attribute__((__cleanup__(ffDestroyDiskIOOptions))) FFDiskIOOptions options;
ffInitDiskIOOptions(&options);
if (module) ffDiskIOModuleInfo.parseJsonObject(&options, module);
ffPrepareDiskIO(&options);
}
break;
}
case 'n': case 'N': {
if (ffStrEqualsIgnCase(type, FF_NETIO_MODULE_NAME))
{
if (module) cfg->modules.netIo.moduleInfo.parseJsonObject(&cfg->modules.netIo, module);
ffPrepareNetIO(&cfg->modules.netIo);
__attribute__((__cleanup__(ffDestroyNetIOOptions))) FFNetIOOptions options;
ffInitNetIOOptions(&options);
if (module) ffNetIOModuleInfo.parseJsonObject(&options, module);
ffPrepareNetIO(&options);
}
break;
}
case 'p': case 'P': {
if (ffStrEqualsIgnCase(type, FF_PUBLICIP_MODULE_NAME))
{
if (module) cfg->modules.publicIP.moduleInfo.parseJsonObject(&cfg->modules.publicIP, module);
ffPreparePublicIp(&cfg->modules.publicIP);
__attribute__((__cleanup__(ffDestroyPublicIpOptions))) FFPublicIPOptions options;
ffInitPublicIpOptions(&options);
if (module) ffPublicIPModuleInfo.parseJsonObject(&options, module);
ffPreparePublicIp(&options);
}
break;
}
case 'w': case 'W': {
if (ffStrEqualsIgnCase(type, FF_WEATHER_MODULE_NAME))
{
if (module) cfg->modules.weather.moduleInfo.parseJsonObject(&cfg->modules.weather, module);
ffPrepareWeather(&cfg->modules.weather);
__attribute__((__cleanup__(ffDestroyWeatherOptions))) FFWeatherOptions options;
ffInitWeatherOptions(&options);
if (module) ffWeatherModuleInfo.parseJsonObject(&options, module);
ffPrepareWeather(&options);
}
break;
}
+74 -74
View File
@@ -1,69 +1,69 @@
#include "fastfetch.h"
#include "modules/modules.h"
static FFModuleBaseInfo* A[] = {
NULL,
};
static FFModuleBaseInfo* B[] = {
(FFModuleBaseInfo*) &instance.config.modules.battery,
(FFModuleBaseInfo*) &instance.config.modules.bios,
(FFModuleBaseInfo*) &instance.config.modules.bluetooth,
(FFModuleBaseInfo*) &instance.config.modules.bluetoothRadio,
(FFModuleBaseInfo*) &instance.config.modules.board,
(FFModuleBaseInfo*) &instance.config.modules.bootmgr,
(FFModuleBaseInfo*) &instance.config.modules.break_,
(FFModuleBaseInfo*) &instance.config.modules.brightness,
(FFModuleBaseInfo*) &instance.config.modules.btrfs,
&ffBatteryModuleInfo,
&ffBiosModuleInfo,
&ffBluetoothModuleInfo,
&ffBluetoothRadioModuleInfo,
&ffBoardModuleInfo,
&ffBootmgrModuleInfo,
&ffBreakModuleInfo,
&ffBrightnessModuleInfo,
&ffBtrfsModuleInfo,
NULL,
};
static FFModuleBaseInfo* C[] = {
(FFModuleBaseInfo*) &instance.config.modules.camera,
(FFModuleBaseInfo*) &instance.config.modules.chassis,
(FFModuleBaseInfo*) &instance.config.modules.command,
(FFModuleBaseInfo*) &instance.config.modules.colors,
(FFModuleBaseInfo*) &instance.config.modules.cpu,
(FFModuleBaseInfo*) &instance.config.modules.cpuCache,
(FFModuleBaseInfo*) &instance.config.modules.cpuUsage,
(FFModuleBaseInfo*) &instance.config.modules.cursor,
(FFModuleBaseInfo*) &instance.config.modules.custom,
&ffCameraModuleInfo,
&ffChassisModuleInfo,
&ffCommandModuleInfo,
&ffColorsModuleInfo,
&ffCPUModuleInfo,
&ffCPUCacheModuleInfo,
&ffCPUUsageModuleInfo,
&ffCursorModuleInfo,
&ffCustomModuleInfo,
NULL,
};
static FFModuleBaseInfo* D[] = {
(FFModuleBaseInfo*) &instance.config.modules.dateTime,
(FFModuleBaseInfo*) &instance.config.modules.de,
(FFModuleBaseInfo*) &instance.config.modules.display,
(FFModuleBaseInfo*) &instance.config.modules.disk,
(FFModuleBaseInfo*) &instance.config.modules.diskIo,
(FFModuleBaseInfo*) &instance.config.modules.dns,
&ffDateTimeModuleInfo,
&ffDEModuleInfo,
&ffDisplayModuleInfo,
&ffDiskModuleInfo,
&ffDiskIOModuleInfo,
&ffDNSModuleInfo,
NULL,
};
static FFModuleBaseInfo* E[] = {
(FFModuleBaseInfo*) &instance.config.modules.editor,
&ffEditorModuleInfo,
NULL,
};
static FFModuleBaseInfo* F[] = {
(FFModuleBaseInfo*) &instance.config.modules.font,
&ffFontModuleInfo,
NULL,
};
static FFModuleBaseInfo* G[] = {
(FFModuleBaseInfo*) &instance.config.modules.gamepad,
(FFModuleBaseInfo*) &instance.config.modules.gpu,
&ffGamepadModuleInfo,
&ffGPUModuleInfo,
NULL,
};
static FFModuleBaseInfo* H[] = {
(FFModuleBaseInfo*) &instance.config.modules.host,
&ffHostModuleInfo,
NULL,
};
static FFModuleBaseInfo* I[] = {
(FFModuleBaseInfo*) &instance.config.modules.icons,
(FFModuleBaseInfo*) &instance.config.modules.initSystem,
&ffIconsModuleInfo,
&ffInitSystemModuleInfo,
NULL,
};
@@ -72,47 +72,47 @@ static FFModuleBaseInfo* J[] = {
};
static FFModuleBaseInfo* K[] = {
(FFModuleBaseInfo*) &instance.config.modules.kernel,
(FFModuleBaseInfo*) &instance.config.modules.keyboard,
&ffKernelModuleInfo,
&ffKeyboardModuleInfo,
NULL,
};
static FFModuleBaseInfo* L[] = {
(FFModuleBaseInfo*) &instance.config.modules.lm,
(FFModuleBaseInfo*) &instance.config.modules.loadavg,
(FFModuleBaseInfo*) &instance.config.modules.locale,
(FFModuleBaseInfo*) &instance.config.modules.localIP,
&ffLMModuleInfo,
&ffLoadavgModuleInfo,
&ffLocaleModuleInfo,
&ffLocalIPModuleInfo,
NULL,
};
static FFModuleBaseInfo* M[] = {
(FFModuleBaseInfo*) &instance.config.modules.media,
(FFModuleBaseInfo*) &instance.config.modules.memory,
(FFModuleBaseInfo*) &instance.config.modules.monitor,
(FFModuleBaseInfo*) &instance.config.modules.mouse,
&ffMediaModuleInfo,
&ffMemoryModuleInfo,
&ffMonitorModuleInfo,
&ffMouseModuleInfo,
NULL,
};
static FFModuleBaseInfo* N[] = {
(FFModuleBaseInfo*) &instance.config.modules.netIo,
&ffNetIOModuleInfo,
NULL,
};
static FFModuleBaseInfo* O[] = {
(FFModuleBaseInfo*) &instance.config.modules.openCL,
(FFModuleBaseInfo*) &instance.config.modules.openGL,
(FFModuleBaseInfo*) &instance.config.modules.os,
&ffOpenCLModuleInfo,
&ffOpenGLModuleInfo,
&ffOSModuleInfo,
NULL,
};
static FFModuleBaseInfo* P[] = {
(FFModuleBaseInfo*) &instance.config.modules.packages,
(FFModuleBaseInfo*) &instance.config.modules.physicalDisk,
(FFModuleBaseInfo*) &instance.config.modules.physicalMemory,
(FFModuleBaseInfo*) &instance.config.modules.player,
(FFModuleBaseInfo*) &instance.config.modules.powerAdapter,
(FFModuleBaseInfo*) &instance.config.modules.processes,
(FFModuleBaseInfo*) &instance.config.modules.publicIP,
&ffPackagesModuleInfo,
&ffPhysicalDiskModuleInfo,
&ffPhysicalMemoryModuleInfo,
&ffPlayerModuleInfo,
&ffPowerAdapterModuleInfo,
&ffProcessesModuleInfo,
&ffPublicIPModuleInfo,
NULL,
};
@@ -125,42 +125,42 @@ static FFModuleBaseInfo* R[] = {
};
static FFModuleBaseInfo* S[] = {
(FFModuleBaseInfo*) &instance.config.modules.separator,
(FFModuleBaseInfo*) &instance.config.modules.shell,
(FFModuleBaseInfo*) &instance.config.modules.sound,
(FFModuleBaseInfo*) &instance.config.modules.swap,
&ffSeparatorModuleInfo,
&ffShellModuleInfo,
&ffSoundModuleInfo,
&ffSwapModuleInfo,
NULL,
};
static FFModuleBaseInfo* T[] = {
(FFModuleBaseInfo*) &instance.config.modules.terminal,
(FFModuleBaseInfo*) &instance.config.modules.terminalFont,
(FFModuleBaseInfo*) &instance.config.modules.terminalSize,
(FFModuleBaseInfo*) &instance.config.modules.terminalTheme,
(FFModuleBaseInfo*) &instance.config.modules.title,
(FFModuleBaseInfo*) &instance.config.modules.theme,
(FFModuleBaseInfo*) &instance.config.modules.tpm,
&ffTerminalModuleInfo,
&ffTerminalFontModuleInfo,
&ffTerminalSizeModuleInfo,
&ffTerminalThemeModuleInfo,
&ffTitleModuleInfo,
&ffThemeModuleInfo,
&ffTPMModuleInfo,
NULL,
};
static FFModuleBaseInfo* U[] = {
(FFModuleBaseInfo*) &instance.config.modules.uptime,
(FFModuleBaseInfo*) &instance.config.modules.users,
&ffUptimeModuleInfo,
&ffUsersModuleInfo,
NULL,
};
static FFModuleBaseInfo* V[] = {
(FFModuleBaseInfo*) &instance.config.modules.version,
(FFModuleBaseInfo*) &instance.config.modules.vulkan,
&ffVersionModuleInfo,
&ffVulkanModuleInfo,
NULL,
};
static FFModuleBaseInfo* W[] = {
(FFModuleBaseInfo*) &instance.config.modules.wallpaper,
(FFModuleBaseInfo*) &instance.config.modules.weather,
(FFModuleBaseInfo*) &instance.config.modules.wm,
(FFModuleBaseInfo*) &instance.config.modules.wifi,
(FFModuleBaseInfo*) &instance.config.modules.wmTheme,
&ffWallpaperModuleInfo,
&ffWeatherModuleInfo,
&ffWMModuleInfo,
&ffWifiModuleInfo,
&ffWMThemeModuleInfo,
NULL,
};
@@ -173,7 +173,7 @@ static FFModuleBaseInfo* Y[] = {
};
static FFModuleBaseInfo* Z[] = {
(FFModuleBaseInfo*) &instance.config.modules.zpool,
&ffZpoolModuleInfo,
NULL,
};
+2
View File
@@ -95,3 +95,5 @@ static inline void ffOptionDestroyModuleArg(FFModuleArgs* args)
ffStrbufDestroy(&args->outputFormat);
ffStrbufDestroy(&args->outputColor);
}
enum { FF_OPTION_MAX_SIZE = 1 << 8 }; // Maximum size of a single option value, used for static allocation
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/battery/option.h"
#define FF_BATTERY_TEMP_UNSET (0/0.0)
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/bios/option.h"
typedef struct FFBiosResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/bluetooth/option.h"
typedef struct FFBluetoothResult
{
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/bluetoothradio/option.h"
typedef struct FFBluetoothRadioResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/board/option.h"
typedef struct FFBoardResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/bootmgr/option.h"
typedef struct FFBootmgrResult
{
+1 -1
View File
@@ -1,7 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "util/FFlist.h"
#include "modules/brightness/option.h"
typedef struct FFBrightnessResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/btrfs/option.h"
typedef struct FFBtrfsDiskUsage
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/camera/option.h"
typedef struct FFCameraResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/chassis/option.h"
typedef struct FFChassisResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/cpu/option.h"
#define FF_CPU_TEMP_UNSET (0/0.0)
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/cpucache/option.h"
typedef enum __attribute__((__packed__)) FFCPUCacheType
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/cpuusage/option.h"
typedef struct FFCpuUsageInfo {
uint64_t inUseAll;
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/cursor/option.h"
typedef struct FFCursorResult
{
+1
View File
@@ -1,5 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "modules/de/option.h"
const char* ffDetectDEVersion(const FFstrbuf* deName, FFstrbuf* result, FFDEOptions* options);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/disk/option.h"
typedef struct FFDisk
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/diskio/option.h"
typedef struct FFDiskIOResult
{
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/display/option.h"
#define FF_DE_PRETTY_PLASMA "KDE Plasma"
#define FF_DE_PRETTY_GNOME "GNOME"
+1
View File
@@ -1,5 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "modules/dns/option.h"
const char* ffDetectDNS(FFDNSOptions* options, FFlist* results /* list of FFstrbuf */);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/editor/option.h"
typedef struct FFEditorResult
{
+2 -1
View File
@@ -1,8 +1,9 @@
#pragma once
#include "fastfetch.h"
#include "modules/font/option.h"
#define FF_DETECT_FONT_NUM_FONTS 4
enum { FF_DETECT_FONT_NUM_FONTS = 4 };
typedef struct FFFontResult
{
+5 -1
View File
@@ -2,6 +2,7 @@
#include "detection/vulkan/vulkan.h"
#include "detection/opencl/opencl.h"
#include "detection/opengl/opengl.h"
#include "modules/opengl/opengl.h"
const char* FF_GPU_VENDOR_NAME_APPLE = "Apple";
const char* FF_GPU_VENDOR_NAME_AMD = "AMD";
@@ -56,7 +57,10 @@ const char* detectByOpenGL(FFlist* gpus)
ffStrbufInit(&result.slv);
ffStrbufInit(&result.library);
const char* error = ffDetectOpenGL(&instance.config.modules.openGL, &result);
__attribute__((__cleanup__(ffDestroyOpenGLOptions))) FFOpenGLOptions options;
ffInitOpenGLOptions(&options);
const char* error = ffDetectOpenGL(&options, &result);
if (!error)
{
FFGPUResult* gpu = (FFGPUResult*) ffListAdd(gpus);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/gpu/option.h"
#define FF_GPU_TEMP_UNSET (0/0.0)
#define FF_GPU_CORE_COUNT_UNSET -1
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/host/option.h"
typedef struct FFHostResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/icons/option.h"
typedef struct FFIconsResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/initsystem/option.h"
typedef struct FFInitSystemResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/lm/option.h"
typedef struct FFLMResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/localip/option.h"
typedef struct FFLocalIpResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/media/option.h"
typedef struct FFMediaResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/memory/option.h"
typedef struct FFMemoryResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/netio/option.h"
typedef struct FFNetIOResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/opencl/option.h"
typedef struct FFOpenCLResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/opengl/option.h"
typedef struct FFOpenGLResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/os/option.h"
typedef struct FFOSResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/packages/option.h"
typedef struct FFPackagesResult
{
@@ -1,4 +1,5 @@
#include "fastfetch.h"
#include "modules/physicaldisk/option.h"
#define FF_PHYSICALDISK_TEMP_UNSET (0/0.0)
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/physicalmemory/option.h"
typedef struct FFPhysicalMemoryResult
{
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/poweradapter/option.h"
typedef struct FFPowerAdapterResult
{
+2 -2
View File
@@ -5,7 +5,7 @@
static FFNetworkingState states[2];
static const char* statuses[2] = { FF_UNITIALIZED, FF_UNITIALIZED };
void ffPreparePublicIp(FFPublicIpOptions* options)
void ffPreparePublicIp(FFPublicIPOptions* options)
{
FFNetworkingState* state = &states[options->ipv6];
const char** status = &statuses[options->ipv6];
@@ -58,7 +58,7 @@ static inline void wrapYyjsonFree(yyjson_doc** doc)
yyjson_doc_free(*doc);
}
const char* ffDetectPublicIp(FFPublicIpOptions* options, FFPublicIpResult* result)
const char* ffDetectPublicIp(FFPublicIPOptions* options, FFPublicIpResult* result)
{
FFNetworkingState* state = &states[options->ipv6];
const char** status = &statuses[options->ipv6];
+3 -2
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/publicip/option.h"
typedef struct FFPublicIpResult
{
@@ -8,5 +9,5 @@ typedef struct FFPublicIpResult
FFstrbuf location;
} FFPublicIpResult;
void ffPreparePublicIp(FFPublicIpOptions* options);
const char* ffDetectPublicIp(FFPublicIpOptions* options, FFPublicIpResult* result);
void ffPreparePublicIp(FFPublicIPOptions* options);
const char* ffDetectPublicIp(FFPublicIPOptions* options, FFPublicIpResult* result);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/swap/option.h"
typedef struct FFSwapResult
{
@@ -2,6 +2,7 @@
#include "fastfetch.h"
#include "common/font.h"
#include "modules/font/option.h"
typedef struct FFTerminalFontResult
{
@@ -1,6 +1,8 @@
#pragma once
#include "fastfetch.h"
#include "modules/terminal/option.h"
#include "modules/shell/option.h"
typedef struct FFShellResult
{
@@ -53,7 +53,7 @@ static pid_t getShellInfo(FFShellResult* result, pid_t pid)
ffStrbufContainS(&result->processName, "hyfetch") || //when hyfetch uses fastfetch as backend
ffStrbufEqualS(&result->processName, "clifm") || //https://github.com/leo-arch/clifm/issues/289
ffStrbufEqualS(&result->processName, "valgrind") ||
ffStrbufEqualS(&result->processName, "fastfetch") || //994
ffStrbufEqualS(&result->processName, "fastfetch") || //#994
ffStrbufEqualS(&result->processName, "flashfetch") ||
ffStrbufEqualS(&result->processName, "proot") ||
ffStrbufEqualS(&result->processName, "script") ||
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/terminalsize/option.h"
typedef struct FFTerminalSizeResult
{
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/terminaltheme/option.h"
typedef struct FFTerminalThemeColor
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/theme/option.h"
typedef struct FFThemeResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/tpm/option.h"
typedef struct FFTPMResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/uptime/option.h"
typedef struct FFUptimeResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/users/option.h"
typedef struct FFUserResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/version/option.h"
typedef struct FFVersionResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/vulkan/option.h"
typedef struct FFVulkanResult
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/weather/option.h"
void ffPrepareWeather(FFWeatherOptions* options);
const char* ffDetectWeather(FFWeatherOptions* options, FFstrbuf* result);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/wifi/option.h"
struct FFWifiInterface
{
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/wm/wm.h"
const char* ffDetectWMPlugin(FFstrbuf* pluginName);
const char* ffDetectWMVersion(const FFstrbuf* wmName, FFstrbuf* result, FFWMOptions* options);
+1
View File
@@ -1,6 +1,7 @@
#pragma once
#include "fastfetch.h"
#include "modules/zpool/option.h"
typedef struct FFZpoolResult
{
-2
View File
@@ -20,7 +20,6 @@
#include "util/platform/FFPlatform.h"
#include "util/unused.h"
#include "options/modules.h"
#include "options/logo.h"
#include "options/display.h"
#include "options/general.h"
@@ -42,7 +41,6 @@ typedef struct FFconfig
FFOptionsLogo logo;
FFOptionsDisplay display;
FFOptionsGeneral general;
FFOptionsModules modules;
} FFconfig;
typedef struct FFstate
+126 -43
View File
@@ -3,55 +3,138 @@
#include "common/init.h"
#include "modules/modules.h"
// A dirty replicate of neofetch
int main(void)
{
ffInitInstance(); //This also applies default configuration to instance.config
ffInitInstance(); // Init everything
//Modify instance.config here
FFOptionsModules* const options = &instance.config.modules;
// Modify global config here if needed
instance.config.display.sizeMaxPrefix = 2; // MB
instance.config.display.sizeNdigits = 2;
instance.config.display.freqNdigits = 3;
instance.config.display.freqSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_NEVER;
instance.config.display.sizeSpaceBeforeUnit = FF_SPACE_BEFORE_UNIT_NEVER;
// ffPrepareCPUUsage();
// ffPreparePublicIp(&options->publicIP);
// ffPrepareWeather(&options->weather);
//Does things like starting detection threads, disabling line wrap, etc
// Logo printing and other preparation stuff
ffStart();
//Printing
void* const modules[] = {
&options->title,
&options->separator,
&options->os,
&options->host,
&options->kernel,
&options->uptime,
&options->packages,
&options->shell,
&options->display,
&options->de,
&options->wm,
&options->wmTheme,
&options->theme,
&options->icons,
&options->font,
&options->cursor,
&options->terminal,
&options->terminalFont,
&options->cpu,
&options->gpu,
&options->memory,
&options->swap,
&options->disk,
&options->localIP,
&options->battery,
&options->powerAdapter,
&options->locale,
&options->break_,
&options->colors,
};
for (size_t i = 0; i < ARRAY_SIZE(modules); i++)
((const FFModuleBaseInfo*) modules[i])->printModule(modules[i]);
// Print all modules
{
__attribute__((cleanup(ffDestroyTitleOptions))) FFTitleOptions options;
ffInitTitleOptions(&options);
ffPrintTitle(&options);
}
{
__attribute__((cleanup(ffDestroySeparatorOptions))) FFSeparatorOptions options;
ffInitSeparatorOptions(&options);
ffPrintSeparator(&options);
}
{
__attribute__((cleanup(ffDestroyOSOptions))) FFOSOptions options;
ffInitOSOptions(&options);
ffPrintOS(&options);
}
{
__attribute__((cleanup(ffDestroyHostOptions))) FFHostOptions options;
ffInitHostOptions(&options);
ffPrintHost(&options);
}
{
__attribute__((cleanup(ffDestroyKernelOptions))) FFKernelOptions options;
ffInitKernelOptions(&options);
ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{release}");
ffPrintKernel(&options);
}
{
__attribute__((cleanup(ffDestroyUptimeOptions))) FFUptimeOptions options;
ffInitUptimeOptions(&options);
ffPrintUptime(&options);
}
{
__attribute__((cleanup(ffDestroyPackagesOptions))) FFPackagesOptions options;
ffInitPackagesOptions(&options);
options.combined = true;
ffPrintPackages(&options);
}
{
__attribute__((cleanup(ffDestroyShellOptions))) FFShellOptions options;
ffInitShellOptions(&options);
ffPrintShell(&options);
}
{
__attribute__((cleanup(ffDestroyDisplayOptions))) FFDisplayOptions options;
ffInitDisplayOptions(&options);
options.compactType = FF_DISPLAY_COMPACT_TYPE_ORIGINAL_BIT;
ffStrbufSetStatic(&options.moduleArgs.key, "Resolution");
ffPrintDisplay(&options);
}
{
__attribute__((cleanup(ffDestroyDEOptions))) FFDEOptions options;
ffInitDEOptions(&options);
ffPrintDE(&options);
}
{
instance.config.general.detectVersion = false;
__attribute__((cleanup(ffDestroyWMOptions))) FFWMOptions options;
ffInitWMOptions(&options);
options.detectPlugin = true;
ffPrintWM(&options);
instance.config.general.detectVersion = true;
}
{
__attribute__((cleanup(ffDestroyWMThemeOptions))) FFWMThemeOptions options;
ffInitWMThemeOptions(&options);
ffPrintWMTheme(&options);
}
{
__attribute__((cleanup(ffDestroyThemeOptions))) FFThemeOptions options;
ffInitThemeOptions(&options);
ffPrintTheme(&options);
}
{
__attribute__((cleanup(ffDestroyIconsOptions))) FFIconsOptions options;
ffInitIconsOptions(&options);
ffPrintIcons(&options);
}
{
__attribute__((cleanup(ffDestroyTerminalOptions))) FFTerminalOptions options;
ffInitTerminalOptions(&options);
ffPrintTerminal(&options);
}
{
__attribute__((cleanup(ffDestroyTerminalFontOptions))) FFTerminalFontOptions options;
ffInitTerminalFontOptions(&options);
ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{/name}{-}{/}{name}{?size} {size}{?}");
ffPrintTerminalFont(&options);
}
{
__attribute__((cleanup(ffDestroyCPUOptions))) FFCPUOptions options;
ffInitCPUOptions(&options);
ffPrintCPU(&options);
}
{
__attribute__((cleanup(ffDestroyGPUOptions))) FFGPUOptions options;
ffInitGPUOptions(&options);
ffStrbufSetStatic(&options.moduleArgs.key, "GPU");
ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{name}");
ffPrintGPU(&options);
}
{
__attribute__((cleanup(ffDestroyMemoryOptions))) FFMemoryOptions options;
ffInitMemoryOptions(&options);
ffStrbufSetStatic(&options.moduleArgs.outputFormat, "{} / {}");
ffPrintMemory(&options);
}
{
__attribute__((cleanup(ffDestroyBreakOptions))) FFBreakOptions options;
ffInitBreakOptions(&options);
ffPrintBreak(&options);
}
{
__attribute__((cleanup(ffDestroyColorsOptions))) FFColorsOptions options;
ffInitColorsOptions(&options);
ffPrintColors(&options);
}
ffFinish();
ffDestroyInstance();
+6 -8
View File
@@ -568,14 +568,12 @@ static bool logoTryKnownType(void)
{
FF_STRBUF_AUTO_DESTROY source = ffStrbufCreate();
FFCommandOptions* commandOptions = &instance.config.modules.command;
const char* error = ffProcessAppendStdOut(&source, commandOptions->param.length ? (char* const[]){
commandOptions->shell.chars,
commandOptions->param.chars,
options->source.chars,
NULL
} : (char* const[]){
commandOptions->shell.chars,
const char* error = ffProcessAppendStdOut(&source, (char* const[]){
#ifdef _WIN32
"cmd.exe", "/c",
#else
"/bin/sh", "-c",
#endif
options->source.chars,
NULL
});
+17 -18
View File
@@ -245,6 +245,23 @@ void ffGenerateBatteryJsonResult(FFBatteryOptions* options, yyjson_mut_doc* doc,
}
}
void ffInitBatteryOptions(FFBatteryOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
options->temp = false;
options->tempConfig = (FFColorRangeConfig) { 60, 80 };
options->percent = (FFPercentageModuleConfig) { 50, 20, 0 };
#ifdef _WIN32
options->useSetupApi = false;
#endif
}
void ffDestroyBatteryOptions(FFBatteryOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBatteryModuleInfo = {
.name = FF_BATTERY_MODULE_NAME,
.description = "Print battery capacity, status, etc",
@@ -272,21 +289,3 @@ FFModuleBaseInfo ffBatteryModuleInfo = {
{"Battery time remaining (formatted)", "time-formatted"},
}))
};
void ffInitBatteryOptions(FFBatteryOptions* options)
{
options->moduleInfo = ffBatteryModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
options->temp = false;
options->tempConfig = (FFColorRangeConfig) { 60, 80 };
options->percent = (FFPercentageModuleConfig) { 50, 20, 0 };
#ifdef _WIN32
options->useSetupApi = false;
#endif
}
void ffDestroyBatteryOptions(FFBatteryOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BATTERY_MODULE_NAME "Battery"
+2 -3
View File
@@ -1,13 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
typedef struct FFBatteryOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
bool temp;
@@ -18,3 +15,5 @@ typedef struct FFBatteryOptions
bool useSetupApi;
#endif
} FFBatteryOptions;
static_assert(sizeof(FFBatteryOptions) <= FF_OPTION_MAX_SIZE, "FFBatteryOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -128,6 +128,16 @@ exit:
ffStrbufDestroy(&bios.type);
}
void ffInitBiosOptions(FFBiosOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBiosOptions(FFBiosOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBiosModuleInfo = {
.name = FF_BIOS_MODULE_NAME,
.description = "Print information of 1st-stage bootloader (name, version, release date, etc)",
@@ -145,14 +155,3 @@ FFModuleBaseInfo ffBiosModuleInfo = {
{"Firmware type", "type"},
}))
};
void ffInitBiosOptions(FFBiosOptions* options)
{
options->moduleInfo = ffBiosModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBiosOptions(FFBiosOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BIOS_MODULE_NAME "BIOS"
+2 -3
View File
@@ -1,11 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFBiosOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFBiosOptions;
static_assert(sizeof(FFBiosOptions) <= FF_OPTION_MAX_SIZE, "FFBiosOptions size exceeds maximum allowed size");
+12 -13
View File
@@ -163,6 +163,18 @@ void ffGenerateBluetoothJsonResult(FFBluetoothOptions* options, yyjson_mut_doc*
}
}
void ffInitBluetoothOptions(FFBluetoothOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
options->showDisconnected = false;
options->percent = (FFPercentageModuleConfig) { 50, 20, 0 };
}
void ffDestroyBluetoothOptions(FFBluetoothOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBluetoothModuleInfo = {
.name = FF_BLUETOOTH_MODULE_NAME,
.description = "List (connected) bluetooth devices",
@@ -181,16 +193,3 @@ FFModuleBaseInfo ffBluetoothModuleInfo = {
{"Battery percentage bar", "battery-percentage-bar"},
}))
};
void ffInitBluetoothOptions(FFBluetoothOptions* options)
{
options->moduleInfo = ffBluetoothModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
options->showDisconnected = false;
options->percent = (FFPercentageModuleConfig) { 50, 20, 0 };
}
void ffDestroyBluetoothOptions(FFBluetoothOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BLUETOOTH_MODULE_NAME "Bluetooth"
+2 -3
View File
@@ -1,15 +1,14 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
typedef struct FFBluetoothOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
bool showDisconnected;
FFPercentageModuleConfig percent;
} FFBluetoothOptions;
static_assert(sizeof(FFBluetoothOptions) <= FF_OPTION_MAX_SIZE, "FFBluetoothOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -166,6 +166,16 @@ void ffGenerateBluetoothRadioJsonResult(FF_MAYBE_UNUSED FFBluetoothRadioOptions*
}
}
void ffInitBluetoothRadioOptions(FFBluetoothRadioOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "󰐻");
}
void ffDestroyBluetoothRadioOptions(FFBluetoothRadioOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBluetoothRadioModuleInfo = {
.name = FF_BLUETOOTHRADIO_MODULE_NAME,
.description = "List bluetooth radios width supported version and vendor",
@@ -186,14 +196,3 @@ FFModuleBaseInfo ffBluetoothRadioModuleInfo = {
{"Connectable / Pairable", "connectable"},
}))
};
void ffInitBluetoothRadioOptions(FFBluetoothRadioOptions* options)
{
options->moduleInfo = ffBluetoothRadioModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "󰐻");
}
void ffDestroyBluetoothRadioOptions(FFBluetoothRadioOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BLUETOOTHRADIO_MODULE_NAME "BluetoothRadio"
+2 -3
View File
@@ -1,12 +1,11 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
typedef struct FFBluetoothRadioOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFBluetoothRadioOptions;
static_assert(sizeof(FFBluetoothRadioOptions) <= FF_OPTION_MAX_SIZE, "FFBluetoothRadioOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -106,6 +106,16 @@ exit:
ffStrbufDestroy(&board.serial);
}
void ffInitBoardOptions(FFBoardOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBoardOptions(FFBoardOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBoardModuleInfo = {
.name = FF_BOARD_MODULE_NAME,
.description = "Print motherboard name and other info",
@@ -122,14 +132,3 @@ FFModuleBaseInfo ffBoardModuleInfo = {
{"Board serial number", "serial"},
}))
};
void ffInitBoardOptions(FFBoardOptions* options)
{
options->moduleInfo = ffBoardModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBoardOptions(FFBoardOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BOARD_MODULE_NAME "Board"
+2 -3
View File
@@ -1,11 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFBoardOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFBoardOptions;
static_assert(sizeof(FFBoardOptions) <= FF_OPTION_MAX_SIZE, "FFBoardOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -97,6 +97,16 @@ exit:
ffStrbufDestroy(&bootmgr.firmware);
}
void ffInitBootmgrOptions(FFBootmgrOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBootmgrOptions(FFBootmgrOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBootmgrModuleInfo = {
.name = FF_BOOTMGR_MODULE_NAME,
.description = "Print information of 2nd-stage bootloader (name, firmware, etc)",
@@ -114,14 +124,3 @@ FFModuleBaseInfo ffBootmgrModuleInfo = {
{"Boot order", "order"},
}))
};
void ffInitBootmgrOptions(FFBootmgrOptions* options)
{
options->moduleInfo = ffBootmgrModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyBootmgrOptions(FFBootmgrOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BOOTMGR_MODULE_NAME "Bootmgr"
+2 -3
View File
@@ -1,11 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFBootmgrOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFBootmgrOptions;
static_assert(sizeof(FFBootmgrOptions) <= FF_OPTION_MAX_SIZE, "FFBootmgrOptions size exceeds maximum allowed size");
+8 -9
View File
@@ -21,6 +21,14 @@ void ffParseBreakJsonObject(FF_MAYBE_UNUSED FFBreakOptions* options, FF_MAYBE_UN
}
}
void ffInitBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options)
{
}
void ffDestroyBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options)
{
}
FFModuleBaseInfo ffBreakModuleInfo = {
.name = FF_BREAK_MODULE_NAME,
.description = "Print a empty line",
@@ -29,12 +37,3 @@ FFModuleBaseInfo ffBreakModuleInfo = {
.parseJsonObject = (void*) ffParseBreakJsonObject,
.printModule = (void*) ffPrintBreak,
};
void ffInitBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options)
{
options->moduleInfo = ffBreakModuleInfo;
}
void ffDestroyBreakOptions(FF_MAYBE_UNUSED FFBreakOptions* options)
{
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BREAK_MODULE_NAME "Break"
+2 -3
View File
@@ -1,10 +1,9 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFBreakOptions
{
FFModuleBaseInfo moduleInfo;
} FFBreakOptions;
static_assert(sizeof(FFBreakOptions) <= FF_OPTION_MAX_SIZE, "FFBreakOptions size exceeds maximum allowed size");
+14 -15
View File
@@ -187,6 +187,20 @@ void ffGenerateBrightnessJsonResult(FF_MAYBE_UNUSED FFBrightnessOptions* options
}
}
void ffInitBrightnessOptions(FFBrightnessOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "󰯪");
options->ddcciSleep = 10;
options->percent = (FFPercentageModuleConfig) { 100, 100, 0 };
options->compact = false;
}
void ffDestroyBrightnessOptions(FFBrightnessOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBrightnessModuleInfo = {
.name = FF_BRIGHTNESS_MODULE_NAME,
.description = "Print current brightness level of your monitors",
@@ -206,18 +220,3 @@ FFModuleBaseInfo ffBrightnessModuleInfo = {
{"Is built-in screen", "is-builtin"},
}))
};
void ffInitBrightnessOptions(FFBrightnessOptions* options)
{
options->moduleInfo = ffBrightnessModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "󰯪");
options->ddcciSleep = 10;
options->percent = (FFPercentageModuleConfig) { 100, 100, 0 };
options->compact = false;
}
void ffDestroyBrightnessOptions(FFBrightnessOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BRIGHTNESS_MODULE_NAME "Brightness"
+2 -3
View File
@@ -1,16 +1,15 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
typedef struct FFBrightnessOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
uint32_t ddcciSleep; // ms
FFPercentageModuleConfig percent;
bool compact;
} FFBrightnessOptions;
static_assert(sizeof(FFBrightnessOptions) <= FF_OPTION_MAX_SIZE, "FFBrightnessOptions size exceeds maximum allowed size");
+11 -12
View File
@@ -200,6 +200,17 @@ void ffGenerateBtrfsJsonResult(FF_MAYBE_UNUSED FFBtrfsOptions* options, yyjson_m
}
}
void ffInitBtrfsOptions(FFBtrfsOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "󱑛");
options->percent = (FFPercentageModuleConfig) { 50, 80, 0 };
}
void ffDestroyBtrfsOptions(FFBtrfsOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffBtrfsModuleInfo = {
.name = FF_BTRFS_MODULE_NAME,
.description = "Print Linux BTRFS volumes",
@@ -225,15 +236,3 @@ FFModuleBaseInfo ffBtrfsModuleInfo = {
{"Sector size", "sector-size"},
}))
};
void ffInitBtrfsOptions(FFBtrfsOptions* options)
{
options->moduleInfo = ffBtrfsModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "󱑛");
options->percent = (FFPercentageModuleConfig) { 50, 80, 0 };
}
void ffDestroyBtrfsOptions(FFBtrfsOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_BTRFS_MODULE_NAME "Btrfs"
+2 -3
View File
@@ -1,14 +1,13 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
#include "common/percent.h"
typedef struct FFBtrfsOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
FFPercentageModuleConfig percent;
} FFBtrfsOptions;
static_assert(sizeof(FFBtrfsOptions) <= FF_OPTION_MAX_SIZE, "FFBtrfsOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -120,6 +120,16 @@ void ffGenerateCameraJsonResult(FF_MAYBE_UNUSED FFCameraOptions* options, yyjson
}
}
void ffInitCameraOptions(FFCameraOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "󰄀");
}
void ffDestroyCameraOptions(FFCameraOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffCameraModuleInfo = {
.name = FF_CAMERA_MODULE_NAME,
.description = "Print available cameras",
@@ -138,14 +148,3 @@ FFModuleBaseInfo ffCameraModuleInfo = {
{"Height (in px)", "height"},
}))
};
void ffInitCameraOptions(FFCameraOptions* options)
{
options->moduleInfo = ffCameraModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "󰄀");
}
void ffDestroyCameraOptions(FFCameraOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_CAMERA_MODULE_NAME "Camera"
+2 -3
View File
@@ -1,11 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFCameraOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFCameraOptions;
static_assert(sizeof(FFCameraOptions) <= FF_OPTION_MAX_SIZE, "FFCameraOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -107,6 +107,16 @@ exit:
ffStrbufDestroy(&result.serial);
}
void ffInitChassisOptions(FFChassisOptions* options)
{
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyChassisOptions(FFChassisOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffChassisModuleInfo = {
.name = FF_CHASSIS_MODULE_NAME,
.description = "Print chassis type (desktop, laptop, etc)",
@@ -123,14 +133,3 @@ FFModuleBaseInfo ffChassisModuleInfo = {
{"Chassis serial number", "serial"},
})),
};
void ffInitChassisOptions(FFChassisOptions* options)
{
options->moduleInfo = ffChassisModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
}
void ffDestroyChassisOptions(FFChassisOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
+1 -1
View File
@@ -1,6 +1,6 @@
#pragma once
#include "fastfetch.h"
#include "option.h"
#define FF_CHASSIS_MODULE_NAME "Chassis"
+2 -3
View File
@@ -1,11 +1,10 @@
#pragma once
// This file will be included in "fastfetch.h", do NOT put unnecessary things here
#include "common/option.h"
typedef struct FFChassisOptions
{
FFModuleBaseInfo moduleInfo;
FFModuleArgs moduleArgs;
} FFChassisOptions;
static_assert(sizeof(FFChassisOptions) <= FF_OPTION_MAX_SIZE, "FFChassisOptions size exceeds maximum allowed size");
+10 -11
View File
@@ -239,19 +239,8 @@ void ffGenerateColorsJsonConfig(FFColorsOptions* options, yyjson_mut_doc* doc, y
}
}
FFModuleBaseInfo ffColorsModuleInfo = {
.name = FF_COLORS_MODULE_NAME,
.description = "Print some colored blocks",
.initOptions = (void*) ffInitColorsOptions,
.destroyOptions = (void*) ffDestroyColorsOptions,
.parseJsonObject = (void*) ffParseColorsJsonObject,
.printModule = (void*) ffPrintColors,
.generateJsonConfig = (void*) ffGenerateColorsJsonConfig,
};
void ffInitColorsOptions(FFColorsOptions* options)
{
options->moduleInfo = ffColorsModuleInfo;
ffOptionInitModuleArg(&options->moduleArgs, "");
ffStrbufSetStatic(&options->moduleArgs.key, " ");
options->symbol = FF_COLORS_SYMBOL_BACKGROUND;
@@ -266,3 +255,13 @@ void ffDestroyColorsOptions(FF_MAYBE_UNUSED FFColorsOptions* options)
{
ffOptionDestroyModuleArg(&options->moduleArgs);
}
FFModuleBaseInfo ffColorsModuleInfo = {
.name = FF_COLORS_MODULE_NAME,
.description = "Print some colored blocks",
.initOptions = (void*) ffInitColorsOptions,
.destroyOptions = (void*) ffDestroyColorsOptions,
.parseJsonObject = (void*) ffParseColorsJsonObject,
.printModule = (void*) ffPrintColors,
.generateJsonConfig = (void*) ffGenerateColorsJsonConfig,
};

Some files were not shown because too many files have changed in this diff Show More