diff --git a/Makefile b/Makefile index 0f79ef1..32e0a82 100644 --- a/Makefile +++ b/Makefile @@ -8,8 +8,8 @@ clean: rm -f paleofetch $(CACHE)/paleofetch paleofetch: paleofetch.c paleofetch.h config.h - $(eval battery_path := $(shell ./config_scripts/battery_config.sh)) - $(CC) paleofetch.c -o paleofetch $(CFLAGS) -D $(battery_path) + $(eval packages := $(shell ./config_scripts/package_config.sh)) + $(CC) paleofetch.c -o paleofetch $(CFLAGS) -D $(packages) strip paleofetch install: paleofetch diff --git a/config.h b/config.h index a4bd4af..7d1061c 100644 --- a/config.h +++ b/config.h @@ -1,19 +1,48 @@ -#include "logos/arch.h" -//define colors -#define BLACK "\e[1;30m" -#define RED "\e[1;31m" -#define GREEN "\e[1;32m" -#define YELLOW "\e[1;33m" -#define BLUE "\e[1;34m" -#define PURPLE "\e[1;35m" -#define CYAN "\e[1;36m" -#define WHITE "\e[1;37m" +#define MYOS ARTIX +#define ALPINE 1 +#define ARCH 2 +#define ARTIX 3 +#define CRUX 4 +#define DEBIAN 5 +#define DEVUAN 6 +#define FREEBSD 7 +#define GENTOO 8 +#define NETBSD 9 +#define OPENBSD 10 +#define OPENINDIANA 11 +#define POSTMARKETOS 12 +#define VOID 13 -//define display colors -#define COLOR BLUE -#define LOGOCOLOR CYAN -#define TITLECOLOR BLUE +#if MYOS == ALPINE + #include "logos/alpine.h" +#elif MYOS == ARCH + #include "logos/arch.h" +#elif MYOS == ARTIX + #include "logos/artix.h" +#elif MYOS == CRUX + #include "logos/crux.h" +#elif MYOS == DEBIAN + #include "logos/debian.h" +#elif MYOS == DEVUAN + #include "logos/devuan.h" +#elif MYOS == FREEBSD + #include "logos/freebsd.h" +#elif MYOS == GENTOO + #include "logos/gentoo.h" +#elif MYOS == NETBSD + #include "logos/netbsd.h" +#elif MYOS == OPENBSD + #include "logos/openbsd.h" +#elif MYOS == OPENINDIANA + #include "logos/openindiana.h" +#elif MYOS == POSTMARKETOS + #include "logos/postmarketos.h" +#elif MYOS == VOID + #include "logos/void.h" +#else + #include "logos/linux.h" +#endif #define CONFIG \ { \ @@ -25,12 +54,10 @@ { "Host: ", get_host, true }, \ { "Kernel: ", get_kernel, true }, \ { "Uptime: ", get_uptime, false }, \ - { "Battery: ", get_battery_percentage, false }, \ -/* Only enable if on archlinux - { "Packages: ", get_packages_pacman, false }, \ - */ \ + { "Packages: ", get_packages, false }, \ { "Shell: ", get_shell, false }, \ { "Resolution: ", get_resolution, false }, \ + { "WM: ", get_wm, false }, \ { "Terminal: ", get_terminal, false }, \ { "CPU: ", get_cpu, true }, \ { "GPU: ", get_gpu1, true }, \ @@ -42,20 +69,21 @@ #define CPU_CONFIG \ { \ - REMOVE("(R)"), \ - REMOVE("(TM)"), \ - REMOVE("Dual-Core"), \ - REMOVE("Quad-Core"), \ - REMOVE("Six-Core"), \ - REMOVE("Eight-Core"), \ - REMOVE("Core"), \ - REMOVE("CPU"), \ + REMOVE("(R)"), \ + REMOVE("(TM)"), \ + REMOVE("Dual-Core"), \ + REMOVE("Quad-Core"), \ + REMOVE("Six-Core"), \ + REMOVE("Eight-Core"), \ + REMOVE("Core"), \ + REMOVE("CPU"), \ } #define GPU_CONFIG \ { \ - REMOVE("Corporation"), \ - REMOVE("Controller"), \ - REMOVE("Graphics"), \ - REMOVE("Integrated"), \ + REMOVE("Advanced Micro Devices, Inc. "), \ + REMOVE("Corporation"), \ + REMOVE("Controller"), \ + REMOVE("Graphics"), \ + REMOVE("Integrated"), \ } diff --git a/config_scripts/battery_config.sh b/config_scripts/battery_config.sh deleted file mode 100755 index 0a49740..0000000 --- a/config_scripts/battery_config.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -BATTERY_DIRECTORY=`ls /sys/class/power_supply | grep -i "^bat" | head -n 1` - -echo "BATTERY_DIRECTORY='\"/sys/class/power_supply/$BATTERY_DIRECTORY\"'" diff --git a/config_scripts/package_config.sh b/config_scripts/package_config.sh new file mode 100755 index 0000000..bfc7542 --- /dev/null +++ b/config_scripts/package_config.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +PACKAGEMANAGER="不明" +PACKAGECOUNT="0" +unamestr=$(uname) + +if wc -v >/dev/null 2>&1; then + WC_COMMAND="wc -ln" +else + WC_COMMAND="wc -l'" +fi + +if [ "$unamestr" = 'Linux' ]; then + platform=$(cat /etc/os-release | grep "^ID=" | sed -e "s/ID=//") + if [ "$platform" = 'alpine' ] || [ "$platform" = 'postmarketos' ]; then + PACKAGEMANAGER="apk" + PACKAGECOUNT=$(apk info -I | $WC_COMMAND) + elif [ "$platform" = 'arch' ] || [ "$platform" = 'artix' ]; then + PACKAGEMANAGER="pacman" + PACKAGECOUNT=$(pacman -Qq | $WC_COMMAND) + elif [ "$platform" = 'crux' ]; then + PACKAGEMANAGER="pkginfo" + PACKAGECOUNT=$(pkginfo -i | $WC_COMMAND) + elif [ "$platform" = 'debian' ] || [ "$platform" = 'devuan' ]; then + PACKAGEMANAGER="dpkg-query" + PACKAGECOUNT=$(dpkg-query -f '.\n' -W | $WC_COMMAND) + elif [ "$platform" = 'gentoo' ]; then + PACKAGEMANAGER="qlist" + PACKAGECOUNT=$(qlist -IC | $WC_COMMAND) + elif [ "$platform" = 'void' ]; then + PACKAGEMANAGER="xbps-query" + PACKAGECOUNT=$(xbps-query -l | $WC_COMMAND) + fi +elif [ "$unamestr" = 'FreeBSD' ]; then + PACKAGEMANAGER="pkg" + PACKAGECOUNT=$(pkg info -a | $WC_COMMAND) +elif [ "$unamestr" = 'OpenBSD' ]; then + PACKAGEMANAGER="pkg_info" + PACKAGECOUNT=$(pkg_info | $WC_COMMAND) +elif [ "$unamestr" = 'NetBSD' ]; then + PACKAGEMANAGER="pkg_info" + PACKAGECOUNT=$(pkg_info -a | $WC_COMMAND) +elif [ "$unamestr" = 'SunOS' ]; then + PACKAGEMANAGER="pkg" + PACKAGECOUNT=$(pkg list | $WC_COMMAND) +fi + +echo "PACKAGES='\"$PACKAGECOUNT ($PACKAGEMANAGER)\"'" diff --git a/logos/alpine.h b/logos/alpine.h new file mode 100644 index 0000000..0bad590 --- /dev/null +++ b/logos/alpine.h @@ -0,0 +1,30 @@ +// This was stolen from neofetch +#define BLUE "\e[1;34m" +#define MAGENTA "\e[1;35m" +#define RESET "\e[0m" + +#define COLOR MAGENTA +#define TITLECOLOR BLUE + +char *LOGO[] = { +BLUE " .hddddddddddddddddddddddh. ", +" :dddddddddddddddddddddddddd: ", +" /dddddddddddddddddddddddddddd/ ", +" +dddddddddddddddddddddddddddddd+ ", +" `sdddddddddddddddddddddddddddddddds` ", +" `ydddddddddddd++hdddddddddddddddddddy` ", +".hddddddddddd+` `+ddddh:-sdddddddddddh. ", +"hdddddddddd+` `+y: .sddddddddddh ", +"ddddddddh+` `//` `.` -sddddddddd ", +"ddddddh+` `/hddh/` `:s- -sddddddd ", +"ddddh+` `/+/dddddh/` `+s- -sddddd ", +"ddd+` `/o` :dddddddh/` `oy- .yddd ", +"hdddyo+ohddyosdddddddddho+oydddy++ohdddh ", +".hddddddddddddddddddddddddddddddddddddh. ", +" `yddddddddddddddddddddddddddddddddddy` ", +" `sdddddddddddddddddddddddddddddddds` ", +" +dddddddddddddddddddddddddddddd+ ", +" /dddddddddddddddddddddddddddd/ ", +" :dddddddddddddddddddddddddd: ", +" .hddddddddddddddddddddddh. " RESET +}; diff --git a/logos/arch.h b/logos/arch.h index d055ea1..fd7c13a 100644 --- a/logos/arch.h +++ b/logos/arch.h @@ -1,22 +1,28 @@ // This was stolen from neofetch +#define CYAN "\e[1;36m" +#define RESET "\e[0m" + +#define COLOR CYAN +#define TITLECOLOR CYAN + char *LOGO[] = { - " -` ", - " .o+` ", - " `ooo/ ", - " `+oooo: ", - " `+oooooo: ", - " -+oooooo+: ", - " `/:-:++oooo+: ", - " `/++++/+++++++: ", - " `/++++++++++++++: ", - " `/+++ooooooooooooo/` ", - " ./ooosssso++osssssso+` ", - " .oossssso-````/ossssss+` ", - " -osssssso. :ssssssso. ", - " :osssssss/ osssso+++. ", - " /ossssssss/ +ssssooo/- ", - " `/ossssso+/:- -:/+osssso+- ", - " `+sso+:-` `.-/+oso: ", - "`++:. `-/+/ ", - ".` `/ " +CYAN " -` " RESET, +CYAN " .o+` " RESET, +CYAN " `ooo/ " RESET, +CYAN " `+oooo: " RESET, +CYAN " `+oooooo: " RESET, +CYAN " -+oooooo+: " RESET, +CYAN " `/:-:++oooo+: " RESET, +CYAN " `/++++/+++++++: " RESET, +CYAN " `/++++++++++++++: " RESET, +CYAN " `/+++ooooooooooooo/` " RESET, +CYAN " ./ooosssso++osssssso+` " RESET, +CYAN " .oossssso-````/ossssss+` " RESET, +CYAN " -osssssso. :ssssssso. " RESET, +CYAN " :osssssss/ osssso+++. " RESET, +CYAN " /ossssssss/ +ssssooo/- " RESET, +CYAN " `/ossssso+/:- -:/+osssso+- " RESET, +CYAN " `+sso+:-` `.-/+oso: " RESET, +CYAN "`++:. `-/+/ " RESET, +CYAN ".` `/ " RESET }; diff --git a/logos/artix.h b/logos/artix.h index e1644d7..aff3be0 100644 --- a/logos/artix.h +++ b/logos/artix.h @@ -1,23 +1,29 @@ // This was stolen from neofetch +#define CYAN "\e[1;36m" +#define RESET "\e[0m" + +#define COLOR CYAN +#define TITLECOLOR CYAN + char *LOGO[] = { -" ' ", -" 'o' ", -" 'ooo' ", -" 'ooxoo' ", -" 'ooxxxoo' ", -" 'oookkxxoo' ", -" 'oiioxkkxxoo' ", -" ':;:iiiioxxxoo' ", -" `'.;::ioxxoo' ", -" '-. `':;jiooo' ", -" 'oooio-.. `'i:io' ", -" 'ooooxxxxoio:,. `'-;' ", -" 'ooooxxxxxkkxoooIi:-. `' ", -" 'ooooxxxxxkkkkxoiiiiiji' ", -" 'ooooxxxxxkxxoiiii:'` .i' ", -" 'ooooxxxxxoi:::'` .;ioxo' ", -" 'ooooxooi::'` .:iiixkxxo' ", -" 'ooooi:'` `'';ioxxo' ", -" 'i:'` '':io' ", -"'` `' " +CYAN " ' " RESET, +CYAN " 'o' " RESET, +CYAN " 'ooo' " RESET, +CYAN " 'ooxoo' " RESET, +CYAN " 'ooxxxoo' " RESET, +CYAN " 'oookkxxoo' " RESET, +CYAN " 'oiioxkkxxoo' " RESET, +CYAN " ':;:iiiioxxxoo' " RESET, +CYAN " `'.;::ioxxoo' " RESET, +CYAN " '-. `':;jiooo' " RESET, +CYAN " 'oooio-.. `'i:io' " RESET, +CYAN " 'ooooxxxxoio:,. `'-;' " RESET, +CYAN " 'ooooxxxxxkkxoooIi:-. `' " RESET, +CYAN " 'ooooxxxxxkkkkxoiiiiiji' " RESET, +CYAN " 'ooooxxxxxkxxoiiii:'` .i' " RESET, +CYAN " 'ooooxxxxxoi:::'` .;ioxo' " RESET, +CYAN " 'ooooxooi::'` .:iiixkxxo' " RESET, +CYAN " 'ooooi:'` `'';ioxxo' " RESET, +CYAN " 'i:'` '':io' " RESET, +CYAN "'` `' " RESET }; diff --git a/logos/crux.h b/logos/crux.h new file mode 100644 index 0000000..4e7e94c --- /dev/null +++ b/logos/crux.h @@ -0,0 +1,29 @@ +// This was stolen from neofetch +#define BLUE "\e[1;34m" +#define MAGENTA "\e[1;35m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR MAGENTA +#define TITLECOLOR BLUE + +char *LOGO[] = { +BLUE " odddd " RESET, +BLUE " oddxkkkxxdoo " RESET, +BLUE " ddcoddxxxdoool " RESET, +BLUE " xdclodod olol " RESET, +BLUE " xoc xdd olol " RESET, +BLUE " xdc " MAGENTA "k00" BLUE "Okdlol " RESET, +BLUE " xxd" MAGENTA "kOKKKOkd" BLUE "ldd " RESET, +BLUE " xdco" MAGENTA "xOkdlo" BLUE "dldd " RESET, +BLUE " ddc:cl" MAGENTA "lll" BLUE "oooodo " RESET, +BLUE " odxxdd" WHITE "xkO000kx" BLUE "ooxdo " RESET, +BLUE " oxdd" WHITE "x0NMMMMMMWW0od" BLUE "kkxo " RESET, +BLUE " oooxd" WHITE "0WMMMMMMMMMW0o" BLUE "dxkx " RESET, +BLUE "docldkXW" WHITE "MMMMMMMWWN" BLUE "Odolco " RESET, +BLUE "xx" MAGENTA "dx" BLUE "kxxOKN" WHITE "WMMWN" BLUE "0xdoxo::c " RESET, +MAGENTA "xOkkO" BLUE "0oo" WHITE "odOW" MAGENTA "WW" BLUE "XkdodOxc:l " RESET, +MAGENTA "dkkkxkkk" WHITE "OKX" MAGENTA "NNNX0Oxx" BLUE "xc:cd " RESET, +MAGENTA " odxxdx" WHITE "xllod" MAGENTA "ddooxx" BLUE "dc:ldo " RESET, +MAGENTA " lodd" BLUE "dolccc" MAGENTA "ccox" BLUE "xoloo " RESET +}; diff --git a/logos/debian.h b/logos/debian.h index 409a5b6..ec98560 100644 --- a/logos/debian.h +++ b/logos/debian.h @@ -1,21 +1,28 @@ // This was stolen from neofetch -char *LOGO[] = { -" _,met$$$$$gg. ", -" ,g$$$$$$$$$$$$$$$P. ", -" ,g$$P\" \"\"\"Y$$.\". ", -" ,$$P' `$$$. ", -"',$$P ,ggs. `$$b: ", -"`d$$' ,$P\"' . $$$ ", -" $$P d$' , $$P ", -" $$: $$. - ,d$$' ", -" $$; Y$b._ _,d$P' ", -" Y$$. `.`\"Y$$$$P\"' ", -" `$$b \"-.__ ", -" `Y$$ ", -" `Y$$. ", -" `$$b. ", -" `Y$$b. ", -" `\"Y$b._ ", -" `\"\"\" " -}; +#define RED "\e[1;31m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" +#define COLOR RED +#define TITLECOLOR RED + +char *LOGO[] = { +WHITE " _,met$$$$$gg. " RESET, +WHITE " ,g$$$$$$$$$$$$$$$P. " RESET, +WHITE " ,g$$P\" \"\"\"Y$$.\". " RESET, +WHITE " ,$$P' `$$$. " RESET, +WHITE "',$$P ,ggs. `$$b: " RESET, +WHITE "`d$$' ,$P\"' " RED "." WHITE " $$$ " RESET, +WHITE " $$P d$' " RED "," WHITE " $$P " RESET, +WHITE " $$: $$. - ,d$$' " RESET, +WHITE " $$; Y$b._ _,d$P' " RESET, +WHITE " Y$$. " RED "`." WHITE "`\"Y$$$$P\"' " RESET, +WHITE " `$$b " RED "\"-.__" WHITE " " RESET, +WHITE " `Y$$ " RESET, +WHITE " `Y$$. " RESET, +WHITE " `$$b. " RESET, +WHITE " `Y$$b. " RESET, +WHITE " `\"Y$b._ " RESET, +WHITE " `\"\"\" " RESET, +WHITE " " RESET +}; diff --git a/logos/devuan.h b/logos/devuan.h new file mode 100644 index 0000000..72e9bc8 --- /dev/null +++ b/logos/devuan.h @@ -0,0 +1,27 @@ +// This was stolen from neofetch +#define MAGENTA "\e[1;35m" +#define RESET "\e[0m" + +#define COLOR MAGENTA +#define TITLECOLOR MAGENTA + +char *LOGO[] = { +MAGENTA " ..,,;;;::;,.. " RESET, +MAGENTA " `':ddd;:,. " RESET, +MAGENTA " `'dPPd:,. " RESET, +MAGENTA " `:b$$b`. " RESET, +MAGENTA " 'P$$$d` " RESET, +MAGENTA " .$$$$$` " RESET, +MAGENTA " ;$$$$$P " RESET, +MAGENTA " .:P$$$$$$` " RESET, +MAGENTA " .,:b$$$$$$$;' " RESET, +MAGENTA " .,:dP$$$$$$$$b:' " RESET, +MAGENTA " .,:;db$$$$$$$$$$Pd'` " RESET, +MAGENTA " ,db$$$$$$$$$$$$$$b:'` " RESET, +MAGENTA ":$$$$$$$$$$$$b:'` " RESET, +MAGENTA " `$$$$$bd:''` " RESET, +MAGENTA " `'''` " RESET, +MAGENTA " " RESET, +MAGENTA " " RESET, +MAGENTA " " RESET +}; diff --git a/logos/fedora.h b/logos/fedora.h deleted file mode 100644 index b04fbc8..0000000 --- a/logos/fedora.h +++ /dev/null @@ -1,21 +0,0 @@ -// This was stolen from neofetch -char *LOGO[] = { -" /:-------------:\\\\ ", -" :-------------------:: ", -" :-----------/shhOHbmp---:\\\\ ", -" /-----------omMMMNNNMMD ---: ", -" :-----------sMMMMNMNMP. ---: ", -" :-----------:MMMdP------- ---\\\\ ", -",------------:MMMd-------- ---: ", -":------------:MMMd------- .---: ", -":---- oNMMMMMMMMMNho .----: ", -":-- .+shhhMMMmhhy++ .------/ ", -":- -------:MMMd--------------: ", -":- --------/MMMd-------------; ", -":- ------/hMMMy------------: ", -":-- :dMNdhhdNMMNo------------; ", -":---:sdNMMMMNds:------------: ", -":------:://:-------------:: ", -":---------------------:// " -}; - diff --git a/logos/freebsd.h b/logos/freebsd.h new file mode 100644 index 0000000..4d9d5f9 --- /dev/null +++ b/logos/freebsd.h @@ -0,0 +1,28 @@ +// This was stolen from neofetch +#define RED "\e[1;31m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR RED +#define TITLECOLOR RED + +char *LOGO[] = { +WHITE "``` " RED "` " RESET, +WHITE " ` `.....---..." RED "....--.``` -/ " RESET, +WHITE " +o .--` " RED "/y:` +. " RESET, +WHITE " yo`:. " RED ":o `+- " RESET, +WHITE " y/ " RED "-/` -o/ " RESET, +WHITE " .- " RED "::/sy+:. " RESET, +WHITE " / " RED "`-- / " RESET, +WHITE " `: " RED ":` " RESET, +WHITE " `: " RED ":` " RESET, +WHITE " / " RED "/ " RESET, +WHITE " .- " RED "-. " RESET, +WHITE " -- " RED "-. " RESET, +WHITE " `:` " RED "`:` " RESET, +RED " .-- `--. " RESET, +RED " .---.....----. " RESET, +RED " " RESET, +RED " " RESET, +RED " " RESET +}; diff --git a/logos/gentoo.h b/logos/gentoo.h index 213d9d2..5c762b7 100644 --- a/logos/gentoo.h +++ b/logos/gentoo.h @@ -1,20 +1,27 @@ +#define MAGENTA "\e[1;35m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR MAGENTA +#define TITLECOLOR MAGENTA + char *LOGO[] = { -" -/oyddmdhs+:. ", -" -odNMMMMMMMMNNmhy+-` ", -" -yNMMMMMMMMMMMNNNmmdhy+- ", -" `omMMMMMMMMMMMMNmdmmmmddhhy/` ", -" omMMMMMMMMMMMNhhyyyohmdddhhhdo` ", -".ydMMMMMMMMMMdhs++so/smdddhhhhdm+` ", -" oyhdmNMMMMMMMNdyooydmddddhhhhyhNd. ", -" :oyhhdNNMMMMMMMNNNmmdddhhhhhyymMh ", -" .:+sydNMMMMMNNNmmmdddhhhhhhmMmy ", -" /mMMMMMMNNNmmmdddhhhhhmMNhs: ", -" `oNMMMMMMMNNNmmmddddhhdmMNhs+` ", -" `sNMMMMMMMMNNNmmmdddddmNMmhs/. ", -" /NMMMMMMMMNNNNmmmdddmNMNdso:` ", -"+MMMMMMMNNNNNmmmmdmNMNdso/- ", -"yMMNNNNNNNmmmmmNNMmhs+/-` ", -"/hMMNNNNNNNNMNdhs++/-` ", -"`/ohdmmddhys+++/:.` ", -" `-//////:--. " +MAGENTA " -/oyddmdhs+:. " RESET, +MAGENTA " -o" WHITE "dNMMMMMMMMNNmhy+" MAGENTA "-` " RESET, +MAGENTA " -y" WHITE "NMMMMMMMMMMMNNNmmdhy" MAGENTA "+- " RESET, +MAGENTA " `o" WHITE "mMMMMMMMMMMMMNmdmmmmddhhy" MAGENTA "/` " RESET, +MAGENTA " om" WHITE "MMMMMMMMMMMN" MAGENTA "hhyyyo" WHITE "hmdddhhhd" MAGENTA "o` " RESET, +MAGENTA ".y" WHITE "dMMMMMMMMMMd" MAGENTA "hs++so/s" WHITE "mdddhhhhdm" MAGENTA "+` " RESET, +MAGENTA " oy" WHITE "hdmNMMMMMMMN" MAGENTA "dyooy" WHITE "dmddddhhhhyhN" MAGENTA "d. " RESET, +MAGENTA " :o" WHITE "yhhdNNMMMMMMMNNNmmdddhhhhhyym" MAGENTA "Mh " RESET, +MAGENTA " .:" WHITE "+sydNMMMMMNNNmmmdddhhhhhhmM" MAGENTA "my " RESET, +MAGENTA " /m" WHITE "MMMMMMNNNmmmdddhhhhhmMNh" MAGENTA "s: " RESET, +MAGENTA " `o" WHITE "NMMMMMMMNNNmmmddddhhdmMNhs" MAGENTA "+` " RESET, +MAGENTA " `s" WHITE "NMMMMMMMMNNNmmmdddddmNMmhs" MAGENTA "/. " RESET, +MAGENTA " /N" WHITE "MMMMMMMMNNNNmmmdddmNMNdso" MAGENTA ":` " RESET, +MAGENTA "+M" WHITE "MMMMMMNNNNNmmmmdmNMNdso" MAGENTA "/- " RESET, +MAGENTA "yM" WHITE "MNNNNNNNmmmmmNNMmhs+/" MAGENTA" -` " RESET, +MAGENTA "/h" WHITE "MMNNNNNNNNMNdhs++/" MAGENTA "-` " RESET, +MAGENTA "`/" WHITE "ohdmmddhys+++/:" MAGENTA ".` " RESET, +MAGENTA " `-//////:--. " RESET }; diff --git a/logos/linux.h b/logos/linux.h new file mode 100644 index 0000000..9e72665 --- /dev/null +++ b/logos/linux.h @@ -0,0 +1,29 @@ +// This was stolen from neofetch +#define GREY "\e[1;30m" +#define YELLOW "\e[1;33m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR WHITE +#define TITLECOLOR WHITE + +char *LOGO[] = { +GREY " ##### " RESET, +GREY " ####### " RESET, +GREY " ##" WHITE "O" GREY "#" WHITE "O" GREY "## " RESET, +GREY " #" YELLOW "#####" GREY "# " RESET, +GREY " ##" WHITE "##" YELLOW "###" WHITE "##" GREY "## " RESET, +GREY " #" WHITE "##########" GREY "## " RESET, +GREY " #" WHITE "############" GREY "## " RESET, +GREY " #" WHITE "############" GREY "### " RESET, +YELLOW " ##" GREY "#" WHITE "###########" GREY "##" YELLOW "# " RESET, +YELLOW "######" YELLOW "#" GREY "#" WHITE "######" GREY "#" YELLOW "###### " RESET, +YELLOW "#######" GREY "#" WHITE "#####" GREY "#" YELLOW "####### " RESET, +YELLOW " #####" GREY "#######" YELLOW "##### " RESET, +GREY " " RESET, +GREY " " RESET, +GREY " " RESET, +GREY " " RESET, +GREY " " RESET, +GREY " " RESET +}; diff --git a/logos/manjaro.h b/logos/manjaro.h deleted file mode 100644 index ebc91e6..0000000 --- a/logos/manjaro.h +++ /dev/null @@ -1,17 +0,0 @@ -// This was stolen from neofetch -char *LOGO[] = { - "██████████████████ ████████ ", - "██████████████████ ████████ ", - "██████████████████ ████████ ", - "██████████████████ ████████ ", - "████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ ", - "████████ ████████ ████████ " -}; diff --git a/logos/netbsd.h b/logos/netbsd.h new file mode 100644 index 0000000..251c515 --- /dev/null +++ b/logos/netbsd.h @@ -0,0 +1,28 @@ +// This was stolen from neofetch +#define MAGENTA "\e[1;35m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR MAGENTA +#define TITLECOLOR MAGENTA + +char *LOGO[] = { +MAGENTA " `-/oshdmNMNdhyo+:-` " RESET, +WHITE "y" MAGENTA "/s+:-`` `.-:+oydNMMMMNhs/-`` " RESET, +WHITE "-m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` " RESET, +WHITE " -m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMMmy+:` " RESET, +WHITE " -N/" MAGENTA "dMMMMMMMMMMMMMMMds:` " RESET, +WHITE " -N/" MAGENTA "hMMMMMMMMMmho:` " RESET, +WHITE " -N/" MAGENTA "-:/++/:.` " RESET, +WHITE " :M+ " RESET, +WHITE " :Mo " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " :Ms " RESET, +WHITE " " RESET +}; diff --git a/logos/openbsd.h b/logos/openbsd.h new file mode 100644 index 0000000..88f237b --- /dev/null +++ b/logos/openbsd.h @@ -0,0 +1,35 @@ +// This was stolen from neofetch +#define GREY "\e[1;30m" +#define RED "\e[1;31m" +#define YELLOW "\e[1;33m" +#define CYAN "\e[1;36m" +#define RESET "\e[0m" + +#define COLOR YELLOW +#define TITLECOLOR YELLOW + +char *LOGO[] = { +CYAN " _ " RESET, +CYAN " (_) " RESET, +YELLOW " | . " RESET, +YELLOW " . |L /| . " CYAN "_ " RESET, +YELLOW " _ . |\\ _| \\--+._/| . " CYAN " (_) " RESET, +YELLOW " / ||\\| Y J ) / |/| ./ " RESET, +YELLOW " J |)'( | ` F`.'/ " CYAN " _ " RESET, +YELLOW " -<| F __ .-< " CYAN " (_) " RESET, +YELLOW " | / .-'" CYAN "." YELLOW " `. /" CYAN "-. " YELLOW "L___ " RESET, +YELLOW " J \\ < " CYAN "\\ " YELLOW " | |" GREY " O" CYAN "\\" YELLOW "|.-' " CYAN " _ " RESET, +YELLOW " _J \\ .- \\" CYAN "/" GREY " O " CYAN "|" YELLOW" | \\ |F " CYAN " (_) " RESET, +YELLOW " '-F -<_. \\ .-' `-' L__ " RESET, +YELLOW "__J _ _. >-' )" RED "._." YELLOW " |-' " RESET, +YELLOW " `-|.' /_. " RED "\\_|" YELLOW " F " RESET, +YELLOW " /.- . _.< " RESET, +YELLOW " /' /.' .' `\\ " RESET, +YELLOW " /L /' |/ _.-'-\\ " RESET, +YELLOW " /'J ___.---'\\| " RESET, +YELLOW " |\\ .--' V | `. ` " RESET, +YELLOW " |/`. `-. `._) " RESET, +YELLOW " / .-.\\ " RESET, +YELLOW " \\ ( `\\ " RESET, +YELLOW " `.\\ " RESET +}; diff --git a/logos/openindiana.h b/logos/openindiana.h new file mode 100644 index 0000000..6e39f15 --- /dev/null +++ b/logos/openindiana.h @@ -0,0 +1,28 @@ +#define BLUE "\e[1;34m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR BLUE +#define TITLECOLOR BLUE + +char *LOGO[] = { +WHITE " .sy/ " RESET, +WHITE " .yh+ " RESET, +WHITE " " RESET, +BLUE " " BLUE "-+syyyo+-" WHITE " /+. " RESET, +BLUE " " BLUE "+ddo/---/sdh/" WHITE " ym- " RESET, +BLUE " " BLUE "`hm+ `sms" WHITE " ym-```````.-. " RESET, +BLUE " " BLUE "sm+ sm/" WHITE " ym- +s " RESET, +BLUE " " BLUE "hm. /mo" WHITE " ym- /h " RESET, +BLUE " " BLUE "omo ym:" WHITE " ym- `os` " RESET, +BLUE " " BLUE "smo` .ym+" WHITE " ym- .os- " RESET, +WHITE " `` " BLUE ":ymy+///oyms-" WHITE " ym- .+s+. " RESET, +WHITE " ..` " BLUE "`:+oo+/-`" WHITE " -//oyo- " RESET, +WHITE " -:` .:oys/. " RESET, +WHITE "+- `./oyys/. " RESET, +WHITE "h+` `.-:+oyyyo/-` " RESET, +WHITE "`/ossssysso+/-.` " RESET, +WHITE " " RESET, +WHITE " " RESET, +WHITE " " RESET +}; diff --git a/logos/postmarketos.h b/logos/postmarketos.h new file mode 100644 index 0000000..162842f --- /dev/null +++ b/logos/postmarketos.h @@ -0,0 +1,28 @@ +// This was stolen from neofetch +#define GREEN "\e[1;32m" +#define RESET "\e[0m" + +#define COLOR GREEN +#define TITLECOLOR GREEN + +char *LOGO[] = { +GREEN " /\\ " RESET, +GREEN " / \\ " RESET, +GREEN " / \\ " RESET, +GREEN " / \\ " RESET, +GREEN " / \\ " RESET, +GREEN " / \\ " RESET, +GREEN " \\ \\ " RESET, +GREEN " /\\ \\____ \\ " RESET, +GREEN " / \\____ \\ \\ " RESET, +GREEN " / / \\ \\ " RESET, +GREEN " / / \\ ___\\ " RESET, +GREEN " / / \\ / ____ " RESET, +GREEN " / / \\/ / \\ " RESET, +GREEN " / / __________/ \\ " RESET, +GREEN " / \\ \\ \\ " RESET, +GREEN " / \\ \\ \\ " RESET, +GREEN " / / / \\ " RESET, +GREEN "/___________/ /____________________\\ " RESET, +GREEN " " RESET +}; diff --git a/logos/ubuntu.h b/logos/ubuntu.h deleted file mode 100644 index b2b8d78..0000000 --- a/logos/ubuntu.h +++ /dev/null @@ -1,22 +0,0 @@ -// This was stolen from neofetch -char *LOGO[] = { -" ./+o+- ", -" yyyyy- -yyyyyy+ ", -" ://+//////-yyyyyyo ", -" .++ .:/++++++/-.+sss/` ", -" .:++o: /++++++++/:--:/- ", -" o:+o+:++.`..```.-/oo+++++/ ", -" .:+o:+o/. `+sssoo+/ ", -" .++/+:+oo+o:` /sssooo. ", -"/+++//+:`oo+o /::--:. ", -"+/+o+++`o++o ++////. ", -" .++.o+++oo+:` /dddhhh. ", -" .+.o+oo:. `oddhhhh+ ", -" +.++o+o``-````.:ohdhhhhh+ ", -" `:o+++ `ohhhhhhhhyo++os: ", -" .o:`.syhhhhhhh/.oo++o` ", -" /osyyyyyyo++ooo+++/ ", -" ````` +oo+++o: ", -" `oo++. " -}; - diff --git a/logos/void.h b/logos/void.h index 9f95964..74e79f7 100644 --- a/logos/void.h +++ b/logos/void.h @@ -1,21 +1,31 @@ // This was stolen from neofetch +#define GREY "\e[1;30m" +#define GREEN "\e[1;32m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#define COLOR WHITE +#define TITLECOLOR GREEN + char *LOGO[] = { - " __.;=====;.__ ", - " _.=+==++=++=+=+===;. ", - " -=+++=+===+=+=+++++=_ ", - " . -=:`` `--==+=++==. ", - " _vi, ` --+=++++: ", - " .uvnvi. _._ -==+==+. ", - " .vvnvnI` .;==|==;. :|=||=|. ", - " +QmQQmpvvnv; _yYsyQQWUUQQQm #QmQ#:QQQWUV$QQm. ", - " -QQWQWpvvowZ?.wQQQE==% []" -// Credit: allisio - https://gist.github.com/allisio/1e850b93c81150124c2634716fbc4815 -static char *get_battery_percentage() { - int battery_capacity; - FILE *capacity_file, *status_file; - char battery_status[12] = "Unknown"; - - if ((capacity_file = fopen(BATTERY_DIRECTORY "/capacity", "r")) == NULL) { - status = ENOENT; - halt_and_catch_fire("Unable to get battery information"); - } - - fscanf(capacity_file, "%d", &battery_capacity); - fclose(capacity_file); - - if ((status_file = fopen(BATTERY_DIRECTORY "/status", "r")) != NULL) { - fscanf(status_file, "%s", battery_status); - fclose(status_file); - } - - // max length of resulting string is 19 - // one byte for padding incase there is a newline - // 100% [Discharging] - // 1234567890123456789 - char *battery = malloc(20); - - snprintf(battery, 20, "%d%% [%s]", battery_capacity, battery_status); - - return battery; -} - -static char *get_packages(const char* dirname, const char* pacname, int num_extraneous) { - int num_packages = 0; - DIR * dirp; - struct dirent *entry; - - dirp = opendir(dirname); - - if(dirp == NULL) { - status = -1; - halt_and_catch_fire("You may not have %s installed", dirname); - } - - while((entry = readdir(dirp)) != NULL) { - if(entry->d_type == DT_DIR) num_packages++; - } - num_packages -= (2 + num_extraneous); // accounting for . and .. - - status = closedir(dirp); - - char *packages = malloc(BUF_SIZE); - snprintf(packages, BUF_SIZE, "%d (%s)", num_packages, pacname); - - return packages; -} - -static char *get_packages_pacman() { - return get_packages("/var/lib/pacman/local", "pacman", 0); +static char *get_packages() { + char *packages = malloc(BUF_SIZE); + snprintf(packages, BUF_SIZE, "%s", PACKAGES); + return packages; } static char *get_shell() { @@ -361,42 +310,117 @@ static char *get_resolution() { return resolution; } -static char *get_terminal() { - unsigned char *prop; - char *terminal = malloc(BUF_SIZE); +static char *get_wm() { + char *wayland_display = getenv("WAYLAND_DISPLAY"); + if (wayland_display != NULL) { + char *wayland_wms[] = { + "[a]rcan", "[a]sc", "[c]layland", "[d]wc", "[d]wl", "[f]ireplace", + "[g]nome-shell", "[g]reenfield", "[g]refsen", "[k]win", + "[l]ipstick", "[m]aynard", "[m]azecompositor", "[m]otorcar", + "[o]rbital", "[o]rbment", "[p]erceptia", "[r]ustland", "[s]way", + "[u]lubis", "[v]elox", "[w]avy", "[w]ay-cooler", "[w]ayfire", + "[w]ayhouse", "[w]esteros", "[w]estford", "[w]eston" + }; - /* check if xserver is running or if we are running in a straight tty */ - if (display != NULL) { + char command[1024] = "ps aux | grep -m 1 -E -o '"; + size_t num_wms = sizeof(wayland_wms) / sizeof(wayland_wms[0]); + for (size_t i = 0; i < num_wms - 1; i++) { + strcat(command, wayland_wms[i]); + strcat(command, "|"); + } + strcat(command, wayland_wms[sizeof(wayland_wms) / sizeof(wayland_wms[0]) - 1]); + strcat(command, "'"); - unsigned long _, // not unused, but we don't need the results - window = RootWindow(display, XDefaultScreen(display)); - Atom a, - active = XInternAtom(display, "_NET_ACTIVE_WINDOW", True), - class = XInternAtom(display, "WM_CLASS", True); - -#define GetProp(property) \ - XGetWindowProperty(display, window, property, 0, 64, 0, 0, &a, (int *)&_, &_, &_, &prop); - - GetProp(active); - window = (prop[3] << 24) + (prop[2] << 16) + (prop[1] << 8) + prop[0]; - free(prop); - if(!window) goto terminal_fallback; - GetProp(class); - -#undef GetProp - - snprintf(terminal, BUF_SIZE, "%s", prop); - free(prop); - } else { -terminal_fallback: - strncpy(terminal, getenv("TERM"), BUF_SIZE - 1); /* fallback to old method */ - /* in tty, $TERM is simply returned as "linux"; in this case get actual tty name */ - if (strcmp(terminal, "linux") == 0) { - strncpy(terminal, ttyname(STDIN_FILENO), BUF_SIZE - 1); - } + FILE *fp = popen(command, "r"); + if (fp == NULL) { + perror("popen"); + return strdup("不明"); } - return terminal; + char wm_name[256]; + if (fgets(wm_name, sizeof(wm_name), fp) != NULL) { + char *newline = strchr(wm_name, '\n'); + if (newline) { + *newline = '\0'; + } + } else { + strcpy(wm_name, "不明"); + } + + pclose(fp); + return strdup(wm_name); + } + + Display *dpy = XOpenDisplay(NULL); + if (dpy == NULL) { + fprintf(stderr, "Unable to connect to display\n"); + return strdup("不明"); + } + + int screen = DefaultScreen(dpy); + Window root = RootWindow(dpy, screen); + + Atom atom = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False); + Atom type; + int format; + unsigned long nitems, bytes_after; + unsigned char *prop; + int status = XGetWindowProperty(dpy, root, atom, 0, (~0L), False, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop); + if (status != Success || !prop) { + fprintf(stderr, "Unable to get window manager property\n"); + XCloseDisplay(dpy); + return strdup("不明"); + } + + Window wm_window = *(Window *)prop; + XFree(prop); + + status = XGetWindowProperty(dpy, wm_window, XInternAtom(dpy, "_NET_WM_NAME", False), 0, (~0L), False, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop); + if (status != Success || !prop) { + fprintf(stderr, "Unable to get window manager name property\n"); + XCloseDisplay(dpy); + return strdup("不明"); + } + + char *wm_name = strdup((char *)prop); + XFree(prop); + XCloseDisplay(dpy); + + return wm_name; +} + +static char *get_terminal() { + unsigned char *prop; + char *terminal = malloc(BUF_SIZE); + + if (display != NULL) { + unsigned long _, // not unused, but we don't need the results + window = RootWindow(display, XDefaultScreen(display)); + Atom a, + active = XInternAtom(display, "_NET_ACTIVE_WINDOW", True), + class = XInternAtom(display, "WM_CLASS", True); + +#define GetProp(property) \ + XGetWindowProperty(display, window, property, 0, 64, 0, 0, &a, (int *)&_, &_, &_, &prop); + + GetProp(active); + window = (prop[3] << 24) + (prop[2] << 16) + (prop[1] << 8) + prop[0]; + free(prop); + if(!window) goto terminal_fallback; + GetProp(class); +#undef GetProp + + snprintf(terminal, BUF_SIZE, "%s", prop); + free(prop); + } else { +terminal_fallback: + strncpy(terminal, getenv("TERM"), BUF_SIZE - 1); /* fallback to old method */ + if (strcmp(terminal, "linux") == 0) { + strncpy(terminal, ttyname(STDIN_FILENO), BUF_SIZE - 1); + } + } + + return terminal; } static char *get_cpu() { @@ -717,13 +741,13 @@ int main(int argc, char *argv[]) { for (int i = 0; i < COUNT(LOGO); i++) { // If we've run out of information to show... if(i >= COUNT(config) - offset) // just print the next line of the logo - printf(LOGOCOLOR"%s\n", LOGO[i]); + printf("%s\n", LOGO[i]); else { // Otherwise, we've got a bit of work to do. char *label = config[i+offset].label, *value = get_value(config[i+offset], read_cache, cache_data); if (strcmp(value, "") != 0) { // check if value is an empty string - printf(LOGOCOLOR"%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value); // just print if not empty + printf("%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value); // just print if not empty } else { if (strcmp(label, "") != 0) { // check if label is empty, otherwise it's a spacer ++offset; // print next line of information @@ -731,7 +755,7 @@ int main(int argc, char *argv[]) { label = config[i+offset].label; // read new label and value value = get_value(config[i+offset], read_cache, cache_data); } - printf(LOGOCOLOR"%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value); + printf("%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value); } free(value); diff --git a/paleofetch.h b/paleofetch.h index 0e4578f..2b0444c 100644 --- a/paleofetch.h +++ b/paleofetch.h @@ -7,10 +7,10 @@ static char *get_title(), *get_kernel(), *get_host(), *get_uptime(), - *get_battery_percentage(), - *get_packages_pacman(), + *get_packages(), *get_shell(), *get_resolution(), + *get_wm(), *get_terminal(), *get_cpu(), *get_gpu1(),