#include "fastfetch.h" #include #include #include #define FF_LOGO_INIT static FFlogo logo; static bool init = false; if(init) return &logo; init = true; logo.isFromUser = false; #define FF_LOGO_NAMES(...) static const char* names[] = (const char*[]) { __VA_ARGS__, NULL }; logo.names = names; #define FF_LOGO_LINES(x) logo.lines = x; #define FF_LOGO_COLORS(...) static const char* colors[] = (const char*[]) { __VA_ARGS__, NULL }; logo.builtinColors = colors; #define FF_LOGO_RETURN return &logo; static const FFlogo* getLogoUnknown() { FF_LOGO_INIT FF_LOGO_NAMES("unkown", "question mark") FF_LOGO_LINES( " ________ \n" " _jgN########Ngg_ \n" " _N##N@@\"\" \"\"9NN##Np_ \n" "d###P N####p\n" "\"^^\" T####\n" " d###P\n" " _g###@F \n" " _gN##@P \n" " gN###F\" \n" " d###F \n" " 0###F \n" " 0###F \n" " 0###F \n" " \"NN@' \n" " \n" " ___ \n" " q###r \n" " \"\" " ) FF_LOGO_COLORS("") FF_LOGO_RETURN } static const FFlogo* getLogoNone() { FF_LOGO_INIT FF_LOGO_NAMES("none", "empty", "") FF_LOGO_LINES("") FF_LOGO_COLORS("") FF_LOGO_RETURN } static const FFlogo* getLogoAndroid() { FF_LOGO_INIT FF_LOGO_NAMES("android") FF_LOGO_LINES( "$1 -o o- \n" "$1 +hydNNNNdyh+ \n" "$1 +mMMMMMMMMMMMMm+ \n" "$1 `dMM$2m:$1NMMMMMMN$2:m$1MMd` \n" "$1 hMMMMMMMMMMMMMMMMMMh \n" "$1 .. yyyyyyyyyyyyyyyyyyyy .. \n" "$1.mMMm`MMMMMMMMMMMMMMMMMMMM`mMMm.\n" "$1:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:\n" "$1:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:\n" "$1:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:\n" "$1:MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM:\n" "$1-MMMM-MMMMMMMMMMMMMMMMMMMM-MMMM-\n" "$1 +yy+ MMMMMMMMMMMMMMMMMMMM +yy+ \n" "$1 mMMMMMMMMMMMMMMMMMMm \n" "$1 `/++MMMMh++hMMMM++/` \n" "$1 MMMMo oMMMM \n" "$1 MMMMo oMMMM \n" "$1 oNMm- -mMNs " ) FF_LOGO_COLORS( "32", //green "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoAndroidSmall() { FF_LOGO_INIT FF_LOGO_NAMES("android-small", "android_small") FF_LOGO_LINES( "$1 ;, ,; \n" "$1 ';,.-----.,;' \n" "$1 ,' ', \n" "$1 / O O \\ \n" "$1| |\n" "$1'-----------------'" ) FF_LOGO_COLORS( "32" //green ) FF_LOGO_RETURN } static const FFlogo* getLogoArch() { FF_LOGO_INIT FF_LOGO_NAMES("arch", "archlinux", "arch-linux") FF_LOGO_LINES( "$1 -` \n" "$1 .o+` \n" "$1 `ooo/ \n" "$1 `+oooo: \n" "$1 `+oooooo: \n" "$1 -+oooooo+: \n" "$1 `/:-:++oooo+: \n" "$1 `/++++/+++++++: \n" "$1 `/++++++++++++++: \n" "$1 `/+++ooooooooooooo/` \n" "$1 ./ooosssso++osssssso+` \n" "$1 .oossssso-````/ossssss+` \n" "$1 -osssssso. :ssssssso. \n" "$1 :osssssss/ osssso+++. \n" "$1 /ossssssss/ +ssssooo/- \n" "$1 `/ossssso+/:- -:/+osssso+- \n" "$1 `+sso+:-` `.-/+oso: \n" "$1`++:. `-/+/\n" "$1.` `/"; ) FF_LOGO_COLORS( "36" //cyan ) FF_LOGO_RETURN } static const FFlogo* getLogoArchSmall() { FF_LOGO_INIT FF_LOGO_NAMES("arch_small", "archlinux_small", "arch-linux-small") FF_LOGO_LINES( "$1 /\\ \n" "$1 / \\ \n" "$1 / \\ \n" "$1 / \\ \n" "$1 / ,, \\ \n" "$1 / | | \\ \n" "$1/_-'' ''-_\\" ) FF_LOGO_COLORS( "36" //cyan ) FF_LOGO_RETURN } static const FFlogo* getLogoArtix() { FF_LOGO_INIT FF_LOGO_NAMES("artix", "artixlinux", "artix-linux") FF_LOGO_LINES( "$1 ' \n" "$1 'o' \n" "$1 'ooo' \n" "$1 'ooxoo' \n" "$1 'ooxxxoo' \n" "$1 'oookkxxoo' \n" "$1 'oiioxkkxxoo' \n" "$1 ':;:iiiioxxxoo' \n" "$1 `'.;::ioxxoo'' \n" "$1 '-. `':;jiooo' \n" "$1 'oooio-.. `'i:io' \n" "$1 'ooooxxxxoio:,. `'-;' \n" "$1 'ooooxxxxxkkxoooIi:-. `' \n" "$1 'ooooxxxxxkkkkxoiiiiiji' \n" "$1 'ooooxxxxxkxxoiiii:'` .i' \n" "$1 'ooooxxxxxoi:::'` .;ioxo' \n" "$1 'ooooxooi::'` .:iiixkxxo' \n" "$1 'ooooi:'` `'';ioxxo' \n" "$1'i:'` '':io' \n" "$1'` `'"; ) FF_LOGO_COLORS( "36" //cyan ) FF_LOGO_RETURN } static const FFlogo* getLogoArtixSmall() { FF_LOGO_INIT FF_LOGO_NAMES("artix_small", "artixlinux_small", "artix-linux-small") FF_LOGO_LINES( "$1 /\\ \n" "$1 / \\ \n" "$1 /`'.,\\ \n" "$1 / ', \n" "$1 / ,`\\ \n" "$1 / ,.'`. \\ \n" "$1/.,'` `'.\\" ) FF_LOGO_COLORS( "36" //cyan ) FF_LOGO_RETURN } static const FFlogo* getLogoArcoLinux() { FF_LOGO_INIT FF_LOGO_NAMES("Arco", "Arcolinux", "Arco-linux") FF_LOGO_LINES( "$1 /- \n" "$1 ooo: \n" "$1 yoooo/ \n" "$1 yooooooo \n" "$1 yooooooooo \n" "$1 yooooooooooo \n" "$1 .yooooooooooooo \n" "$1 .oooooooooooooooo \n" "$1 .oooooooarcoooooooo \n" "$1 .ooooooooo-oooooooooo \n" "$1 .ooooooooo- oooooooooo \n" "$1 :ooooooooo. :ooooooooo \n" "$1 :ooooooooo. :ooooooooo \n" "$1 :oooarcooo .oooarcooo \n" "$1 :ooooooooy .ooooooooo \n" "$1 :ooooooooo $2 /ooooooooooooooooooo \n" "$1 :ooooooooo $2 .-ooooooooooooooooo. \n" "$1 ooooooooo- $2 -ooooooooooooo. \n" "$1 ooooooooo- $2 .-oooooooooo.\n" "$1 ooooooooo. $2 -ooooooooo"; ) FF_LOGO_COLORS( "34", //blue "32" //green ) FF_LOGO_RETURN } static const FFlogo* getLogoCachyOS() { FF_LOGO_INIT FF_LOGO_NAMES("cachyos", "cachyos-linux") FF_LOGO_LINES( "$1 $3.$1-------------------------: \n" "$1 .$2+=$1========================. \n" "$1 :$2++$1===$2++===$1===============- :$2++$1- \n" "$1 :$2*++$1====$2+++++==$1===========- .==: \n" "$1 -$2*+++$1=====$2+***++=$1=========: \n" "$1 =$2*++++=$1=======------------: \n" "$1 =$2*+++++=$1====- $3...$1 \n" "$1 .$2+*+++++$1=-===: .$2=+++=$1: \n" "$1 :$2++++$1=====-==: -***$2**$1+ \n" "$1 :$2++=$1=======-=. .=+**+$3.$1 \n" "$1.$2+$1==========-. $3.$1 \n" "$1 :$2+++++++$1====- $3.$1--==-$3.$1 \n" "$1 :$2++$1==========. $3:$2+++++++$1$3: \n" "$1 .-===========. =*****+*+ \n" "$1 .-===========: .+*****+: \n" "$1 -=======$2++++$1:::::::::::::::::::::::::-: $3.$1---: \n" "$1 :======$2++++$1====$2+++******************=. \n" "$1 :=====$2+++$1==========$2++++++++++++++*- \n" "$1 .====$2++$1==============$2++++++++++*- \n" "$1 .===$2+$1==================$2+++++++: \n" "$1 .-=======================$2+++: \n" "$1 $3.......................... " ) FF_LOGO_COLORS( "36", //cyan "32", //green "30" //black ) FF_LOGO_RETURN } static const FFlogo* getLogoCelOS() { FF_LOGO_INIT FF_LOGO_NAMES("celos", "celos-linux") FF_LOGO_LINES( "$1 `-:/++++/:-` \n" "$1 -/syyyyyyyyyyyyy+- \n" "$1 :ssssyyyyyyyyyyyyyyyy/ \n" "$1 .osy$2mmmmmmmmmmmmmmmNNNNNmmhy+ \n" "$1 .sssshhhhhhhddddddddddddddds- \n" "$1 `osssssssyyyyyyyyyyyyyyyyyyhy` \n" "$1 :ssssssyyyyyyyyyyyyyyyyyyyyhh/ \n" "$2sMMMMMMMMMMMMMMMMMMMMMMMh$1yyyyyyhho \n" "$1 :sssssssyyyyyyyyyyyyyyyyyyyhh/ \n" "$1 `ssssssssyyyyyyyyyyyyyyyyyyhy. \n" "$1 -sssssyddddddddddddddddddddy \n" "$1 -ssss$2hmmmmmmmmmmmmmmmmmmmyssss-\n" "$1 `/ssssyyyyyyyyyyyyyyyy+` \n" "$1 `:osyyyyyyyyyyyyys/` \n" "$1 `.:/+ooooo+:-` " ) FF_LOGO_COLORS( "35", //magenta "30" //black ) FF_LOGO_RETURN } static const FFlogo* getLogoCentOS() { FF_LOGO_INIT FF_LOGO_NAMES("centos", "centos-linux") FF_LOGO_LINES( "$1 .. \n" "$1 .PLTJ. \n" "$1 <><><><> \n" "$2 KKSSV' 4KKK $1LJ$4 KKKL.'VSSKK \n" "$2 KKV' 4KKKKK $1LJ$4 KKKKAL 'VKK \n" "$2 V' ' 'VKKKK $1LJ$4 KKKKV' ' 'V \n" "$2 .4MA.' 'VKK $1LJ$4 KKV' '.4Mb. \n" "$4 . $2KKKKKA.' 'V $1LJ$4 V' '.4KKKKK $3. \n" "$4 .4D $2KKKKKKKA.'' $1LJ$4 ''.4KKKKKKK $3FA. \n" "$4\n" "$4 'VD $3KKKKKKKK'.. $2LJ $1..'KKKKKKKK $3FV \n" "$4 ' $3VKKKKK'. .4 $2LJ $1K. .'KKKKKV $3' \n" "$3 'VK'. .4KK $2LJ $1KKA. .'KV' \n" "$3 A. . .4KKKK $2LJ $1KKKKA. . .4 \n" "$3 KKA. 'KKKKK $2LJ $1KKKKK' .4KK \n" "$3 KKSSA. VKKK $2LJ $1KKKV .4SSKK \n" "$2 <><><><> \n" "$1 'MKKM' \n" "$1 '' " ) FF_LOGO_COLORS( "33", //yellow "32", //green "34", //blue "35", //magenta "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoCentOSSmall() { FF_LOGO_INIT FF_LOGO_NAMES("centos_small", "centos-linux-small") FF_LOGO_LINES( "$2 ____$1^$4____ \n" "$2 |\\ $1|$4 /| \n" "$2 | \\ $1|$4 / | \n" "$4<---- $3---->\n" "$3 | / $2|$1 \\ | \n" "$3 |/__$2|$1__\\| \n" "$2 v " ) FF_LOGO_COLORS( "33", //yellow "32", //green "34", //blue "35" //magenta ) FF_LOGO_RETURN } static const FFlogo* getLogoDebian() { FF_LOGO_INIT FF_LOGO_NAMES("debian", "debian-linux") FF_LOGO_LINES( "$2 _,met$$$$$$$$$$gg. \n" "$2 ,g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P. \n" "$2 ,g$$$$P\" \"\"\"Y$$$$.\". \n" "$2 ,$$$$P' `$$$$$$. \n" "$2',$$$$P ,ggs. `$$$$b:\n" "$2`d$$$$' ,$P\"' $1.$2 $$$$$$ \n" "$2 $$$$P d$' $1,$2 $$$$$$P\n" "$2 $$$$: $$. $1-$2 ,d$$$$' \n" "$2 $$$$; Y$b._ _,d$P' \n" "$2 Y$$$$. $1`.$2`\"Y$$$$$$$$P\"' \n " "$2 `$$$$b $1\"-.__ \n" "$2 `Y$$$$ \n" "$2 `Y$$$$. \n" "$2 `$$$$b. \n" "$2 `Y$$$$b. \n" "$2 `\"Y$$b._ \n" "$2 `\"\"\" " ) FF_LOGO_COLORS( "31", //red "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoDebianSmall() { FF_LOGO_INIT FF_LOGO_NAMES("debian_small", "debian-linux-small") FF_LOGO_LINES( "$1 _____ \n" "$1 / __ \\ \n" "$1| / |\n" "$1| \\___- \n" "$1-_ \n" "$1 --_ " ) FF_LOGO_COLORS( "31" //red ) FF_LOGO_RETURN } static const FFlogo* getLogoEndeavour() { FF_LOGO_INIT FF_LOGO_NAMES("endeavour", "endeavour-linux", "endeavouros", "endeavouros-linux") FF_LOGO_LINES( "$2 ./$1o$3. \n" "$2 ./$1sssso$3- \n" "$2 `:$1osssssss+$3- \n" "$2 `:+$1sssssssssso$3/. \n" "$2 `-/o$1ssssssssssssso$3/. \n" "$2 `-/+$1sssssssssssssssso$3+:` \n" "$2 `-:/+$1sssssssssssssssssso$3+/. \n" "$2 `.://o$1sssssssssssssssssssso$3++- \n" "$2 .://+$1ssssssssssssssssssssssso$3++: \n" "$2 .:///o$1ssssssssssssssssssssssssso$3++: \n" "$2 `:////$1ssssssssssssssssssssssssssso$3+++.\n" "$2`-////+$1ssssssssssssssssssssssssssso$3++++-\n" "$2 `..-+$1oosssssssssssssssssssssssso$3+++++/`\n" "$3./++++++++++++++++++++++++++++++/:. \n" "$3`:::::::::::::::::::::::::------`` " ) FF_LOGO_COLORS( "35", //magenta "31", //red "34" //blue ) FF_LOGO_RETURN } static const FFlogo* getLogoFedora() { FF_LOGO_INIT FF_LOGO_NAMES("fedora", "fedora-linux") FF_LOGO_LINES( "$1 .',;::::;,'. \n" "$1 .';:cccccccccccc:;,. \n" "$1 .;cccccccccccccccccccccc;. \n" "$1 .:cccccccccccccccccccccccccc:. \n" "$1 .;ccccccccccccc;$2.:dddl:.$1;ccccccc;. \n" "$1 .:ccccccccccccc;$2OWMKOOXMWd$1;ccccccc:. \n" "$1.:ccccccccccccc;$2KMMc$1;cc;$2xMMc$1;ccccccc:.\n" "$1,cccccccccccccc;$2MMM.$1;cc;$2;WW:$1;cccccccc,\n" "$1:cccccccccccccc;$2MMM.$1;cccccccccccccccc:\n" "$1:ccccccc;$2oxOOOo$1;$2MMM000k.$1;cccccccccccc:\n" "$1cccccc;$20MMKxdd:$1;$2MMMkddc.$1;cccccccccccc;\n" "$1ccccc;$2XMO'$1;cccc;$2MMM.$1;cccccccccccccccc'\n" "$1ccccc;$2MMo$1;ccccc;$2MMW.$1;ccccccccccccccc; \n" "$1ccccc;$20MNc.$1ccc$2.xMMd$1;ccccccccccccccc; \n" "$1cccccc;$2dNMWXXXWM0:$1;cccccccccccccc:, \n" "$1cccccccc;$2.:odl:.$1;cccccccccccccc:,. \n" "$1ccccccccccccccccccccccccccccc:'. \n" "$1:ccccccccccccccccccccccc:;,.. \n" "$1 ':cccccccccccccccc::;,. " ) FF_LOGO_COLORS( "34", //blue "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoFedoraSmall() { FF_LOGO_INIT FF_LOGO_NAMES("fedora_small", "fedora-linux-small") FF_LOGO_LINES( "$1 ,'''''. \n" "$1 | ,. |\n" "$1 | | '_'\n" "$1 ,....| |.. \n" "$1.' ,_;| ..' \n" "$1| | | | \n" "$1| ',_,' | \n" "$1 '. ,' \n" "$1 ''''' " ) FF_LOGO_COLORS( "34" //blue ) FF_LOGO_RETURN } static const FFlogo* getLogoFedoraOld() { FF_LOGO_INIT FF_LOGO_NAMES("fedora_old", "fedora-old", "fedora-linux-old", "fedora-linux_old") FF_LOGO_LINES( "$1 /:-------------:\\ \n" "$1 :-------------------:: \n" "$1 :-----------$2/shhOHbmp$1---:\\ \n" "$1 /-----------$2omMMMNNNMMD$1 ---: \n" "$1 :-----------$2sMMMMNMNMP$1. ---: \n" "$1 :-----------$2:MMMdP$1------- ---\\\n" "$1,------------$2:MMMd$1-------- ---:\n" "$1:------------$2:MMMd$1------- .---:\n" "$1:---- $2oNMMMMMMMMMNho$1 .----:\n" "$1:-- .$2+shhhMMMmhhy++$1 .------/\n" "$1:- -------$2:MMMd$1--------------: \n" "$1:- --------$2/MMMd$1-------------; \n" "$1:- ------$2/hMMMy$1------------: \n" "$1:--$2 :dMNdhhdNMMNo$1------------; \n" "$1:---$2:sdNMMMMNds:$1------------: \n" "$1:------$2:://:$1-------------:: \n" "$1:---------------------:// " ) FF_LOGO_COLORS( "34", //blue "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoGaruda() { FF_LOGO_INIT FF_LOGO_NAMES("garuda", "garuda-linux") FF_LOGO_LINES( "$1 .%;888:8898898: \n" "$1 x;XxXB%89b8:b8%b88: \n" "$1 .8Xxd 8X:. \n" "$1 .8Xx; 8x:. \n" "$1 .tt8x .d x88; \n" "$1 .@8x8; .db: xx@; \n" "$1 ,tSXX° .bbbbbbbbbbbbbbbbbbbB8x@;\n" "$1 .SXxx bBBBBBBBBBBBBBBBBBBBbSBX8;\n" "$1 ,888S pd!\n" "$18X88/ q \n" "$18X88/ \n" "$1GBB. \n" "$1 x%88 d888@8@X@X@X88X@@XX@@X@8@X. \n" "$1 dxXd dB8b8b8B8B08bB88b998888b88x. \n" "$1 dxx8o .@@;. \n" "$1 dx88 .t@x. \n" "$1 d:SS@8ba89aa67a853Sxxad. \n" "$1 .d988999889889899dd. " ) FF_LOGO_COLORS( "31" //red ) FF_LOGO_RETURN } static const FFlogo* getLogoGentoo() { FF_LOGO_INIT FF_LOGO_NAMES("gentoo", "gentoo-linux") FF_LOGO_LINES( "$1 -/oyddmdhs+:. \n" "$1 -o$2dNMMMMMMMMNNmhy+$1-` \n" "$1 -y$2NMMMMMMMMMMMNNNmmdhy$1+- \n" "$1 `o$2mMMMMMMMMMMMMNmdmmmmddhhy$1/` \n" "$1 om$2MMMMMMMMMMMN$1hhyyyo$2hmdddhhhd$1o` \n" "$1.y$2dMMMMMMMMMMd$1hs++so/s$2mdddhhhhdm$1+` \n" "$1 oy$2hdmNMMMMMMMN$1dyooy$2dmddddhhhhyhN$1d.\n" "$1 :o$2yhhdNNMMMMMMMNNNmmdddhhhhhyym$1Mh\n" "$1 .:$2+sydNMMMMMNNNmmmdddhhhhhhmM$1my\n" "$1 /m$2MMMMMMNNNmmmdddhhhhhmMNh$1s:\n" "$1 `o$2NMMMMMMMNNNmmmddddhhdmMNhs$1+` \n" "$1 `s$2NMMMMMMMMNNNmmmdddddmNMmhs$1/. \n" "$1 /N$2MMMMMMMMNNNNmmmdddmNMNdso$1:` \n" "$1+M$2MMMMMMNNNNNmmmmdmNMNdso$1/- \n" "$1yM$2MNNNNNNNmmmmmNNMmhs+/$1-` \n" "$1/h$2MMNNNNNNNNMNdhs++/$1-` \n" "$1`/$2ohdmmddhys+++/:$1.` \n" "$1 `-//////:--. " ) FF_LOGO_COLORS( "35", //magenta "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoGentooSmall() { FF_LOGO_INIT FF_LOGO_NAMES("gentoo_small", "gentoo-linux-small") FF_LOGO_LINES( "$1 _-----_ \n" "$1( \\ \n" "$1\\ 0 \\ \n" "$2 \\ ) \n" "$2 / _/ \n" "$2( _- \n" "$2\\____- " ) FF_LOGO_COLORS( "35", //magenta "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoManjaro() { FF_LOGO_INIT FF_LOGO_NAMES("manjaro", "manjaro-linux") FF_LOGO_LINES( "$1██████████████████ ████████\n" "$1██████████████████ ████████\n" "$1██████████████████ ████████\n" "$1██████████████████ ████████\n" "$1████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████\n" "$1████████ ████████ ████████" ) FF_LOGO_COLORS( "32" //green ) FF_LOGO_RETURN } static const FFlogo* getLogoManjaroSmall() { FF_LOGO_INIT FF_LOGO_NAMES("manjaro_small", "manjaro-linux-small") FF_LOGO_LINES( "$1||||||||| ||||\n" "$1||||||||| ||||\n" "$1|||| ||||\n" "$1|||| |||| ||||\n" "$1|||| |||| ||||\n" "$1|||| |||| ||||\n" "$1|||| |||| ||||" ) FF_LOGO_COLORS( "32" //green ) FF_LOGO_RETURN } static const FFlogo* getLogoMint() { FF_LOGO_INIT FF_LOGO_NAMES("mint", "linuxmint", "mint-linux", "linux-mint") FF_LOGO_LINES( "$2 ...-:::::-... \n" "$2 .-MMMMMMMMMMMMMMM-. \n" "$2 .-MMMM$1`..-:::::::-..`$2MMMM-. \n" "$2 .:MMMM$1.:MMMMMMMMMMMMMMM:.$2MMMM:. \n" "$2 -MMM$1-M---MMMMMMMMMMMMMMMMMMM.$2MMM- \n" "$2 `:MMM$1:MM` :MMMM:....::-...-MMMM:$2MMM:` \n" "$2 :MMM$1:MMM` :MM:` `` `` `:MMM:$2MMM: \n" "$2.MMM$1.MMMM` :MM. -MM. .MM- `MMMM.$2MMM.\n" "$2:MMM$1:MMMM` :MM. -MM- .MM: `MMMM-$2MMM:\n" "$2:MMM$1:MMMM` :MM. -MM- .MM: `MMMM:$2MMM:\n" "$2:MMM$1:MMMM` :MM. -MM- .MM: `MMMM-$2MMM:\n" "$2.MMM$1.MMMM` :MM:--:MM:--:MM: `MMMM.$2MMM.\n" "$2 :MMM$1:MMM- `-MMMMMMMMMMMM-` -MMM-$2MMM: \n" "$2 :MMM$1:MMM:` `:MMM:$2MMM: \n" "$2 .MMM$1.MMMM:--------------:MMMM.$2MMM. \n" "$2 '-MMMM$1.-MMMMMMMMMMMMMMM-.$2MMMM-' \n" "$2 '.-MMMM$1``--:::::--``$2MMMM-.' \n" "$2 '-MMMMMMMMMMMMM-' \n" "$2 ``-:::::-`` " ) FF_LOGO_COLORS( "32", //green "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoMintSmall() { FF_LOGO_INIT FF_LOGO_NAMES("mint_small", "linuxmint_small", "mint-linux-small") FF_LOGO_LINES( "$1 __________ \n" "$1|_ \\\n" "$1 | $2| _____ $1|\n" "$1 | $2| | | | $1|\n" "$1 | $2| | | | $1|\n" "$1 | $2\\__$2___/ $1|\n" "$1 \\_________/" ) FF_LOGO_COLORS( "32", //green "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoMintOld() { FF_LOGO_INIT FF_LOGO_NAMES("mint_old", "mint-old", "mint-linux_old", "mint-linux-old", "linux-mint_old", "linux-mint-old") FF_LOGO_LINES( "$1MMMMMMMMMMMMMMMMMMMMMMMMMmds+. \n" "$1MMm----::-://////////////oymNMd+` \n" "$1MMd $2/++ $1-sNMd: \n" "$1MMNso/` $2dMM `.::-. .-::.` $1.hMN:\n" "$1ddddMMh $2dMM :hNMNMNhNMNMNh: $1`NMm\n" "$1 NMm $2dMM .NMN/-+MMM+-/NMN` $1dMM\n" "$1 NMm $2dMM -MMm `MMM dMM. $1dMM\n" "$1 NMm $2dMM -MMm `MMM dMM. $1dMM\n" "$1 NMm $2dMM .mmd `mmm yMM. $1dMM\n" "$1 NMm $2dMM` ..` ... ydm. $1dMM\n" "$1 hMM- $2+MMd/-------...-:sdds $1dMM\n" "$1 -NMm- $2:hNMNNNmdddddddddy/` $1dMM\n" "$1 -dMNs-$2``-::::-------.`` $1dMM \n" "$1 `/dMNmy+/:-------------:/yMMM \n" "$1 ./ydNMMMMMMMMMMMMMMMMMMMMM \n" "$1 .MMMMMMMMMMMMMMMMMMM " ) FF_LOGO_COLORS( "32", //green "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoPop() { FF_LOGO_INIT FF_LOGO_NAMES("pop", "popos", "pop_os", "pop-linux") FF_LOGO_LINES( "$1 ///////////// \n" "$1 ///////////////////// \n" "$1 ///////$2*767$1//////////////// \n" "$1 //////$27676767676*$1////////////// \n" "$1 /////$276767$1//$27676767$1////////////// \n" "$1 /////$2767676$1///$2*76767$1/////////////// \n" "$1 ///////$2767676$1///$276767$1.///$27676*$1/////// \n" "$1/////////$2767676$1//$276767$1///$2767676$1////////\n" "$1//////////$276767676767$1////$276767$1/////////\n" "$1///////////$276767676$1//////$27676$1//////////\n" "$1////////////,$27676$1,///////$2767$1///////////\n" "$1/////////////*$27676$1///////$276$1////////////\n" "$1///////////////$27676$1////////////////////\n" "$1 ///////////////$27676$1///$2767$1//////////// \n" "$1 //////////////////////$2'$1//////////// \n" "$1 //////$2.7676767676767676767,$1////// \n" "$1 /////$2767676767676767676767$1///// \n" "$1 /////////////////////////// \n" "$1 ///////////////////// \n" "$1 ///////////// " ) FF_LOGO_COLORS( "36", //cyan "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoPopSmall() { FF_LOGO_INIT FF_LOGO_NAMES("pop_small", "popos_small", "pop_os_small", "pop-linux-small") FF_LOGO_LINES( "$1______ \n" "$1\\ _ \\ __\n" "$1 \\ \\ \\ \\ / /\n" "$1 \\ \\_\\ \\ / / \n" "$1 \\ ___\\ /_/ \n" "$1 \\ \\ _ \n" "$1 __\\_\\__(_)_ \n" "$1 (___________)` " ) FF_LOGO_COLORS( "36" //cyan ) FF_LOGO_RETURN } static const FFlogo* getLogoUbuntu() { FF_LOGO_INIT FF_LOGO_NAMES("ubuntu", "ubuntu-linux") FF_LOGO_LINES( "$1 .-/+oossssoo+/-. \n" "$1 `:+ssssssssssssssssss+:` \n" "$1 -+ssssssssssssssssssyyssss+- \n" "$1 .ossssssssssssssssssd$2MMMNy$1sssso. \n" "$1 /sssssssssss$2hdmmNNmmyNMMMMh$1ssssss/ \n" "$1 +sssssssss$2hmydMMMMMMMNddddy$1ssssssss+ \n" "$1 /ssssssss$2hNMMMyhhyyyyhmNMMMNh$1ssssssss/ \n" "$1.ssssssss$2dMMMNh$1ssssssssss$2hNMMMd$1ssssssss.\n" "$1+ssss$2hhhyNMMNy$1ssssssssssss$2yNMMMy$1sssssss+\n" "$1oss$2yNMMMNyMMh$1ssssssssssssss$2hmmmh$1ssssssso\n" "$1oss$2yNMMMNyMMh$1ssssssssssssss$2hmmmh$1ssssssso\n" "$1+ssss$2hhhyNMMNy$1ssssssssssss$2yNMMMy$1sssssss+\n" "$1.ssssssss$2dMMMNh$1ssssssssss$2hNMMMd$1ssssssss.\n" "$1 /ssssssss$2hNMMMyhhyyyyhdNMMMNh$1ssssssss/ \n" "$1 +sssssssss$2dmydMMMMMMMMddddy$1ssssssss+ \n" "$1 /sssssssssss$2hdmNNNNmyNMMMMh$1ssssss/ \n" "$1 .ossssssssssssssssss$2dMMMNy$1sssso. \n" "$1 -+sssssssssssssssss$2yyy$1ssss+- \n" "$1 `:+ssssssssssssssssss+:` \n" "$1 .-/+oossssoo+/-. " ) FF_LOGO_COLORS( "31", //red "37" //white ) FF_LOGO_RETURN } static const FFlogo* getLogoUbuntuSmall() { FF_LOGO_INIT FF_LOGO_NAMES("ubuntu_small", "ubuntu-linux-small") FF_LOGO_LINES( "$1 _ \n" "$1 ---(_)\n" "$1 _/ --- \\\n" "$1(_) | | \n" "$1 \\ --- _/\n" "$1 ---(_)" ) FF_LOGO_COLORS( "31" //red ) FF_LOGO_RETURN } static const FFlogo* getLogoVoid() { FF_LOGO_INIT FF_LOGO_NAMES("void", "void-linux") FF_LOGO_LINES( "$1 __.;=====;.__ \n" "$1 _.=+==++=++=+=+===;. \n" "$1 -=+++=+===+=+=+++++=_ \n" "$1 . -=:`` `--==+=++==. \n" "$1 _vi, ` --+=++++: \n" "$1 .uvnvi. _._ -==+==+. \n" "$1 .vvnvnI` .;==|==;. :|=||=|. \n" "$2+QmQQm$1pvvnv;$2 _yYsyQQWUUQQQm #QmQ#$1:$2QQQWUV$QQm.\n" "$2 -QQWQW$1pvvo$2wZ?.wQQQE$1==<$2QWWQ/QWQW.QQWW$1(:$2 jQWQE\n" "$2 -$QQQQmmU' jQQQ$1@+=<$2QWQQ)mQQQ.mQQQC$1+;$2jWQQ@'\n" "$2 -$WQ8Y$1nI:$2 QWQQwgQQWV$1`$2mWQQ.jQWQQgyyWW@! \n" "$1 -1vvnvv. `~+++` ++|+++ \n" "$1 +vnvnnv, `-|=== \n" "$1 +vnvnvns. . :=- \n" "$1 -Invnvvnsi..___..=sv=. ` \n" "$1 +Invnvnvnnnnnnnnvvnn;. \n" "$1 ~|Invnvnvvnvvvnnv}+` \n" "$1 -~|{*l}*|~ " ) FF_LOGO_COLORS( "32", //green "30" //black ) FF_LOGO_RETURN } static const FFlogo* getLogoVoidSmall() { FF_LOGO_INIT FF_LOGO_NAMES("void_small", "void-linux-small") FF_LOGO_LINES( "$1 _______ \n" "$1 _ \\______ - \n" "$1| \\ ___ \\ |\n" "$1| | / \\ | |\n" "$1| | \\___/ | |\n" "$1| \\______ \\_|\n" "$1 -_______\\ " ) FF_LOGO_COLORS( "32" //green ) FF_LOGO_RETURN } typedef const FFlogo*(*GetLogoMethod)(); static GetLogoMethod* getLogoMethods() { static GetLogoMethod logoMethods[] = { getLogoNone, getLogoUnknown, getLogoAndroid, getLogoAndroidSmall, getLogoArch, getLogoArchSmall, getLogoArcoLinux, getLogoArtix, getLogoArtixSmall, getLogoCachyOS, getLogoCelOS, getLogoCentOS, getLogoCentOSSmall, getLogoDebian, getLogoDebianSmall, getLogoEndeavour, getLogoFedora, getLogoFedoraSmall, getLogoFedoraOld, getLogoGaruda, getLogoGentoo, getLogoGentooSmall, getLogoManjaro, getLogoManjaroSmall, getLogoMint, getLogoMintSmall, getLogoMintOld, getLogoPop, getLogoPopSmall, getLogoUbuntu, getLogoUbuntuSmall, getLogoVoid, getLogoVoidSmall, NULL }; return logoMethods; } static bool logoHasName(const FFlogo* logo, const char* name) { const char** logoName = logo->names; while(*logoName != NULL) { if(strcasecmp(*logoName, name) == 0) return true; ++logoName; } return false; } static void setLogo(FFinstance* instance, const FFlogo* logo) { instance->config.logo = logo; instance->state.logoWidth = 0; instance->state.logoLinesIndex = logo->lines; const char** colors = logo->builtinColors; int counter = 0; while(!logo->isFromUser && *colors != NULL) { ffStrbufSetS(&instance->config.logoColors[counter], *colors); ++counter; ++colors; } for(; counter < FASTFETCH_LOGO_MAX_COLORS; ++counter) ffStrbufClear(&instance->config.logoColors[counter]); } static bool loadLogoSet(FFinstance* instance, const char* name) { GetLogoMethod* logoMethod = getLogoMethods(); while(*logoMethod != NULL) { const FFlogo* logo = (*logoMethod)(); if(logoHasName(logo, name)) { setLogo(instance, logo); return true; } ++logoMethod; } return false; } void ffLoadLogoSet(FFinstance* instance, const char* logo) { if(loadLogoSet(instance, logo)) return; FFstrbuf logoChars; ffStrbufInitA(&logoChars, 1024); if(!ffGetFileContent(logo, &logoChars)) { ffStrbufDestroy(&logoChars); if(instance->config.showErrors) printf(FASTFETCH_TEXT_MODIFIER_ERROR"Error: unknown logo / logo file not found: %s"FASTFETCH_TEXT_MODIFIER_RESET"\n", logo); setLogo(instance, getLogoUnknown()); return; } static FFlogo dummyLogo; dummyLogo.isFromUser = true; dummyLogo.lines = logoChars.chars; setLogo(instance, &dummyLogo); } static bool loadLogoSetWithVersion(FFinstance* instance, const FFstrbuf* versionID, const FFstrbuf* name) { bool isFedora = logoHasName(getLogoFedora(), name->chars); bool isMint = logoHasName(getLogoMint(), name->chars); if(versionID->length == 0 || ( !isFedora && !isMint )) return loadLogoSet(instance, name->chars); long version = strtol(versionID->chars, NULL, 10); #define FF_LOAD_LOGO_WITH_VERSION(ver, newLogo, oldLogo) setLogo(instance, (version == 0 || version == LONG_MAX || version == LONG_MIN || version > ver) ? newLogo : oldLogo); if(isFedora) FF_LOAD_LOGO_WITH_VERSION(34, getLogoFedora(), getLogoFedoraOld()) else if(isMint) FF_LOAD_LOGO_WITH_VERSION(19, getLogoMint(), getLogoMintOld()) #undef FF_LOAD_LOGO_WITH_VERSION return true; } void ffLoadLogo(FFinstance* instance) { const FFOSResult* result = ffDetectOS(instance); if( !loadLogoSetWithVersion(instance, &result->versionID, &result->name) && !loadLogoSetWithVersion(instance, &result->versionID, &result->id) && !loadLogoSetWithVersion(instance, &result->versionID, &result->systemName) && !loadLogoSetWithVersion(instance, &result->versionID, &result->idLike) ) setLogo(instance, getLogoUnknown()); } static uint32_t strLengthUTF8(const char* str, uint32_t bytesLength) { uint32_t length = 0; for (uint32_t i = 0; i < bytesLength; ++i) { int c = (unsigned char) str[i]; if(c<=127) {} // i += 0; else if((c & 0xE0) == 0xC0) i += 1; else if((c & 0xF0) == 0xE0) i += 2; else if((c & 0xF8) == 0xF0) i += 3; else return 0; //invalid utf8 ++length; } return length; } #define LOGO_LINE_PRINT_CHAR(c, cut) \ if(cut == 0) \ putchar(c); \ else \ --cut; void ffPrintLogoLine(FFinstance* instance) { //If offset x is positive, print it as whitespaces left from the logo for(int16_t i = 0; i < instance->config.offsetx; i++) putchar(' '); //If we have more informations than lines in the logo, print whitespaces. //We can return after this, since logoWidth includes logoKeySpacing. if(*instance->state.logoLinesIndex == '\0') { for(uint32_t i = 0; i < instance->state.logoWidth; ++i) putchar(' '); return; } //Save the start of the line and the length of color placeholders, so we can calculate the length of the line at the end const char* start = instance->state.logoLinesIndex; uint32_t colorPlaceholdersLength = 0; //If offset x is negative, we will cut the logo. Save the total amount to cut, and the currently cut amount uint32_t cutValue = instance->config.offsetx < 0 ? (uint32_t) (instance->config.offsetx * -1) : 0; uint32_t cut = cutValue; //Logo is always bold fputs(FASTFETCH_TEXT_MODIFIER_BOLT, stdout); while(*instance->state.logoLinesIndex != '\n' && *instance->state.logoLinesIndex != '\0') { //Get the current char char current = *instance->state.logoLinesIndex; //We have a color encoding directly in the logo. Print it and increase colorPlaceholdersLength if(instance->config.logo->isFromUser && current == '\033' && *(instance->state.logoLinesIndex + 1) == '[') { //At this point we don't know if the start ends with a 'm', so we need to buffer FFstrbuf colorBuffer; ffStrbufInit(&colorBuffer); char* indexCopy = instance->state.logoLinesIndex; while(*indexCopy != '\n' && *indexCopy != '\0') { ffStrbufAppendC(&colorBuffer, *indexCopy); if(*indexCopy == 'm') break; ++indexCopy; } //It was a color encoding, write it and increase colorPlaceholdersLength if(*indexCopy == 'm') { ffStrbufWriteTo(&colorBuffer, stdout); colorPlaceholdersLength += colorBuffer.length; instance->state.logoLinesIndex = indexCopy + 1; // + 1 to skip the 'm' current = *instance->state.logoLinesIndex; } ffStrbufDestroy(&colorBuffer); } //Not a color placeholder, just print it. User files don't support colors this way. if(current != '$' || instance->config.userLogoIsRaw) { LOGO_LINE_PRINT_CHAR(current, cut); ++instance->state.logoLinesIndex; continue; } //Skip the dollar sign ++instance->state.logoLinesIndex; current = *instance->state.logoLinesIndex; //We have a dollar sign at the end of the line. Just print it. if(current == '\n' || current == '\0') { if(cut == 0) putchar('$'); break; } //We definitly have something to print and are not at the end of the line. //Already increase it here, so i don't have to write it multiple times ++instance->state.logoLinesIndex; //We have two dollar signs. Print one. if(current == '$') { LOGO_LINE_PRINT_CHAR('$', cut); ++colorPlaceholdersLength; continue; } //Map the number to an array index, so that '1' -> 0, '2' -> 1, etc. int index = ((int) current) - 49; //Invalid index, just print the $ and the following char if(index < 0 || index >= FASTFETCH_LOGO_MAX_COLORS) { LOGO_LINE_PRINT_CHAR('$', cut); LOGO_LINE_PRINT_CHAR(current, cut); continue; } //Index can maximal be 9, so we have exactly two chars for the color colorPlaceholdersLength += 2; // If we don't color our logo, skip it if(!instance->config.colorLogo) continue; ffPrintColor(&instance->config.logoColors[index]); } //Reset out bold logo fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout); //Print the whitespaces between logo and keys. If cut is left, substract it from the spacing. Never go below a spacing of 0. const uint32_t logoKeySpacing = cut > instance->config.logoKeySpacing ? 0 : instance->config.logoKeySpacing - cut; for(uint32_t i = 0; i < logoKeySpacing; ++i) putchar(' '); //If we haven't yet calculated the length of the line, do it now if(instance->state.logoWidth == 0) { instance->state.logoWidth = strLengthUTF8(start, (uint32_t) (instance->state.logoLinesIndex - start)) - colorPlaceholdersLength + instance->config.logoKeySpacing; instance->state.logoWidth = cutValue > instance->state.logoWidth ? 0 : instance->state.logoWidth - cutValue; } //If we just finished a line and not the entire logo, skip the newline char if(*instance->state.logoLinesIndex == '\n') ++instance->state.logoLinesIndex; } void ffPrintRemainingLogo(FFinstance* instance) { while(*instance->state.logoLinesIndex != '\0') { ffPrintLogoLine(instance); putchar('\n'); } } #ifndef FASTFETCH_BUILD_FLASHFETCH void ffPrintLogos(FFinstance* instance) { GetLogoMethod* methods = getLogoMethods(); while(*methods != NULL) { setLogo(instance, (*methods)()); printf(FASTFETCH_TEXT_MODIFIER_BOLT"\033[%sm%s"FASTFETCH_TEXT_MODIFIER_RESET":\n", instance->config.colorLogo ? instance->config.logo->builtinColors[0] : "", instance->config.logo->names[0]); ffPrintRemainingLogo(instance); puts("\n"); ++methods; } } void ffListLogos() { GetLogoMethod* methods = getLogoMethods(); uint32_t counter = 0; while(*methods != NULL) { const FFlogo* logo = (*methods)(); const char** names = logo->names; printf("%u)%s ", counter, counter < 10 ? " " : ""); ++counter; while(*names != NULL) { printf("\"%s\" ", *names); ++names; } putchar('\n'); ++methods; } } void ffListLogosForAutocompletion() { GetLogoMethod* methods = getLogoMethods(); while(*methods != NULL) { printf("%s\n", (*methods)()->names[0]); ++methods; } } #endif