Add macOS support
This commit is contained in:
parent
c2c0fb397a
commit
0218e64e02
2 changed files with 103 additions and 6 deletions
|
@ -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)
|
#### 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
|
## Building and installation
|
||||||
|
|
||||||
|
|
103
uwufetch.c
103
uwufetch.c
|
@ -19,7 +19,12 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <sys/sysinfo.h>
|
#ifdef __APPLE__
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <time.h>
|
||||||
|
#else
|
||||||
|
#include <sys/sysinfo.h>
|
||||||
|
#endif
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
@ -36,6 +41,22 @@
|
||||||
#define WHITE "\x1b[37m"
|
#define WHITE "\x1b[37m"
|
||||||
#define PINK "\x1b[38;5;201m"
|
#define PINK "\x1b[38;5;201m"
|
||||||
#define LPINK "\x1b[38;5;213m"
|
#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
|
struct package_manager
|
||||||
{
|
{
|
||||||
|
@ -43,7 +64,9 @@ struct package_manager
|
||||||
char pkgman_name[16]; // name of the package manager
|
char pkgman_name[16]; // name of the package manager
|
||||||
};
|
};
|
||||||
struct utsname sys_var;
|
struct utsname sys_var;
|
||||||
struct sysinfo sys;
|
#ifndef __APPLE__
|
||||||
|
struct sysinfo sys;
|
||||||
|
#endif
|
||||||
struct winsize win;
|
struct winsize win;
|
||||||
int ram_total, ram_used = 0;
|
int ram_total, ram_used = 0;
|
||||||
// initialise the variables to store data, gpu array can hold up to 8 gpus
|
// initialise the variables to store data, gpu array can hold up to 8 gpus
|
||||||
|
@ -179,12 +202,14 @@ int pkgman()
|
||||||
struct package_manager pkgmans[] = {
|
struct package_manager pkgmans[] = {
|
||||||
{"apt list --installed 2> /dev/null | wc -l", "(apt)"},
|
{"apt list --installed 2> /dev/null | wc -l", "(apt)"},
|
||||||
{"apk info 2> /dev/null | wc -l", "(apk)"},
|
{"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)"},
|
{"dnf list installed 2> /dev/null | wc -l", "(dnf)"},
|
||||||
{"qlist -I 2> /dev/null | wc -l", "(emerge)"},
|
{"qlist -I 2> /dev/null | wc -l", "(emerge)"},
|
||||||
{"flatpak list 2> /dev/null | wc -l", "(flatpack)"},
|
{"flatpak list 2> /dev/null | wc -l", "(flatpack)"},
|
||||||
{"guix package --list-installed 2> /dev/null | wc -l", "(guix)"},
|
{"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)"},
|
{"nix-store -q --requisites /run/current-sys_vartem/sw 2> /dev/null | wc -l", "(nix)"},
|
||||||
{"pacman -Qq 2> /dev/null | wc -l", "(pacman)"},
|
{"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)"},
|
{"rpm -qa --last 2> /dev/null | wc -l", "(rpm)"},
|
||||||
{"xbps-query -l 2> /dev/null | wc -l", "(xbps)"},
|
{"xbps-query -l 2> /dev/null | wc -l", "(xbps)"},
|
||||||
{"zypper se --installed-only 2> /dev/null | wc -l", "(zypper)"}};
|
{"zypper se --installed-only 2> /dev/null | wc -l", "(zypper)"}};
|
||||||
|
@ -209,6 +234,19 @@ int pkgman()
|
||||||
return total;
|
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()
|
void print_info()
|
||||||
{
|
{
|
||||||
// store sys info in the sys again
|
// store sys info in the sys again
|
||||||
|
@ -246,8 +284,13 @@ void print_info()
|
||||||
printf("\033[18C%s%sPKGS %s%s%d %s\n",
|
printf("\033[18C%s%sPKGS %s%s%d %s\n",
|
||||||
NORMAL, BOLD, NORMAL, NORMAL, pkgs, pkgman_name);
|
NORMAL, BOLD, NORMAL, NORMAL, pkgs, pkgman_name);
|
||||||
if (show_uptime)
|
if (show_uptime)
|
||||||
|
#ifndef __APPLE__
|
||||||
printf("\033[18C%s%sUWUPTIME %s" /*"%lid, "*/ "%lih, %lim\n",
|
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);
|
NORMAL, BOLD, NORMAL, /*sys.uptime/60/60/24,*/ sys.uptime / 60 / 60, sys.uptime / 60 % 60);
|
||||||
|
#else
|
||||||
|
printf("\033[18C%s%sUWUPTIME %s" "%ih, %im\n",
|
||||||
|
NORMAL, BOLD, NORMAL, (uptime_mac() / 3600), ((uptime_mac() - (3600 * (uptime_mac() / 3600))) / 60));
|
||||||
|
#endif
|
||||||
if (show_colors)
|
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",
|
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);
|
BOLD, BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, NORMAL);
|
||||||
|
@ -276,9 +319,10 @@ void get_info()
|
||||||
fclose(os_release);
|
fclose(os_release);
|
||||||
}
|
}
|
||||||
else
|
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_app = opendir("/system/app/");
|
||||||
DIR *system_priv_app = opendir("/system/priv-app/");
|
DIR *system_priv_app = opendir("/system/priv-app/");
|
||||||
|
DIR *library = opendir("/Library/");
|
||||||
if (system_app && system_priv_app)
|
if (system_app && system_priv_app)
|
||||||
{ // android
|
{ // android
|
||||||
closedir(system_app);
|
closedir(system_app);
|
||||||
|
@ -292,6 +336,14 @@ void get_info()
|
||||||
while (fgets(line, sizeof(line), cpuinfo))
|
while (fgets(line, sizeof(line), cpuinfo))
|
||||||
if (sscanf(line, "Hardware : %[^\n]", cpu_model))
|
if (sscanf(line, "Hardware : %[^\n]", cpu_model))
|
||||||
break;
|
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
|
else
|
||||||
sprintf(version_name, "unknown");
|
sprintf(version_name, "unknown");
|
||||||
|
@ -314,6 +366,7 @@ void get_info()
|
||||||
truncate_name(kernel);
|
truncate_name(kernel);
|
||||||
|
|
||||||
// ram
|
// ram
|
||||||
|
#ifndef __APPLE__
|
||||||
FILE *meminfo;
|
FILE *meminfo;
|
||||||
|
|
||||||
meminfo = popen("LANG=EN_us free 2> /dev/null", "r");
|
meminfo = popen("LANG=EN_us free 2> /dev/null", "r");
|
||||||
|
@ -333,6 +386,31 @@ void get_info()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(meminfo);
|
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 ---------- */
|
/* ---------- 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
|
||||||
|
@ -349,7 +427,13 @@ void get_info()
|
||||||
{
|
{
|
||||||
// get gpus with lspci command
|
// get gpus with lspci command
|
||||||
if (strcmp(version_name, "android") != 0)
|
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");
|
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
|
else
|
||||||
gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r");
|
gpu = popen("getprop ro.hardware.vulkan 2> /dev/null", "r");
|
||||||
}
|
}
|
||||||
|
@ -585,6 +669,17 @@ void print_ascii()
|
||||||
YELLOW, RED, YELLOW, WHITE, YELLOW, LPINK, WHITE, LPINK, YELLOW);
|
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
|
// everything else
|
||||||
else
|
else
|
||||||
printf("\033[0E\033[2C%s._.--._.\n"
|
printf("\033[0E\033[2C%s._.--._.\n"
|
||||||
|
@ -674,6 +769,8 @@ void uwu_name()
|
||||||
else STRING_TO_UWU("freebsd", "FweeBSD");
|
else STRING_TO_UWU("freebsd", "FweeBSD");
|
||||||
else STRING_TO_UWU("openbsd", "OwOpenBSD");
|
else STRING_TO_UWU("openbsd", "OwOpenBSD");
|
||||||
|
|
||||||
|
else STRING_TO_UWU("macos", "macOwOS");
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sprintf(version_name, "%s", "unknown");
|
sprintf(version_name, "%s", "unknown");
|
||||||
|
|
Loading…
Reference in a new issue