diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..3e574a2 --- /dev/null +++ b/.clang-format @@ -0,0 +1,16 @@ +--- +TabWidth: 4 +IndentWidth: 4 +UseTab: Always +IndentPPDirectives: BeforeHash +SortIncludes: true +AlignAfterOpenBracket: true +AlignConsecutiveAssignments: true +AlignEscapedNewlinesLeft: true +AlignEscapedNewlinesLeft: true +AlignTrailingComments: true +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true +ColumnLimit: 0 +MaxEmptyLinesToKeep: 1 +... diff --git a/uwufetch.c b/uwufetch.c index 4abc36e..a52c0c4 100644 --- a/uwufetch.c +++ b/uwufetch.c @@ -16,32 +16,32 @@ #define _GNU_SOURCE // for strcasestr #ifdef __APPLE__ -#include // for checking iOS + #include // for checking iOS #endif #include +#include #include #include #include #include -#include #if defined(__APPLE__) || defined(__FREEBSD__) -#include -#include + #include + #include #else // defined(__APPLE__) || defined(__FREEBSD__) -#ifdef __FREEBSD__ -#else // defined(__FREEBSD__) || defined(_WIN32) + #ifdef __FREEBSD__ + #else // defined(__FREEBSD__) || defined(_WIN32) + #ifndef _WIN32 + #include + #else // _WIN32 + #include + #endif // _WIN32 + #endif // defined(__FREEBSD__) || defined(_WIN32) +#endif // defined(__APPLE__) || defined(__FREEBSD__) #ifndef _WIN32 -#include + #include + #include #else // _WIN32 -#include -#endif // _WIN32 -#endif // defined(__FREEBSD__) || defined(_WIN32) -#endif // defined(__APPLE__) || defined(__FREEBSD__) -#ifndef _WIN32 -#include -#include -#else // _WIN32 -#include + #include CONSOLE_SCREEN_BUFFER_INFO csbi; #endif // _WIN32 @@ -61,20 +61,20 @@ CONSOLE_SCREEN_BUFFER_INFO csbi; #define LPINK "\x1b[38;5;213m" #ifdef _WIN32 -#define BLOCK_CHAR "\xdb" + #define BLOCK_CHAR "\xdb" #else // _WIN32 -#define BLOCK_CHAR "\u2587" + #define BLOCK_CHAR "\u2587" #endif // _WIN32 #ifdef __APPLE__ -// buffers where data fetched from sysctl are stored -// CPU -#define CPUBUFFERLEN 128 + // buffers where data fetched from sysctl are stored + // CPU + #define CPUBUFFERLEN 128 char cpu_buffer[CPUBUFFERLEN]; size_t cpu_buffer_len = CPUBUFFERLEN; // Installed RAM -int64_t mem_buffer = 0; +int64_t mem_buffer = 0; size_t mem_buffer_len = sizeof(mem_buffer); // uptime @@ -82,49 +82,29 @@ struct timeval time_buffer; size_t time_buffer_len = sizeof(time_buffer); #endif // __APPLE__ -struct package_manager -{ +struct package_manager { char command_string[128]; // command to get number of packages installed char pkgman_name[16]; // name of the package manager }; // initialise the variables to store data, gpu array can hold up to 8 gpus -// int target_width = 0, screen_width = 0, screen_height = 0, ram_total, ram_used = 0, pkgs = 0; -// long uptime = 0; +// int target_width = 0, screen_width = 0, screen_height = 0, ram_total, +// ram_used = 0, pkgs = 0; long uptime = 0; // all flags available -struct configuration -{ - int ascii_image_flag, // when (0) ascii is printed, when (1) image is printed 0 - show_user_info, // 1 - show_os, - show_host, - show_kernel, - show_cpu, - show_gpu, - show_ram, - show_resolution, - show_shell, - show_pkgs, - show_uptime, +struct configuration { + int ascii_image_flag, // when (0) ascii is printed, when (1) image is + // printed + show_user_info, show_os, show_host, show_kernel, show_cpu, show_gpu, + show_ram, show_resolution, show_shell, show_pkgs, show_uptime, show_colors; }; char *terminal_cursor_move = "\033[18C"; -struct info -{ - char user[128], - host[256], - shell[64], - host_model[256], - kernel[256], - version_name[64], - cpu_model[256], - gpu_model[64][256], - pkgman_name[64], - image_name[128], - *config_directory, - *cache_content; +struct info { + char user[128], host[256], shell[64], host_model[256], kernel[256], + version_name[64], cpu_model[256], gpu_model[64][256], pkgman_name[64], + image_name[128], *config_directory, *cache_content; int target_width, screen_width, screen_height, ram_total, ram_used, pkgs; long uptime; @@ -132,14 +112,14 @@ struct info struct utsname sys_var; #endif // _WIN32 #ifndef __APPLE__ -#ifdef __linux__ + #ifdef __linux__ struct sysinfo sys; -#else // __linux__ -#ifdef _WIN32 + #else // __linux__ + #ifdef _WIN32 struct _SYSTEM_INFO sys; -#endif // _WIN32 -#endif // __linux__ -#endif // __APPLE__ + #endif // _WIN32 + #endif // __linux__ +#endif // __APPLE__ #ifndef _WIN32 struct winsize win; #else // _WIN32 @@ -175,23 +155,21 @@ void uwu_name(struct configuration *config_flags, struct info *user_info); void truncate_name(char *name, int target_width); void remove_brackets(char *str); -int main(int argc, char *argv[]) -{ +int main(int argc, char *argv[]) { char *cache_env = getenv("UWUFETCH_CACHE_ENABLED"); struct configuration config_flags; struct info user_info = {0}; - if (cache_env != NULL) - { + if (cache_env != NULL) { int cache_enabled = 0; char buffer[128]; sscanf(cache_env, "%4[TRUEtrue1]", buffer); - cache_enabled = (strcmp(buffer, "true") == 0 || strcmp(buffer, "TRUE") == 0 || strcmp(buffer, "1") == 0); - if (cache_enabled) - { + cache_enabled = + (strcmp(buffer, "true") == 0 || strcmp(buffer, "TRUE") == 0 || + strcmp(buffer, "1") == 0); + if (cache_enabled) { // if no cache file found write to it - if (!read_cache(&user_info)) - { + if (!read_cache(&user_info)) { user_info = get_info(&config_flags); write_cache(&user_info); } @@ -205,7 +183,7 @@ int main(int argc, char *argv[]) config_flags.show_pkgs = 0; #endif - int opt = 0; + int opt = 0; static struct option long_options[] = { {"ascii", no_argument, NULL, 'a'}, {"config", required_argument, NULL, 'c'}, @@ -216,12 +194,11 @@ int main(int argc, char *argv[]) {"image", optional_argument, NULL, 'i'}, {"list", no_argument, NULL, 'l'}, {NULL, 0, NULL, 0}}; - user_info = get_info(&config_flags); + user_info = get_info(&config_flags); config_flags = parse_config(&user_info); - while ((opt = getopt_long(argc, argv, "ac:d:hi::lw", long_options, NULL)) != -1) - { - switch (opt) - { + while ((opt = getopt_long(argc, argv, "ac:d:hi::lw", long_options, NULL)) != + -1) { + switch (opt) { case 'a': config_flags.ascii_image_flag = 0; break; @@ -229,8 +206,7 @@ int main(int argc, char *argv[]) user_info.config_directory = optarg; break; case 'd': - if (optarg) - sprintf(user_info.version_name, "%s", optarg); + if (optarg) sprintf(user_info.version_name, "%s", optarg); break; case 'h': usage(argv[0]); @@ -253,49 +229,43 @@ int main(int argc, char *argv[]) break; } } - if ((argc == 1 && config_flags.ascii_image_flag == 0) || (argc > 1 && config_flags.ascii_image_flag == 0)) - { + if ((argc == 1 && config_flags.ascii_image_flag == 0) || + (argc > 1 && config_flags.ascii_image_flag == 0)) { printf("\n"); // print a new line printf("\033[1A"); // go up one line if possible print_ascii(&user_info); - } - else if (config_flags.ascii_image_flag == 1) + } else if (config_flags.ascii_image_flag == 1) print_image(&user_info); print_info(&config_flags, &user_info); } -struct configuration parse_config(struct info *user_info) -{ +struct configuration parse_config(struct info *user_info) { char line[256]; - struct configuration config_flags = {0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; // enabling all flags by default + struct configuration config_flags = { + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; // enabling all flags by default FILE *config = NULL; - if (user_info->config_directory == NULL) - { - if (getenv("HOME") != NULL) - { + if (user_info->config_directory == NULL) { + if (getenv("HOME") != NULL) { char homedir[512]; sprintf(homedir, "%s/.config/uwufetch/config", getenv("HOME")); config = fopen(homedir, "r"); } - } - else + } else config = fopen(user_info->config_directory, "r"); - if (config == NULL) - return config_flags; + if (config == NULL) return config_flags; - while (fgets(line, sizeof(line), config)) - { + while (fgets(line, sizeof(line), config)) { char buffer[128] = {0}; sscanf(line, "distro=%s", user_info->version_name); if (sscanf(line, "ascii=%[truefalse]", buffer)) config_flags.ascii_image_flag = !strcmp(buffer, "false"); - if (sscanf(line, "image=\"%[^\"]\"", user_info->image_name)) - { - if (user_info->image_name[0] == '~') - { // image name with ~ does not work - memmove(&user_info->image_name[0], &user_info->image_name[1], strlen(user_info->image_name)); + if (sscanf(line, "image=\"%[^\"]\"", user_info->image_name)) { + if (user_info->image_name[0] == + '~') { // image name with ~ does not work + memmove(&user_info->image_name[0], &user_info->image_name[1], + strlen(user_info->image_name)); char temp[128] = "/home/"; strcat(temp, user_info->user); strcat(temp, user_info->image_name); @@ -340,8 +310,9 @@ int pkgman(struct info *user_info) { // this is just a function that returns the total of installed packages int total = 0; -#ifndef __APPLE__ // this function is not used on mac os because it causes lots of problems -#ifndef _WIN32 +#ifndef __APPLE__ // this function is not used on mac os because it causes lots \ + // of problems + #ifndef _WIN32 struct package_manager pkgmans[] = { {"apt list --installed 2> /dev/null | wc -l", "(apt)"}, {"apk info 2> /dev/null | wc -l", "(apk)"}, @@ -350,7 +321,9 @@ int pkgman(struct info *user_info) {"flatpak list 2> /dev/null | wc -l", "(flatpak)"}, {"snap list 2> /dev/null | wc -l", "(snap)"}, {"guix package --list-installed 2> /dev/null | wc -l", "(guix)"}, - {"nix-store -q --requisites /run/current-system/sw 2> /dev/null | wc -l", "(nix)"}, + {"nix-store -q --requisites /run/current-system/sw 2> /dev/null | wc " + "-l", + "(nix)"}, {"pacman -Qq 2> /dev/null | wc -l", "(pacman)"}, {"pkg info 2>/dev/null | wc -l", "(pkg)"}, {"port installed 2> /dev/null | tail -n +2 | wc -l", "(port)"}, @@ -360,43 +333,40 @@ int pkgman(struct info *user_info) const unsigned long pkgman_count = sizeof(pkgmans) / sizeof(pkgmans[0]); // to format the pkgman_name string properly int comma_separator = 0; - for (long unsigned int i = 0; i < pkgman_count; i++) - { // long unsigned int instead of int because of -Wsign-compare + for (long unsigned int i = 0; i < pkgman_count; + i++) { // long unsigned int instead of int because of -Wsign-compare struct package_manager *current = &pkgmans[i]; FILE *fp = popen(current->command_string, "r"); unsigned int pkg_count; - if (fscanf(fp, "%u", &pkg_count) == 3) - continue; + if (fscanf(fp, "%u", &pkg_count) == 3) continue; fclose(fp); total += pkg_count; - if (pkg_count > 0) - { - if (comma_separator) - strcat(user_info->pkgman_name, ", "); + if (pkg_count > 0) { + if (comma_separator) strcat(user_info->pkgman_name, ", "); comma_separator++; char spkg_count[16]; sprintf(spkg_count, "%u", pkg_count); strcat(user_info->pkgman_name, spkg_count); strcat(user_info->pkgman_name, " "); - strcat(user_info->pkgman_name, current->pkgman_name); // this is the line that breaks mac os, but something strange happens before + strcat( + user_info->pkgman_name, + current->pkgman_name); // this is the line that breaks mac os, + // but something strange happens before } } -#else // _WIN32 - if (config_flags->show_pkgs) - { + #else // _WIN32 + if (config_flags->show_pkgs) { FILE *fp = popen("choco list -l --no-color 2> nul", "r"); unsigned int pkg_count; char buffer[7562] = {0}; - while (fgets(buffer, sizeof(buffer), fp)) - { + while (fgets(buffer, sizeof(buffer), fp)) { sscanf(buffer, "%u packages installed.", &pkg_count); } - if (fp) - pclose(fp); + if (fp) pclose(fp); total = pkg_count; char spkg_count[16]; @@ -405,15 +375,14 @@ int pkgman(struct info *user_info) strcat(user_info->pkgman_name, " "); strcat(user_info->pkgman_name, "(chocolatey)"); } -#endif // _WIN32 + #endif // _WIN32 #endif return total; } #ifdef __APPLE__ -int uptime_apple() -{ +int uptime_apple() { int mib[2] = {CTL_KERN, KERN_BOOTTIME}; sysctl(mib, 2, &time_buffer, &time_buffer_len, NULL, 0); @@ -425,9 +394,9 @@ int uptime_apple() #endif #ifdef __FREEBSD__ -int uptime_freebsd() -{ // this code is from coreutils uptime: https://github.com/coreutils/coreutils/blob/master/src/uptime.c - int boot_time = 0; +int uptime_freebsd() { // this code is from coreutils uptime: + // https://github.com/coreutils/coreutils/blob/master/src/uptime.c + int boot_time = 0; static int request[2] = {CTL_KERN, KERN_BOOTTIME}; struct timeval result; size_t result_len = sizeof result; @@ -439,157 +408,176 @@ int uptime_freebsd() } #endif -void print_info(struct configuration *config_flags, struct info *user_info) -{ +void print_info(struct configuration *config_flags, struct info *user_info) { #ifdef _WIN32 -#define responsively_printf(buf, format, ...) \ - { \ - sprintf(buf, format, __VA_ARGS__); \ - printf("%.*s\n", user_info->ws_col - 1, buf); \ - } + #define responsively_printf(buf, format, ...) \ + { \ + sprintf(buf, format, __VA_ARGS__); \ + printf("%.*s\n", user_info->ws_col - 1, buf); \ + } #else // _WIN32 -#define responsively_printf(buf, format, ...) \ - { \ - sprintf(buf, format, __VA_ARGS__); \ - printf("%.*s\n", user_info->win.ws_col - 1, buf); \ - } + #define responsively_printf(buf, format, ...) \ + { \ + sprintf(buf, format, __VA_ARGS__); \ + printf("%.*s\n", user_info->win.ws_col - 1, buf); \ + } #endif // _WIN32 char print_buf[1024]; // for responsively print // print collected info - from host to cpu info printf("\033[9A"); // to align info text if (config_flags->show_user_info) - responsively_printf(print_buf, "%s%s%s%s@%s", terminal_cursor_move, NORMAL, BOLD, user_info->user, user_info->host); + responsively_printf(print_buf, "%s%s%s%s@%s", terminal_cursor_move, + NORMAL, BOLD, user_info->user, user_info->host); uwu_name(config_flags, user_info); if (config_flags->show_os) - responsively_printf(print_buf, "%s%s%sOWOS %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->version_name); + responsively_printf(print_buf, "%s%s%sOWOS %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->version_name); if (config_flags->show_host) - responsively_printf(print_buf, "%s%s%sHOWOST %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->host_model); + responsively_printf(print_buf, "%s%s%sHOWOST %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->host_model); if (config_flags->show_kernel) - responsively_printf(print_buf, "%s%s%sKEWNEL %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->kernel); + responsively_printf(print_buf, "%s%s%sKEWNEL %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->kernel); if (config_flags->show_cpu) - responsively_printf(print_buf, "%s%s%sCPUWU %s%s", terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->cpu_model); + responsively_printf(print_buf, "%s%s%sCPUWU %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->cpu_model); // print the gpus if (config_flags->show_gpu) for (int i = 0; user_info->gpu_model[i][0]; i++) - responsively_printf(print_buf, - "%s%s%sGPUWU %s%s", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->gpu_model[i]); + responsively_printf(print_buf, "%s%s%sGPUWU %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->gpu_model[i]); // print ram to uptime and colors if (config_flags->show_ram) - responsively_printf(print_buf, - "%s%s%sWAM %s%i MiB/%i MiB", - terminal_cursor_move, NORMAL, BOLD, NORMAL, (user_info->ram_used), user_info->ram_total); + responsively_printf(print_buf, "%s%s%sWAM %s%i MiB/%i MiB", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + (user_info->ram_used), user_info->ram_total); if (config_flags->show_resolution) if (user_info->screen_width != 0 || user_info->screen_height != 0) - responsively_printf(print_buf, - "%s%s%sRESOWUTION%s %dx%d", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->screen_width, user_info->screen_height); + responsively_printf(print_buf, "%s%s%sRESOWUTION%s %dx%d", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->screen_width, + user_info->screen_height); if (config_flags->show_shell) - responsively_printf(print_buf, - "%s%s%sSHEWW %s%s", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->shell); + responsively_printf(print_buf, "%s%s%sSHEWW %s%s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->shell); #if defined(__APPLE__) && !defined(TARGET_OS_IPHONE) if (show_pkgs) - system("ls $(brew --cellar) | wc -l | awk -F' ' '{print \" \x1b[34mw w \x1b[0m\x1b[1mPKGS\x1b[0m \"$1 \" (brew)\"}'"); + system( + "ls $(brew --cellar) | wc -l | awk -F' ' '{print \" \x1b[34mw " + " w \x1b[0m\x1b[1mPKGS\x1b[0m \"$1 \" (brew)\"}'"); #else if (config_flags->show_pkgs) - responsively_printf(print_buf, - "%s%s%sPKGS %s%s%d: %s", - terminal_cursor_move, NORMAL, BOLD, NORMAL, NORMAL, user_info->pkgs, user_info->pkgman_name); + responsively_printf(print_buf, "%s%s%sPKGS %s%s%d: %s", + terminal_cursor_move, NORMAL, BOLD, NORMAL, NORMAL, + user_info->pkgs, user_info->pkgman_name); #endif - if (config_flags->show_uptime) - { - if (user_info->uptime == 0) - { + if (config_flags->show_uptime) { + if (user_info->uptime == 0) { #ifdef __APPLE__ user_info->uptime = uptime_apple(); #else -#ifdef __FREEBSD__ + #ifdef __FREEBSD__ user_info->uptime = uptime_freebsd(); -#else -#ifdef _WIN32 + #else + #ifdef _WIN32 user_info->uptime = GetTickCount() / 1000; -#else // _WIN32 + #else // _WIN32 user_info->uptime = user_info->sys.uptime; -#endif // _WIN32 -#endif + #endif // _WIN32 + #endif #endif } - switch (user_info->uptime) - { + switch (user_info->uptime) { case 0 ... 3599: - responsively_printf(print_buf, - "%s%s%sUWUPTIME %s%lim", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->uptime / 60 % 60); + responsively_printf(print_buf, "%s%s%sUWUPTIME %s%lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->uptime / 60 % 60); break; case 3600 ... 86399: - responsively_printf(print_buf, - "%s%s%sUWUPTIME %s%lih, %lim", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->uptime / 3600, user_info->uptime / 60 % 60); + responsively_printf(print_buf, "%s%s%sUWUPTIME %s%lih, %lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->uptime / 3600, + user_info->uptime / 60 % 60); break; default: - responsively_printf(print_buf, - "%s%s%sUWUPTIME %s%lid, %lih, %lim", - terminal_cursor_move, NORMAL, BOLD, NORMAL, user_info->uptime / 86400, user_info->uptime / 3600 % 24, user_info->uptime / 60 % 60); + responsively_printf( + print_buf, "%s%s%sUWUPTIME %s%lid, %lih, %lim", + terminal_cursor_move, NORMAL, BOLD, NORMAL, + user_info->uptime / 86400, user_info->uptime / 3600 % 24, + user_info->uptime / 60 % 60); } } if (config_flags->show_colors) printf("%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", - terminal_cursor_move, BOLD, BLACK, BLOCK_CHAR, BLOCK_CHAR, RED, BLOCK_CHAR, BLOCK_CHAR, GREEN, BLOCK_CHAR, BLOCK_CHAR, YELLOW, BLOCK_CHAR, BLOCK_CHAR, BLUE, BLOCK_CHAR, BLOCK_CHAR, MAGENTA, BLOCK_CHAR, BLOCK_CHAR, CYAN, BLOCK_CHAR, BLOCK_CHAR, WHITE, BLOCK_CHAR, BLOCK_CHAR, NORMAL); + terminal_cursor_move, BOLD, BLACK, BLOCK_CHAR, BLOCK_CHAR, RED, + BLOCK_CHAR, BLOCK_CHAR, GREEN, BLOCK_CHAR, BLOCK_CHAR, YELLOW, + BLOCK_CHAR, BLOCK_CHAR, BLUE, BLOCK_CHAR, BLOCK_CHAR, MAGENTA, + BLOCK_CHAR, BLOCK_CHAR, CYAN, BLOCK_CHAR, BLOCK_CHAR, WHITE, + BLOCK_CHAR, BLOCK_CHAR, NORMAL); } -void write_cache(struct info *user_info) -{ +void write_cache(struct info *user_info) { char cache_file[512]; sprintf(cache_file, "%s/.cache/uwufetch.cache", getenv("HOME")); FILE *cache_fp = fopen(cache_file, "w"); - if (cache_fp == NULL) - return; + if (cache_fp == NULL) return; // writing all info to the cache file #ifdef __APPLE__ uptime = uptime_apple(); #else -#ifdef __FREEBSD__ + #ifdef __FREEBSD__ uptime = uptime_freebsd(); -#else -#ifndef _WIN32 + #else + #ifndef _WIN32 user_info->uptime = user_info->sys.uptime; -#endif // _WIN32 + #endif // _WIN32 + #endif #endif -#endif - fprintf(cache_fp, "user=%s\nhost=%s\nversion_name=%s\nhost_model=%s\nkernel=%s\ncpu=%s\nscreen_width=%d\nscreen_height=%d\nshell=%s\npkgs=%d\npkgman_name=%s\n", user_info->user, user_info->host, user_info->version_name, user_info->host_model, user_info->kernel, user_info->cpu_model, user_info->screen_width, user_info->screen_height, user_info->shell, user_info->pkgs, user_info->pkgman_name); + fprintf( + cache_fp, + "user=%s\nhost=%s\nversion_name=%s\nhost_model=%s\nkernel=%s\ncpu=%" + "s\nscreen_width=%d\nscreen_height=%d\nshell=%s\npkgs=%d\npkgman_name=%" + "s\n", + user_info->user, user_info->host, user_info->version_name, + user_info->host_model, user_info->kernel, user_info->cpu_model, + user_info->screen_width, user_info->screen_height, user_info->shell, + user_info->pkgs, user_info->pkgman_name); for (int i = 0; user_info->gpu_model[i][0]; i++) fprintf(cache_fp, "gpu=%s\n", user_info->gpu_model[i]); #ifdef __APPLE__ /* char brew_command[2048]; - sprintf(brew_command, "ls $(brew --cellar) | wc -l | awk -F' ' '{print \" \x1b[34mw w \x1b[0m\x1b[1mPKGS\x1b[0m \"$1 \" (brew)\"}' > %s", cache_file); - system(brew_command); */ + sprintf(brew_command, "ls $(brew --cellar) | wc -l | awk -F' ' '{print \" + \x1b[34mw w \x1b[0m\x1b[1mPKGS\x1b[0m \"$1 \" (brew)\"}' + > %s", cache_file); system(brew_command); */ #endif fclose(cache_fp); return; } // return whether the cache file is found -int read_cache(struct info *user_info) -{ +int read_cache(struct info *user_info) { char cache_file[512]; sprintf(cache_file, "%s/.cache/uwufetch.cache", getenv("HOME")); FILE *cache_fp = fopen(cache_file, "r"); - if (cache_fp == NULL) - return 0; + if (cache_fp == NULL) return 0; char line[256]; int gpun = 0; - while (fgets(line, sizeof(line), cache_fp)) - { + while (fgets(line, sizeof(line), cache_fp)) { sscanf(line, "user=%99[^\n]", user_info->user); sscanf(line, "host=%99[^\n]", user_info->host); sscanf(line, "version_name=%99[^\n]", user_info->version_name); @@ -609,22 +597,22 @@ int read_cache(struct info *user_info) return 1; } -void print_cache(struct configuration *config_flags, struct info *user_info) -{ +void print_cache(struct configuration *config_flags, struct info *user_info) { #ifndef __APPLE__ -#ifndef _WIN32 + #ifndef _WIN32 sysinfo(&user_info->sys); // to get uptime -#endif // _WIN32 + #endif // _WIN32 FILE *meminfo; -#ifdef __FREEBSD__ + #ifdef __FREEBSD__ meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r"); -#else // __FREEBSD__ + #else // __FREEBSD__ meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r"); -#endif // __FREEBSD__ + #endif // __FREEBSD__ char line[256]; while (fgets(line, sizeof(line), meminfo)) - // free command prints like this: "Mem:" total used free shared buff/cache available + // free command prints like this: "Mem:" total used free shared + // buff/cache available sscanf(line, "Mem: %d %d", &user_info->ram_total, &user_info->ram_used); fclose(meminfo); #elif defined(_WIN32) @@ -634,8 +622,7 @@ void print_cache(struct configuration *config_flags, struct info *user_info) mem_used_fp = popen("wmic OS GET FreePhysicalMemory", "r"); char mem_used_ch[2137]; printf("\n\n\n\\\n"); - while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) - { + while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) { printf("%s\n", mem_used_ch); } pclose(mem_used_fp); @@ -648,16 +635,18 @@ void print_cache(struct configuration *config_flags, struct info *user_info) // Used ram FILE *mem_wired_fp, *mem_active_fp, *mem_compressed_fp; - mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); - mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); - mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); + mem_wired_fp = + popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); + mem_active_fp = + popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); + mem_compressed_fp = popen( + "vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); char mem_wired_ch[2137], mem_active_ch[2137], mem_compressed_ch[2137]; - while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) - { - while (fgets(mem_active_ch, sizeof(mem_active_ch), mem_active_fp) != NULL) - { - while (fgets(mem_compressed_ch, sizeof(mem_compressed_ch), mem_compressed_fp) != NULL) - { + while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) { + while (fgets(mem_active_ch, sizeof(mem_active_ch), mem_active_fp) != + NULL) { + while (fgets(mem_compressed_ch, sizeof(mem_compressed_ch), + mem_compressed_fp) != NULL) { } } } @@ -666,8 +655,8 @@ void print_cache(struct configuration *config_flags, struct info *user_info) pclose(mem_active_fp); pclose(mem_compressed_fp); - int mem_wired = atoi(mem_wired_ch); - int mem_active = atoi(mem_active_ch); + int mem_wired = atoi(mem_wired_ch); + int mem_active = atoi(mem_active_ch); int mem_compressed = atoi(mem_compressed_ch); // Total ram @@ -695,7 +684,7 @@ struct info get_info() user_info.target_width = user_info.win.ws_col - 30; #else // _WIN32 GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); - user_info.ws_col = csbi.srWindow.Right - csbi.srWindow.Left - 29; + user_info.ws_col = csbi.srWindow.Right - csbi.srWindow.Left - 29; user_info.ws_rows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; #endif // _WIN32 @@ -704,15 +693,19 @@ struct info get_info() #ifndef __FREEBSD__ FILE *cpuinfo = fopen("/proc/cpuinfo", "r"); #else - FILE *cpuinfo = popen("sysctl -a | egrep -i 'hw.model'", "r"); + FILE *cpuinfo = popen("sysctl -a | egrep -i 'hw.model'", "r"); #endif - FILE *host_model_info = fopen("/sys/devices/virtual/dmi/id/board_name", "r"); // try to get board name ("HOWOST" INFO NAME SHOULD BE CHANGED AS IT IS NOT MEANT TO BE THE hostname, BUT THE MODEL OF THE COMPUTER) + FILE *host_model_info = + fopen("/sys/devices/virtual/dmi/id/board_name", + "r"); // try to get board name ("HOWOST" INFO NAME SHOULD BE + // CHANGED AS IT IS NOT MEANT TO BE THE hostname, BUT THE + // MODEL OF THE COMPUTER) if (!host_model_info) - host_model_info = fopen("/sys/devices/virtual/dmi/id/product_name", "r"); // if couldn't then try another - if (!host_model_info) // if failed - host_model_info = fopen("/etc/hostname", "r"); // etc. - if (host_model_info) - { // if succeeded to open one of the file + host_model_info = fopen("/sys/devices/virtual/dmi/id/product_name", + "r"); // if couldn't then try another + if (!host_model_info) // if failed + host_model_info = fopen("/etc/hostname", "r"); // etc. + if (host_model_info) { // if succeeded to open one of the file fgets(line, 256, host_model_info); line[strlen(line) - 1] = '\0'; sprintf(user_info.host_model, "%s", line); @@ -720,58 +713,54 @@ struct info get_info() } #ifdef _WIN32 host_model_info = popen("wmic computersystem get model", "r"); - while (fgets(line, sizeof(line), host_model_info)) - { + while (fgets(line, sizeof(line), host_model_info)) { if (strstr(line, "Model") != 0) continue; - else - { + else { sprintf(user_info.host_model, "%s", line); user_info.host_model[strlen(user_info.host_model) - 2] = '\0'; break; } } #elif defined(__FREEBSD__) || defined(__APPLE__) -#if defined(__FREEBSD__) -#define HOSTCTL "hw.hv_vendor" -#elif defined(__APPLE__) -#define HOSTCTL "hw.model" -#endif - host_model_info = popen("sysctl -a " HOSTCTL, "r"); + #if defined(__FREEBSD__) + #define HOSTCTL "hw.hv_vendor" + #elif defined(__APPLE__) + #define HOSTCTL "hw.model" + #endif + host_model_info = popen("sysctl -a " HOSTCTL, "r"); while (fgets(line, sizeof(line), host_model_info)) - if (sscanf(line, HOSTCTL ": %[^\n]", host_model)) - break; + if (sscanf(line, HOSTCTL ": %[^\n]", host_model)) break; #endif // _WIN32 - FILE *host_model_version = fopen("/sys/devices/virtual/dmi/id/product_version", "r"); + FILE *host_model_version = + fopen("/sys/devices/virtual/dmi/id/product_version", "r"); - if (os_release) - { // get normal vars + if (os_release) { // get normal vars while (fgets(line, sizeof(line), os_release)) - if (sscanf(line, "\nID=\"%s\"", user_info.version_name) || sscanf(line, "\nID=%s", user_info.version_name)) + if (sscanf(line, "\nID=\"%s\"", user_info.version_name) || + sscanf(line, "\nID=%s", user_info.version_name)) break; - // trying to detect amogos because in its os-release file ID value is just "debian" - if (strcmp(user_info.version_name, "debian") == 0 || strcmp(user_info.version_name, "raspbian") == 0) // will be removed when amogos will have an os-release file with ID=amogos + // trying to detect amogos because in its os-release file ID value is + // just "debian" + if (strcmp(user_info.version_name, "debian") == 0 || + strcmp(user_info.version_name, "raspbian") == + 0) // will be removed when amogos will have an os-release file + // with ID=amogos { DIR *amogos_plymouth = opendir("/usr/share/plymouth/themes/amogos"); - if (amogos_plymouth) - { + if (amogos_plymouth) { closedir(amogos_plymouth); sprintf(user_info.version_name, "amogos"); } } - if (host_model_info) - { + if (host_model_info) { while (fgets(line, sizeof(line), host_model_info)) - if (sscanf(line, "%[^\n]", user_info.host_model)) - break; - if (host_model_version) - { + if (sscanf(line, "%[^\n]", user_info.host_model)) break; + if (host_model_version) { char version[32]; - while (fgets(line, sizeof(line), host_model_version)) - { - if (sscanf(line, "%[^\n]", version)) - { + while (fgets(line, sizeof(line), host_model_version)) { + if (sscanf(line, "%[^\n]", version)) { strcat(user_info.host_model, " "); strcat(user_info.host_model, version); break; @@ -779,8 +768,7 @@ struct info get_info() } } } - while (fgets(line, sizeof(line), cpuinfo)) - { + while (fgets(line, sizeof(line), cpuinfo)) { #ifdef __FREEBSD__ if (sscanf(line, "hw.model: %[^\n]", user_info.cpu_model)) #else @@ -794,14 +782,11 @@ struct info get_info() else sprintf(user_info.user, "%s", tmp_user); fclose(os_release); - } - else - { // try for android vars, next for Apple var, or unknown system - DIR *system_app = opendir("/system/app/"); + } else { // try for android vars, next for Apple var, or unknown system + DIR *system_app = opendir("/system/app/"); DIR *system_priv_app = opendir("/system/priv-app/"); - DIR *library = opendir("/Library/"); - if (system_app && system_priv_app) - { // android + DIR *library = opendir("/Library/"); + if (system_app && system_priv_app) { // android closedir(system_app); closedir(system_priv_app); sprintf(user_info.version_name, "android"); @@ -812,29 +797,28 @@ struct info get_info() fclose(whoami); host_model_info = popen("getprop ro.product.model", "r"); while (fgets(line, sizeof(line), host_model_info)) - if (sscanf(line, "%[^\n]", user_info.host_model)) - break; + if (sscanf(line, "%[^\n]", user_info.host_model)) break; #ifndef __FREEBSD__ while (fgets(line, sizeof(line), cpuinfo)) - if (sscanf(line, "Hardware : %[^\n]", user_info.cpu_model)) + if (sscanf(line, "Hardware : %[^\n]", + user_info.cpu_model)) break; #endif - } - else if (library) // Apple + } else if (library) // Apple { closedir(library); #ifdef __APPLE__ - sysctlbyname("machdep.cpu.brand_string", &cpu_buffer, &cpu_buffer_len, NULL, 0); + sysctlbyname("machdep.cpu.brand_string", &cpu_buffer, + &cpu_buffer_len, NULL, 0); -#ifndef TARGET_OS_IPHONE + #ifndef TARGET_OS_IPHONE sprintf(user_info.version_name, "macos"); -#else + #else sprintf(user_info.version_name, "ios"); -#endif + #endif sprintf(user_info.cpu_model, "%s", cpu_buffer); #endif - } - else + } else sprintf(user_info.version_name, "unknown"); } #ifndef __FREEBSD__ @@ -849,29 +833,28 @@ struct info get_info() else sprintf(user_info.shell, "%s", tmp_shell); if (strlen(user_info.shell) > 16) - memmove(&user_info.shell, &user_info.shell[27], strlen(user_info.shell)); // android shell was too long, this works only for termux + memmove(&user_info.shell, &user_info.shell[27], + strlen(user_info.shell)); // android shell was too long, this + // works only for termux #else cpuinfo = popen("wmic cpu get caption", "r"); - while (fgets(line, sizeof(line), cpuinfo)) - { + while (fgets(line, sizeof(line), cpuinfo)) { if (strstr(line, "Caption") != 0) continue; - else - { + else { sprintf(user_info.cpu_model, "%s", line); user_info.cpu_model[strlen(user_info.cpu_model) - 2] = '\0'; break; } } FILE *user_host_fp = popen("wmic computersystem get username", "r"); - while (fgets(line, sizeof(line), user_host_fp)) - { + while (fgets(line, sizeof(line), user_host_fp)) { if (strstr(line, "UserName") != 0) continue; - else - { + else { sscanf(line, "%[^\\]%s", user_info.host, user_info.user); - memmove(user_info.user, user_info.user + 1, sizeof(user_info.user) - 1); + memmove(user_info.user, user_info.user + 1, + sizeof(user_info.user) - 1); break; } } @@ -892,46 +875,44 @@ struct info get_info() uname(&user_info.sys_var); #endif // _WIN32 #ifndef __APPLE__ -#ifndef __FREEBSD__ -#ifndef _WIN32 - sysinfo(&user_info.sys); // somehow this function has to be called again in print_info() -#else // _WIN32 + #ifndef __FREEBSD__ + #ifndef _WIN32 + sysinfo(&user_info.sys); // somehow this function has to be called again in + // print_info() + #else // _WIN32 GetSystemInfo(&user_info.sys); -#endif // _WIN32 -#endif + #endif // _WIN32 + #endif #endif #ifndef _WIN32 truncate_name(user_info.sys_var.release, user_info.target_width); - sprintf(user_info.kernel, "%s %s %s", user_info.sys_var.sysname, user_info.sys_var.release, user_info.sys_var.machine); + sprintf(user_info.kernel, "%s %s %s", user_info.sys_var.sysname, + user_info.sys_var.release, user_info.sys_var.machine); truncate_name(user_info.kernel, user_info.target_width); #else // _WIN32 sprintf(user_info.version_name, "windows"); FILE *kernel_fp = popen("wmic computersystem get systemtype", "r"); - while (fgets(line, sizeof(line), kernel_fp)) - { + while (fgets(line, sizeof(line), kernel_fp)) { if (strstr(line, "SystemType") != 0) continue; - else - { + else { sprintf(user_info.kernel, "%s", line); user_info.kernel[strlen(user_info.kernel) - 2] = '\0'; break; } } - if (kernel_fp != NULL) - pclose(kernel_fp); + if (kernel_fp != NULL) pclose(kernel_fp); #endif // _WIN32 // ram #ifndef __APPLE__ -#ifdef _WIN32 - FILE *mem_used_fp = popen("wmic os get freevirtualmemory", "r"); - FILE *mem_total_fp = popen("wmic os get totalvirtualmemorysize", "r"); + #ifdef _WIN32 + FILE *mem_used_fp = popen("wmic os get freevirtualmemory", "r"); + FILE *mem_total_fp = popen("wmic os get totalvirtualmemorysize", "r"); char mem_used_ch[2137] = {0}, mem_total_ch[2137] = {0}; - while (fgets(mem_total_ch, sizeof(mem_total_ch), mem_total_fp) != NULL) - { + while (fgets(mem_total_ch, sizeof(mem_total_ch), mem_total_fp) != NULL) { if (strstr(mem_total_ch, "TotalVirtualMemorySize") != 0) continue; else if (strstr(mem_total_ch, " ") == 0) @@ -939,43 +920,46 @@ struct info get_info() else user_info.ram_total = atoi(mem_total_ch) / 1024; } - while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) - { + while (fgets(mem_used_ch, sizeof(mem_used_ch), mem_used_fp) != NULL) { if (strstr(mem_used_ch, "FreeVirtualMemory") != 0) continue; else if (strstr(mem_used_ch, " ") == 0) continue; else - user_info.ram_used = user_info.ram_total - (atoi(mem_used_ch) / 1024); + user_info.ram_used = + user_info.ram_total - (atoi(mem_used_ch) / 1024); } pclose(mem_used_fp); pclose(mem_total_fp); -#else + #else FILE *meminfo; -#ifdef __FREEBSD__ + #ifdef __FREEBSD__ meminfo = popen("LANG=EN_us freecolor -om 2> /dev/null", "r"); -#else + #else meminfo = popen("LANG=EN_us free -m 2> /dev/null", "r"); -#endif + #endif while (fgets(line, sizeof(line), meminfo)) - // free command prints like this: "Mem:" total used free shared buff/cache available + // free command prints like this: "Mem:" total used free shared + // buff/cache available sscanf(line, "Mem: %d %d", &user_info.ram_total, &user_info.ram_used); fclose(meminfo); -#endif + #endif #else // Used FILE *mem_wired_fp, *mem_active_fp, *mem_compressed_fp; - mem_wired_fp = popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); - mem_active_fp = popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); - mem_compressed_fp = popen("vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); + mem_wired_fp = + popen("vm_stat | awk '/wired/ { printf $4 }' | cut -d '.' -f 1", "r"); + mem_active_fp = + popen("vm_stat | awk '/active/ { printf $3 }' | cut -d '.' -f 1", "r"); + mem_compressed_fp = popen( + "vm_stat | awk '/occupied/ { printf $5 }' | cut -d '.' -f 1", "r"); char mem_wired_ch[2137], mem_active_ch[2137], mem_compressed_ch[2137]; - while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) - { - while (fgets(mem_active_ch, sizeof(mem_active_ch), mem_active_fp) != NULL) - { - while (fgets(mem_compressed_ch, sizeof(mem_compressed_ch), mem_compressed_fp) != NULL) - { + while (fgets(mem_wired_ch, sizeof(mem_wired_ch), mem_wired_fp) != NULL) { + while (fgets(mem_active_ch, sizeof(mem_active_ch), mem_active_fp) != + NULL) { + while (fgets(mem_compressed_ch, sizeof(mem_compressed_ch), + mem_compressed_fp) != NULL) { } } } @@ -984,19 +968,20 @@ struct info get_info() pclose(mem_active_fp); pclose(mem_compressed_fp); - int mem_wired = atoi(mem_wired_ch); - int mem_active = atoi(mem_active_ch); + int mem_wired = atoi(mem_wired_ch); + int mem_active = atoi(mem_active_ch); int mem_compressed = atoi(mem_compressed_ch); // Total sysctlbyname("hw.memsize", &mem_buffer, &mem_buffer_len, NULL, 0); - ram_used = ((mem_wired + mem_active + mem_compressed) * 4 / 1024); + ram_used = ((mem_wired + mem_active + mem_compressed) * 4 / 1024); ram_total = mem_buffer / 1024 / 1024; #endif /* ---------- gpu ---------- */ - int gpun = 0; // number of the gpu that the program is searching for to put in the array + int gpun = 0; // number of the gpu that the program is searching for to put + // in the array #ifndef _WIN32 setenv("LANG", "en_US", 1); // force language to english #endif // _WIN32 @@ -1010,28 +995,28 @@ struct info get_info() gpun++; #endif // _WIN32 - if (strlen(user_info.gpu_model[0]) < 2) - { + if (strlen(user_info.gpu_model[0]) < 2) { // get gpus with lspci command - if (strcmp(user_info.version_name, "android") != 0) - { + if (strcmp(user_info.version_name, "android") != 0) { #ifndef __APPLE__ -#ifdef _WIN32 + #ifdef _WIN32 gpu = popen("wmic PATH Win32_VideoController GET Name", "r"); + #else + gpu = popen("lspci -mm 2> /dev/null | grep \"VGA\" | awk -F '\"' " + "'{print $4 $5 $6}'", + "r"); + #endif #else - gpu = popen("lspci -mm 2> /dev/null | grep \"VGA\" | awk -F '\"' '{print $4 $5 $6}'", "r"); + gpu = popen("system_profiler SPDisplaysDataType | awk -F ': ' " + "'/Chipset Model: /{ print $2 }'", + "r"); #endif -#else - gpu = popen("system_profiler SPDisplaysDataType | awk -F ': ' '/Chipset Model: /{ print $2 }'", "r"); -#endif - } - else + } else gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r"); } // get all the gpus - while (fgets(line, sizeof(line), gpu)) - { + while (fgets(line, sizeof(line), gpu)) { if (strstr(line, "Name")) continue; else if (strlen(line) == 2) @@ -1043,17 +1028,16 @@ struct info get_info() fclose(gpu); // truncate GPU name and remove square brackets - for (int i = 0; i < gpun; i++) - { + for (int i = 0; i < gpun; i++) { remove_brackets(user_info.gpu_model[i]); truncate_name(user_info.gpu_model[i], user_info.target_width); } // Resolution #ifndef _WIN32 - FILE *resolution = popen("xwininfo -root 2> /dev/null | grep -E 'Width|Height'", "r"); - while (fgets(line, sizeof(line), resolution)) - { + FILE *resolution = + popen("xwininfo -root 2> /dev/null | grep -E 'Width|Height'", "r"); + while (fgets(line, sizeof(line), resolution)) { sscanf(line, " Width: %d", &user_info.screen_width); sscanf(line, " Height: %d", &user_info.screen_height); } @@ -1078,25 +1062,29 @@ struct info get_info() return user_info; } -void list(char *arg) -{ // prints distribution list +void list(char *arg) { // prints distribution list // distributions are listed by distribution branch // to make the output easier to understand by the user. printf("%s -d \n" " Available distributions:\n" " %sArch linux %sbased:\n" - " %sarch, arcolinux, %sartix, endeavouros %smanjaro, manjaro-arm, %sxerolinux\n\n" + " %sarch, arcolinux, %sartix, endeavouros %smanjaro, " + "manjaro-arm, %sxerolinux\n\n" " %sDebian/%sUbuntu %sbased:\n" - " %samogos, debian, %slinuxmint, neon %spop, %sraspbian %subuntu\n\n" + " %samogos, debian, %slinuxmint, neon %spop, %sraspbian " + "%subuntu\n\n" " %sBSD %sbased:\n" " %sfreebsd, %sopenbsd, %sm%sa%sc%so%ss, %sios\n\n" " %sOther/spare distributions:\n" - " %salpine, %sfedora, %sgentoo, %sslackware, %ssolus, %svoid, opensuse-leap, android, %sgnu, guix, %swindows, %sunknown\n\n", - arg, - BLUE, NORMAL, BLUE, MAGENTA, GREEN, BLUE, // Arch based colors - RED, YELLOW, NORMAL, RED, GREEN, BLUE, RED, YELLOW, // Debian based colors - RED, NORMAL, RED, YELLOW, GREEN, YELLOW, RED, PINK, BLUE, WHITE, // BSD/Apple colors - NORMAL, BLUE, BLUE, PINK, MAGENTA, WHITE, GREEN, YELLOW, BLUE, WHITE); // Other/spare distributions colors + " %salpine, %sfedora, %sgentoo, %sslackware, %ssolus, %svoid, " + "opensuse-leap, android, %sgnu, guix, %swindows, %sunknown\n\n", + arg, BLUE, NORMAL, BLUE, MAGENTA, GREEN, BLUE, // Arch based colors + RED, YELLOW, NORMAL, RED, GREEN, BLUE, RED, + YELLOW, // Debian based colors + RED, NORMAL, RED, YELLOW, GREEN, YELLOW, RED, PINK, BLUE, + WHITE, // BSD/Apple colors + NORMAL, BLUE, BLUE, PINK, MAGENTA, WHITE, GREEN, YELLOW, BLUE, + WHITE); // Other/spare distributions colors } /* @@ -1104,24 +1092,22 @@ void list(char *arg) replace("Hello World!", "World", "everyone") This returns "Hello everyone!". */ -void replace(char *original, char *search, char *replacer) -{ +void replace(char *original, char *search, char *replacer) { char *ch; char buffer[1024]; - while ((ch = strstr(original, search))) - { + while ((ch = strstr(original, search))) { ch = strstr(original, search); strncpy(buffer, original, ch - original); buffer[ch - original] = 0; - sprintf(buffer + (ch - original), "%s%s", replacer, ch + strlen(search)); + sprintf(buffer + (ch - original), "%s%s", replacer, + ch + strlen(search)); original[0] = 0; strcpy(original, buffer); } } -void replace_ignorecase(char *original, char *search, char *replacer) -{ +void replace_ignorecase(char *original, char *search, char *replacer) { char *ch; char buffer[1024]; #ifndef _WIN32 @@ -1132,38 +1118,38 @@ void replace_ignorecase(char *original, char *search, char *replacer) { strncpy(buffer, original, ch - original); buffer[ch - original] = 0; - sprintf(buffer + (ch - original), "%s%s", replacer, ch + strlen(search)); + sprintf(buffer + (ch - original), "%s%s", replacer, + ch + strlen(search)); original[0] = 0; strcpy(original, buffer); } } -void print_ascii(struct info *user_info) -{ // prints logo (as ascii art) of the given system. distributions listed alphabetically. +void print_ascii( + struct info *user_info) { // prints logo (as ascii art) of the given system. + // distributions listed alphabetically. printf("\n"); FILE *file; char ascii_file[1024]; - // First tries to get ascii art file from local directory. Good when modifying these files. + // First tries to get ascii art file from local directory. Good when + // modifying these files. sprintf(ascii_file, "./res/ascii/%s.txt", user_info->version_name); file = fopen(ascii_file, "r"); // Now tries to get file from normal directory - if (!file) - { - if (strcmp(user_info->version_name, "android") == 0) - { - sprintf(ascii_file, "/data/data/com.termux/files/usr/lib/uwufetch/ascii/%s.txt", user_info->version_name); - } - else - { - sprintf(ascii_file, "/usr/lib/uwufetch/ascii/%s.txt", user_info->version_name); + if (!file) { + if (strcmp(user_info->version_name, "android") == 0) { + sprintf(ascii_file, + "/data/data/com.termux/files/usr/lib/uwufetch/ascii/%s.txt", + user_info->version_name); + } else { + sprintf(ascii_file, "/usr/lib/uwufetch/ascii/%s.txt", + user_info->version_name); } file = fopen(ascii_file, "r"); - if (!file) - { + if (!file) { // Prevent infinite loops - if (strcmp(user_info->version_name, "unknown") == 0) - { + if (strcmp(user_info->version_name, "unknown") == 0) { printf("No\nunknown\nascii\nfile\n\n\n\n"); return; } @@ -1172,8 +1158,7 @@ void print_ascii(struct info *user_info) } } char line[256]; - while (fgets(line, 256, file)) - { + while (fgets(line, 256, file)) { replace(line, "{NORMAL}", NORMAL); replace(line, "{BOLD}", BOLD); replace(line, "{BLACK}", BLACK); @@ -1200,27 +1185,35 @@ void print_ascii(struct info *user_info) replace(line, "{BACKGROUND_WHITE}", "\e[0;47m"); printf("%s", line); } - // Always set color to NORMAL, so there's no need to do this in every ascii file. + // Always set color to NORMAL, so there's no need to do this in every ascii + // file. printf(NORMAL); fclose(file); } -void print_image(struct info *user_info) -{ // prints logo (as an image) of the given system. distributions listed alphabetically. +void print_image( + struct info *user_info) { // prints logo (as an image) of the given system. + // distributions listed alphabetically. #ifndef TARGET_OS_IPHONE char command[256]; if (strlen(user_info->image_name) > 1) - sprintf(command, "viu -t -w 18 -h 8 %s 2> /dev/null", user_info->image_name); - else - { + sprintf(command, "viu -t -w 18 -h 8 %s 2> /dev/null", + user_info->image_name); + else { if (strcmp(user_info->version_name, "android") == 0) - sprintf(command, "viu -t -w 18 -h 8 /data/data/com.termux/files/usr/lib/uwufetch/%s.png 2> /dev/null", user_info->version_name); + sprintf(command, + "viu -t -w 18 -h 8 " + "/data/data/com.termux/files/usr/lib/uwufetch/%s.png 2> " + "/dev/null", + user_info->version_name); else - sprintf(command, "viu -t -w 18 -h 8 /usr/lib/uwufetch/%s.png 2> /dev/null", user_info->version_name); + sprintf(command, + "viu -t -w 18 -h 8 /usr/lib/uwufetch/%s.png 2> /dev/null", + user_info->version_name); } printf("\n"); - if (system(command) != 0) - { // if viu is not installed or the image is missing + if (system(command) != + 0) { // if viu is not installed or the image is missing printf("\033[0E\033[3C%s\n" " There was an\n" " error: viu\n" @@ -1232,7 +1225,8 @@ void print_image(struct info *user_info) RED); } #else - // unfortunately, the iOS stdlib does not have system(); + // unfortunately, the iOS stdlib does not have + // system(); // because it reports that it is not available under iOS during compilation printf("\033[0E\033[3C%s\n" " There was an\n" @@ -1243,24 +1237,27 @@ void print_image(struct info *user_info) #endif } -void usage(char *arg) -{ +void usage(char *arg) { printf("Usage: %s \n" " -a, --ascii prints logo as ascii text (default)\n" " -c --config use custom config path\n" " -d, --distro lets you choose the logo to print\n" " -h, --help prints this help page\n" #ifndef TARGET_OS_IPHONE - " -i, --image prints logo as image and use a custom image if provided\n" + " -i, --image prints logo as image and use a custom " + "image if provided\n" " %sworks in most terminals\n" #else - " -i, --image prints logo as image and use a custom image if provided\n" + " -i, --image prints logo as image and use a custom " + "image if provided\n" " %sdisabled under iOS\n" #endif " read README.md for more info%s\n" " -l, --list lists all supported distributions\n" - " -w, --write-cache writes to the cache file (~/.cache/uwufetch.cache)\n" - " using the cache set $UWUFETCH_CACHE_ENABLED to TRUE, true or 1\n", + " -w, --write-cache writes to the cache file " + "(~/.cache/uwufetch.cache)\n" + " using the cache set $UWUFETCH_CACHE_ENABLED to TRUE, true " + "or 1\n", arg, #ifndef TARGET_OS_IPHONE BLUE, @@ -1271,9 +1268,9 @@ void usage(char *arg) } #ifdef _WIN32 -// windows sucks and hasn't a strstep, so I copied one from https://stackoverflow.com/questions/8512958/is-there-a-windows-variant-of-strsep-function -char *strsep(char **stringp, const char *delim) -{ +// windows sucks and hasn't a strstep, so I copied one from +// https://stackoverflow.com/questions/8512958/is-there-a-windows-variant-of-strsep-function +char *strsep(char **stringp, const char *delim) { char *start = *stringp; char *p; @@ -1281,9 +1278,8 @@ char *strsep(char **stringp, const char *delim) if (p == NULL) *stringp = NULL; - else - { - *p = '\0'; + else { + *p = '\0'; *stringp = p + 1; } @@ -1291,25 +1287,21 @@ char *strsep(char **stringp, const char *delim) } #endif -void uwu_kernel(char *kernel) -{ +void uwu_kernel(char *kernel) { #define KERNEL_TO_UWU(str, original, uwufied) \ - if (strcmp(str, original) == 0) \ - sprintf(str, "%s", uwufied) + if (strcmp(str, original) == 0) sprintf(str, "%s", uwufied) char *temp_kernel = kernel; char *token; char splitted[16][128] = {}; int count = 0; - while ((token = strsep(&temp_kernel, " "))) - { + while ((token = strsep(&temp_kernel, " "))) { strcpy(splitted[count], token); count++; } strcpy(kernel, ""); - for (int i = 0; i < 16; i++) - { + for (int i = 0; i < 16; i++) { // kernel name KERNEL_TO_UWU(splitted[i], "Linux", "Linuwu"); else KERNEL_TO_UWU(splitted[i], "linux", "linuwu"); @@ -1330,7 +1322,8 @@ void uwu_kernel(char *kernel) else KERNEL_TO_UWU(splitted[i], "neon", "KDE NeOwOn"); else KERNEL_TO_UWU(splitted[i], "nixos", "nixOwOs"); else KERNEL_TO_UWU(splitted[i], "opensuse-leap", "OwOpenSUSE Leap"); - else KERNEL_TO_UWU(splitted[i], "opensuse-tumbleweed", "OwOpenSUSE Tumbleweed"); + else KERNEL_TO_UWU(splitted[i], "opensuse-tumbleweed", + "OwOpenSUSE Tumbleweed"); else KERNEL_TO_UWU(splitted[i], "pop", "PopOwOS"); else KERNEL_TO_UWU(splitted[i], "raspbian", "RaspNyan"); else KERNEL_TO_UWU(splitted[i], "slackware", "Swackwawe"); @@ -1338,7 +1331,10 @@ void uwu_kernel(char *kernel) else KERNEL_TO_UWU(splitted[i], "ubuntu", "Uwuntu"); else KERNEL_TO_UWU(splitted[i], "void", "OwOid"); else KERNEL_TO_UWU(splitted[i], "xerolinux", "xuwulinux"); - else KERNEL_TO_UWU(splitted[i], "android", "Nyandroid"); // android at the end because it could be not considered as an actual distribution of gnu/linux + else KERNEL_TO_UWU( + splitted[i], "android", + "Nyandroid"); // android at the end because it could be not + // considered as an actual distribution of gnu/linux // BSD else KERNEL_TO_UWU(splitted[i], "freebsd", "FweeBSD"); @@ -1350,20 +1346,19 @@ void uwu_kernel(char *kernel) // Windows else KERNEL_TO_UWU(splitted[i], "windows", "WinyandOwOws"); - if (i != 0) - strcat(kernel, " "); + if (i != 0) strcat(kernel, " "); strcat(kernel, splitted[i]); } #undef KERNEL_TO_UWU } -void uwu_hw(char *hwname) -{ +void uwu_hw(char *hwname) { #define HW_TO_UWU(original, uwuified) \ replace_ignorecase(hwname, original, uwuified); HW_TO_UWU("lenovo", "LenOwO") - HW_TO_UWU("cpu", "CC\bPUwU"); // for some reasons this caused a segfault, using a \b char fixes it + HW_TO_UWU("cpu", "CC\bPUwU"); // for some reasons this caused a segfault, + // using a \b char fixes it HW_TO_UWU("gpu", "GG\bPUwU") HW_TO_UWU("graphics", "Gwaphics") HW_TO_UWU("corporation", "COwOpowation") @@ -1383,8 +1378,8 @@ void uwu_hw(char *hwname) #undef HW_TO_UWU } -void uwu_name(struct configuration *config_flags, struct info *user_info) -{ // uwufies distro name +void uwu_name(struct configuration *config_flags, + struct info *user_info) { // uwufies distro name #define STRING_TO_UWU(original, uwufied) \ if (strcmp(user_info->version_name, original) == 0) \ @@ -1417,7 +1412,10 @@ void uwu_name(struct configuration *config_flags, struct info *user_info) else STRING_TO_UWU("ubuntu", "Uwuntu"); else STRING_TO_UWU("void", "OwOid"); else STRING_TO_UWU("xerolinux", "xuwulinux"); - else STRING_TO_UWU("android", "Nyandroid"); // android at the end because it could be not considered as an actual distribution of gnu/linux + else STRING_TO_UWU( + "android", + "Nyandroid"); // android at the end because it could be not considered + // as an actual distribution of gnu/linux // BSD else STRING_TO_UWU("freebsd", "FweeBSD"); @@ -1429,11 +1427,9 @@ void uwu_name(struct configuration *config_flags, struct info *user_info) // Windows else STRING_TO_UWU("windows", "WinyandOwOws"); - else - { + else { sprintf(user_info->version_name, "%s", "unknown"); - if (config_flags->ascii_image_flag == 1) - { + if (config_flags->ascii_image_flag == 1) { print_image(user_info); printf("\n"); } @@ -1441,27 +1437,20 @@ void uwu_name(struct configuration *config_flags, struct info *user_info) #undef STRING_TO_UWU } -void truncate_name(char *name, int target_width) -{ +void truncate_name(char *name, int target_width) { char arr[target_width]; - for (int i = 0; i < target_width; i++) - arr[i] = name[i]; + for (int i = 0; i < target_width; i++) arr[i] = name[i]; name = arr; } // remove square brackets (for gpu names) -void remove_brackets(char *str) -{ +void remove_brackets(char *str) { int i = 0, j; - while (i < (int)strlen(str)) - { - if (str[i] == '[' || str[i] == ']') - { - for (j = i; j < (int)strlen(str); j++) - str[j] = str[j + 1]; - } - else + while (i < (int)strlen(str)) { + if (str[i] == '[' || str[i] == ']') { + for (j = i; j < (int)strlen(str); j++) str[j] = str[j + 1]; + } else i++; } }