2021-03-09 06:00:41 +01:00
/*
* UwUfetch is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < https : //www.gnu.org/licenses/>.
*/
2021-03-07 22:04:05 +01:00
# include <dirent.h>
2021-03-05 17:22:48 +01:00
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <unistd.h>
2021-03-31 17:47:07 +02:00
# include <getopt.h>
2021-04-15 22:59:43 +02:00
# ifdef __APPLE__
2021-04-16 10:48:39 +02:00
# include <sys/sysctl.h>
# include <time.h>
2021-04-15 22:59:43 +02:00
# else
2021-03-05 17:22:48 +01:00
# include <sys/sysinfo.h>
2021-04-15 22:59:43 +02:00
# endif
2021-03-05 17:22:48 +01:00
# include <sys/utsname.h>
2021-03-19 19:21:35 +01:00
# include <sys/ioctl.h>
2021-03-06 21:17:29 +01:00
2021-03-05 17:22:48 +01:00
// COLORS
2021-04-15 09:28:57 +02:00
# define NORMAL "\x1b[0m"
# define BOLD "\x1b[1m"
# define BLACK "\x1b[30m"
# define RED "\x1b[31m"
# define GREEN "\x1b[32m"
# define YELLOW "\x1b[33m"
# define BLUE "\x1b[34m"
# define MAGENTA "\x1b[0;35m"
# define CYAN "\x1b[36m"
# define WHITE "\x1b[37m"
# define PINK "\x1b[38;5;201m"
# define LPINK "\x1b[38;5;213m"
2021-04-15 22:59:43 +02:00
# ifdef __APPLE__
2021-04-16 10:48:39 +02:00
// buffers where data fetched from sysctl are stored
// CPU
# define CPUBUFFERLEN 128
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
char cpu_buffer [ CPUBUFFERLEN ] ;
size_t cpu_buffer_len = CPUBUFFERLEN ;
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
// Installed RAM
int64_t mem_buffer = 0 ;
size_t mem_buffer_len = sizeof ( mem_buffer ) ;
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
// uptime
struct timeval time_buffer ;
size_t time_buffer_len = sizeof ( time_buffer ) ;
2021-04-15 22:59:43 +02:00
# endif
2021-04-15 09:28:57 +02:00
struct package_manager
{
char command_string [ 128 ] ; // command to get number of packages installed
char pkgman_name [ 16 ] ; // name of the package manager
2021-04-06 15:56:09 +02:00
} ;
2021-03-06 21:17:29 +01:00
struct utsname sys_var ;
2021-04-15 22:59:43 +02:00
# ifndef __APPLE__
2021-03-06 21:17:29 +01:00
struct sysinfo sys ;
2021-04-15 22:59:43 +02:00
# endif
2021-03-19 19:21:35 +01:00
struct winsize win ;
2021-05-03 03:46:55 +02:00
int iscygwin = 0 ;
2021-04-06 15:56:09 +02:00
// initialise the variables to store data, gpu array can hold up to 8 gpus
2021-04-18 23:51:32 +02:00
int target_width = 0 , screen_width = 0 , screen_height = 0 , ram_total , ram_used = 0 , pkgs = 0 ;
2021-04-16 14:10:33 +02:00
long uptime = 0 ;
2021-04-14 12:33:05 +02:00
// all flags available
2021-04-23 18:02:05 +02:00
int ascii_image_flag = 0 , // when (0) ascii is printed, when (1) image is printed
2021-04-14 12:33:05 +02:00
show_user_info = 1 ,
show_os = 1 ,
show_kernel = 1 ,
show_cpu = 1 ,
show_gpu = 1 ,
show_ram = 1 ,
2021-04-15 23:52:12 +02:00
show_resolution = 1 ,
2021-04-14 12:33:05 +02:00
show_shell = 1 ,
show_pkgs = 1 ,
show_uptime = 1 ,
show_colors = 1 ;
2021-04-23 18:02:05 +02:00
2021-04-15 09:28:57 +02:00
char user [ 32 ] , host [ 256 ] , shell [ 64 ] , kernel [ 256 ] , version_name [ 64 ] , cpu_model [ 256 ] ,
gpu_model [ 8 ] [ 256 ] = { { ' 0 ' } , { ' 0 ' } , { ' 0 ' } , { ' 0 ' } , { ' 0 ' } , { ' 0 ' } , { ' 0 ' } , { ' 0 ' } } ,
2021-04-15 09:33:51 +02:00
pkgman_name [ 64 ] , image_name [ 128 ] , * config_directory = NULL ;
2021-03-18 21:54:29 +01:00
2021-04-07 14:13:15 +02:00
// functions definitions, to use them in main()
2021-03-05 17:22:48 +01:00
int pkgman ( ) ;
2021-04-14 00:21:29 +02:00
void parse_config ( ) ;
2021-03-06 21:17:29 +01:00
void get_info ( ) ;
2021-03-08 15:49:50 +01:00
void list ( ) ;
2021-03-06 21:17:29 +01:00
void print_ascii ( ) ;
void print_info ( ) ;
void print_image ( ) ;
2021-04-06 15:56:09 +02:00
void usage ( char * ) ;
2021-03-09 11:35:18 +01:00
void uwu_name ( ) ;
2021-04-06 15:56:09 +02:00
void truncate_name ( char * ) ;
void remove_brackets ( char * ) ;
2021-03-05 17:22:48 +01:00
2021-04-15 09:28:57 +02:00
int main ( int argc , char * argv [ ] )
{
2021-04-07 14:13:15 +02:00
int opt = 0 ;
static struct option long_options [ ] = {
2021-04-15 09:28:57 +02:00
{ " ascii " , no_argument , NULL , ' a ' } ,
2021-04-15 09:33:51 +02:00
{ " config " , required_argument , NULL , ' c ' } ,
2021-04-15 09:28:57 +02:00
{ " distro " , required_argument , NULL , ' d ' } ,
{ " help " , no_argument , NULL , ' h ' } ,
2021-04-15 09:33:51 +02:00
{ " image " , optional_argument , NULL , ' i ' } ,
2021-04-15 09:28:57 +02:00
{ " list " , no_argument , NULL , ' l ' } ,
{ NULL , 0 , NULL , 0 } } ;
2021-04-07 14:13:15 +02:00
get_info ( ) ;
2021-04-15 09:33:51 +02:00
while ( ( opt = getopt_long ( argc , argv , " ac:d:hi::l " , long_options , NULL ) ) ! = - 1 )
2021-04-15 09:28:57 +02:00
{
switch ( opt )
{
case ' a ' :
ascii_image_flag = 0 ;
break ;
case ' c ' :
2021-04-15 09:33:51 +02:00
config_directory = optarg ;
2021-04-15 09:28:57 +02:00
break ;
case ' d ' :
if ( optarg )
sprintf ( version_name , " %s " , optarg ) ;
break ;
case ' h ' :
usage ( argv [ 0 ] ) ;
return 0 ;
case ' i ' :
ascii_image_flag = 1 ;
2021-04-15 09:33:51 +02:00
if ( ! optarg & & argv [ optind ] ! = NULL & & argv [ optind ] [ 0 ] ! = ' - ' )
sprintf ( image_name , " %s " , argv [ optind + + ] ) ;
else if ( optarg )
sprintf ( image_name , " %s " , optarg ) ;
2021-04-15 09:28:57 +02:00
break ;
case ' l ' :
list ( argv [ 0 ] ) ;
return 0 ;
default :
break ;
2021-04-07 14:13:15 +02:00
}
}
2021-04-23 18:02:05 +02:00
if ( argc = = 1 )
parse_config ( ) ;
2021-04-15 09:28:57 +02:00
if ( ( argc = = 1 & & ascii_image_flag = = 0 ) | | ( argc > 1 & & ascii_image_flag = = 0 ) )
print_ascii ( ) ;
2021-04-23 18:02:05 +02:00
else if ( ascii_image_flag = = 1 )
2021-04-15 09:28:57 +02:00
print_image ( ) ;
2021-04-07 14:13:15 +02:00
uwu_name ( ) ;
print_info ( ) ;
2021-03-05 17:22:48 +01:00
}
2021-04-19 00:01:29 +02:00
void parse_config ( )
2021-04-23 18:02:05 +02:00
{
char line [ 256 ] ;
2021-04-14 00:21:29 +02:00
char * homedir = getenv ( " HOME " ) ;
2021-04-15 09:28:57 +02:00
2021-04-18 23:51:32 +02:00
// opening and reading the config file
FILE * config ;
2021-04-15 09:33:51 +02:00
if ( config_directory = = NULL )
2021-04-23 18:02:05 +02:00
config = fopen ( strcat ( homedir , " /.config/uwufetch/config " ) , " r " ) ;
2021-04-15 09:33:51 +02:00
else
config = fopen ( config_directory , " r " ) ;
2021-04-15 09:28:57 +02:00
if ( config = = NULL )
return ;
2021-04-19 00:01:29 +02:00
2021-04-23 18:02:05 +02:00
while ( fgets ( line , sizeof ( line ) , config ) )
{
char buffer [ 128 ] = { 0 } ;
2021-04-18 23:51:32 +02:00
2021-04-23 18:02:05 +02:00
sscanf ( line , " distro=%s " , version_name ) ;
if ( sscanf ( line , " ascii=%[truefalse] " , buffer ) )
ascii_image_flag = ! strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " image= \" %[^ \" ] \" " , image_name ) )
{
if ( image_name [ 0 ] = = ' ~ ' )
{ // image name with ~ does not work
memmove ( & image_name [ 0 ] , & image_name [ 1 ] , strlen ( image_name ) ) ;
char temp [ 128 ] = " /home/ " ;
strcat ( temp , user ) ;
strcat ( temp , image_name ) ;
sprintf ( image_name , " %s " , temp ) ;
}
ascii_image_flag = 1 ;
}
if ( sscanf ( line , " user=%[truefalse] " , buffer ) )
show_user_info = ! strcmp ( buffer , " true " ) ;
if ( sscanf ( line , " os=%[truefalse] " , buffer ) )
show_os = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " kernel=%[truefalse] " , buffer ) )
show_kernel = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " cpu=%[truefalse] " , buffer ) )
show_cpu = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " gpu=%[truefalse] " , buffer ) )
show_gpu = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " ram=%[truefalse] " , buffer ) )
show_ram = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " resolution=%[truefalse] " , buffer ) )
show_resolution = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " shell=%[truefalse] " , buffer ) )
show_shell = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " pkgs=%[truefalse] " , buffer ) )
show_pkgs = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " uptime=%[truefalse] " , buffer ) )
show_uptime = strcmp ( buffer , " false " ) ;
if ( sscanf ( line , " colors=%[truefalse] " , buffer ) )
show_colors = strcmp ( buffer , " false " ) ;
}
fclose ( config ) ;
2021-04-14 00:21:29 +02:00
}
2021-04-15 09:28:57 +02:00
int pkgman ( )
{ // this is just a function that returns the total of installed packages
2021-04-07 14:13:15 +02:00
int total = 0 ;
2021-05-03 13:18:33 +02:00
# ifdef __APPLE__
// we use a completely different struct because some commands in the other actually work in mac os, but they are not what you would expect (try running "apt"), but still doesn't work, maybe because of popen()
struct package_manager pkgmans [ ] = {
{ " brew list 2>/dev/null | wc -l | sed \" s/ //g \" && touch test " , " (brew) " } } ;
# else
2021-04-07 14:13:15 +02:00
struct package_manager pkgmans [ ] = {
2021-04-15 09:28:57 +02:00
{ " apt list --installed 2> /dev/null | wc -l " , " (apt) " } ,
{ " apk info 2> /dev/null | wc -l " , " (apk) " } ,
{ " dnf list installed 2> /dev/null | wc -l " , " (dnf) " } ,
{ " qlist -I 2> /dev/null | wc -l " , " (emerge) " } ,
2021-04-17 15:25:06 +02:00
{ " flatpak list 2> /dev/null | wc -l " , " (flatpak) " } ,
2021-04-15 09:28:57 +02:00
{ " 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) " } ,
2021-04-16 10:48:39 +02:00
{ " port installed 2> /dev/null | tail -n +2 | wc -l " , " (port) " } ,
2021-04-15 09:28:57 +02:00
{ " 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) " } } ;
2021-05-03 13:18:33 +02:00
# endif
2021-04-07 14:13:15 +02:00
const unsigned long pkgman_count = sizeof ( pkgmans ) / sizeof ( pkgmans [ 0 ] ) ;
2021-04-27 11:07:58 +02:00
// to format the pkgman_name string properly
int comma_separator = 0 ;
2021-04-15 09:28:57 +02:00
for ( long unsigned int i = 0 ; i < pkgman_count ; i + + )
{ // long unsigned int instead of int because of -Wsign-compare
2021-04-07 14:13:15 +02:00
struct package_manager * current = & pkgmans [ i ] ;
FILE * fp = popen ( current - > command_string , " r " ) ;
unsigned int pkg_count ;
2021-04-15 09:28:57 +02:00
if ( fscanf ( fp , " %u " , & pkg_count ) = = 3 )
continue ;
2021-04-07 14:13:15 +02:00
fclose ( fp ) ;
total + = pkg_count ;
2021-04-15 09:28:57 +02:00
if ( pkg_count > 0 )
2021-04-27 11:07:58 +02:00
{
if ( comma_separator )
strcat ( pkgman_name , " , " ) ;
comma_separator + + ;
char spkg_count [ 16 ] ;
sprintf ( spkg_count , " %d " , pkg_count ) ;
strcat ( pkgman_name , spkg_count ) ;
strcat ( pkgman_name , " " ) ;
2021-05-03 12:59:38 +02:00
strcat ( pkgman_name , current - > pkgman_name ) ; // this is the line that breaks mac os, but something strange happens before
2021-04-27 11:07:58 +02:00
}
2021-04-07 14:13:15 +02:00
}
return total ;
2021-03-05 17:22:48 +01:00
}
2021-03-06 21:17:29 +01:00
2021-04-15 22:59:43 +02:00
# ifdef __APPLE__
int uptime_mac ( )
{
2021-04-16 10:48:39 +02:00
int mib [ 2 ] = { CTL_KERN , KERN_BOOTTIME } ;
sysctl ( mib , 2 , & time_buffer , & time_buffer_len , NULL , 0 ) ;
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
time_t bsec = time_buffer . tv_sec ;
time_t csec = time ( NULL ) ;
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
return difftime ( csec , bsec ) ;
2021-04-15 22:59:43 +02:00
}
# endif
2021-04-15 09:28:57 +02:00
void print_info ( )
{
2021-04-14 18:19:17 +02:00
// store sys info in the sys again
2021-04-07 14:13:15 +02:00
// print collected info - from host to cpu info
2021-04-14 12:33:05 +02:00
printf ( " \033 [9A " ) ; // to align info text
2021-04-15 09:28:57 +02:00
if ( show_user_info )
printf ( " \033 [18C%s%s%s@%s \n " , NORMAL , BOLD , user , host ) ;
if ( show_os )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sOWOS %s%s \n " , NORMAL , BOLD , NORMAL , version_name ) ;
2021-04-15 09:28:57 +02:00
if ( show_kernel )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sKEWNEL %s%s \n " , NORMAL , BOLD , NORMAL , kernel ) ;
2021-04-15 09:28:57 +02:00
if ( show_cpu )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sCPUWU %s%s \n " , NORMAL , BOLD , NORMAL , cpu_model ) ;
2021-03-18 22:53:32 +01:00
// print the gpus
2021-04-15 09:28:57 +02:00
if ( show_gpu )
{
2021-04-14 12:33:05 +02:00
int gpu_iter = 0 ;
2021-04-15 09:28:57 +02:00
while ( gpu_model [ gpu_iter ] [ 0 ] ! = ' 0 ' )
{
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sGPUWU %s%s \n " ,
2021-04-15 09:28:57 +02:00
NORMAL , BOLD , NORMAL , gpu_model [ gpu_iter ] ) ;
2021-04-14 12:33:05 +02:00
gpu_iter + + ;
}
2021-03-18 21:54:29 +01:00
}
2021-04-07 14:13:15 +02:00
// print ram to uptime and colors
2021-04-15 09:28:57 +02:00
if ( show_ram )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sWAM %s%i MB/%i MB \n " ,
2021-04-15 09:28:57 +02:00
NORMAL , BOLD , NORMAL , ( ram_used ) , ram_total ) ;
2021-04-15 23:52:12 +02:00
if ( show_resolution )
2021-04-16 10:32:00 +02:00
if ( screen_width ! = 0 | | screen_height ! = 0 )
printf ( " \033 [18C%s%sRESOLUTION%s %dx%d \n " ,
2021-04-16 10:52:28 +02:00
NORMAL , BOLD , NORMAL , screen_width , screen_height ) ;
2021-04-15 09:28:57 +02:00
if ( show_shell )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sSHELL %s%s \n " ,
2021-04-15 09:28:57 +02:00
NORMAL , BOLD , NORMAL , shell ) ;
if ( show_pkgs )
2021-04-27 11:07:58 +02:00
printf ( " \033 [18C%s%sPKGS %s%s%d%s %s \n " ,
NORMAL , BOLD , NORMAL , NORMAL , pkgs , " : " , pkgman_name ) ;
2021-04-15 09:28:57 +02:00
if ( show_uptime )
2021-04-18 23:51:32 +02:00
{
# ifdef __APPLE__
uptime = uptime_mac ( ) ;
# else
uptime = sys . uptime ;
# endif
2021-04-16 14:10:33 +02:00
if ( uptime / 3600 < 24 )
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sUWUPTIME %s%lih, %lim \n " ,
2021-04-16 14:10:33 +02:00
NORMAL , BOLD , NORMAL , uptime / 3600 , uptime / 60 % 60 ) ;
2021-04-15 18:25:38 +02:00
else
2021-04-15 23:52:12 +02:00
printf ( " \033 [18C%s%sUWUPTIME %s%lid, %lih, %lim \n " ,
2021-04-16 14:10:33 +02:00
NORMAL , BOLD , NORMAL , uptime / 86400 , uptime / 3600 % 24 , uptime / 60 % 60 ) ;
2021-04-18 23:51:32 +02:00
}
2021-04-15 09:28:57 +02:00
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 ) ;
2021-03-06 21:17:29 +01:00
}
2021-04-15 09:28:57 +02:00
void get_info ( )
{ // get all necessary info
char line [ 256 ] ; // var to scan file lines
2021-04-07 14:13:15 +02:00
// terminal width used to truncate long names
ioctl ( STDOUT_FILENO , TIOCGWINSZ , & win ) ;
2021-04-15 23:52:12 +02:00
target_width = win . ws_col - 30 ;
2021-04-07 14:13:15 +02:00
// os version
FILE * os_release = fopen ( " /etc/os-release " , " r " ) ;
FILE * cpuinfo = fopen ( " /proc/cpuinfo " , " r " ) ;
2021-05-03 03:46:55 +02:00
# ifdef __CYGWIN__
iscygwin = 1 ;
# endif
if ( iscygwin = = 1 )
sprintf ( version_name , " windows " ) ;
if ( os_release | | iscygwin = = 1 )
2021-04-15 09:28:57 +02:00
{ // get normal vars
2021-05-03 03:46:55 +02:00
if ( iscygwin = = 0 ) {
while ( fgets ( line , sizeof ( line ) , os_release ) )
if ( sscanf ( line , " \n ID=%s " , version_name ) )
break ;
}
2021-04-07 14:13:15 +02:00
while ( fgets ( line , sizeof ( line ) , cpuinfo ) )
2021-04-15 09:28:57 +02:00
if ( sscanf ( line , " model name : %[^ \n ] " , cpu_model ) )
break ;
2021-04-07 14:13:15 +02:00
sprintf ( user , " %s " , getenv ( " USER " ) ) ;
2021-05-03 03:46:55 +02:00
if ( iscygwin = = 0 )
fclose ( os_release ) ;
2021-04-15 09:28:57 +02:00
}
else
2021-04-15 22:59:43 +02:00
{ // try for android vars, next for macOS var, or unknown system
2021-04-07 14:13:15 +02:00
DIR * system_app = opendir ( " /system/app/ " ) ;
DIR * system_priv_app = opendir ( " /system/priv-app/ " ) ;
2021-04-15 22:59:43 +02:00
DIR * library = opendir ( " /Library/ " ) ;
2021-04-15 09:28:57 +02:00
if ( system_app & & system_priv_app )
{ // android
2021-04-07 14:13:15 +02:00
closedir ( system_app ) ;
closedir ( system_priv_app ) ;
sprintf ( version_name , " android " ) ;
// android vars
FILE * whoami = popen ( " whoami " , " r " ) ;
2021-04-15 09:28:57 +02:00
if ( fscanf ( whoami , " %s " , user ) = = 3 )
sprintf ( user , " unknown " ) ;
2021-04-07 14:13:15 +02:00
fclose ( whoami ) ;
while ( fgets ( line , sizeof ( line ) , cpuinfo ) )
2021-04-15 09:28:57 +02:00
if ( sscanf ( line , " Hardware : %[^ \n ] " , cpu_model ) )
break ;
}
2021-04-15 22:59:43 +02:00
else if ( library ) // macOS
2021-04-16 10:48:39 +02:00
{
closedir ( library ) ;
# ifdef __APPLE__
sysctlbyname ( " machdep.cpu.brand_string " , & cpu_buffer , & cpu_buffer_len , NULL , 0 ) ;
2021-04-15 22:59:43 +02:00
2021-04-16 10:48:39 +02:00
sprintf ( version_name , " macos " ) ;
sprintf ( cpu_model , " %s " , cpu_buffer ) ;
# endif
}
2021-04-15 09:28:57 +02:00
else
2021-04-07 14:13:15 +02:00
sprintf ( version_name , " unknown " ) ;
}
fclose ( cpuinfo ) ;
gethostname ( host , 256 ) ;
sscanf ( getenv ( " SHELL " ) , " %s " , shell ) ;
2021-04-15 09:28:57 +02:00
if ( strlen ( shell ) > 16 )
memmove ( & shell , & shell [ 27 ] , strlen ( shell ) ) ; // android shell was too long, this works only for termux
2021-04-07 14:13:15 +02:00
// truncate CPU name
truncate_name ( cpu_model ) ;
// system resources
uname ( & sys_var ) ;
2021-04-16 14:10:33 +02:00
# ifndef __APPLE__
2021-04-16 10:48:39 +02:00
sysinfo ( & sys ) ; // somehow this function has to be called again in print_info()
2021-04-16 14:10:33 +02:00
# endif
2021-04-07 14:13:15 +02:00
truncate_name ( sys_var . release ) ;
2021-04-14 18:19:17 +02:00
sprintf ( kernel , " %s %s %s " , sys_var . sysname , sys_var . release , sys_var . machine ) ;
truncate_name ( kernel ) ;
2021-04-07 14:13:15 +02:00
// ram
2021-04-15 22:59:43 +02:00
# ifndef __APPLE__
2021-05-03 03:46:55 +02:00
# ifndef __CYGWIN__
FILE * meminfo ;
2021-04-07 14:13:15 +02:00
2021-05-03 03:46:55 +02:00
meminfo = popen ( " LANG=EN_us free 2> /dev/null " , " r " ) ;
while ( fgets ( line , sizeof ( line ) , meminfo ) )
2021-04-15 09:28:57 +02:00
{
2021-05-03 03:46:55 +02:00
// free command prints like this: "Mem:" total used free shared buff/cache available
if ( sscanf ( line , " Mem: %d %d " , & ram_total , & ram_used ) )
2021-04-15 09:28:57 +02:00
{
2021-05-03 03:46:55 +02:00
// convert to megabytes
if ( ram_total > 0 & & ram_used > 0 )
{
// data is in bytes
ram_total / = 1024 ;
ram_used / = 1024 ;
break ;
}
2021-04-07 14:13:15 +02:00
}
}
2021-05-03 03:46:55 +02:00
fclose ( meminfo ) ;
# else
//wmic OS get FreePhysicalMemory
FILE * mem_used_fp , * mem_total_fp ;
mem_used_fp = popen ( " wmic OS GET FreePhysicalMemory | sed -n 2p " , " r " ) ;
mem_total_fp = popen ( " wmic ComputerSystem GET TotalPhysicalMemory | sed -n 2p " , " r " ) ;
char mem_used_ch [ 2137 ] , mem_total_ch [ 2137 ] ;
while ( fgets ( mem_used_ch , sizeof ( mem_used_ch ) , mem_used_fp ) ! = NULL ) {
while ( fgets ( mem_total_ch , sizeof ( mem_total_ch ) , mem_total_fp ) ! = NULL ) { }
}
pclose ( mem_used_fp ) ;
pclose ( mem_total_fp ) ;
int mem_used = atoi ( mem_used_ch ) ;
ram_used = mem_used / 1024 ;
// I couldn't get it to show the total amount of ram correctly, so for now this cursed method here
ram_total = mem_total_ch ;
ram_total = ram_total * - 1 ;
# endif
2021-04-15 22:59:43 +02:00
# else
// Used
2021-04-16 10:48:39 +02:00
FILE * mem_wired_fp , * mem_active_fp , * mem_compressed_fp ;
2021-04-15 22:59:43 +02:00
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 ] ;
2021-04-16 10:48:39 +02:00
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 )
{
}
2021-04-15 22:59:43 +02:00
}
}
2021-04-16 10:48:39 +02:00
pclose ( mem_wired_fp ) ;
pclose ( mem_active_fp ) ;
pclose ( mem_compressed_fp ) ;
2021-04-15 22:59:43 +02:00
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
2021-04-07 14:13:15 +02:00
/* ---------- gpu ---------- */
2021-04-15 09:28:57 +02:00
int gpun = 0 ; // number of the gpu that the program is searching for to put in the array
2021-04-07 14:13:15 +02:00
setenv ( " LANG " , " en_US " , 1 ) ; // force language to english
FILE * gpu ;
gpu = popen ( " lshw -class display 2> /dev/null " , " r " ) ;
// add all gpus to the array gpu_model (up to 8 gpus)
while ( fgets ( line , sizeof ( line ) , gpu ) )
2021-04-15 09:28:57 +02:00
if ( sscanf ( line , " product: %[^ \n ] " , gpu_model [ gpun ] ) )
gpun + + ;
2021-04-07 14:13:15 +02:00
2021-04-15 09:28:57 +02:00
if ( strlen ( gpu_model [ 0 ] ) < 2 )
{
2021-04-07 14:13:15 +02:00
// get gpus with lspci command
if ( strcmp ( version_name , " android " ) ! = 0 )
2021-04-15 22:59:43 +02:00
{
2021-04-16 10:48:39 +02:00
# ifndef __APPLE__
2021-05-03 03:46:55 +02:00
# ifdef __CYGWIN__
gpu = popen ( " wmic PATH Win32_VideoController GET Name | sed -n 2p " , " r " ) ;
# else
gpu = popen ( " lspci -mm 2> /dev/null | grep \" VGA \" | cut --fields=4,6 -d ' \" ' --output-delimiter= \" \" | sed \" s/ Controller.*// \" " , " r " ) ;
# endif
2021-04-16 10:48:39 +02:00
# else
gpu = popen ( " system_profiler SPDisplaysDataType | awk -F ': ' '/Chipset Model: /{ print $2 }' " , " r " ) ;
# endif
}
2021-04-07 14:13:15 +02:00
else
gpu = popen ( " getprop ro.hardware.vulkan 2> /dev/null " , " r " ) ;
}
// get all the gpus
2021-04-15 09:28:57 +02:00
while ( fgets ( line , sizeof ( line ) , gpu ) )
{
if ( sscanf ( line , " %[^ \n ] " , gpu_model [ gpun ] ) )
gpun + + ;
2021-04-07 14:13:15 +02:00
}
fclose ( gpu ) ;
// truncate GPU name and remove square brackets
2021-04-15 09:28:57 +02:00
for ( int i = 0 ; i < gpun ; i + + )
{
2021-04-07 14:13:15 +02:00
remove_brackets ( gpu_model [ i ] ) ;
truncate_name ( gpu_model [ i ] ) ;
}
2021-04-15 23:52:12 +02:00
// Resolution
FILE * resolution = popen ( " xwininfo -root 2> /dev/null | grep -E 'Width|Height' " , " r " ) ;
while ( fgets ( line , sizeof ( line ) , resolution ) )
{
sscanf ( line , " Width: %d " , & screen_width ) ;
sscanf ( line , " Height: %d " , & screen_height ) ;
}
2021-04-07 14:13:15 +02:00
// package count
pkgs = pkgman ( ) ;
2021-03-06 21:17:29 +01:00
}
2021-04-15 09:28:57 +02:00
void list ( char * arg )
{ // prints distribution list
2021-04-07 14:13:15 +02:00
// distributions are listed by distribution branch
// to make the output easier to understand by the user.
2021-04-15 09:28:57 +02:00
printf ( " %s -d <options> \n "
" Available distributions: \n "
" %sArch linux %sbased: \n "
" %sarch, artix, %smanjaro, \" manjaro-arm \" \n \n "
" %sDebian/%sUbuntu %sbased: \n "
" %sdebian, %slinuxmint, %spop, %sraspbian \n \n "
2021-05-03 01:04:18 +02:00
" %sBSD %sbased: \n "
" %sfreebsd, %sopenbsd, %sm%sa%sc%so%ss \n \n "
2021-04-15 09:28:57 +02:00
" %sOther/spare distributions: \n "
2021-05-03 03:46:55 +02:00
" %salpine, %sfedora, %sgentoo, %s \" void \" , \" opensuse-leap \" , android, %sgnu, guix, %swindows, %sunknown \n " ,
2021-04-15 09:28:57 +02:00
arg ,
2021-05-03 01:04:18 +02:00
BLUE , NORMAL , BLUE , GREEN , // Arch based colors
RED , YELLOW , NORMAL , RED , GREEN , BLUE , RED , // Debian based colors
RED , NORMAL , RED , YELLOW , GREEN , YELLOW , RED , PINK , BLUE , // BSD colors
2021-05-03 03:46:55 +02:00
NORMAL , BLUE , BLUE , PINK , GREEN , YELLOW , BLUE , WHITE ) ; // Other/spare distributions colors
2021-03-08 15:49:50 +01:00
}
2021-04-15 09:28:57 +02:00
void print_ascii ( )
{ // prints logo (as ascii art) of the given system. distributions listed alphabetically.
2021-04-07 14:13:15 +02:00
// linux
2021-04-15 09:28:57 +02:00
if ( strcmp ( version_name , " alpine " ) = = 0 )
{
printf ( " \033 [2E \033 [4C%s. .___. \n "
" / \\ / \\ / \n "
2021-04-27 09:36:02 +02:00
" /O \u03c9 O \\ ɛU \\ / __ \n "
2021-04-15 09:28:57 +02:00
" / \\ \\ __/ \\ \n "
" / \\ \\ \n \n \n " ,
BLUE ) ;
}
else if ( strcmp ( version_name , " arch " ) = = 0 )
{
printf ( " \033 [1E \033 [8C%s/ \\ \n "
" / \\ \n "
" / \\ \\ \n "
2021-04-27 09:36:02 +02:00
" / > \u03c9 < \\ \n "
2021-04-15 09:28:57 +02:00
" / __ \\ \n "
" / __| |__- \\ \n "
" /_-'' ''-_ \\ \n \n " ,
BLUE ) ;
}
else if ( strcmp ( version_name , " artix " ) = = 0 )
{
printf ( " \033 [1E \033 [8C%s/ \\ \n "
" / \\ \n "
" /`'., \\ \n "
" / \u2022 w \u2022 \\ \n "
" / ,` \\ \n "
" / ,.'`. \\ \n "
" /.,'` `'. \\ \n \n " ,
BLUE ) ;
}
else if ( strcmp ( version_name , " debian " ) = = 0 )
{
printf ( " \033 [1E \033 [6C%s______ \n "
" / ___ \\ \n "
2021-04-27 09:36:02 +02:00
" | / O \u03c9 O | \n "
2021-04-15 09:28:57 +02:00
" | \\ ____- \n "
" -_ \n "
" --_ \n \n \n " ,
RED ) ;
}
2021-05-07 00:21:05 +02:00
else if ( strcmp ( version_name , " endeavouros " ) = = 0 | | strcmp ( version_name , " EndeavourOS " ) = = 0 )
2021-04-27 09:36:02 +02:00
{
printf ( " \033 [2E \033 [8C%s/ \\ \n "
" %s/%s/ \\ %s \\ \n "
" %s/%s/> \u03c9 < \\ %s \\ \n "
" %s/%s/ \\ %s \\ \n "
" %s/ %s/ _) %s) \n "
" %s/_%s/___-- %s___- \n "
" /____--- \n \n " ,
MAGENTA , YELLOW , MAGENTA , BLUE , YELLOW , MAGENTA , BLUE , YELLOW , MAGENTA , BLUE , YELLOW , MAGENTA , BLUE , YELLOW , MAGENTA , BLUE ) ;
}
2021-04-15 09:28:57 +02:00
else if ( strcmp ( version_name , " fedora " ) = = 0 )
{
printf ( " \033 [1E \033 [8C%s_____ \n "
" / __)%s \\ \n "
" %s> %s| / %s<%s \\ \\ \n "
2021-04-27 09:36:02 +02:00
" __%s_| %s \u03c9 %s|_%s_/ / \n "
2021-04-15 09:28:57 +02:00
" / %s(_ _)%s_/ \n "
" / / %s| | \n "
" %s \\ \\ %s__/ | \n "
" %s \\ %s(_____/ \n " ,
BLUE , CYAN , WHITE , BLUE , WHITE , CYAN , BLUE , CYAN , BLUE , CYAN , BLUE , CYAN , BLUE , CYAN , BLUE , CYAN , BLUE ) ;
}
else if ( strcmp ( version_name , " gentoo " ) = = 0 )
{
printf ( " \033 [1E \033 [3C%s_-----_ \n "
" ( \\ \n "
2021-04-27 09:36:02 +02:00
" \\ O \u03c9 O \\ \n "
2021-04-15 09:28:57 +02:00
" %s \\ ) \n "
" / _/ \n "
" ( _- \n "
" \\ ____- \n \n " ,
MAGENTA , WHITE ) ;
}
else if ( strcmp ( version_name , " gnu " ) = = 0 | | strcmp ( version_name , " guix " ) = = 0 )
{
printf ( " \033 [3E \033 [3C%s,= %s,-_-. %s=. \n "
" ((_/%s)%sU U%s(%s \\ _)) \n "
" `-'%s(. .)%s`-' \n "
" %s \\ %sw%s/ \n "
" \u00af \n \n " ,
WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW ) ;
}
2021-04-27 09:36:02 +02:00
else if ( strcmp ( version_name , " manjaro " ) = = 0 | | strcmp ( version_name , " \" manjaro-arm \" " ) = = 0 )
2021-04-15 09:28:57 +02:00
{
printf ( " \033 [0E \033 [1C \u25b3 \u25b3 \u25e0 \u25e0 \u25e0 \u25e0 \n "
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
2021-04-27 09:36:02 +02:00
" \ e[0;42m \ e[0m \ e[0;42m \ e[1;30m > \u03c9 < \ e[0m \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
2021-04-15 09:28:57 +02:00
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n "
" \ e[0;42m \ e[0m \ e[0;42m \ e[0m \ e[0;42m \ e[0m \n " ) ;
}
else if ( strcmp ( version_name , " linuxmint " ) = = 0 )
{
printf ( " \033 [2E \033 [4C%s__/ \\ ____/ \\ . \n "
" |%s.--. %s| \n "
2021-04-27 09:36:02 +02:00
" %s, %s¯| %s| U \u03c9 U| %s| \n "
2021-04-15 09:28:57 +02:00
" %s|| %s| %s| | %s| \n "
" %s | %s| %s---- %s| \n "
" %s --%s'--------' \n \n " ,
GREEN , WHITE , GREEN , WHITE ,
GREEN , WHITE , GREEN , WHITE , GREEN , WHITE , GREEN , WHITE ,
GREEN , WHITE , GREEN , WHITE , GREEN ) ;
}
else if ( strcmp ( version_name , " \" opensuse-leap \" " ) = = 0 | | strcmp ( version_name , " \" opensuse-tumbleweed \" " ) = = 0 )
{
printf ( " \033 [3E \033 [3C%s| \\ ----/| \n "
" _ / %sO O%s \\ \n "
2021-04-27 09:36:02 +02:00
" __. \u03c9 / \n "
2021-04-15 09:28:57 +02:00
" '----' \n \n \n " ,
GREEN , WHITE , GREEN ) ;
}
else if ( strcmp ( version_name , " pop " ) = = 0 )
{
printf ( " \033 [2E \033 [6C%s| \\ .-----./| \n "
" |/ \\ | \n "
" | > < | \n "
" | %s~ %sP! %s~ %s| \n "
2021-04-27 09:36:02 +02:00
" _ --- \\ \u03c9 / \n "
2021-04-15 09:28:57 +02:00
" \\ _/ '-----' \n \n " ,
BLUE , LPINK , WHITE , LPINK , BLUE ) ;
}
else if ( strcmp ( version_name , " raspbian " ) = = 0 )
{
printf ( " \033 [0E \033 [6C%s__ __ \n "
" (_ \\ )(/_) \n "
" %s(>(__)<) \n "
" (_(_)(_)_) \n "
" (_(__)_) \n "
" (__) \n \n \n " ,
GREEN , RED ) ;
}
else if ( strcmp ( version_name , " ubuntu " ) = = 0 )
{
printf ( " \033 [1E \033 [9C%s_ \n "
" %s \u25E3 %s__(_)%s \u25E2 %s \n "
" _/ --- \\ \n "
2021-04-27 09:36:02 +02:00
" (_) |> \u03c9 <| | \n "
2021-04-15 09:28:57 +02:00
" \\ --- _/ \n "
" %sC__/%s---(_) \n \n \n " ,
LPINK , PINK , LPINK , PINK , LPINK , PINK , LPINK ) ;
}
else if ( strcmp ( version_name , " \" void \" " ) = = 0 )
{
printf ( " \033 [2E \033 [2C%s | \\ _____/| \n "
" _ \\ ____ | \n "
" | \\ \\ | \n "
2021-04-27 09:36:02 +02:00
" | | %s \u00d2 \u03c9 \u00d3 %s| | , \n "
2021-04-15 09:28:57 +02:00
" | \\ _____ \\ _|-, | \n "
" -_______ \\ \\ _/ \n \n " ,
GREEN , WHITE , GREEN ) ;
}
else if ( strcmp ( version_name , " android " ) = = 0 )
{ // android at the end because it could be not considered as an actual distribution of gnu/linux
printf ( " \033 [2E \033 [3C%s \\ _------_ / \n "
" / \\ \n "
2021-04-27 09:36:02 +02:00
" | %s~ %s> \u03c9 < %s~ %s| \n "
2021-04-15 09:28:57 +02:00
" ------------ \n \n \n \n " ,
GREEN , RED , GREEN , RED , GREEN ) ;
2021-04-07 14:13:15 +02:00
}
// BSD
2021-04-15 09:28:57 +02:00
else if ( strcmp ( version_name , " freebsd " ) = = 0 )
{
printf ( " \033 [2E \033 [1C%s/ \\ ,-'''''-,/ \\ \n "
" \\ _) (_/ \n "
" | \\ / | \n "
2021-04-27 09:36:02 +02:00
" | O \u03c9 O | \n "
2021-04-15 09:28:57 +02:00
" ; ; \n "
" '-_____-' \n \n " ,
RED ) ;
}
else if ( strcmp ( version_name , " openbsd " ) = = 0 )
{
printf ( " \033 [1E \033 [3C%s ______ \n "
" \\ - -/ %s \u2665 \n "
" %s \\ _/ \\ \n "
" | %s> < %s| \n "
2021-04-27 09:36:02 +02:00
" |_ < %s// %s \u03c9 %s// \n "
2021-04-15 09:28:57 +02:00
" %s/ \\ / \n "
" /-________- \\ \n \n " ,
YELLOW , RED , YELLOW , WHITE , YELLOW , LPINK , WHITE , LPINK , YELLOW ) ;
2021-04-07 14:13:15 +02:00
}
2021-04-15 22:59:43 +02:00
else if ( strcmp ( version_name , " macos " ) = = 0 )
2021-04-16 10:48:39 +02:00
{
printf ( " \033 [1E \033 [3C%s .:` \n "
" .--``--. \n "
2021-04-27 09:36:02 +02:00
" %s ww O \u03c9 O w \n "
2021-04-16 10:48:39 +02:00
" %s w w \n "
" %s w w \n "
" %s w w \n "
" www_-_www \n \n " ,
GREEN , YELLOW , RED , PINK , BLUE ) ;
}
2021-04-15 22:59:43 +02:00
2021-05-03 03:46:55 +02:00
// Windows
else if ( strcmp ( version_name , " windows " ) = = 0 )
{
printf ( " %sMMMMMMM MMMMMMM \n "
" M ^ M M ^ M \n "
" M M M M \n "
" MMMMMMM MMMMMMM \n "
" \n "
" MMMMMMM MMMMMMM \n "
" M W W W M \n "
" M WW WW M \n "
" MMMMMMM MMMMMMM \n " ,
BLUE ) ;
}
2021-04-07 14:13:15 +02:00
// everything else
2021-04-15 09:28:57 +02:00
else
printf ( " \033 [0E \033 [2C%s._.--._. \n "
" \\ |>%s_%s< |/ \n "
" |%s:_/%s | \n "
" // \\ \\ ? \n "
" (| | ) / \n "
" %s/' \\ _ _/` \\ %s- \n "
" %s \\ ___)=(___/ \n \n " ,
WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW , WHITE , YELLOW ) ;
2021-03-06 23:15:13 +01:00
}
2021-03-07 22:57:59 +01:00
2021-04-15 09:28:57 +02:00
void print_image ( )
{ // prints logo (as an image) of the given system. distributions listed alphabetically.
2021-04-07 14:13:15 +02:00
char command [ 256 ] ;
if ( strlen ( image_name ) > 1 )
sprintf ( command , " viu -t -w 18 -h 8 %s 2> /dev/null " , image_name ) ;
2021-04-15 09:28:57 +02:00
else
{
if ( strcmp ( 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 " , version_name ) ;
else
sprintf ( command , " viu -t -w 18 -h 8 /usr/lib/uwufetch/%s.png 2> /dev/null " , version_name ) ;
2021-04-07 14:13:15 +02:00
}
printf ( " \n " ) ;
2021-04-15 09:28:57 +02:00
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 "
" is not installed \n "
" or the image \n "
" is not fount \n "
" Read IMAGES.md \n "
" for more info. \n \n " ,
RED ) ;
2021-04-07 14:13:15 +02:00
}
2021-03-09 11:35:18 +01:00
}
2021-04-15 09:28:57 +02:00
void usage ( char * arg )
{
printf ( " Usage: %s <args> \n "
" -a, --ascii prints logo as ascii text (default) \n "
2021-04-15 09:33:51 +02:00
" -c --config use custom config path \n "
2021-04-15 09:28:57 +02:00
" -d, --distro lets you choose the logo to print \n "
" -h, --help prints this help page \n "
2021-04-15 09:33:51 +02:00
" -i, --image prints logo as image and use a custom image if provided \n "
2021-04-15 09:28:57 +02:00
" %sworks in most terminals \n "
" read README.md for more info%s \n "
" -l, --list lists all supported distributions \n " ,
arg , BLUE , NORMAL ) ;
2021-03-09 11:35:18 +01:00
}
2021-04-15 09:28:57 +02:00
void uwu_name ( )
{ // uwufies distro name
2021-04-06 15:56:09 +02:00
2021-04-15 09:28:57 +02:00
# define STRING_TO_UWU(original, uwufied) \
if ( strcmp ( version_name , original ) = = 0 ) \
sprintf ( version_name , " %s " , uwufied )
2021-04-06 15:56:09 +02:00
2021-04-07 14:13:15 +02:00
// linux
STRING_TO_UWU ( " alpine " , " Nyalpine " ) ;
else STRING_TO_UWU ( " arch " , " Nyarch Linuwu " ) ;
else STRING_TO_UWU ( " artix " , " Nyartix Linuwu " ) ;
else STRING_TO_UWU ( " debian " , " Debinyan " ) ;
2021-04-27 09:49:07 +02:00
else STRING_TO_UWU ( " endeavouros " , " endeavOwO " ) ;
2021-05-07 00:21:05 +02:00
else STRING_TO_UWU ( " EndeavourOS " , " endeavOwO " ) ;
2021-04-07 14:13:15 +02:00
else STRING_TO_UWU ( " fedora " , " Fedowa " ) ;
else STRING_TO_UWU ( " gentoo " , " GentOwO " ) ;
2021-04-10 17:47:33 +02:00
else STRING_TO_UWU ( " gnu " , " gnUwU " ) ;
2021-04-07 14:13:15 +02:00
else STRING_TO_UWU ( " guix " , " gnUwU gUwUix " ) ;
else STRING_TO_UWU ( " linuxmint " , " LinUWU Miwint " ) ;
else STRING_TO_UWU ( " manjaro " , " Myanjawo " ) ;
else STRING_TO_UWU ( " \" manjaro-arm \" " , " Myanjawo AWM " ) ;
else STRING_TO_UWU ( " neon " , " KDE NeOwOn " ) ;
else STRING_TO_UWU ( " nixos " , " nixOwOs " ) ;
else STRING_TO_UWU ( " \" opensuse-leap \" " , " OwOpenSUSE Leap " ) ;
else STRING_TO_UWU ( " \" opensuse-tumbleweed \" " , " OwOpenSUSE Tumbleweed " ) ;
else STRING_TO_UWU ( " pop " , " PopOwOS " ) ;
else STRING_TO_UWU ( " raspbian " , " RaspNyan " ) ;
else STRING_TO_UWU ( " slackware " , " Swackwawe " ) ;
else STRING_TO_UWU ( " solus " , " sOwOlus " ) ;
else STRING_TO_UWU ( " ubuntu " , " Uwuntu " ) ;
else STRING_TO_UWU ( " \" void \" " , " OwOid " ) ;
else STRING_TO_UWU ( " android " , " Nyandroid " ) ; // android at the end because it could be not considered as an actual distribution of gnu/linux
// BSD
2021-04-15 09:28:57 +02:00
else STRING_TO_UWU ( " freebsd " , " FweeBSD " ) ;
else STRING_TO_UWU ( " openbsd " , " OwOpenBSD " ) ;
2021-04-07 14:13:15 +02:00
2021-04-15 22:59:43 +02:00
else STRING_TO_UWU ( " macos " , " macOwOS " ) ;
2021-05-03 03:46:55 +02:00
// Windows
else STRING_TO_UWU ( " windows " , " WinyandOwOws " ) ;
2021-04-15 09:28:57 +02:00
else
{
2021-04-07 14:13:15 +02:00
sprintf ( version_name , " %s " , " unknown " ) ;
2021-04-15 09:28:57 +02:00
if ( ascii_image_flag = = 1 )
{
2021-04-07 14:13:15 +02:00
print_image ( ) ;
printf ( " \n " ) ;
}
}
2021-04-06 15:56:09 +02:00
# undef STRING_TO_UWU
2021-03-19 16:56:24 +01:00
}
2021-03-19 19:21:35 +01:00
2021-04-15 09:28:57 +02:00
void truncate_name ( char * name )
{
2021-04-07 14:13:15 +02:00
for ( int i = target_width ; i < 256 ; i + + )
name [ i ] = ' \0 ' ;
2021-03-19 19:21:35 +01:00
}
2021-03-21 20:07:22 +01:00
2021-04-06 15:56:09 +02:00
// remove square brackets (for gpu names)
2021-04-15 09:28:57 +02:00
void remove_brackets ( char * str )
{
2021-04-07 14:13:15 +02:00
int i = 0 , j ;
2021-04-15 09:28:57 +02:00
while ( i < ( int ) strlen ( str ) )
{
if ( str [ i ] = = ' [ ' | | str [ i ] = = ' ] ' )
{
for ( j = i ; j < ( int ) strlen ( str ) ; j + + )
2021-04-07 14:13:15 +02:00
str [ j ] = str [ j + 1 ] ;
2021-04-15 09:28:57 +02:00
}
else
i + + ;
2021-04-07 14:13:15 +02:00
}
2021-03-21 20:07:22 +01:00
}