Fedora support

This commit is contained in:
Linus Dierheimer
2021-06-08 20:01:29 +02:00
parent 9535aa885c
commit 580ad45459
8 changed files with 178 additions and 37 deletions
+4 -1
View File
@@ -25,6 +25,7 @@ The following libraries are used if present:
* [`libGIO`](https://developer.gnome.org/gio/unstable/): Needed for values that are only stored GSettings.
* [`libDConf`](https://developer.gnome.org/dconf/unstable/): Needed for values that are only stored in DConf + Fallback for GSettings.
* [`libXFConf`](https://gitlab.xfce.org/xfce/xfconf): Needed for XFWM theme and XFCE Terminal font.
* [`libSQLite3`](https://www.sqlite.org/index.html): Needed for rpm package count.
## Support status
All categories not listed here should work without needing a specific implementation.
@@ -37,7 +38,7 @@ Arch, Artix, Manjaro, Garuda, Debian, Ubuntu, Void
##### Package managers:
```
Pacman, xbps, dpkg, Flatpak, Snap
Pacman, dpkg, rpm, xbps, Flatpak, Snap
```
##### Window managers:
@@ -73,6 +74,8 @@ cmake --build .
This will produce `build/fastfetch` and `build/flashfetch`, both standalone executables.
Command line completions for bash can be found in [`completions/bash`](completions/bash).
Note that the headers of the libraries listed in [Dependencies](#Dependencies) are needed to build the project.
## Packaging
At the moment, i only package for the [AUR](https://aur.archlinux.org/packages/fastfetch-git/). This package will install both the fastfetch and the flashfetch binary (with default configuration), as well as the bash completion.
+1
View File
@@ -185,6 +185,7 @@ __fastfetch_completion()
"--lib-DConf"
"--lib-wayland"
"--lib-XFConf"
"--lib-SQLite"
"--battery-dir"
"--load-config"
"--logo-file"
+1
View File
@@ -161,6 +161,7 @@ static void defaultConfig(FFconfig* config)
ffStrbufInitA(&config->libDConf, 1);
ffStrbufInitA(&config->libWayland, 1);
ffStrbufInitA(&config->libXFConf, 1);
ffStrbufInitA(&config->libSQLite, 1);
ffStrbufInitA(&config->diskFolders, 1);
+34 -1
View File
@@ -179,6 +179,36 @@ static void loadDebianLogo(FFlogo *logo, bool doColor)
sprintf(logo->chars[16], FASTFETCH_TEXT_MODIFIER_BOLT"%s `\"\"\" "FASTFETCH_TEXT_MODIFIER_RESET, color);
}
static void loadFedoraLogo(FFlogo* logo, bool doColor)
{
logo->width = 35;
logo->height = 17;
strcpy(logo->name, "fedora");
const char* blue = doColor ? "\033[34m" : "";
const char* white = doColor ? "\033[37m" : "";
strcpy(logo->color, "\033[34m");
sprintf(logo->chars[0], FASTFETCH_TEXT_MODIFIER_BOLT"%s /:-------------:\\ "FASTFETCH_TEXT_MODIFIER_RESET, blue);
sprintf(logo->chars[1], FASTFETCH_TEXT_MODIFIER_BOLT"%s :-------------------:: "FASTFETCH_TEXT_MODIFIER_RESET, blue);
sprintf(logo->chars[2], FASTFETCH_TEXT_MODIFIER_BOLT"%s :-----------%s/shhOHbmp$%s---:\\ "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[3], FASTFETCH_TEXT_MODIFIER_BOLT"%s /-----------%somMMMNNNMMD %s---: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[4], FASTFETCH_TEXT_MODIFIER_BOLT"%s :-----------%ssMMMMNMNMP%s. ---: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[5], FASTFETCH_TEXT_MODIFIER_BOLT"%s :-----------%s:MMMdP%s------- ---\\"FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[6], FASTFETCH_TEXT_MODIFIER_BOLT"%s ,------------%s:MMMd%s-------- ---:"FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[7], FASTFETCH_TEXT_MODIFIER_BOLT"%s :------------%s:MMMd%s------- .---:"FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[8], FASTFETCH_TEXT_MODIFIER_BOLT"%s :---- %soNMMMMMMMMMNho%s .----:"FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[9], FASTFETCH_TEXT_MODIFIER_BOLT"%s :-- .%s+shhhMMMmhhy++%s .------/"FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[10], FASTFETCH_TEXT_MODIFIER_BOLT"%s :- -------%s:MMMd%s--------------: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[11], FASTFETCH_TEXT_MODIFIER_BOLT"%s :- --------%s/MMMd%s-------------; "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[12], FASTFETCH_TEXT_MODIFIER_BOLT"%s :- ------%s/hMMMy%s------------: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[13], FASTFETCH_TEXT_MODIFIER_BOLT"%s :--%s :dMNdhhdNMMNo%s------------; "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[14], FASTFETCH_TEXT_MODIFIER_BOLT"%s :---%s:sdNMMMMNds:%s------------: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[15], FASTFETCH_TEXT_MODIFIER_BOLT"%s :------%s:://:%s-------------:: "FASTFETCH_TEXT_MODIFIER_RESET, blue, white, blue);
sprintf(logo->chars[16], FASTFETCH_TEXT_MODIFIER_BOLT"%s :---------------------:// "FASTFETCH_TEXT_MODIFIER_RESET, blue);
}
static void loadManjaroLogo(FFlogo *logo, bool doColor)
{
logo->width = 28;
@@ -320,6 +350,8 @@ void ffLoadLogoSet(FFconfig* config, const char* logo)
loadDebianLogo(&config->logo, config->colorLogo);
else if(strcasecmp(logo, "manjaro") == 0)
loadManjaroLogo(&config->logo, config->colorLogo);
else if(strcasecmp(logo, "fedora") == 0)
loadFedoraLogo(&config->logo, config->colorLogo);
else if(strcasecmp(logo, "void") == 0)
loadVoidLogo(&config->logo, config->colorLogo);
else if(strcasecmp(logo, "garuda") == 0)
@@ -408,7 +440,7 @@ void ffPrintRemainingLogo(FFinstance* instance)
static FFlogo* getLogos(uint8_t* size, bool color)
{
#define FASTFETCH_LOGO_AMOUNT 9
#define FASTFETCH_LOGO_AMOUNT 10
*size = FASTFETCH_LOGO_AMOUNT;
static FFlogo logos[FASTFETCH_LOGO_AMOUNT];
@@ -424,6 +456,7 @@ static FFlogo* getLogos(uint8_t* size, bool color)
loadDebianLogo(&logos[6], color);
loadManjaroLogo(&logos[7], color);
loadVoidLogo(&logos[8], color);
loadFedoraLogo(&logos[9], color);
return logos;
}
+121 -28
View File
@@ -3,26 +3,27 @@
#include <dlfcn.h>
#include <pthread.h>
#include <dconf.h> // Also included gio/gio.h
#include <sqlite3.h>
typedef void* DynamicLibrary;
#define FF_VARIANT_NULL ((FFvariant){.strValue = NULL})
#define FF_LIBRARY_LOAD(libraryNameUser, libraryNameDefault, mutex) dlopen(libraryNameUser.length == 0 ? libraryNameDefault : libraryNameUser.chars, RTLD_LAZY); \
#define FF_LIBRARY_LOAD(libraryNameUser, libraryNameDefault, mutex, returnValue) dlopen(libraryNameUser.length == 0 ? libraryNameDefault : libraryNameUser.chars, RTLD_LAZY); \
if(dlerror() != NULL) { \
pthread_mutex_unlock(&mutex); \
return FF_VARIANT_NULL; \
return returnValue; \
}
#define FF_LIBRARY_ERROR_RETURN(library, mutex) { \
#define FF_LIBRARY_ERROR_RETURN(library, mutex, returnValue) { \
pthread_mutex_unlock(&mutex); \
dlclose(library); \
return FF_VARIANT_NULL; \
return returnValue; \
}
#define FF_LIBRARY_LOAD_SYMBOL(library, symbolName, mutex) dlsym(library, symbolName); \
#define FF_LIBRARY_LOAD_SYMBOL(library, symbolName, mutex, returnValue) dlsym(library, symbolName); \
if(dlerror() != NULL) \
FF_LIBRARY_ERROR_RETURN(library, mutex)
FF_LIBRARY_ERROR_RETURN(library, mutex, returnValue)
typedef struct GVariantGetters
{
@@ -31,8 +32,8 @@ typedef struct GVariantGetters
} GVariantGetters;
#define FF_LIBRARY_GVARIANT_GETTERS_INIT(library, object, mutex) \
object.ffg_variant_get_string = FF_LIBRARY_LOAD_SYMBOL(library, "g_variant_get_string", mutex); \
object.ffg_variant_get_boolean = FF_LIBRARY_LOAD_SYMBOL(library, "g_variant_get_boolean", mutex);
object.ffg_variant_get_string = FF_LIBRARY_LOAD_SYMBOL(library, "g_variant_get_string", mutex, FF_VARIANT_NULL); \
object.ffg_variant_get_boolean = FF_LIBRARY_LOAD_SYMBOL(library, "g_variant_get_boolean", mutex, FF_VARIANT_NULL);
static FFvariant getGVariantValue(GVariant* variant, FFvarianttype type, GVariantGetters* variantGetters)
{
@@ -90,14 +91,14 @@ FFvariant ffSettingsGetDConf(FFinstance* instance, const char* key, FFvarianttyp
data.client = NULL; //error indicator
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libDConf, "libdconf.so", mutex);
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libDConf, "libdconf.so", mutex, FF_VARIANT_NULL);
data.ffdconf_client_read_full = FF_LIBRARY_LOAD_SYMBOL(library, "dconf_client_read_full", mutex);
data.ffdconf_client_read_full = FF_LIBRARY_LOAD_SYMBOL(library, "dconf_client_read_full", mutex, FF_VARIANT_NULL);
FF_LIBRARY_GVARIANT_GETTERS_INIT(library, data.variantGetters, mutex);
DConfClient*(*ffdconf_client_new)(void) = FF_LIBRARY_LOAD_SYMBOL(library, "dconf_client_new", mutex);
DConfClient*(*ffdconf_client_new)(void) = FF_LIBRARY_LOAD_SYMBOL(library, "dconf_client_new", mutex, FF_VARIANT_NULL);
if((data.client = ffdconf_client_new()) == NULL)
FF_LIBRARY_ERROR_RETURN(library, mutex);
FF_LIBRARY_ERROR_RETURN(library, mutex, FF_VARIANT_NULL);
pthread_mutex_unlock(&mutex);
return getDConfValue(&data, key, type);
@@ -161,19 +162,19 @@ FFvariant ffSettingsGetGSettings(FFinstance* instance, const char* schemaName, c
data.schemaSource = NULL; //error indicator
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libGIO, "libgio-2.0.so", mutex);
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libGIO, "libgio-2.0.so", mutex, FF_VARIANT_NULL);
data.ffg_settings_schema_source_lookup = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_source_lookup", mutex);
data.ffg_settings_schema_has_key = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_has_key", mutex);
data.ffg_settings_new_full = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_new_full", mutex);
data.ffg_settings_get_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_value", mutex);
data.ffg_settings_get_user_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_user_value", mutex);
data.ffg_settings_get_default_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_default_value", mutex);
data.ffg_settings_schema_source_lookup = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_source_lookup", mutex, FF_VARIANT_NULL);
data.ffg_settings_schema_has_key = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_has_key", mutex, FF_VARIANT_NULL);
data.ffg_settings_new_full = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_new_full", mutex, FF_VARIANT_NULL);
data.ffg_settings_get_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_value", mutex, FF_VARIANT_NULL);
data.ffg_settings_get_user_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_user_value", mutex, FF_VARIANT_NULL);
data.ffg_settings_get_default_value = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_get_default_value", mutex, FF_VARIANT_NULL);
FF_LIBRARY_GVARIANT_GETTERS_INIT(library, data.variantGetters, mutex);
GSettingsSchemaSource*(*ffg_settings_schema_source_get_default)(void) = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_source_get_default", mutex);
GSettingsSchemaSource*(*ffg_settings_schema_source_get_default)(void) = FF_LIBRARY_LOAD_SYMBOL(library, "g_settings_schema_source_get_default", mutex, FF_VARIANT_NULL);
if((data.schemaSource = ffg_settings_schema_source_get_default()) == NULL)
FF_LIBRARY_ERROR_RETURN(library, mutex);
FF_LIBRARY_ERROR_RETURN(library, mutex, FF_VARIANT_NULL);
pthread_mutex_unlock(&mutex);
return getGSettingsValue(&data, schemaName, path, key, type);
@@ -236,19 +237,111 @@ FFvariant ffSettingsGetXFConf(FFinstance* instance, const char* channelName, con
data.init = false; //error indicator
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libXFConf, "libxfconf-0.so", mutex);
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libXFConf, "libxfconf-0.so", mutex, FF_VARIANT_NULL);
data.ffxfconf_channel_get = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get", mutex);
data.ffxfconf_channel_has_property = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_has_property", mutex);
data.ffxfconf_channel_get_string = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get_string", mutex);
data.ffxfconf_channel_get_bool = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get_bool", mutex);
data.ffxfconf_channel_get = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get", mutex, FF_VARIANT_NULL);
data.ffxfconf_channel_has_property = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_has_property", mutex, FF_VARIANT_NULL);
data.ffxfconf_channel_get_string = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get_string", mutex, FF_VARIANT_NULL);
data.ffxfconf_channel_get_bool = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_channel_get_bool", mutex, FF_VARIANT_NULL);
gboolean(*ffxfconf_init)(GError **) = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_init", mutex);
gboolean(*ffxfconf_init)(GError **) = FF_LIBRARY_LOAD_SYMBOL(library, "xfconf_init", mutex, FF_VARIANT_NULL);
if((data.init = ffxfconf_init(NULL)) == FALSE)
FF_LIBRARY_ERROR_RETURN(library, mutex);
FF_LIBRARY_ERROR_RETURN(library, mutex, FF_VARIANT_NULL);
pthread_mutex_unlock(&mutex);
return getXFConfValue(&data, channelName, propertyName, type);
}
#undef FF_VARIANT_NULL
typedef struct SQLiteData
{
int(*ffsqlite3_open_v2)(const char* filename, sqlite3** ppDb, int flags, const char* zVfs);
int(*ffsqlite3_prepare_v2)(sqlite3* db, const char* zSql, int nByte, sqlite3_stmt** ppStmt, const char** pzTail);
int(*ffsqlite3_step)(sqlite3_stmt* pStmt);
int(*ffsqlite3_data_count)(sqlite3_stmt* pStmt);
int(*ffsqlite3_column_int)(sqlite3_stmt* pStmt, int iCol);
int(*ffsqlite3_finalize)(sqlite3_stmt* pStmt);
int(*ffsqlite3_close)(sqlite3* db);
} SQLiteData;
static inline void closeSQLiteHandles(const SQLiteData* data, sqlite3* db, sqlite3_stmt* stmt)
{
if(data->ffsqlite3_finalize != NULL && stmt != NULL)
data->ffsqlite3_finalize(stmt);
if(data->ffsqlite3_close != NULL && db != NULL)
data->ffsqlite3_close(db);
}
uint32_t getSQLiteColumnCount(const SQLiteData* data, const char* fileName, const char* tableName)
{
if(data->ffsqlite3_open_v2 == NULL)
return 0;
sqlite3* db;
if(data->ffsqlite3_open_v2(fileName, &db, SQLITE_OPEN_READONLY, NULL) != SQLITE_OK)
return 0;
FFstrbuf sql;
ffStrbufInit(&sql);
ffStrbufAppendS(&sql, "SELECT COUNT(*) FROM ");
ffStrbufAppendS(&sql, tableName);
sqlite3_stmt* stmt = NULL;
int ret = data->ffsqlite3_prepare_v2(db, sql.chars, sql.length + 1, &stmt, NULL);
ffStrbufDestroy(&sql);
if(ret != SQLITE_OK)
{
closeSQLiteHandles(data, db, stmt);
return 0;
}
if(data->ffsqlite3_step(stmt) != SQLITE_ROW)
{
closeSQLiteHandles(data, db, stmt);
return 0;
}
if(data->ffsqlite3_data_count(stmt) < 1)
{
closeSQLiteHandles(data, db, stmt);
return 0;
}
int count = data->ffsqlite3_column_int(stmt, 0);
closeSQLiteHandles(data, db, stmt);
return count;
}
uint32_t ffSettingsGetSQLiteColumnCount(FFinstance* instance, const char* fileName, const char* tableName)
{
static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
static bool init = false;
static SQLiteData data;
pthread_mutex_lock(&mutex);
if(init)
{
pthread_mutex_unlock(&mutex);
return getSQLiteColumnCount(&data, fileName, tableName);
}
init = true;
data.ffsqlite3_open_v2 = NULL; //error indicator
DynamicLibrary library = FF_LIBRARY_LOAD(instance->config.libSQLite, "libsqlite3.so", mutex, 0);
data.ffsqlite3_open_v2 = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_open_v2", mutex, 0);
data.ffsqlite3_prepare_v2 = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_prepare_v2", mutex, 0);
data.ffsqlite3_step = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_step", mutex, 0);
data.ffsqlite3_data_count = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_data_count", mutex, 0);
data.ffsqlite3_column_int = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_column_int", mutex, 0);
data.ffsqlite3_finalize = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_finalize", mutex, 0);
data.ffsqlite3_close = FF_LIBRARY_LOAD_SYMBOL(library, "sqlite3_close", mutex, 0);
pthread_mutex_unlock(&mutex);
return getSQLiteColumnCount(&data, fileName, tableName);
}
+6 -2
View File
@@ -120,6 +120,7 @@ static inline void printHelp()
" --lib-DConf <path>\n"
" --lib-wayland <path>\n"
" --lib-XFConf <path>\n"
" --lib-SQLite <path>\n"
"\n"
"Module specific options:\n"
" --disk-folders <folders>: A colon separated list of folder paths for the disk output. Default is \"/:/home\"\n"
@@ -280,12 +281,13 @@ static inline void printCommandHelp(const char* command)
}
else if(strcasecmp(command, "packages-format") == 0)
{
constructAndPrintCommandHelpFormat("packages", "{2} (pacman){?3}[{3}]{?}, {4} (xbps), {5} (dpkg), {6}, (flatpak), {7} (snap)", 7,
constructAndPrintCommandHelpFormat("packages", "{2} (pacman){?3}[{3}]{?}, {4} (dpkg), {5} (rpm), {6} (xps), {7}, (flatpak), {8} (snap)", 8,
"Number of all packages",
"Number of pacman packages",
"Pacman branch on manjaro",
"Number of xbps packages",
"Number of dpkg packages",
"Number of rpm packages",
"Number of xbps packages",
"Number of flatpak packages",
"Number of snap packages"
);
@@ -911,6 +913,8 @@ static void parseOption(FFinstance* instance, FFdata* data, const char* key, con
optionParseString(key, value, &instance->config.libWayland);
else if(strcasecmp(key, "--lib-XFConf") == 0)
optionParseString(key, value, &instance->config.libXFConf);
else if(strcasecmp(key, "--lib-SQLite") == 0)
optionParseString(key, value, &instance->config.libSQLite);
else if(strcasecmp(key, "--disk-folders") == 0)
optionParseString(key, value, &instance->config.diskFolders);
else if(strcasecmp(key, "--battery-dir") == 0)
+3
View File
@@ -98,6 +98,7 @@ typedef struct FFconfig
FFstrbuf libGIO;
FFstrbuf libDConf;
FFstrbuf libXFConf;
FFstrbuf libSQLite;
FFstrbuf diskFolders;
@@ -294,6 +295,8 @@ FFvariant ffSettingsGetGSettings(FFinstance* instance, const char* schemaName, c
FFvariant ffSettingsGet(FFinstance* instance, const char* dconfKey, const char* gsettingsSchemaName, const char* gsettingsPath, const char* gsettingsKey, FFvarianttype type);
FFvariant ffSettingsGetXFConf(FFinstance* instance, const char* channelName, const char* propertyName, FFvarianttype type);
uint32_t ffSettingsGetSQLiteColumnCount(FFinstance* instance, const char* fileName, const char* tableName);
//common/detectPlasma.c
const FFPlasmaResult* ffDetectPlasma(FFinstance* instance);
+8 -5
View File
@@ -4,7 +4,7 @@
#include <dirent.h>
#define FF_PACKAGES_MODULE_NAME "Packages"
#define FF_PACKAGES_NUM_FORMAT_ARGS 7
#define FF_PACKAGES_NUM_FORMAT_ARGS 8
static uint32_t getNumElements(const char* dirname, unsigned char type)
{
@@ -56,12 +56,13 @@ static uint32_t getNumStrings(const char* filename, const char* needle)
void ffPrintPackages(FFinstance* instance)
{
uint32_t pacman = getNumElements("/var/lib/pacman/local", DT_DIR);
uint32_t xbps = getNumElements("/var/db/xbps", DT_REG);
uint32_t dpkg = getNumStrings("/var/lib/dpkg/status", "Status: ");
uint32_t rpm = ffSettingsGetSQLiteColumnCount(instance, "/var/lib/rpm/rpmdb.sqlite", "Packages");
uint32_t xbps = getNumElements("/var/db/xbps", DT_REG);
uint32_t flatpak = getNumElements("/var/lib/flatpak/app", DT_DIR);
uint32_t snap = getNumElements("/snap", DT_DIR);
uint32_t all = pacman + xbps + dpkg + flatpak + snap;
uint32_t all = pacman + dpkg + rpm + xbps + flatpak + snap;
if(all == 0)
{
@@ -95,8 +96,9 @@ void ffPrintPackages(FFinstance* instance)
printf(", ");
};
FF_PRINT_PACKAGE(xbps)
FF_PRINT_PACKAGE(dpkg)
FF_PRINT_PACKAGE(rpm)
FF_PRINT_PACKAGE(xbps)
FF_PRINT_PACKAGE(flatpak)
FF_PRINT_PACKAGE(snap)
@@ -113,8 +115,9 @@ void ffPrintPackages(FFinstance* instance)
{FF_FORMAT_ARG_TYPE_UINT, &all},
{FF_FORMAT_ARG_TYPE_UINT, &pacman},
{FF_FORMAT_ARG_TYPE_STRBUF, &manjaroBranch},
{FF_FORMAT_ARG_TYPE_UINT, &xbps},
{FF_FORMAT_ARG_TYPE_UINT, &dpkg},
{FF_FORMAT_ARG_TYPE_UINT, &rpm},
{FF_FORMAT_ARG_TYPE_UINT, &xbps},
{FF_FORMAT_ARG_TYPE_UINT, &flatpak},
{FF_FORMAT_ARG_TYPE_UINT, &snap}
});