commit
d3822b5c54
3 changed files with 103 additions and 5 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,5 +1,6 @@
|
|||
uwufetch
|
||||
*.zip
|
||||
*.idea
|
||||
*.vscode
|
||||
*.gz
|
||||
*.1
|
||||
|
|
|
@ -10,7 +10,7 @@ Nyalpine, Nyarch Linuwu, Nyartix Linuwu, Debinyan, Fedowa, GentOwO, GnUwU gUwUix
|
|||
|
||||
#### Partial support (Either no Ascii art, or no image is provided)
|
||||
|
||||
endeavOwO, KDE NeOwOn, nixOwOs, Swackwawe, sOwOlus; Plus FweeBSD, and OwOpenBSD
|
||||
endeavOwO, KDE NeOwOn, nixOwOs, Swackwawe, sOwOlus; Plus FweeBSD, OwOpenBSD and macOwOS
|
||||
|
||||
## Building and installation
|
||||
|
||||
|
|
99
uwufetch.c
99
uwufetch.c
|
@ -19,7 +19,12 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <getopt.h>
|
||||
#ifdef __APPLE__
|
||||
#include <sys/sysctl.h>
|
||||
#include <time.h>
|
||||
#else
|
||||
#include <sys/sysinfo.h>
|
||||
#endif
|
||||
#include <sys/utsname.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
|
@ -36,6 +41,22 @@
|
|||
#define WHITE "\x1b[37m"
|
||||
#define PINK "\x1b[38;5;201m"
|
||||
#define LPINK "\x1b[38;5;213m"
|
||||
#ifdef __APPLE__
|
||||
// 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;
|
||||
size_t mem_buffer_len = sizeof(mem_buffer);
|
||||
|
||||
// uptime
|
||||
struct timeval time_buffer;
|
||||
size_t time_buffer_len = sizeof(time_buffer);
|
||||
#endif
|
||||
|
||||
struct package_manager
|
||||
{
|
||||
|
@ -43,7 +64,9 @@ struct package_manager
|
|||
char pkgman_name[16]; // name of the package manager
|
||||
};
|
||||
struct utsname sys_var;
|
||||
#ifndef __APPLE__
|
||||
struct sysinfo sys;
|
||||
#endif
|
||||
struct winsize win;
|
||||
int ram_total, ram_used = 0;
|
||||
// initialise the variables to store data, gpu array can hold up to 8 gpus
|
||||
|
@ -184,12 +207,14 @@ int pkgman()
|
|||
struct package_manager pkgmans[] = {
|
||||
{"apt list --installed 2> /dev/null | wc -l", "(apt)"},
|
||||
{"apk info 2> /dev/null | wc -l", "(apk)"},
|
||||
{"brew list --formulae 2> /dev/null | wc -l", "(brew)"},
|
||||
{"dnf list installed 2> /dev/null | wc -l", "(dnf)"},
|
||||
{"qlist -I 2> /dev/null | wc -l", "(emerge)"},
|
||||
{"flatpak list 2> /dev/null | wc -l", "(flatpack)"},
|
||||
{"guix package --list-installed 2> /dev/null | wc -l", "(guix)"},
|
||||
{"nix-store -q --requisites /run/current-sys_vartem/sw 2> /dev/null | wc -l", "(nix)"},
|
||||
{"pacman -Qq 2> /dev/null | wc -l", "(pacman)"},
|
||||
{"port installed 2> /dev/null | tail -n +2 | wc -l", "(port)"},
|
||||
{"rpm -qa --last 2> /dev/null | wc -l", "(rpm)"},
|
||||
{"xbps-query -l 2> /dev/null | wc -l", "(xbps)"},
|
||||
{"zypper se --installed-only 2> /dev/null | wc -l", "(zypper)"}};
|
||||
|
@ -214,6 +239,19 @@ int pkgman()
|
|||
return total;
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
int uptime_mac()
|
||||
{
|
||||
int mib[2] = { CTL_KERN, KERN_BOOTTIME };
|
||||
sysctl(mib, 2, &time_buffer, &time_buffer_len, NULL, 0);
|
||||
|
||||
time_t bsec = time_buffer.tv_sec;
|
||||
time_t csec = time(NULL);
|
||||
|
||||
return difftime(csec, bsec);
|
||||
}
|
||||
#endif
|
||||
|
||||
void print_info()
|
||||
{
|
||||
// store sys info in the sys again
|
||||
|
@ -254,12 +292,17 @@ void print_info()
|
|||
printf("\033[18C%s%sPKGS %s%s%d %s\n",
|
||||
NORMAL, BOLD, NORMAL, NORMAL, pkgs, pkgman_name);
|
||||
if (show_uptime)
|
||||
#ifndef __APPLE__
|
||||
printf("\033[18C%s%sUWUPTIME %s" /*"%lid, "*/ "%lih, %lim\n",
|
||||
NORMAL, BOLD, NORMAL, /*sys.uptime/60/60/24,*/ sys.uptime / 60 / 60, sys.uptime / 60 % 60);
|
||||
#else
|
||||
if(sys.uptime/3600 < 24)
|
||||
printf("\033[18C%s%sUWUPTIME %s%lih, %lim\n",
|
||||
NORMAL, BOLD, NORMAL, sys.uptime/3600, sys.uptime/60%60);
|
||||
else
|
||||
printf("\033[18C%s%sUWUPTIME %s%lid, %lih, %lim\n",
|
||||
NORMAL, BOLD, NORMAL, sys.uptime/86400, sys.uptime/3600%24, sys.uptime/60%60);
|
||||
#endif
|
||||
if (show_colors)
|
||||
printf("\033[18C%s%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\u2587\u2587%s\n",
|
||||
BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, NORMAL);
|
||||
|
@ -288,9 +331,10 @@ void get_info()
|
|||
fclose(os_release);
|
||||
}
|
||||
else
|
||||
{ // try for android vars, or unknown system
|
||||
{ // try for android vars, next for macOS 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
|
||||
closedir(system_app);
|
||||
|
@ -304,6 +348,14 @@ void get_info()
|
|||
while (fgets(line, sizeof(line), cpuinfo))
|
||||
if (sscanf(line, "Hardware : %[^\n]", cpu_model))
|
||||
break;
|
||||
}
|
||||
else if (library) // macOS
|
||||
{
|
||||
closedir(library);
|
||||
sysctlbyname("machdep.cpu.brand_string", &cpu_buffer, &cpu_buffer_len, NULL, 0);
|
||||
|
||||
sprintf(version_name, "macos");
|
||||
sprintf(cpu_model, "%s", cpu_buffer);
|
||||
}
|
||||
else
|
||||
sprintf(version_name, "unknown");
|
||||
|
@ -326,6 +378,7 @@ void get_info()
|
|||
truncate_name(kernel);
|
||||
|
||||
// ram
|
||||
#ifndef __APPLE__
|
||||
FILE *meminfo;
|
||||
|
||||
meminfo = popen("LANG=EN_us free 2> /dev/null", "r");
|
||||
|
@ -345,6 +398,31 @@ void get_info()
|
|||
}
|
||||
}
|
||||
fclose(meminfo);
|
||||
#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");
|
||||
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) {}
|
||||
}
|
||||
}
|
||||
|
||||
pclose(mem_wired_fp); pclose(mem_active_fp); pclose(mem_compressed_fp);
|
||||
|
||||
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_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
|
||||
|
@ -361,7 +439,13 @@ void get_info()
|
|||
{
|
||||
// get gpus with lspci command
|
||||
if (strcmp(version_name, "android") != 0)
|
||||
{
|
||||
#ifndef __APPLE__
|
||||
gpu = popen("lspci -mm 2> /dev/null | grep \"VGA\" | cut --fields=4,6 -d '\"' --output-delimiter=\" \" | sed \"s/ Controller.*//\"", "r");
|
||||
#else
|
||||
gpu = popen("system_profiler SPDisplaysDataType | awk -F ': ' '/Chipset Model: /{ print $2 }'", "r");
|
||||
#endif
|
||||
}
|
||||
else
|
||||
gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r");
|
||||
}
|
||||
|
@ -605,6 +689,17 @@ void print_ascii()
|
|||
YELLOW, RED, YELLOW, WHITE, YELLOW, LPINK, WHITE, LPINK, YELLOW);
|
||||
}
|
||||
|
||||
else if (strcmp(version_name, "macos") == 0)
|
||||
{
|
||||
printf("\033[1E\033[3C%s .:`\n"
|
||||
" .--``--.\n"
|
||||
"%s ww OwO w\n"
|
||||
"%s w w\n"
|
||||
"%s w w\n"
|
||||
"%s w w\n"
|
||||
" www_-_www\n\n", GREEN, YELLOW, RED, PINK, BLUE);
|
||||
}
|
||||
|
||||
// everything else
|
||||
else
|
||||
printf("\033[0E\033[2C%s._.--._.\n"
|
||||
|
@ -694,6 +789,8 @@ void uwu_name()
|
|||
else STRING_TO_UWU("freebsd", "FweeBSD");
|
||||
else STRING_TO_UWU("openbsd", "OwOpenBSD");
|
||||
|
||||
else STRING_TO_UWU("macos", "macOwOS");
|
||||
|
||||
else
|
||||
{
|
||||
sprintf(version_name, "%s", "unknown");
|
||||
|
|
Loading…
Reference in a new issue