2021-04-09 14:07:05 +02:00
|
|
|
#include "fastfetch.h"
|
2022-07-30 23:30:46 +02:00
|
|
|
#include "common/parsing.h"
|
2022-10-12 14:13:20 +08:00
|
|
|
#include "common/thread.h"
|
2022-09-06 15:42:37 +02:00
|
|
|
#include "detection/displayserver/displayserver.h"
|
2022-12-06 17:03:31 +08:00
|
|
|
#include "util/textModifier.h"
|
2021-04-09 14:07:05 +02:00
|
|
|
|
2022-06-18 14:25:31 +02:00
|
|
|
#include <stdlib.h>
|
2021-04-09 14:07:05 +02:00
|
|
|
#include <unistd.h>
|
2021-05-08 12:14:55 +02:00
|
|
|
#include <sys/stat.h>
|
2022-10-13 18:12:54 +08:00
|
|
|
#ifdef _WIN32
|
2023-03-24 23:21:39 +08:00
|
|
|
#include <windows.h>
|
2022-10-13 18:12:54 +08:00
|
|
|
#include <locale.h>
|
2023-01-02 11:49:41 +08:00
|
|
|
#include "util/windows/unicode.h"
|
2022-10-13 18:12:54 +08:00
|
|
|
#else
|
|
|
|
|
#include <signal.h>
|
|
|
|
|
#endif
|
2021-04-09 14:07:05 +02:00
|
|
|
|
|
|
|
|
static void initState(FFstate* state)
|
|
|
|
|
{
|
2022-04-06 14:02:05 +02:00
|
|
|
state->logoWidth = 0;
|
2022-04-02 14:35:43 +02:00
|
|
|
state->logoHeight = 0;
|
|
|
|
|
state->keysHeight = 0;
|
2023-01-14 16:38:34 +01:00
|
|
|
|
2023-01-15 15:57:26 +01:00
|
|
|
ffPlatformInit(&state->platform);
|
2021-04-09 14:07:05 +02:00
|
|
|
}
|
|
|
|
|
|
2022-06-17 18:15:36 +02:00
|
|
|
static void initModuleArg(FFModuleArgs* args)
|
|
|
|
|
{
|
2022-10-19 15:03:59 +08:00
|
|
|
ffStrbufInit(&args->key);
|
|
|
|
|
ffStrbufInit(&args->outputFormat);
|
|
|
|
|
ffStrbufInit(&args->errorFormat);
|
2022-06-17 18:15:36 +02:00
|
|
|
}
|
|
|
|
|
|
2021-06-13 14:23:35 +02:00
|
|
|
static void defaultConfig(FFinstance* instance)
|
2021-04-09 14:07:05 +02:00
|
|
|
{
|
2022-09-22 22:02:58 +02:00
|
|
|
ffStrbufInitA(&instance->config.logo.source, 0);
|
2022-07-10 18:28:17 +02:00
|
|
|
instance->config.logo.type = FF_LOGO_TYPE_AUTO;
|
2022-04-02 14:35:43 +02:00
|
|
|
for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i)
|
2022-07-10 18:28:17 +02:00
|
|
|
ffStrbufInit(&instance->config.logo.colors[i]);
|
|
|
|
|
instance->config.logo.width = 0;
|
|
|
|
|
instance->config.logo.height = 0; //preserve aspect ratio
|
2023-01-01 17:24:37 +08:00
|
|
|
instance->config.logo.paddingTop = 0;
|
2022-07-10 18:28:17 +02:00
|
|
|
instance->config.logo.paddingLeft = 0;
|
|
|
|
|
instance->config.logo.paddingRight = 4;
|
|
|
|
|
instance->config.logo.printRemaining = true;
|
2022-12-22 21:37:16 +08:00
|
|
|
instance->config.logo.preserveAspectRadio = false;
|
2022-01-12 01:02:14 +01:00
|
|
|
|
2022-12-22 02:40:56 +08:00
|
|
|
instance->config.logo.chafaFgOnly = false;
|
2022-12-22 02:07:35 +08:00
|
|
|
ffStrbufInitS(&instance->config.logo.chafaSymbols, "block+border+space-wide-inverted"); // Chafa default
|
2022-12-22 11:36:13 +08:00
|
|
|
instance->config.logo.chafaCanvasMode = UINT32_MAX;
|
|
|
|
|
instance->config.logo.chafaColorSpace = UINT32_MAX;
|
|
|
|
|
instance->config.logo.chafaDitherMode = UINT32_MAX;
|
2022-12-22 02:07:35 +08:00
|
|
|
|
2022-09-07 19:50:10 +02:00
|
|
|
ffStrbufInit(&instance->config.colorKeys);
|
|
|
|
|
ffStrbufInit(&instance->config.colorTitle);
|
|
|
|
|
|
2022-01-12 01:02:14 +01:00
|
|
|
ffStrbufInit(&instance->config.separator);
|
|
|
|
|
ffStrbufAppendS(&instance->config.separator, ": ");
|
|
|
|
|
|
2021-06-13 14:23:35 +02:00
|
|
|
instance->config.showErrors = false;
|
|
|
|
|
instance->config.recache = false;
|
|
|
|
|
instance->config.allowSlowOperations = false;
|
2021-06-17 13:49:25 +02:00
|
|
|
instance->config.disableLinewrap = true;
|
|
|
|
|
instance->config.hideCursor = true;
|
2022-06-02 23:06:49 +02:00
|
|
|
instance->config.escapeBedrock = true;
|
2022-08-26 16:02:04 +02:00
|
|
|
instance->config.binaryPrefixType = FF_BINARY_PREFIX_TYPE_IEC;
|
2022-06-04 15:21:34 +02:00
|
|
|
instance->config.glType = FF_GL_TYPE_AUTO;
|
2022-06-06 14:02:21 +02:00
|
|
|
instance->config.pipe = false;
|
2022-07-25 15:01:11 +02:00
|
|
|
instance->config.multithreading = true;
|
2022-12-14 11:30:50 +08:00
|
|
|
instance->config.stat = false;
|
2021-06-13 14:23:35 +02:00
|
|
|
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.os);
|
|
|
|
|
initModuleArg(&instance->config.host);
|
2022-10-05 00:41:43 +08:00
|
|
|
initModuleArg(&instance->config.bios);
|
2022-10-05 17:03:30 +08:00
|
|
|
initModuleArg(&instance->config.board);
|
2023-01-09 18:59:02 +08:00
|
|
|
initModuleArg(&instance->config.brightness);
|
2022-12-24 22:48:10 +08:00
|
|
|
initModuleArg(&instance->config.chassis);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.kernel);
|
|
|
|
|
initModuleArg(&instance->config.uptime);
|
|
|
|
|
initModuleArg(&instance->config.processes);
|
|
|
|
|
initModuleArg(&instance->config.packages);
|
|
|
|
|
initModuleArg(&instance->config.shell);
|
2023-01-18 01:37:47 +08:00
|
|
|
initModuleArg(&instance->config.display);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.de);
|
|
|
|
|
initModuleArg(&instance->config.wm);
|
|
|
|
|
initModuleArg(&instance->config.wmTheme);
|
|
|
|
|
initModuleArg(&instance->config.theme);
|
|
|
|
|
initModuleArg(&instance->config.icons);
|
|
|
|
|
initModuleArg(&instance->config.font);
|
|
|
|
|
initModuleArg(&instance->config.cursor);
|
|
|
|
|
initModuleArg(&instance->config.terminal);
|
|
|
|
|
initModuleArg(&instance->config.terminalFont);
|
|
|
|
|
initModuleArg(&instance->config.cpu);
|
|
|
|
|
initModuleArg(&instance->config.cpuUsage);
|
|
|
|
|
initModuleArg(&instance->config.gpu);
|
|
|
|
|
initModuleArg(&instance->config.memory);
|
2022-09-08 14:51:31 +02:00
|
|
|
initModuleArg(&instance->config.swap);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.disk);
|
|
|
|
|
initModuleArg(&instance->config.battery);
|
2022-09-22 19:00:59 +08:00
|
|
|
initModuleArg(&instance->config.powerAdapter);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.locale);
|
|
|
|
|
initModuleArg(&instance->config.localIP);
|
|
|
|
|
initModuleArg(&instance->config.publicIP);
|
2022-09-29 17:05:01 +08:00
|
|
|
initModuleArg(&instance->config.weather);
|
2022-11-26 18:23:08 +08:00
|
|
|
initModuleArg(&instance->config.wifi);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.player);
|
2022-12-30 10:47:57 +08:00
|
|
|
initModuleArg(&instance->config.media);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.dateTime);
|
|
|
|
|
initModuleArg(&instance->config.date);
|
|
|
|
|
initModuleArg(&instance->config.time);
|
|
|
|
|
initModuleArg(&instance->config.vulkan);
|
2023-06-06 15:48:24 +08:00
|
|
|
initModuleArg(&instance->config.wallpaper);
|
2022-06-17 18:15:36 +02:00
|
|
|
initModuleArg(&instance->config.openGL);
|
|
|
|
|
initModuleArg(&instance->config.openCL);
|
2022-09-26 23:45:46 +08:00
|
|
|
initModuleArg(&instance->config.users);
|
2023-01-24 10:39:33 +01:00
|
|
|
initModuleArg(&instance->config.bluetooth);
|
2023-01-25 14:28:13 +08:00
|
|
|
initModuleArg(&instance->config.sound);
|
2023-02-01 14:01:39 +08:00
|
|
|
initModuleArg(&instance->config.gamepad);
|
2021-11-16 12:54:49 +01:00
|
|
|
|
|
|
|
|
ffStrbufInitA(&instance->config.libPCI, 0);
|
|
|
|
|
ffStrbufInitA(&instance->config.libVulkan, 0);
|
2022-01-05 14:40:57 +01:00
|
|
|
ffStrbufInitA(&instance->config.libWayland, 0);
|
|
|
|
|
ffStrbufInitA(&instance->config.libXcbRandr, 0);
|
|
|
|
|
ffStrbufInitA(&instance->config.libXcb, 0);
|
2021-11-16 12:54:49 +01:00
|
|
|
ffStrbufInitA(&instance->config.libXrandr, 0);
|
2022-01-05 14:40:57 +01:00
|
|
|
ffStrbufInitA(&instance->config.libX11, 0);
|
2021-11-16 12:54:49 +01:00
|
|
|
ffStrbufInitA(&instance->config.libGIO, 0);
|
|
|
|
|
ffStrbufInitA(&instance->config.libDConf, 0);
|
2022-02-13 23:51:13 +01:00
|
|
|
ffStrbufInitA(&instance->config.libDBus, 0);
|
2021-11-16 12:54:49 +01:00
|
|
|
ffStrbufInitA(&instance->config.libXFConf, 0);
|
2022-05-23 19:30:02 +02:00
|
|
|
ffStrbufInitA(&instance->config.libSQLite3, 0);
|
2022-05-24 13:36:33 +02:00
|
|
|
ffStrbufInitA(&instance->config.librpm, 0);
|
2022-04-06 14:02:05 +02:00
|
|
|
ffStrbufInitA(&instance->config.libImageMagick, 0);
|
2022-04-14 15:11:14 +02:00
|
|
|
ffStrbufInitA(&instance->config.libZ, 0);
|
2022-04-28 19:15:46 +02:00
|
|
|
ffStrbufInitA(&instance->config.libChafa, 0);
|
2022-06-04 15:21:34 +02:00
|
|
|
ffStrbufInitA(&instance->config.libEGL, 0);
|
|
|
|
|
ffStrbufInitA(&instance->config.libGLX, 0);
|
2022-06-04 19:30:26 +02:00
|
|
|
ffStrbufInitA(&instance->config.libOSMesa, 0);
|
2022-06-05 00:18:40 +02:00
|
|
|
ffStrbufInitA(&instance->config.libOpenCL, 0);
|
2023-03-25 10:00:35 +08:00
|
|
|
ffStrbufInitA(&instance->config.libcJSON, 0);
|
2022-09-26 23:07:18 +08:00
|
|
|
ffStrbufInitA(&instance->config.libfreetype, 0);
|
2023-01-26 15:48:28 +01:00
|
|
|
ffStrbufInit(&instance->config.libPulse);
|
2022-11-27 16:00:56 +08:00
|
|
|
ffStrbufInit(&instance->config.libwlanapi);
|
2023-01-17 12:45:26 +08:00
|
|
|
ffStrbufInit(&instance->config.libnm);
|
2021-11-16 12:54:49 +01:00
|
|
|
|
2022-09-25 15:23:00 +08:00
|
|
|
instance->config.cpuTemp = false;
|
|
|
|
|
instance->config.gpuTemp = false;
|
2023-03-25 13:24:28 +08:00
|
|
|
instance->config.gpuForceVulkan = false;
|
2022-09-25 15:23:00 +08:00
|
|
|
instance->config.batteryTemp = false;
|
|
|
|
|
|
2023-01-12 11:41:07 +01:00
|
|
|
instance->config.gpuHideIntegrated = false;
|
|
|
|
|
instance->config.gpuHideDiscrete = false;
|
|
|
|
|
|
2023-01-11 17:17:17 +08:00
|
|
|
instance->config.shellVersion = true;
|
|
|
|
|
instance->config.terminalVersion = true;
|
|
|
|
|
|
2022-07-22 19:36:00 +02:00
|
|
|
instance->config.titleFQDN = false;
|
|
|
|
|
|
2021-11-16 12:54:49 +01:00
|
|
|
ffStrbufInitA(&instance->config.diskFolders, 0);
|
2023-06-08 21:34:56 +08:00
|
|
|
instance->config.diskShowTypes = FF_DISK_TYPE_REGULAR_BIT | FF_DISK_TYPE_EXTERNAL_BIT;
|
2021-11-16 12:54:49 +01:00
|
|
|
|
2023-03-22 16:19:39 +08:00
|
|
|
instance->config.displayCompactType = FF_DISPLAY_COMPACT_TYPE_NONE;
|
2023-03-22 16:49:53 +08:00
|
|
|
instance->config.displayDetectName = false;
|
|
|
|
|
instance->config.displayPreciseRefreshRate = false;
|
2023-03-22 16:19:39 +08:00
|
|
|
|
2023-01-24 12:02:20 +01:00
|
|
|
instance->config.bluetoothShowDisconnected = false;
|
|
|
|
|
|
2023-01-31 21:12:47 +08:00
|
|
|
instance->config.soundType = FF_SOUND_TYPE_MAIN;
|
2023-01-25 14:28:13 +08:00
|
|
|
|
2021-11-16 12:54:49 +01:00
|
|
|
ffStrbufInitA(&instance->config.batteryDir, 0);
|
2021-10-17 12:42:15 +08:00
|
|
|
|
2021-11-18 18:25:24 +01:00
|
|
|
ffStrbufInitA(&instance->config.separatorString, 0);
|
|
|
|
|
|
2023-06-08 21:04:56 +08:00
|
|
|
instance->config.localIpShowType = FF_LOCALIP_TYPE_IPV4_BIT;
|
2022-09-26 16:20:51 +08:00
|
|
|
ffStrbufInit(&instance->config.localIpNamePrefix);
|
2022-01-10 20:20:18 +01:00
|
|
|
|
2022-01-12 19:16:49 +01:00
|
|
|
instance->config.publicIpTimeout = 0;
|
2022-09-29 14:22:40 +08:00
|
|
|
ffStrbufInit(&instance->config.publicIpUrl);
|
2022-01-18 18:56:37 +01:00
|
|
|
|
2022-09-29 17:05:01 +08:00
|
|
|
instance->config.weatherTimeout = 0;
|
|
|
|
|
ffStrbufInitS(&instance->config.weatherOutputFormat, "%t+-+%C+(%l)");
|
|
|
|
|
|
2022-01-18 18:56:37 +01:00
|
|
|
ffStrbufInitA(&instance->config.osFile, 0);
|
2022-02-13 23:51:13 +01:00
|
|
|
|
|
|
|
|
ffStrbufInitA(&instance->config.playerName, 0);
|
2022-10-18 22:55:28 +08:00
|
|
|
|
|
|
|
|
instance->config.percentType = 1;
|
2023-01-13 19:26:00 +08:00
|
|
|
|
|
|
|
|
ffStrbufInitS(&instance->config.commandShell,
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
|
"cmd"
|
|
|
|
|
#elif defined(__FreeBSD__)
|
|
|
|
|
"csh"
|
|
|
|
|
#else
|
|
|
|
|
"bash"
|
|
|
|
|
#endif
|
|
|
|
|
);
|
|
|
|
|
ffListInit(&instance->config.commandKeys, sizeof(FFstrbuf));
|
|
|
|
|
ffListInit(&instance->config.commandTexts, sizeof(FFstrbuf));
|
2021-04-09 14:07:05 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ffInitInstance(FFinstance* instance)
|
|
|
|
|
{
|
2023-01-15 15:57:26 +01:00
|
|
|
#ifdef WIN32
|
|
|
|
|
//https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale?source=recommendations&view=msvc-170#utf-8-support
|
|
|
|
|
setlocale(LC_ALL, ".UTF8");
|
|
|
|
|
#endif
|
|
|
|
|
|
2021-04-09 14:07:05 +02:00
|
|
|
initState(&instance->state);
|
2021-06-13 14:23:35 +02:00
|
|
|
defaultConfig(instance);
|
2021-04-09 14:07:05 +02:00
|
|
|
}
|
|
|
|
|
|
2023-02-24 17:45:04 +08:00
|
|
|
#if defined(FF_HAVE_THREADS) && !(defined(__APPLE__) || defined(_WIN32) || defined(__ANDROID__))
|
2022-07-25 15:01:11 +02:00
|
|
|
|
2023-02-14 17:46:21 +08:00
|
|
|
#include "detection/gtk_qt/gtk_qt.h"
|
|
|
|
|
|
2023-02-24 17:45:04 +08:00
|
|
|
#define FF_START_DETECTION_THREADS
|
2022-07-25 15:01:11 +02:00
|
|
|
|
2023-02-24 17:45:04 +08:00
|
|
|
FF_THREAD_ENTRY_DECL_WRAPPER(ffConnectDisplayServer, FFinstance*)
|
2022-10-12 14:13:20 +08:00
|
|
|
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectQt, FFinstance*)
|
|
|
|
|
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK2, FFinstance*)
|
|
|
|
|
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK3, FFinstance*)
|
|
|
|
|
FF_THREAD_ENTRY_DECL_WRAPPER(ffDetectGTK4, FFinstance*)
|
2022-07-25 15:01:11 +02:00
|
|
|
|
|
|
|
|
void startDetectionThreads(FFinstance* instance)
|
|
|
|
|
{
|
2022-11-02 16:10:12 +08:00
|
|
|
ffThreadDetach(ffThreadCreate(ffConnectDisplayServerThreadMain, instance));
|
|
|
|
|
ffThreadDetach(ffThreadCreate(ffDetectQtThreadMain, instance));
|
|
|
|
|
ffThreadDetach(ffThreadCreate(ffDetectGTK2ThreadMain, instance));
|
|
|
|
|
ffThreadDetach(ffThreadCreate(ffDetectGTK3ThreadMain, instance));
|
|
|
|
|
ffThreadDetach(ffThreadCreate(ffDetectGTK4ThreadMain, instance));
|
2022-09-15 11:59:06 +02:00
|
|
|
}
|
|
|
|
|
|
2023-02-24 17:45:04 +08:00
|
|
|
#endif //FF_HAVE_THREADS
|
|
|
|
|
|
2022-06-06 14:02:21 +02:00
|
|
|
static volatile bool ffDisableLinewrap = true;
|
|
|
|
|
static volatile bool ffHideCursor = true;
|
|
|
|
|
|
|
|
|
|
static void resetConsole()
|
2021-10-23 15:48:24 +02:00
|
|
|
{
|
2022-06-06 14:02:21 +02:00
|
|
|
if(ffDisableLinewrap)
|
2021-10-23 15:48:24 +02:00
|
|
|
fputs("\033[?7h", stdout);
|
|
|
|
|
|
2022-06-06 14:02:21 +02:00
|
|
|
if(ffHideCursor)
|
2021-10-23 15:48:24 +02:00
|
|
|
fputs("\033[?25h", stdout);
|
2023-01-14 17:31:04 +08:00
|
|
|
|
|
|
|
|
#if defined(_WIN32) && defined(FF_ENABLE_BUFFER)
|
|
|
|
|
fflush(stdout);
|
|
|
|
|
#endif
|
2021-10-23 15:48:24 +02:00
|
|
|
}
|
|
|
|
|
|
2022-10-13 18:12:54 +08:00
|
|
|
#ifdef _WIN32
|
|
|
|
|
BOOL WINAPI consoleHandler(DWORD signal)
|
|
|
|
|
{
|
2022-11-12 23:30:34 +08:00
|
|
|
FF_UNUSED(signal);
|
2023-02-24 17:45:04 +08:00
|
|
|
resetConsole();
|
2022-11-12 23:30:34 +08:00
|
|
|
exit(0);
|
2022-10-13 18:12:54 +08:00
|
|
|
}
|
|
|
|
|
#else
|
2021-10-23 15:48:24 +02:00
|
|
|
static void exitSignalHandler(int signal)
|
|
|
|
|
{
|
|
|
|
|
FF_UNUSED(signal);
|
2022-06-06 14:02:21 +02:00
|
|
|
resetConsole();
|
2021-10-23 15:48:24 +02:00
|
|
|
exit(0);
|
|
|
|
|
}
|
2022-10-13 18:12:54 +08:00
|
|
|
#endif
|
2021-10-23 15:48:24 +02:00
|
|
|
|
2021-06-17 13:49:25 +02:00
|
|
|
void ffStart(FFinstance* instance)
|
|
|
|
|
{
|
2023-02-24 17:45:04 +08:00
|
|
|
#ifdef FF_START_DETECTION_THREADS
|
|
|
|
|
if(instance->config.multithreading)
|
|
|
|
|
startDetectionThreads(instance);
|
|
|
|
|
#endif
|
2022-07-25 15:01:11 +02:00
|
|
|
|
2022-06-06 14:02:21 +02:00
|
|
|
ffDisableLinewrap = instance->config.disableLinewrap && !instance->config.pipe;
|
|
|
|
|
ffHideCursor = instance->config.hideCursor && !instance->config.pipe;
|
2021-10-23 15:48:24 +02:00
|
|
|
|
2022-10-13 18:12:54 +08:00
|
|
|
#ifdef _WIN32
|
2022-12-14 16:27:04 +08:00
|
|
|
#ifdef FF_ENABLE_BUFFER
|
|
|
|
|
setvbuf(stdout, NULL, _IOFBF, 4096);
|
|
|
|
|
#endif
|
2022-10-13 18:12:54 +08:00
|
|
|
SetConsoleCtrlHandler(consoleHandler, TRUE);
|
2022-11-12 23:30:34 +08:00
|
|
|
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
|
|
|
DWORD mode = 0;
|
|
|
|
|
GetConsoleMode(hStdout, &mode);
|
|
|
|
|
SetConsoleMode(hStdout, mode | ENABLE_PROCESSED_OUTPUT | ENABLE_VIRTUAL_TERMINAL_PROCESSING);
|
2022-12-10 22:21:11 +08:00
|
|
|
SetConsoleOutputCP(CP_UTF8);
|
2022-10-13 18:12:54 +08:00
|
|
|
#else
|
2022-12-14 16:27:04 +08:00
|
|
|
#ifndef FF_ENABLE_BUFFER
|
|
|
|
|
setvbuf(stdout, NULL, _IONBF, 0);
|
|
|
|
|
#endif
|
2022-10-13 18:12:54 +08:00
|
|
|
struct sigaction action = { .sa_handler = exitSignalHandler };
|
2021-10-23 15:48:24 +02:00
|
|
|
sigaction(SIGINT, &action, NULL);
|
|
|
|
|
sigaction(SIGTERM, &action, NULL);
|
|
|
|
|
sigaction(SIGQUIT, &action, NULL);
|
2022-10-13 18:12:54 +08:00
|
|
|
#endif
|
2021-10-23 15:48:24 +02:00
|
|
|
|
2022-04-02 14:35:43 +02:00
|
|
|
//reset everything to default before we start printing
|
2022-06-06 14:02:21 +02:00
|
|
|
if(!instance->config.pipe)
|
|
|
|
|
fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout);
|
2022-04-02 14:35:43 +02:00
|
|
|
|
2022-06-06 14:02:21 +02:00
|
|
|
if(ffHideCursor)
|
2021-06-17 13:49:25 +02:00
|
|
|
fputs("\033[?25l", stdout);
|
|
|
|
|
|
2022-06-06 14:02:21 +02:00
|
|
|
if(ffDisableLinewrap)
|
2021-06-17 13:49:25 +02:00
|
|
|
fputs("\033[?7l", stdout);
|
2022-04-02 14:35:43 +02:00
|
|
|
|
2022-06-08 10:59:33 +02:00
|
|
|
ffLogoPrint(instance);
|
2021-06-17 13:49:25 +02:00
|
|
|
}
|
|
|
|
|
|
2021-04-09 14:07:05 +02:00
|
|
|
void ffFinish(FFinstance* instance)
|
|
|
|
|
{
|
2022-07-10 18:28:17 +02:00
|
|
|
if(instance->config.logo.printRemaining)
|
2022-06-08 10:59:33 +02:00
|
|
|
ffLogoPrintRemaining(instance);
|
2022-06-06 14:02:21 +02:00
|
|
|
|
|
|
|
|
resetConsole();
|
2022-09-22 22:02:58 +02:00
|
|
|
}
|
2022-09-22 21:28:20 +08:00
|
|
|
|
2022-10-09 13:34:55 +02:00
|
|
|
static void destroyModuleArg(FFModuleArgs* args)
|
2022-09-22 22:02:58 +02:00
|
|
|
{
|
2022-10-09 13:34:55 +02:00
|
|
|
ffStrbufDestroy(&args->key);
|
|
|
|
|
ffStrbufDestroy(&args->outputFormat);
|
|
|
|
|
ffStrbufDestroy(&args->errorFormat);
|
|
|
|
|
}
|
2022-09-22 22:02:58 +02:00
|
|
|
|
2022-10-09 13:34:55 +02:00
|
|
|
static void destroyConfig(FFinstance* instance)
|
|
|
|
|
{
|
|
|
|
|
ffStrbufDestroy(&instance->config.logo.source);
|
2022-12-22 02:07:35 +08:00
|
|
|
ffStrbufDestroy(&instance->config.logo.chafaSymbols);
|
2022-09-22 21:28:20 +08:00
|
|
|
for(uint8_t i = 0; i < (uint8_t) FASTFETCH_LOGO_MAX_COLORS; ++i)
|
|
|
|
|
ffStrbufDestroy(&instance->config.logo.colors[i]);
|
|
|
|
|
ffStrbufDestroy(&instance->config.colorKeys);
|
|
|
|
|
ffStrbufDestroy(&instance->config.colorTitle);
|
|
|
|
|
ffStrbufDestroy(&instance->config.separator);
|
2022-10-09 13:34:55 +02:00
|
|
|
|
|
|
|
|
destroyModuleArg(&instance->config.os);
|
|
|
|
|
destroyModuleArg(&instance->config.host);
|
2022-10-09 21:09:01 +08:00
|
|
|
destroyModuleArg(&instance->config.bios);
|
|
|
|
|
destroyModuleArg(&instance->config.board);
|
2022-10-09 13:34:55 +02:00
|
|
|
destroyModuleArg(&instance->config.kernel);
|
|
|
|
|
destroyModuleArg(&instance->config.uptime);
|
|
|
|
|
destroyModuleArg(&instance->config.processes);
|
|
|
|
|
destroyModuleArg(&instance->config.packages);
|
|
|
|
|
destroyModuleArg(&instance->config.shell);
|
2023-01-18 01:37:47 +08:00
|
|
|
destroyModuleArg(&instance->config.display);
|
2022-10-09 13:34:55 +02:00
|
|
|
destroyModuleArg(&instance->config.de);
|
|
|
|
|
destroyModuleArg(&instance->config.wm);
|
|
|
|
|
destroyModuleArg(&instance->config.wmTheme);
|
|
|
|
|
destroyModuleArg(&instance->config.theme);
|
|
|
|
|
destroyModuleArg(&instance->config.icons);
|
|
|
|
|
destroyModuleArg(&instance->config.font);
|
|
|
|
|
destroyModuleArg(&instance->config.cursor);
|
|
|
|
|
destroyModuleArg(&instance->config.terminal);
|
|
|
|
|
destroyModuleArg(&instance->config.terminalFont);
|
|
|
|
|
destroyModuleArg(&instance->config.cpu);
|
|
|
|
|
destroyModuleArg(&instance->config.cpuUsage);
|
|
|
|
|
destroyModuleArg(&instance->config.gpu);
|
|
|
|
|
destroyModuleArg(&instance->config.memory);
|
|
|
|
|
destroyModuleArg(&instance->config.swap);
|
|
|
|
|
destroyModuleArg(&instance->config.disk);
|
|
|
|
|
destroyModuleArg(&instance->config.battery);
|
|
|
|
|
destroyModuleArg(&instance->config.powerAdapter);
|
|
|
|
|
destroyModuleArg(&instance->config.locale);
|
|
|
|
|
destroyModuleArg(&instance->config.localIP);
|
|
|
|
|
destroyModuleArg(&instance->config.publicIP);
|
2023-06-06 15:48:24 +08:00
|
|
|
destroyModuleArg(&instance->config.wallpaper);
|
2022-10-09 13:34:55 +02:00
|
|
|
destroyModuleArg(&instance->config.weather);
|
2022-11-26 18:23:08 +08:00
|
|
|
destroyModuleArg(&instance->config.wifi);
|
2022-10-09 13:34:55 +02:00
|
|
|
destroyModuleArg(&instance->config.player);
|
2022-12-30 10:47:57 +08:00
|
|
|
destroyModuleArg(&instance->config.media);
|
2022-10-09 13:34:55 +02:00
|
|
|
destroyModuleArg(&instance->config.dateTime);
|
|
|
|
|
destroyModuleArg(&instance->config.date);
|
|
|
|
|
destroyModuleArg(&instance->config.time);
|
|
|
|
|
destroyModuleArg(&instance->config.vulkan);
|
|
|
|
|
destroyModuleArg(&instance->config.openGL);
|
|
|
|
|
destroyModuleArg(&instance->config.openCL);
|
|
|
|
|
destroyModuleArg(&instance->config.users);
|
2023-01-24 10:39:33 +01:00
|
|
|
destroyModuleArg(&instance->config.bluetooth);
|
2023-02-01 13:59:21 +08:00
|
|
|
destroyModuleArg(&instance->config.sound);
|
2023-02-01 14:01:39 +08:00
|
|
|
destroyModuleArg(&instance->config.gamepad);
|
2022-10-09 13:34:55 +02:00
|
|
|
|
|
|
|
|
ffStrbufDestroy(&instance->config.libPCI);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libVulkan);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libWayland);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libXcbRandr);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libXcb);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libXrandr);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libX11);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libGIO);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libDConf);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libDBus);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libXFConf);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libSQLite3);
|
|
|
|
|
ffStrbufDestroy(&instance->config.librpm);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libImageMagick);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libZ);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libChafa);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libEGL);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libGLX);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libOSMesa);
|
|
|
|
|
ffStrbufDestroy(&instance->config.libOpenCL);
|
2023-03-25 10:00:35 +08:00
|
|
|
ffStrbufDestroy(&instance->config.libcJSON);
|
2022-10-09 13:34:55 +02:00
|
|
|
ffStrbufDestroy(&instance->config.libfreetype);
|
2023-01-26 15:48:28 +01:00
|
|
|
ffStrbufDestroy(&instance->config.libPulse);
|
2022-11-27 16:00:56 +08:00
|
|
|
ffStrbufDestroy(&instance->config.libwlanapi);
|
2023-01-17 12:45:26 +08:00
|
|
|
ffStrbufDestroy(&instance->config.libnm);
|
2022-10-09 13:34:55 +02:00
|
|
|
|
|
|
|
|
ffStrbufDestroy(&instance->config.diskFolders);
|
|
|
|
|
ffStrbufDestroy(&instance->config.batteryDir);
|
|
|
|
|
ffStrbufDestroy(&instance->config.separatorString);
|
|
|
|
|
ffStrbufDestroy(&instance->config.localIpNamePrefix);
|
|
|
|
|
ffStrbufDestroy(&instance->config.publicIpUrl);
|
|
|
|
|
ffStrbufDestroy(&instance->config.weatherOutputFormat);
|
|
|
|
|
ffStrbufDestroy(&instance->config.osFile);
|
|
|
|
|
ffStrbufDestroy(&instance->config.playerName);
|
2023-01-13 19:26:00 +08:00
|
|
|
|
|
|
|
|
ffStrbufDestroy(&instance->config.commandShell);
|
|
|
|
|
FF_LIST_FOR_EACH(FFstrbuf, item, instance->config.commandKeys)
|
|
|
|
|
ffStrbufDestroy(item);
|
|
|
|
|
ffListDestroy(&instance->config.commandKeys);
|
|
|
|
|
FF_LIST_FOR_EACH(FFstrbuf, item, instance->config.commandTexts)
|
|
|
|
|
ffStrbufDestroy(item);
|
|
|
|
|
ffListDestroy(&instance->config.commandTexts);
|
2022-10-09 13:34:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void destroyState(FFinstance* instance)
|
|
|
|
|
{
|
2023-01-15 15:57:26 +01:00
|
|
|
ffPlatformDestroy(&instance->state.platform);
|
2022-10-09 13:34:55 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ffDestroyInstance(FFinstance* instance)
|
|
|
|
|
{
|
|
|
|
|
destroyConfig(instance);
|
|
|
|
|
destroyState(instance);
|
2021-04-09 14:07:05 +02:00
|
|
|
}
|
2022-02-13 23:51:13 +01:00
|
|
|
|
2022-04-02 14:35:43 +02:00
|
|
|
//Must be in a file compiled with the libfastfetch target, because the FF_HAVE* macros are not defined for the executable targets
|
2022-02-13 23:51:13 +01:00
|
|
|
void ffListFeatures()
|
|
|
|
|
{
|
|
|
|
|
fputs(
|
2023-02-25 15:29:12 +08:00
|
|
|
#ifdef FF_HAVE_THREADS
|
|
|
|
|
"threads\n"
|
|
|
|
|
#endif
|
2022-02-13 23:51:13 +01:00
|
|
|
#ifdef FF_HAVE_LIBPCI
|
|
|
|
|
"libpci\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_VULKAN
|
|
|
|
|
"vulkan\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_WAYLAND
|
|
|
|
|
"wayland\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_XCB_RANDR
|
|
|
|
|
"xcb-randr\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_XCB
|
|
|
|
|
"xcb\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_XRANDR
|
|
|
|
|
"xrandr\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_X11
|
|
|
|
|
"x11\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_GIO
|
|
|
|
|
"gio\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_DCONF
|
|
|
|
|
"dconf\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_DBUS
|
|
|
|
|
"dbus\n"
|
|
|
|
|
#endif
|
2022-04-11 16:19:02 +02:00
|
|
|
#ifdef FF_HAVE_IMAGEMAGICK7
|
|
|
|
|
"imagemagick7\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_IMAGEMAGICK6
|
|
|
|
|
"imagemagick6\n"
|
2022-04-06 14:54:39 +02:00
|
|
|
#endif
|
2022-04-29 14:11:22 +02:00
|
|
|
#ifdef FF_HAVE_CHAFA
|
|
|
|
|
"chafa\n"
|
|
|
|
|
#endif
|
2022-04-14 15:11:14 +02:00
|
|
|
#ifdef FF_HAVE_ZLIB
|
|
|
|
|
"zlib\n"
|
|
|
|
|
#endif
|
2022-02-13 23:51:13 +01:00
|
|
|
#ifdef FF_HAVE_XFCONF
|
|
|
|
|
"xfconf\n"
|
|
|
|
|
#endif
|
2022-05-23 19:30:02 +02:00
|
|
|
#ifdef FF_HAVE_SQLITE3
|
|
|
|
|
"sqlite3\n"
|
2022-02-13 23:51:13 +01:00
|
|
|
#endif
|
2022-05-24 13:36:33 +02:00
|
|
|
#ifdef FF_HAVE_RPM
|
|
|
|
|
"rpm\n"
|
|
|
|
|
#endif
|
2022-06-04 15:21:34 +02:00
|
|
|
#ifdef FF_HAVE_EGL
|
|
|
|
|
"egl\n"
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_GLX
|
|
|
|
|
"glx\n"
|
|
|
|
|
#endif
|
2022-06-04 19:30:26 +02:00
|
|
|
#ifdef FF_HAVE_OSMESA
|
|
|
|
|
"osmesa\n"
|
|
|
|
|
#endif
|
2022-06-05 00:18:40 +02:00
|
|
|
#ifdef FF_HAVE_OPENCL
|
|
|
|
|
"opencl\n"
|
|
|
|
|
#endif
|
2023-03-25 10:00:35 +08:00
|
|
|
#ifdef FF_HAVE_LIBCJSON
|
|
|
|
|
"libcjson\n"
|
2022-09-27 13:59:26 +08:00
|
|
|
#endif
|
|
|
|
|
#ifdef FF_HAVE_FREETYPE
|
2023-01-17 15:54:06 +08:00
|
|
|
"freetype\n"
|
|
|
|
|
#endif
|
2023-01-26 15:48:28 +01:00
|
|
|
#ifdef FF_HAVE_PULSE
|
|
|
|
|
"libpulse\n"
|
2023-01-26 00:49:43 +08:00
|
|
|
#endif
|
2023-01-17 15:54:06 +08:00
|
|
|
#ifdef FF_HAVE_LIBNM
|
|
|
|
|
"libnm\n"
|
2022-09-27 13:59:26 +08:00
|
|
|
#endif
|
2022-02-13 23:51:13 +01:00
|
|
|
""
|
|
|
|
|
, stdout);
|
|
|
|
|
}
|