commit 81fa554b369610b44cad002d2fcb9cf1f1208b7e Author: 諏訪子 Date: Fri Jan 16 22:40:50 2026 +0900 最初コミット diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5597919 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +farfetch +*.o +*.core diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..fd986a4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,40 @@ +# 0.3.1 +* SunOS: 「;」を忘れた + +# 0.3.0 +* macOSでOS情報の修正 +* macOS: 解像度の追加 +* コンフィグのエラーの修正(osとhostのコンフリクト) +* Linux: 全てのケースに解像度を受け取る様に +* Linux: 「/proc/cpuinfo」で使ってCPU速さの受け取る様に +* Kubuntu、Xubuntu、Lubuntu、Arco、Hyperbola、Parabola、とPop OSロゴの追加 +* Ubuntu MATE、Ubuntu Budgie、Ubuntu Lomiri、Ubuntu Unity、とUbuntu Cinnamonロゴの追加 +* Linux: 「hostname」コマンドがなければ、「cat /etc/hostname」を実効する様に +* Linux: pacman、rpm対応 +* LinuxとBSD: 今から、静的リンクがデフォルトになりました(動的リンクには「make LDFLAGS=-lc」をご利用下さい) +* 色コンフィグの追加 +* カスタムロゴコンフィグの追加 +* モジュールのキャッシングの追加(それでスピードアップする) +* コンフィグでロゴの設定の追加(隠し・表示、大・小、カスタムロゴ、LinuxとIllumosの場合:ディストロロゴ) +* マンページの英訳 + +# 0.2.0 +* Manjaroのロゴの追加 +* OpenSUSEのロゴの追加 +* Linux Mintのロゴの追加 +* Ubuntuのロゴの追加 +* Linuxロゴの修正(今も元気ハツラツ太郎さん) +* Fedoraロゴの追加 +* 他のディストリビューションのロゴの表示オプションの追加(LinuxとIllumosのみ) +* Rocky Linuxロゴの追加 +* CentOSロゴの追加 +* Red Hatロゴの追加 +* コンフィグファイル機能性の追加 + +# 0.1.1 +* ストレージ情報の修正(今も元気ハツラツ太郎さん) +* VultrのFreeBSDでのGPUとCPUの修正 +* ディストロの情報の修正 + +# 0.1.0 +* 開始 diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..bac8df8 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,32 @@ +Copyright (c) 2023-2026 テクニカル諏訪子 + +Permission is hereby granted to any person obtaining a copy of the software +Farfetch (the "Software") to use, modify, merge, copy, publish, distribute, +sublicense, and/or sell copies of the Software, subject to the following conditions: + + 1. **Origin Attribution**: + - You must not misrepresent the origin of the Software; you must not claim + you created the original Software. + - If the Software is used in a product, you must either: + a. Provide clear attribution in the product's documentation, user interface, + or other visible areas, **OR** + b. Pay the original developers a fee they specify in writing. + 2. **Usage Restriction**: + - The Software, or any derivative works, dependencies, or libraries + incorporating it, must not be used for censorship or to suppress freedom of + speech, expression, or creativity. Prohibited uses include, but are not + limited to: + - Censorship of so-called "hate speech", visuals, non-mainstream opinions, + ideas, or objective reality. + - Tools or systems designed to restrict access to information or + artistic works. + 3. **Notice Preservation**: + - This license and the above copyright notice must remain intact in all copies + of the source code. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..116735f --- /dev/null +++ b/Makefile @@ -0,0 +1,110 @@ +UNAME_S != uname -s +UNAME_M != uname -m +OS = ${UNAME_S} + +.if ${UNAME_S} == "OpenBSD" +OS = openbsd +.elif ${UNAME_S} == "NetBSD" +OS = netbsd +.elif ${UNAME_S} == "FreeBSD" +OS = freebsd +.elif ${UNAME_S} == "Linux" +OS = linux +.endif + +.if ${UNAME_M} == "x86_64" +UNAME_M = amd64 +.endif + +NAME != cat main.c | grep "const char \*sofname" | awk '{print $$5}' |\ + sed "s/\"//g" | sed "s/;//" +VERSION != cat main.c | grep "const char \*version" | awk '{print $$5}' |\ + sed "s/\"//g" | sed "s/;//" + +PREFIX = /usr/local +.if ${UNAME_S} == "Linux" +PREFIX = /usr +.elif ${UNAME_S} == "Haiku" +PREFIX = /boot/home/config/non-packaged +.endif + +MANPREFIX = ${PREFIX}/share/man +.if ${UNAME_S} == "OpenBSD" +MANPREFIX = ${PREFIX}/man +.elif ${UNAME_S} == "Haiku" +MANPREFIX = ${PREFIX}/documentation/man +.endif + +CNFPREFIX = /etc +.if ${UNAME_S} == "FreeBSD" || ${UNAME_S} == "NetBSD" || ${UNAME_S} == "Dragonfly" +CNFPREFIX = ${PREFIX}/etc +.elif ${UNAME_S} == "Haiku" +CNFPREFIX = /boot/home/config/settings +.endif + +CC = cc +FILES = main.c src/*.c src/logo/*.c +CFLAGS = -Wall -Wextra -O3 + +LDFLAGS = -static -lc +.if ${UNAME_S} == "Haiku" || ${UNAME_S} == "Darwin" || ${UNAME_S} == "SunOS"\ + || ${UNAME_S} == "Minix" +LDFLAGS = -lc +.endif + +all: + ${CC} ${CFLAGS} -o ${NAME} ${FILES} ${LDFLAGS} + strip ${NAME} + +clean: + rm -rf ${NAME} + +dist: + mkdir -p ${NAME}-${VERSION} release/src + cp -R LICENSE.txt Makefile README.md CHANGELOG.md\ + ${NAME}.conf ${NAME}.1 ${NAME}-en.1 ${NAME}.conf.5 ${NAME}.conf-en.5\ + main.c src ${NAME}-${VERSION} + tar zcfv release/src/${NAME}-${VERSION}.tar.gz ${NAME}-${VERSION} + rm -rf ${NAME}-${VERSION} + +man: + mkdir -p release/man/${VERSION} + sed "s/VERSION/${VERSION}/g" < ${NAME}.1 > release/man/${VERSION}/${NAME}.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}-en.1 > release/man/${VERSION}/${NAME}-en.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}.conf.5 >\ + release/man/${VERSION}/${NAME}.conf.5 + sed "s/VERSION/${VERSION}/g" < ${NAME}.conf-en.5 >\ + release/man/${VERSION}/${NAME}.conf-en.5 + +release: + mkdir -p release/bin/${VERSION}/${OS}/${UNAME_M} + ${CC} ${CFLAGS} -o release/bin/${VERSION}/${OS}/${UNAME_M}/${NAME} ${FILES}\ + -static ${LDFLAGS} + strip release/bin/${VERSION}/${OS}/${UNAME_M}/${NAME} + +install: + mkdir -p ${DESTDIR}${PREFIX}/bin ${DESTDIR}${MANPREFIX}/man1\ + ${DESTDIR}${MANPREFIX}/man5 + cp -rf ${NAME} ${DESTDIR}${PREFIX}/bin + cp -rf ${NAME}.conf ${DESTDIR}${CNFPREFIX} + chmod 755 ${DESTDIR}${PREFIX}/bin/${NAME} + sed "s/VERSION/${VERSION}/g" < ${NAME}.1 > ${DESTDIR}${MANPREFIX}/man1/${NAME}.1 + chmod 644 ${DESTDIR}${MANPREFIX}/man1/${NAME}.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}-en.1 >\ + ${DESTDIR}${MANPREFIX}/man1/${NAME}-en.1 + chmod 644 ${DESTDIR}${MANPREFIX}/man1/${NAME}-en.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}.conf.5 >\ + ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf.5 + chmod 644 ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf.5 + sed "s/VERSION/${VERSION}/g" < ${NAME}.conf-en.5 >\ + ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf-en.5 + chmod 644 ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf-en.5 + +uninstall: + rm -rf ${DESTDIR}${PREFIX}/bin/${NAME} + rm -rf ${DESTDIR}${MANPREFIX}/man1/${NAME}.1 + rm -rf ${DESTDIR}${MANPREFIX}/man1/${NAME}-en.1 + rm -rf ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf.5 + rm -rf ${DESTDIR}${MANPREFIX}/man5/${NAME}-en.conf.5 + +.PHONY: all clean dist man release install uninstall diff --git a/README.md b/README.md new file mode 100644 index 0000000..1b89a41 --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# farfetch + +![](https://this.is.very.dangerous.software/2024-06-20-114921_1920x1080_scrot.png) + +## インストールする方法 | Installation +### OpenBSD +```sh +make +doas make install +``` + +### NetBSD | FreeBSD | Dragonfly BSD +```sh +make +sudo make install +``` + +### CRUX +```sh +sudo prt-get bmake +bmake +sudo bmake install +``` + +### Void +```sh +sudo xbps-install bmake +bmake +sudo bmake install +``` + +### Artix +```sh +sudo pacman -S base-devel bmake +bmake +sudo bmake install +``` + +### OmniOS +```sh +gcc -Wall -Wextra -O3 -I/usr/include -o farfetch main.c src/*.c src/logo/*.c -L/usr/lib -lc +sudo cp farfetch /usr/bin +sudo cp farfetch.1 /usr/bin/share/man/man1 +``` + +### Debian | Devuan | Ubuntu | Linux Mint | PopOS +[Kazuhikoさん](https://social.076.moe/conversation/1127279#notice-2122922) +```sh +sudo apt install -y build-essential bmake git pciutils +bmake +sudo bmake install +``` + +### Fedora | Red Hat | CentOS | Rocky Linux +```sh +sudo dnf install bmake clang +bmake +sudo bmake install +``` diff --git a/farfetch-en.1 b/farfetch-en.1 new file mode 100644 index 0000000..d529e01 --- /dev/null +++ b/farfetch-en.1 @@ -0,0 +1,23 @@ +.TH FARFETCH 1 VERSION +.SH NAME +farfetch - system info +.br +.B farfetch +[-rs] [-l distro] +.SH DESCRIPTION +.PP +System Information +.TP +\fB\,-r\fR +Delete from cache and run (except Haiku) +.TP +\fB\,-s\fR +Small logo display +.TP +\fB\,-l\fR [\fI\,distro\fR] +Displaying different distribution logos (Linux and Illumos only) +.SH AUTHORS +.PP +TechnicalSuwako (Developer) +.br +Hatuhatu Taro (Developer) diff --git a/farfetch.1 b/farfetch.1 new file mode 100644 index 0000000..21a12ed --- /dev/null +++ b/farfetch.1 @@ -0,0 +1,23 @@ +.TH FARFETCH 1 VERSION +.SH NAME +farfetch - system info +.br +.B farfetch +[-rs] [-l distro] +.SH DESCRIPTION +.PP +システム情報 +.TP +\fB\,-r\fR +キャッシュから削除して、実効(Haiku以外) +.TP +\fB\,-s\fR +小さいロゴの表示 +.TP +\fB\,-l\fR [\fI\,distro\fR] +違うディストリビューションのロゴの表示(LinuxとIllumosのみ) +.SH AUTHORS +.PP +テクニカル諏訪子(開発者) +.br +ハツラツ太郎(開発者) diff --git a/farfetch.conf b/farfetch.conf new file mode 100644 index 0000000..821ea2e --- /dev/null +++ b/farfetch.conf @@ -0,0 +1,51 @@ +show logo big +#hide logo +#show logo small +#show logo big custom +#show logo small custom +#show logo big crux +#show logo small alpine +show os +show host +show distro +show uptime +show recording +#hide recording +show libc +show packages +show resolution +#hide resolution +show wm +show shell +show cpu +show gpu +show memory +show storage all +#show storage /dev/sd0a +#show storage zroot and xroot +#show storage /dev/sda0, /dev/sda1 and /dev/sda2 + +#set color yellow # red|green|blue|yellow|magenta|white|grey|cyan +#set titlecolor magenta # red|green|blue|yellow|magenta|white|grey|cyan + +#define custom big logo: +#[MAGENTA] ⢀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠶⣄⢀⣠⣤⠴⢦⡀⠀⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⠀⢠⡿⠉⠉⠉⠛⠶⠶⠖⠒⠒⣾⠋⠀⢀⣀⣙⣯⡁⠀⠀⠀⣿⠀⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⢯⣼⠋⠉⠙⢶⠞⠛⠻⣆⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⠀⢸⣧⠆⠀⠀⠀⠀⠀⠀⠀⠀⠻⣦⣤⡤⢿⡀⠀⢀⣼⣷⠀⠀⣽⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⠀⣼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⢏⡉⠁⣠⡾⣇⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⢰⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠋⠉⠀⢻⡀⠀⠀ [RESET] +#[MAGENTA]⣀⣠⣼⣧⣤⠀⠀[WHITE]⠀⣀⡀[MAGENTA]⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀[CYAN]⣀⡀[MAGENTA]⠀⠀⠐⠖⢻⡟⠓⠒ [RESET] +#[MAGENTA]⠀⠀⠈⣷⣀⡀⠀[WHITE]⠘⠿⠇[MAGENTA]⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀[CYAN]⠿⠟[MAGENTA]⠀⠀⠀⠲⣾⠦⢤⠀ [RESET] +#[MAGENTA]⠀⠀⠋⠙⣧⣀⡀⠀⠀⠀⠀⠀⠀⠘⠦⠼⠃⠀⠀⠀⠀⠀⠀⠀⢤⣼⣏⠀⠀⠀ [RESET] +#[MAGENTA]⠀⠀⢀⠴⠚⠻⢧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠞⠉⠉⠓⠀⠀ [RESET] +#[MAGENTA]⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠛⠶⠶⠶⣶⣤⣴⡶⠶⠶⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀ [RESET] +#EOL + +#define custom small logo: +#[WHITE] |\____/| [RESET] +#[WHITE] | | [RESET] +#[WHITE] | [GREY]0 0[WHITE] | [RESET] +#[WHITE] | [RED]ω[WHITE] | [RESET] +#[WHITE] \_____/ [RESET] +#EOL diff --git a/farfetch.conf-en.5 b/farfetch.conf-en.5 new file mode 100644 index 0000000..7e6ea7f --- /dev/null +++ b/farfetch.conf-en.5 @@ -0,0 +1,82 @@ +.TH FARFETCH.CONF 5 VERSION +.SH NAME +.B farfetch.conf +.SH DESCRIPTION +.PP +To use it, run `cp /etc/farfetch.conf ~/.config`. +.br +This is not necessary for Haiku. +.SH GLOBAL CONFIGURATION +.TP +\fB\,hide\fR [\fI\,context\fR] +hide +.TP +\fB\,show\fR [\fI\,context\fR] +express +.TP +\fB\,set color\fR [\fI\,red|green|blue|yellow|magenta|white|grey|cyan\fR] +Change module color +.TP +\fB\,set titlecolor\fR [\fI\,red|green|blue|yellow|magenta|white|grey|cyan\fR] +Change title color +.TP +\fB\,define custom\fR [\fI\,big|small\fR] \fB,logo:\fR +Custom logo can be displayed until EOL +.br +You can also set the color, but it must end with "[RESET]". +.SH EXAMPLES +hide packages +show os + +set color magenta + +define custom big logo: +.br +[RED]⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⢉⢉⠉⠉⠻⣿⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⣿⣿⣿⠟⠠⡰⣕⣗⣷⣧⣀⣅⠘⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⣿⣿⠃⣠⣳⣟⣿⣿⣷⣿⡿⣜⠄⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⡿⠁⠄⣳⢷⣿⣿⣿⣿⡿⣝⠖⠄⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⣿⠃⠄⢢⡹⣿⢷⣯⢿⢷⡫⣗⠍⢰⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⡏⢀⢄⠤⣁⠋⠿⣗⣟⡯⡏⢎⠁⢸⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⠄⢔⢕⣯⣿⣿⡲⡤⡄⡤⠄⡀⢠⣿⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⠇⠠⡳⣯⣿⣿⣾⢵⣫⢎⢎⠆⢀⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢨⣫⣿⣿⡿⣿⣻⢎⡗⡕⡅⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢜⢾⣾⣿⣿⣟⣗⢯⡪⡳⡀⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢸⢽⣿⣷⣿⣻⡮⡧⡳⡱⡁⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⡄⢨⣻⣽⣿⣟⣿⣞⣗⡽⡸⡐⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⡇⢀⢗⣿⣿⣿⣿⡿⣞⡵⡣⣊⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⡀⡣⣗⣿⣿⣿⣿⣯⡯⡺⣼⠎⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⣧⠐⡵⣻⣟⣯⣿⣷⣟⣝⢞⡿⢹⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⣿⡆⢘⡺⣽⢿⣻⣿⣗⡷⣹⢩⢃⢿⣿⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⣿⣿⣷⠄⠪⣯⣟⣿⢯⣿⣻⣜⢎⢆⠜⣿⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⣿⣿⣿⡆⠄⢣⣻⣽⣿⣿⣟⣾⡮⡺⡸⠸⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⡿⠛⠉⠁⠄⢕⡳⣽⡾⣿⢽⣯⡿⣮⢚⣅⠹⣿⣿⣿ [RESET] +.br +[MAGENTA]⡿⠋⠄⠄⠄⠄⢀⠒⠝⣞⢿⡿⣿⣽⢿⡽⣧⣳⡅⠌⠻⣿ [RESET] +.br +[GREY]⠁⠄⠄⠄⠄⠄⠐⡐⠱⡱⣻⡻⣝⣮⣟⣿⣻⣟⣻⡺⣊ [RESET] +.br +EOL +.SH AUTHORS +.PP +TechnicalSuwako (Developer) +.br +Hatuhatu Taro (Developer) diff --git a/farfetch.conf.5 b/farfetch.conf.5 new file mode 100644 index 0000000..07f29c4 --- /dev/null +++ b/farfetch.conf.5 @@ -0,0 +1,82 @@ +.TH FARFETCH.CONF 5 VERSION +.SH NAME +.B farfetch.conf +.SH DESCRIPTION +.PP +利用するには、`cp /etc/farfetch.conf ~/.config`を実効して下さい。 +.br +Haikuの場合は不要です。 +.SH GLOBAL CONFIGURATION +.TP +\fB\,hide\fR [\fI\,context\fR] +隠す +.TP +\fB\,show\fR [\fI\,context\fR] +表示 +.TP +\fB\,set color\fR [\fI\,red|green|blue|yellow|magenta|white|grey|cyan\fR] +モジュール色の変更 +.TP +\fB\,set titlecolor\fR [\fI\,red|green|blue|yellow|magenta|white|grey|cyan\fR] +タイトル色の変更 +.TP +\fB\,define custom\fR [\fI\,big|small\fR] \fB,logo:\fR +EOLまでカスタムロゴを表示出来る +.br +色の設置も可能ですが、「[RESET]」で終わる事が必須 +.SH EXAMPLES +hide packages +show os + +set color magenta + +define custom big logo: +.br +[RED]⣿⣿⣿⣿⣿⣿⣿⣿⣿⠟⠛⢉⢉⠉⠉⠻⣿⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⣿⣿⣿⠟⠠⡰⣕⣗⣷⣧⣀⣅⠘⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⣿⣿⠃⣠⣳⣟⣿⣿⣷⣿⡿⣜⠄⣿⣿⣿⣿⣿ [RESET] +.br +[RED]⣿⣿⣿⣿⡿⠁⠄⣳⢷⣿⣿⣿⣿⡿⣝⠖⠄⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⣿⠃⠄⢢⡹⣿⢷⣯⢿⢷⡫⣗⠍⢰⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⡏⢀⢄⠤⣁⠋⠿⣗⣟⡯⡏⢎⠁⢸⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⣿⠄⢔⢕⣯⣿⣿⡲⡤⡄⡤⠄⡀⢠⣿⣿⣿⣿⣿⣿ [RESET] +.br +[CYAN]⣿⣿⠇⠠⡳⣯⣿⣿⣾⢵⣫⢎⢎⠆⢀⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢨⣫⣿⣿⡿⣿⣻⢎⡗⡕⡅⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢜⢾⣾⣿⣿⣟⣗⢯⡪⡳⡀⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⠄⢸⢽⣿⣷⣿⣻⡮⡧⡳⡱⡁⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[GREEN]⣿⣿⡄⢨⣻⣽⣿⣟⣿⣞⣗⡽⡸⡐⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⡇⢀⢗⣿⣿⣿⣿⡿⣞⡵⡣⣊⢸⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⡀⡣⣗⣿⣿⣿⣿⣯⡯⡺⣼⠎⣿⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⣧⠐⡵⣻⣟⣯⣿⣷⣟⣝⢞⡿⢹⣿⣿⣿⣿⣿⣿ [RESET] +.br +[YELLOW]⣿⣿⣿⣿⡆⢘⡺⣽⢿⣻⣿⣗⡷⣹⢩⢃⢿⣿⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⣿⣿⣷⠄⠪⣯⣟⣿⢯⣿⣻⣜⢎⢆⠜⣿⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⣿⣿⣿⡆⠄⢣⣻⣽⣿⣿⣟⣾⡮⡺⡸⠸⣿⣿⣿⣿ [RESET] +.br +[MAGENTA]⣿⣿⡿⠛⠉⠁⠄⢕⡳⣽⡾⣿⢽⣯⡿⣮⢚⣅⠹⣿⣿⣿ [RESET] +.br +[MAGENTA]⡿⠋⠄⠄⠄⠄⢀⠒⠝⣞⢿⡿⣿⣽⢿⡽⣧⣳⡅⠌⠻⣿ [RESET] +.br +[GREY]⠁⠄⠄⠄⠄⠄⠐⡐⠱⡱⣻⡻⣝⣮⣟⣿⣻⣟⣻⡺⣊ [RESET] +.br +EOL +.SH AUTHORS +.PP +テクニカル諏訪子(開発者) +.br +ハツラツ太郎(開発者) diff --git a/main.c b/main.c new file mode 100644 index 0000000..2b2572e --- /dev/null +++ b/main.c @@ -0,0 +1,379 @@ +#include +#include +#include + +#include "src/user.h" +#include "src/os.h" +#if defined(__linux__) || defined(__sun) +#include "src/distro.h" +#endif +#if !defined(__HAIKU__) +#include "src/host.h" +#endif +#include "src/uptime.h" +#if defined(__OpenBSD__) +#include "src/recording.h" +#endif +#include "src/packages.h" +#include "src/resolution.h" +#include "src/wm.h" +#include "src/shell.h" +#include "src/libc.h" +#include "src/cpu.h" +#include "src/gpu.h" +#include "src/memory.h" +#include "src/storage.h" + +#include "src/config.h" +#include "src/common.h" + +const char *sofname = "farfetch"; +const char *version = "0.3.0"; +#if defined(__linux__) || defined(__sun) +const char *avalopt = "lrs"; +#elif defined(__HAIKU__) +const char *avalopt = "s"; +#else +const char *avalopt = "rs"; +#endif + +int opt; +#if defined(__linux__) || defined(__sun) +int islogo = 0; +#endif +int issmall = 0; +int iserr = 0; + +void usage() { +#if defined(__linux__) || defined(__sun) + printf("%s-%s\nusage: %s [-rs] [-l distro]\n", sofname, version, sofname); +#else + printf("%s-%s\nusage: %s [-%s]\n", sofname, version, sofname, avalopt); +#endif +} + +void flags(int opt) { + switch (opt) { +#if defined(__linux__) || defined(__sunos) + case 'l': + islogo = 1; + islogodistro = 0; + islogocustom = 0; + break; +#endif +#if !defined(__HAIKU__) + case 'r': + delete_cache(); + break; +#endif + case 's': + issmall = 1; + break; + default: + iserr = 1; + usage(); + break; + } +} + +int main(int argc, char *argv[]) { + int lc = 0; + while ((opt = getopt(argc, argv, avalopt)) != -1) { + flags(opt); + } + + if (iserr == 1) { + return 1; + } + + getconf(); + +#if defined(__OpenBSD__) +#include "src/logo/openbsd.h" + getOS(); +#elif defined(__NetBSD__) +#include "src/logo/netbsd.h" + getOS(); +#elif defined(__FreeBSD__) +#include "src/logo/freebsd.h" + getOS(); +#elif defined(__linux__) + get_distro(); +#include "src/logo/linux.h" + getDistro(distroname); +#elif defined(__sun) + get_distro(); +#include "src/logo/sunos.h" + getDistro(distroname); +#elif defined(__APPLE__) +#include "src/logo/macos.h" + getOS(); +#elif defined(__HAIKU__) +#include "src/logo/haiku.h" + getOS(); +#else +#include "src/logo/colors.h" + const char *color = MAGENTA; + const char *titlecolor = MAGENTA; + size_t logosize = 11; + char *LOGO[] = { +" ⢀⣀⣀⡀⠀⠀⠀⠀⠀⠀⠀⣠⠾⠛⠶⣄⢀⣠⣤⠴⢦⡀ ⠀⠀⠀⠀", +"⠀⠀⠀⢠⡿⠉⠉⠉⠛⠶⠶⠖⠒⠒⣾⠋⠀⢀⣀⣙⣯⡁⠀⠀⠀⣿⠀⠀⠀ ⠀", +"⠀⠀⠀⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⢸⡏⠀⠀⢯⣼⠋⠉⠙⢶⠞⠛⠻⣆ ⠀⠀⠀", +"⠀⠀⠀⢸⣧⠆⠀⠀⠀⠀⠀⠀⠀⠀⠻⣦⣤⡤⢿⡀⠀⢀⣼⣷⠀⠀⣽ ⠀⠀⠀", +"⠀⠀⠀⣼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⢏⡉⠁⣠⡾⣇⠀⠀⠀ ", +"⠀⠀⢰⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠋⠉⠀⢻⡀ ⠀⠀", +"⣀⣠⣼⣧⣤⠀⠀⠀⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡀⠀⠀⠐⠖⢻⡟⠓⠒ ", +"⠀⠀⠈⣷⣀⡀⠀⠘⠿⠇⠀⠀⠀⢀⣀⣀⠀⠀⠀⠀⠿⠟⠀⠀⠀⠲⣾⠦⢤ ⠀", +"⠀⠀⠋⠙⣧⣀⡀⠀⠀⠀⠀⠀⠀⠘⠦⠼⠃⠀⠀⠀⠀⠀⠀⠀⢤⣼⣏ ⠀⠀⠀", +"⠀⠀⢀⠴⠚⠻⢧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠞⠉⠉⠓⠀⠀ ", +"⠀⠀⠀⠀⠀⠀⠀⠈⠉⠛⠛⠶⠶⠶⣶⣤⣴⡶⠶⠶⠟⠛⠉⠀⠀⠀⠀⠀⠀⠀ " + }; + char *LOGO_SMALL[] = { +"|\____/| ", +"| | ", +"| 0 0 | ", +"| ω | ", +"\_____/ " + }; +#endif + + int minsize = MIN_SIZE; + + if (isresolution) { + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + } else minsize--; + if (iswm) { + const char *winman = display_wm(); + if (!winman) minsize--; +#if !defined(__APPLE__) && !defined(__HAIKU__) + else free((void *)winman); +#endif + } else minsize--; + if (islibc) { + const char *clang = display_libc(); + if (clang) minsize++; + } + if (isstorage) { + const char *store = display_storage(); + if (!store) minsize--; + else free((void *)store); + } else minsize--; + if (isgpu) { + const char *graph = display_gpu(); + if (!graph) minsize--; + else free((void *)graph); + } else minsize--; + + const char *reset = RESET; + size_t ls = logosize <= (size_t)minsize ? (size_t)minsize : logosize; +#if defined(__linux__) || defined(__sun) + if (islogo) { + logoname = argv[2]; + getDistro(logoname); + } else if (islogodistro) { + logoname = distrostring; + getDistro(logoname); + free(distrostring); + } +#endif + + bool smol = false; + if (issmall && !islogos) smol = true; + else if (!issmall && islogos) smol = true; + + if (smol) { + size_t ne = sizeof(LOGO_SMALL) / sizeof(LOGO_SMALL[0]); + for (size_t i = 0; i < ne; i++) { + LOGO[i] = LOGO_SMALL[i]; + } + ls = ne >= (size_t)minsize ? (size_t)minsize : ne; + } + + const char *name = display_user_name(); + const char *host = display_user_host(); + if (name || host) { + printf("%s ", LOGO[lc]); + if (name) printf("%s%s%s",titlecolor, name, reset); + if (name && host) printf("@"); + if (host) printf("%s%s%s", titlecolor, host, reset); + printf("\n"); + if (name) free((void *)name); + if (host) free((void *)host); + lc++; + } + + printf("%s ", LOGO[lc]); + printf("------------------\n"); + lc++; + + if (isos) { + const char *os = display_os(); + if (os) { + printf("%s ", LOGO[lc]); + printf("%sOS%s: %s\n", color, reset, os); + free((void *)os); + lc++; + } + } else minsize--; + +#if defined(__linux__) || defined(__sun) + if (isdistro) { + const char *distroo = display_distro(); + if (distroo) { + printf("%s ", LOGO[lc]); + printf("%sDistro%s: %s\n", color, reset, distroo); + lc++; + free((void *)distroo); + } + } else minsize--; +#endif + +#if !defined(__HAIKU__) + const char *machine = display_host(); + if (ishost) { + printf("%s ", LOGO[lc]); + printf("%sHost%s: %s\n", color, reset, machine); + lc++; + } else minsize--; +#endif + + if (isuptime) { + const char *days = display_days(); + const char *time = display_time(); + if (days || time) { + printf("%s ", LOGO[lc]); + printf("%s%s%s%s", color, "Uptime", reset, ": "); + if (days) { + printf("%s", days); + if (time) printf(" "); + } + if (time) { + printf("%s", time); + } + printf("\n"); + if (days) free((void *)days); + if (time) free((void *)time); + lc++; + } + } else minsize--; + +#if defined(__OpenBSD__) + if (isrecording) { + const char *audio = display_recording_audio(); + const char *video = display_recording_video(); + if (audio || video) { + printf("%s ", LOGO[lc]); + printf("%sRecording%s: ", color, reset); + if (audio) { + printf("audio = %s", audio); + if (video) printf(", "); + } + if (video) { + printf("video = %s", video); + } + printf("\n"); + if (audio) free((void *)audio); + if (video) free((void *)video); + lc++; + } + } else minsize--; +#endif + + if (ispackages) { + const char *packages = display_packages(); + if (packages) { + printf("%s ", LOGO[lc]); + printf("%sPackages%s: %s\n", color, reset, packages); + lc++; + free((void *)packages); + } + } else minsize--; + + if (isresolution) { + const char *resolution = display_resolution(); + if (resolution) { + printf("%s ", LOGO[lc]); + printf("%sResolution%s: %s\n", color, reset, resolution); + lc++; + free((void *)resolution); + } + } + + if (iswm) { + const char *wm = display_wm(); + if (wm) { + printf("%s ", LOGO[lc]); + printf("%sWM%s: %s\n", color, reset, wm); +#if !defined(__APPLE__) && !defined(__HAIKU__) + free((void *)wm); +#endif + lc++; + } + } + + if (isshell) { + const char *shell = display_shell(); + if (shell) { + printf("%s ", LOGO[lc]); + printf("%sShell%s: %s\n", color, reset, shell); + free((void *)shell); + lc++; + } + } else minsize--; + + if (islibc) { + const char *libc = display_libc(); + if (libc) { + printf("%s ", LOGO[lc]); + printf("%slibc%s: %s\n", color, reset, libc); + lc++; + } + } + + if (iscpu) { + const char *cpu = display_cpu(); + if (cpu) { + printf("%s ", LOGO[lc]); + printf("%sCPU%s: %s\n", color, reset, cpu); + lc++; + free((void *)cpu); + } + } else minsize--; + + if (isgpu) { + const char *gpu = display_gpu(); + if (gpu) { + printf("%s ", LOGO[lc]); + printf("%sGPU%s: %s\n", color, reset, gpu); + lc++; + free((void *)gpu); + } + } + + if (ismemory) { + printf("%s ", LOGO[lc]); + printf("%s%s%s%s", color, "Memory", reset, ": "); + display_memory(); + printf("\n"); + lc++; + } else minsize--; + + if (isstorage) { + const char *storage = display_storage(); + if (storage) { + printf("%s ", LOGO[lc]); + printf("%sStorage%s: %s\n", color, reset, storage); + lc++; + free((void *)storage); + } + } + + for (size_t i = lc; i < ls; i++) { + printf("%s\n", LOGO[i]); + } + + return 0; +} diff --git a/src/common.c b/src/common.c new file mode 100644 index 0000000..c1c426a --- /dev/null +++ b/src/common.c @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" + +long long int run_command_lld(const char *command) { + char buf[128]; + long long int res = 0; + + FILE *p = popen(command, "r"); + if (!p) { + fprintf(stderr, "コマンドを実効に失敗: %s", command); + return 0; + } + + while (fgets(buf, sizeof(buf), p) != NULL) { + buf[strcspn(buf, "\n")] = '\0'; + } + + res = atoll(buf); + pclose(p); + + return res; +} + +const char *run_command_s(const char *command) { + char buf[128]; + char *out = NULL; + size_t outsize = 0; + + FILE *p = popen(command, "r"); + if (!p) { + fprintf(stderr, "コマンドを実効に失敗: %s", command); + return NULL; + } + + while (fgets(buf, sizeof(buf), p) != NULL) { + buf[strcspn(buf, "\n")] = '\0'; + + size_t len = strlen(buf); + char *nout = realloc(out, outsize + len + 1); + if (nout == NULL) { + perror("メモリの役割に失敗"); + free(out); + pclose(p); + return NULL; + } + + out = nout; + + memccpy(out + outsize, buf, sizeof(buf), len); + outsize += len; + out[outsize] = '\0'; + } + + pclose(p); + + return out; +} + +#if !defined(__HAIKU__) +const char *from_cache(const char *file) { + struct stat st; + if (stat(file, &st) != 0) { + return NULL; + } + + FILE *f = fopen(file, "r"); + if (!f) { + return NULL; + } + + char *cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) { + fclose(f); + return NULL; + } + + if (fgets(cmd, 128, f) == NULL) { + free(cmd); + fclose(f); + return NULL; + } + + fclose(f); + + cmd[strcspn(cmd, "\n")] = '\0'; + return cmd; +} + +int to_cache(const char *file, const char *res) { + char dir[256]; + snprintf(dir, sizeof(dir), "%s", "/tmp/farfetch"); + + struct stat st; + + if (stat(dir, &st) != 0) { + if (mkdir(dir, 0755) != 0 && errno != EEXIST) return -1; + } + + FILE *f = fopen(file, "w"); + if (!f) return -1; + + fprintf(f, "%s", res); + fclose(f); + + return 0; +} + +void delete_cache() { + struct stat st; + + if (stat("/tmp/farfetch/os", &st) == 0) remove("/tmp/farfetch/os"); + if (stat("/tmp/farfetch/host", &st) == 0) remove("/tmp/farfetch/host"); +#if defined(__linux__) || defined(__sunos) + if (stat("/tmp/farfetch/distro", &st) == 0) remove("/tmp/farfetch/distro"); +#endif + if (stat("/tmp/farfetch/cpu", &st) == 0) remove("/tmp/farfetch/cpu"); + if (stat("/tmp/farfetch/gpu", &st) == 0) remove("/tmp/farfetch/gpu"); +} +#endif diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..ba72d4f --- /dev/null +++ b/src/common.h @@ -0,0 +1,12 @@ +#ifndef COMMON_H +#define COMMON_H + +long long int run_command_lld(const char *command); +const char *run_command_s(const char *command); +#if !defined(__HAIKU__) +const char *from_cache(const char *file); +int to_cache(const char *file, const char *res); +void delete_cache(); +#endif + +#endif diff --git a/src/config.c b/src/config.c new file mode 100644 index 0000000..8850af1 --- /dev/null +++ b/src/config.c @@ -0,0 +1,297 @@ +#include +#include +#include +#include +#include +#include + +#include "config.h" +#include "logo/colors.h" +#if defined(__OpenBSD__) +#include "logo/openbsd.h" +#elif defined(__NetBSD__) +#include "logo/netbsd.h" +#elif defined(__FreeBSD__) +#include "logo/freebsd.h" +#elif defined(__linux__) +#include "logo/linux.h" +#include "distro.h" +#elif defined(__sun) +#include "logo/sunos.h" +#elif defined(__APPLE__) +#include "logo/macos.h" +#elif defined(__HAIKU__) +#include "logo/haiku.h" +#endif + +bool islogob = true; +bool islogos = false; +bool islogod = true; +bool islogocustom = false; +#if defined(__linux__) || defined(__sunos) +bool islogodistro = false; +char *distrostring; +#endif +bool isos = true; +bool ishost = true; +#if defined(__linux__) || defined(__sunos) +bool isdistro = true; +#endif +bool isuptime = true; +#if defined(__OpenBSD__) +bool isrecording = true; +#endif +bool ispackages = true; +bool islibc = true; +bool isresolution = true; +bool iswm = true; +bool isshell = true; +bool iscpu = true; +bool isgpu = true; +bool ismemory = true; +bool isstorage = true; +bool isbiglogo = false; +bool issmalllogo = false; +bool mkbiglogo = false; +bool mksmalllogo = false; +size_t biglogoi = 0; +size_t smalllogoi = 0; +const char *customcolor; +const char *customtitlecolor; +const char *customlogobig; +const char *customlogosmall; + +void rmstr(char *str, const char *sub) { + char *pos; + size_t len = strlen(sub); + + while ((pos = strstr(str, sub)) != NULL) { + memmove(pos, pos + len, strlen(pos + len) + 1); + } +} + +const char *applycolor(const char *color) { + if (strncmp(color, "grey", 4) == 0) return GREY; + else if (strncmp(color, "red", 3) == 0) return RED; + else if (strncmp(color, "green", 5) == 0) return GREEN; + else if (strncmp(color, "yellow", 6) == 0) return YELLOW; + else if (strncmp(color, "blue", 4) == 0) return BLUE; + else if (strncmp(color, "magenta", 7) == 0) return MAGENTA; + else if (strncmp(color, "cyan", 4) == 0) return CYAN; + else if (strncmp(color, "white", 5) == 0) return WHITE; + return RESET; +} + +char *colrep(const char *str, const char *old, const char *new) { + char *res; + int i, count = 0; + int nlen = strlen(new); + int olen = strlen(old); + + for (i = 0; str[i] != '\0'; i++) { + if (strstr(&str[i], old) == &str[i]) { + count++; + i += olen - 1; + } + } + + res = (char *)malloc(i + count * (nlen - olen) + 1); + if (!res) { + return NULL; + } + + i = 0; + while (*str) { + if (strstr(str, old) == str) { + memcpy(&res[i], new, strlen(new)); + i += nlen; + str += olen; + } else { + res[i++] = *str++; + } + } + + res[i] = '\0'; + return res; +} + +bool containvocab(const char *line, const char *word) { + const char *p = line; + size_t len = strlen(word); + while ((p = strstr(p, word)) != NULL) { + if ( + (p == line || !isalnum((unsigned char)p[-1])) && + !isalnum((unsigned char)p[len]) + ) return true; + + p += len; + } + + return false; +} + +void getconf() { + char *homedir = getenv("HOME"); + if (homedir == NULL) { + perror("ホームディレクトリを受取に失敗"); + return; + } + +#if defined(__HAIKU__) + char *basedir = "/config/settings/"; +#else + char *basedir = "/.config/"; +#endif + + int alllen = snprintf(NULL, 0, "%s%s%s", homedir, basedir, "farfetch.conf") + 1; + char *cnfpath = malloc(alllen); + if (cnfpath == NULL) { + perror("メモリを割当に失敗"); + return; + } + + snprintf(cnfpath, alllen, "%s%s%s", homedir, basedir, "farfetch.conf"); + + if (access(cnfpath, F_OK) != 0) { + free(cnfpath); + return; + } + + FILE *file = fopen(cnfpath, "r"); + free(cnfpath); + if (!file) { + return; + } + + char line[256]; + while (fgets(line, sizeof(line), file)) { + if (line[0] == '#' || line[0] == '\n') continue; + if (strstr(line, "hide ") != NULL) { + if (containvocab(line, "logo")) islogod = false; + if (containvocab(line, "os")) isos = false; + if (containvocab(line, "host")) ishost = false; +#if defined(__linux__) || defined(__sunos) + if (containvocab(line, "distro")) isdistro = false; +#endif + if (containvocab(line, "uptime")) isuptime = false; +#if defined (__OpenBSD__) + if (containvocab(line, "recording")) isrecording = false; +#endif + if (containvocab(line, "packages")) ispackages = false; + if (containvocab(line, "libc")) islibc = false; + if (containvocab(line, "resolution")) isresolution = false; + if (containvocab(line, "wm")) iswm = false; + if (containvocab(line, "shell")) isshell = false; + if (containvocab(line, "cpu")) iscpu = false; + if (containvocab(line, "gpu")) isgpu = false; + if (containvocab(line, "memory")) ismemory = false; + if (containvocab(line, "storage")) isstorage = false; + } + + // 色 + if (strstr(line, "set color") != NULL) { + char color[10]; + sscanf(line, "set color %s", color); + customcolor = applycolor(color); + } + if (strstr(line, "set titlecolor") != NULL) { + char color[10]; + sscanf(line, "set titlecolor %s", color); + customtitlecolor = applycolor(color); + } + + // デフォルトは大きいロゴ + if (strstr(line, "show logo") != NULL) { + if (containvocab(line, "small")) { + islogob = false; + islogos = true; + } else { + islogob = true; + islogos = false; + } + + if (containvocab(line, "custom")) { + islogocustom = true; +#if defined(__linux__) || defined(__sunos) + } else { + distrostring = strdup(line); + if (!distrostring) { + perror("メモリの役割に失敗"); + return; + } + rmstr(distrostring, "show logo"); + if (containvocab(line, "small")) rmstr(distrostring, "small"); + else rmstr(distrostring, "big"); + rmstr(distrostring, "\n"); + rmstr(distrostring, " "); + + if (is_distro(distrostring)) islogodistro = true; + else distrostring = NULL; +#endif + } + } + + // カスタムロゴ + if (strstr(line, "define custom big logo:") != NULL) { + mkbiglogo = true; + } + if (strstr(line, "define custom small logo:") != NULL) { + mksmalllogo = true; + } + + if (mkbiglogo && islogocustom && islogob) { + isbiglogo = true; + if (strstr(line, "define custom big logo:") != NULL) { + continue; + } else if (strstr(line, "EOL") != NULL) { + mkbiglogo = false; + } else if (biglogoi < logosize) { + LOGO[biglogoi] = strdup(line); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[GREY]", GREY); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[RED]", RED); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[GREEN]", GREEN); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[YELLOW]", YELLOW); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[BLUE]", BLUE); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[MAGENTA]", MAGENTA); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[CYAN]", CYAN); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[WHITE]", WHITE); + LOGO[biglogoi] = colrep(LOGO[biglogoi], "[RESET]", RESET); + size_t len = strlen(LOGO[biglogoi]); + if (len > 0 && LOGO[biglogoi][len - 1] == '\n') { + LOGO[biglogoi][len - 1] = '\0'; + } + biglogoi++; + free(LOGO[biglogoi]); + } + } + + if (mksmalllogo && islogocustom && islogos) { + issmalllogo = true; + if (strstr(line, "define custom small logo:") != NULL) { + continue; + } else if (strstr(line, "EOL") != NULL) { + mksmalllogo = false; + } else if (smalllogoi < MIN_SIZE) { + LOGO_SMALL[smalllogoi] = strdup(line); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[GREY]", GREY); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[RED]", RED); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[GREEN]", GREEN); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[YELLOW]", YELLOW); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[BLUE]", BLUE); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[MAGENTA]", MAGENTA); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[CYAN]", CYAN); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[WHITE]", WHITE); + LOGO_SMALL[smalllogoi] = colrep(LOGO_SMALL[smalllogoi], "[RESET]", RESET); + size_t len = strlen(LOGO_SMALL[smalllogoi]); + if (len > 0 && LOGO_SMALL[smalllogoi][len - 1] == '\n') { + LOGO_SMALL[smalllogoi][len - 1] = '\0'; + } + smalllogoi++; + free(LOGO[smalllogoi]); + } + } + } + + fclose(file); + return; +} diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..bc12b12 --- /dev/null +++ b/src/config.h @@ -0,0 +1,44 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include +#include + +extern bool islogob; +extern bool islogos; +extern bool islogod; +extern bool islogocustom; +#if defined(__linux__) || defined(__sunos) +extern bool islogodistro; +extern char *distrostring; +#endif +extern bool isos; +extern bool ishost; +#if defined(__linux__) || defined(__sunos) +extern bool isdistro; +#endif +extern bool isuptime; +#if defined(__OpenBSD__) +extern bool isrecording; +#endif +extern bool ispackages; +extern bool islibc; +extern bool isresolution; +extern bool iswm; +extern bool isshell; +extern bool iscpu; +extern bool isgpu; +extern bool ismemory; +extern bool isstorage; +extern bool isbiglogo; +extern bool issmalllogo; +extern size_t biglogoi; +extern size_t smalllogoi; +extern const char *customcolor; +extern const char *customtitlecolor; +extern const char *customlogobig; +extern const char *customlogosmall; + +void getconf(); + +#endif diff --git a/src/cpu.c b/src/cpu.c new file mode 100644 index 0000000..b5a581d --- /dev/null +++ b/src/cpu.c @@ -0,0 +1,137 @@ +#include "cpu.h" +#include "common.h" +#include +#include + +#if defined(__OpenBSD__) +#include +#include +#include + +void rm_junk(char *str, const char *sub) { + char *pos; + size_t len = strlen(sub); + + while ((pos = strstr(str, sub)) != NULL) + memmove(pos, pos + len, strlen(pos + len) + 1); +} + +const char *display_cpu() { + char *out = NULL; + char *model = NULL; + model = malloc(1024); + if (!model) return NULL; + long long ncpu = 0; + + int mib[2]; + size_t len = 1024; + + // hw.model + mib[0] = CTL_HW; + mib[1] = HW_MODEL; + if (sysctl(mib, 2, model, &len, NULL, 0) != 0) { + perror("sysctl"); + free(model); + return NULL; + } + + // ゴミ文字の消し + rm_junk(model, "CPU "); + rm_junk(model, "Processor "); + rm_junk(model, "(R)"); + rm_junk(model, "(TM)"); + + // hw.ncpu + mib[1] = HW_NCPU; + len = sizeof(ncpu); + if (sysctl(mib, 2, &ncpu, &len, NULL, 0) != 0) { + perror("sysctl"); + free(model); + return NULL; + } + + out = malloc(strlen(model) + 20); + if (!out) { + free(model); + return NULL; + } + + snprintf(out, strlen(model) + 20, "%s (%lld core)", model, ncpu); + free(model); + + return out; +} +#else +const char *display_cpu() { +#if !defined(__HAIKU__) + const char *out = from_cache("/tmp/farfetch/cpu"); + if (out) return out; +#else + const char *out = NULL; +#endif + char *cmd = NULL; + +#if defined(__NetBSD__) + cmd = malloc(256); + if (!cmd) return NULL; + snprintf(cmd, 256, "sysctl -n machdep.cpu_brand | sed 's/(R)//' | " + "sed 's/(TM)//' | sed 's/CPU //' | sed 's/Processor//' && " + "echo \" (\" && sysctl -n hw.ncpu && echo \" core)\""); +#elif defined(__FreeBSD__) + cmd = malloc(1024); + if (!cmd) return NULL; + snprintf(cmd, 1024, "sysctl -n hw.model | sed 's/(R)//' | " + "sed 's/(TM)//' | sed 's/CPU //' | sed 's/ Processor//' && " + "echo \" (\" && sysctl -n hw.ncpu && echo \" core)\""); +#elif defined(__sun) + cmd = malloc(1024); + if (!cmd) return NULL; + snprintf(cmd, 1024, "psrinfo -pv | tail -1 | " + "sed 's/(r)//g; s/ CPU//; s/^ *//; s/ $//' | awk '{$1=$1};1' && " + "echo \" (\" && psrinfo -p && echo \" core)\""); +#elif defined(__linux__) + cmd = "cat /proc/cpuinfo | awk -F '\\\\s*: | @' " + "'/model name|Hardware|Processor|^cpu model|chip type|^cpu type/ { " + "cpu=$2; if ($1 == \"Hardware\") exit } END { print cpu }' | " + "sed 's/(R)//' | sed 's/(TM)//' | sed 's/CPU //' | sed 's/ Processor//' | " + "sed 's/ [0-9]-Core//' && echo \" @ \" && " + "cat /proc/cpuinfo | grep \"cpu MHz\" | sort -nr | head -1 | " + "sed 's/^.*: //' | awk '{printf \"%.2f\", $1/1000}' && " + "echo \"GHz (\" && nproc && echo \" core)\""; +#elif defined(__HAIKU__) + const char *cpuname = run_command_s("sysinfo | grep \"CPU #0:\" | " + "sed 's/CPU #0: \"'// | sed 's/\"//' | sed 's/(R)//' | sed 's/(TM)//' | " + "sed 's/^.* Gen //' | sed 's/CPU //' | sed 's/ Processor//'"); + const char *freq = run_command_s("sysinfo | grep -A1 \"CPU #0\" | tail -1 | " + "sed 's/^.*: //' | awk '{ printf \"%.2f\", $1 / 1000 }'"); + long long int proc = run_command_lld("nproc"); + + cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) return NULL; + + snprintf(cmd, 128, "%s @ %sGHz (%lld core)", cpuname, freq, proc); + + free((void *)cpuname); + free((void *)freq); +#elif defined(__APPLE__) + cmd = malloc(1024); + if (!cmd) return NULL; + snprintf(cmd, 1024, "sysctl -n machdep.cpu.brand_string | sed 's/(R)//' | " + "sed 's/(TM)//' | sed 's/CPU //' | sed 's/ Processor//' && " + "echo \" (\" && sysctl -n hw.logicalcpu_max && echo \" core)\""); +#else + return NULL; +#endif + + if (!cmd) return NULL; + out = run_command_s(cmd); +#if !defined(__linux__) + free(cmd); +#endif +#if !defined(__HAIKU__) + to_cache("/tmp/farfetch/cpu", out); +#endif + + return out; +} +#endif diff --git a/src/cpu.h b/src/cpu.h new file mode 100644 index 0000000..055764e --- /dev/null +++ b/src/cpu.h @@ -0,0 +1,6 @@ +#ifndef CPU_H +#define CPU_H + +const char *display_cpu(); + +#endif diff --git a/src/distro.c b/src/distro.c new file mode 100644 index 0000000..ba96bfe --- /dev/null +++ b/src/distro.c @@ -0,0 +1,180 @@ +#if defined(__linux__) || defined(__sun) +#include "distro.h" +#include "common.h" + +#include +#include +#include +#include + +const char *distroname; + +bool is_distro(const char *buf) { +#if defined(__sunos) + if (strncmp(buf, "openindiana") == 0) return 1; + else if (strncmp(buf, "omnios") == 0) return 1; + else if (strncmp(buf, "solaris") == 0) return 1; +#else + if (strncmp(buf, "alpine", sizeof("alpine")) == 0) return 1; + else if (strncmp(buf, "arch", sizeof("arch")) == 0) return 1; + else if (strncmp(buf, "arco", sizeof("arco")) == 0) return 1; + else if (strncmp(buf, "artix", sizeof("artix")) == 0) return 1; + else if (strncmp(buf, "centos", sizeof("centos")) == 0) return 1; + else if (strncmp(buf, "crux", sizeof("crux")) == 0) return 1; + else if (strncmp(buf, "debian", sizeof("debian")) == 0) return 1; + else if (strncmp(buf, "devuan", sizeof("devuan")) == 0) return 1; + else if (strncmp(buf, "fedora", sizeof("fedora")) == 0) return 1; + else if (strncmp(buf, "gentoo", sizeof("gentoo")) == 0) return 1; + else if (strncmp(buf, "hyperbola", sizeof("hyperbola")) == 0) return 1; + else if (strncmp(buf, "linuxmint", sizeof("linuxmint")) == 0) return 1; + else if (strncmp(buf, "manjaro", sizeof("manjaro")) == 0) return 1; + else if (strncmp(buf, "opensuse", sizeof("opensuse")) == 0) return 1; + else if (strncmp(buf, "parabola", sizeof("parabola")) == 0) return 1; + else if (strncmp(buf, "popos", sizeof("popos")) == 0) return 1; + else if (strncmp(buf, "postmarketos", sizeof("postmarketos")) == 0) return 1; + else if (strncmp(buf, "redhat", sizeof("redhat")) == 0) return 1; + else if (strncmp(buf, "rocky", sizeof("rocky")) == 0) return 1; + else if (strncmp(buf, "ubuntu", sizeof("ubuntu")) == 0) return 1; + else if (strncmp(buf, "void", sizeof("void")) == 0) return 1; + else if (strncmp(buf, "linux", sizeof("linux"))) return 1; +#endif + + return 0; +} + +const char *display_distro() { + char buf[1288]; + char *out = NULL; + size_t outsize = 0; + + const char *cmd = from_cache("/tmp/farfetch/distro"); + + if (cmd) { + return cmd; + } + + if (access("/bedrock/etc/bedrock-release", F_OK) != -1) { + cmd = "cat /bedrock/etc/bedrock-release | grep '^PRETTY_NAME' | " + "cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/redstar-release", F_OK) != -1) { + cmd = "echo \"Red Star OS\" && cat /etc/redstar-release | " + "awk -F'[^0-9]' '$0=$2'"; + } else if (access("/etc/siduction-version", F_OK) != -1) { + cmd = "echo \"Siduction\" && lsb_release -sic | " + "grep '^PRETTY_NAME' | cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/mcst_version", F_OK) != -1) { + cmd = "echo \"OS Elbrus\" && cat /etc/mcst_version | " + "grep '^PRETTY_NAME' | cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/GoboLinuxVersion", F_OK) != -1) { + cmd = "echo \"GoboLinux\" && cat /etc/GoboLinuxVersion | " + "grep '^PRETTY_NAME' | cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/os-release", F_OK) != -1) { + cmd = "if grep -q \"^PRETTY_NAME=\" /etc/os-release; then " + "grep '^PRETTY_NAME=' /etc/os-release | cut -d \"=\" -f2 | tr -d '\"'; " + "else " + "grep '^NAME=' /etc/os-release | cut -d \"=\" -f2 | tr -d '\"'; " + "fi"; + } else if (access("/usr/lib/os-release", F_OK) != -1) { + cmd = "cat /usr/lib/os-release | " + "grep '^PRETTY_NAME' | cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/openwrt_release", F_OK) != -1) { + cmd = "cat /etc/openwrt_release | " + "grep '^PRETTY_NAME' | cut -d '=' -f2 | tr -d '\"'"; + } else if (access("/etc/lsb-release", F_OK) != -1) { + cmd = "cat /etc/lsb-release | " + "grep '^DISTRIB_DESCRIPTION' | cut -d '=' -f2 | tr -d '\"'"; + } else { + perror("不明なディストリビューション。"); + } + + FILE *p = popen(cmd, "r"); + if (!p) { + fprintf(stderr, "ディストロを見つけられるコマンドを実効に失敗: %s", cmd); + return NULL; + } + + while (fgets(buf, sizeof(buf), p) != NULL) { + buf[strcspn(buf, "\n")] = '\0'; + + size_t len = strlen(buf); + char *nout = realloc(out, outsize + len + 1); + if (nout == NULL) { + perror("メモリの役割に失敗"); + free(out); + pclose(p); + return NULL; + } + + out = nout; + memccpy(out + outsize, buf, sizeof(buf), len); + outsize += len; + out[outsize] = '\0'; + } + + to_cache("/tmp/farfetch/distro", out); + pclose(p); + + return out; +} + +void get_distro() { + const char *buf = display_distro(); + if (!buf) { +#if defined(__sunos) + distroname = "solaris"; +#else + distroname = "linux"; +#endif + return; + } + + if (strstr(buf, "Alpine") != NULL) distroname = "alpine"; + else if (strstr(buf, "Arch Linux") != NULL) distroname = "arch"; + else if (strstr(buf, "ArcoLinux") != NULL) distroname = "arco"; + else if (strstr(buf, "Artix Linux") != NULL) distroname = "artix"; + else if (strstr(buf, "CentOS") != NULL) distroname = "centos"; + else if (strstr(buf, "CRUX") != NULL) distroname = "crux"; + else if (strstr(buf, "Debian") != NULL) distroname = "debian"; + else if (strstr(buf, "Devuan") != NULL) distroname = "devuan"; + else if (strstr(buf, "Fedora") != NULL) distroname = "fedora"; + else if (strstr(buf, "Gentoo") != NULL) distroname = "gentoo"; + else if (strstr(buf, "Hyperbola") != NULL) distroname = "hyperbola"; + else if (strstr(buf, "Linux Mint") != NULL) distroname = "linuxmint"; + else if (strstr(buf, "Manjaro") != NULL) distroname = "manjaro"; + else if (strstr(buf, "OpenIndiana") != NULL) distroname = "openindiana"; + else if (strstr(buf, "openSUSE") != NULL) distroname = "opensuse"; + else if (strstr(buf, "OmniOS") != NULL) distroname = "omnios"; + else if (strstr(buf, "Parabola") != NULL) distroname = "parabola"; + else if (strstr(buf, "Pop!_OS") != NULL) distroname = "popos"; + else if (strstr(buf, "postmarketOS") != NULL) distroname = "postmarketos"; + else if (strstr(buf, "Red Hat") != NULL) distroname = "redhat"; + else if (strstr(buf, "Rocky") != NULL) distroname = "rocky"; + else if (strstr(buf, "Ubuntu") != NULL) distroname = "ubuntu"; + else if (strstr(buf, "Void Linux") != NULL) distroname = "void"; +#if defined(__sunos) + else distroname = "solaris"; +#else + else distroname = "linux"; +#endif + + if (strncmp(distroname, "ubuntu", strlen("ubuntu")) == 0) { + const char *desktop = run_command_s("echo $XDG_CURRENT_DESKTOP"); + if (strncmp(desktop, "KDE", strlen("KDE")) == 0) distroname = "kubuntu"; + else if (strncmp(desktop, "XFCE", strlen("XFCE")) == 0) distroname = "xubuntu"; + else if (strncmp(desktop, "LXQt", strlen("LXQt")) == 0) distroname = "lubuntu"; + else if (strncmp(desktop, "MATE", strlen("MATE")) == 0) distroname = "ubuntumate"; + else if (strncmp(desktop, "X-Cinnamon", strlen("X-Cinnamon")) == 0) + distroname = "ubuntucinnamon"; + else if (strncmp(desktop, "Budgie:GNOME", strlen("Budgie:GNOME")) == 0) + distroname = "ubuntubudgie"; + else if (strncmp(desktop, "Lomiri", strlen("Lomiri")) == 0) + distroname = "ubuntulomiri"; + else if (strncmp( + desktop, + "Unity:Unity7:ubuntu", + strlen("Unity:Unity7:ubuntu") + ) == 0) + distroname = "ubuntuunity"; + } +} +#endif diff --git a/src/distro.h b/src/distro.h new file mode 100644 index 0000000..22c4d89 --- /dev/null +++ b/src/distro.h @@ -0,0 +1,14 @@ +#if defined(__linux__) || defined(__sun) +#ifndef DISTRO_H +#define DISTRO_H + +#include + +bool is_distro(const char *buf); +const char *display_distro(); +void get_distro(); + +extern const char *distroname; + +#endif +#endif diff --git a/src/gpu.c b/src/gpu.c new file mode 100644 index 0000000..4ab0d04 --- /dev/null +++ b/src/gpu.c @@ -0,0 +1,143 @@ +#include "gpu.h" +#include "common.h" +#include +#include + +#if !defined(__OpenBSD__) && !defined(__NetBSD__) && !defined(__FreeBSD__) &&\ + !defined(__linux__) && !defined(__DragonFly__) && !defined(__APPLE__) &&\ + !defined(__HAIKU__) +#include +#endif + +#if defined(__FreeBSD__) || defined(__Dragonfly__) || defined(__HAIKU__) +#include +#endif + +const char *display_gpu() { +#if !defined(__HAIKU__) + const char *out = from_cache("/tmp/farfetch/gpu"); + if (out) return out; +#else + const char *out = NULL; +#endif + char *cmd = NULL; + +#if defined(__OpenBSD__) || defined(__NetBSD__) + cmd = malloc(2048); + if (!cmd) return NULL; + snprintf(cmd, 2048, "dmesg | " + "if [ \"$(dmesg | grep \"radeondrm.* at pci.*\")\" ]; " + "then grep -i \"radeondrm.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"inteldrm.* at pci.*\")\" ]; " + "then grep -i \"inteldrm.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"amdgpu.* at pci.*\")\" ]; " + "then grep -i \"amdgpu.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"agp.* at intagp.*\")\" ]; " + "then grep -i \"agp.* at intagp.*\"; " + "elif [ \"$(dmesg | grep \"intagp.* at inteldrm.*\")\" ]; " + "then grep -i \"intagp.* at inteldrm.*\"; " + "elif [ \"$(dmesg | grep \"drm.* at inteldrm.*\")\" ]; " + "then grep -i \"drm.* at inteldrm.*\"; " + "elif [ \"$(dmesg | grep \"drm.* at radeondrm.*\")\" ]; " + "then grep -i \"drm.* at radeondrm.*\"; " + "elif [ \"$(dmesg | grep \"drm.* at amdgpu.*\")\" ]; " + "then grep -i \"drm.* at amdgpu.*\"; " + "elif [ \"$(dmesg | grep \"wsdisplay.* at amdgpu.*\")\" ]; " + "then grep -i \"wsdisplay.* at amdgpu.*\"; " + "elif [ \"$(dmesg | grep \"i915drmkms.* at pci.*\")\" ]; " + "then grep -i \"i915drmkms.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"nouveau.* at pci.*\")\" ]; " + "then grep -i \"nouveau.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"radeon.* at pci.*\")\" ]; " + "then grep -i \"radeon.* at pci.*\"; " + "elif [ \"$(dmesg | grep \"rkdrm.* at fdt.*\")\" ]; " + "then grep -i \"rkdrm.* at fdt.*\"; " + "elif [ \"$(dmesg | grep \"sunxidrm.* at fdt.*\")\" ]; " + "then grep -i \"sunxidrm.* at fdt.*\"; " + "elif [ \"$(dmesg | grep \"tegradrm.* at fdt.*\")\" ]; " + "then grep -i \"tegradrm.* at fdt.*\"; " + "elif [ \"$(dmesg | grep \"viadrmums.* at drm.*\")\" ]; " + "then grep -i \"viadrmums.* at drm.*\"; " + "else grep -i \"graphics\"; fi | " + "sed 's/^.*: //' | " + "sed 's/^.* \"//' | " + "sed 's/\".*$//' | head -1"); +#elif defined(__FreeBSD__) || defined(__DragonFly__) + const char *test = run_command_s("pciconf -lv | grep -B 4 -F \"VGA\" | head -1"); + if (!strstr(test, "vgapci")) { + free((void *)test); + return NULL; + } + + free((void *)test); + + cmd = malloc(256); + if (!cmd) return NULL; + snprintf(cmd, 256, "pciconf -lv | grep -B 4 -F \"VGA\" | " + "grep -F \"device\" | sed 's/^.* device//' | " + "sed \"s/^.* '//\" | sed \"s/'//\" | tail -1 | " + "sed 's/ Core Processor Integrated Graphics Controller//'"); +#elif defined(__sun) + cmd = malloc(512); + if (!cmd) return NULL; + snprintf(cmd, 512, "prtconf -v | grep -A 30 \"value='display'\" | " + "grep -A 1 vendor-name | tail -1 | sed 's/^.*value=//' | sed \"s/'//g\" | " + "sed 's/ Corporation//' && echo \" \" && prtconf -v | " + "grep -A 30 \"value='display'\" | grep -A 1 device-name | tail -1 | " + "sed 's/^.*value=//' | sed \"s/'//g\""); +#elif defined(__linux__) + cmd = malloc(256); + if (!cmd) return NULL; + snprintf(cmd, 256, "lspci | grep VGA | sed 's/^.*: //' | " + "sed 's/Corporation //' | sed 's/ (.*$//' | " + "sed 's/Advanced Micro Devices//' | " + "sed 's/, Inc. //' | sed 's/Navi [0-9]* //' | " + "sed 's/\\[//g' | sed 's/\\]//g'"); +#elif defined(__APPLE__) + cmd = malloc(128); + if (!cmd) return NULL; + snprintf(cmd, 128, "system_profiler SPDisplaysDataType | " + "awk -F': ' '/^ *Chipset Model:/ {printf $2 \", \"}'"); +#elif defined(__HAIKU__) + const char *vendor = run_command_s("listdev | grep -A1 \"device Display\" | " + "tail -1 | sed 's/^.*: //' | sed 's/ Corporation//'"); + const char *device = run_command_s("listdev | grep -A2 \"device Display\" | " + "tail -1 | sed 's/^.*: //'"); + + char *cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) return NULL; + + if (strncmp(vendor, device, strlen(device)) == 0) { + snprintf(cmd, 128, "%s", device); + free((void *)device); + } else { + snprintf(cmd, 128, "%s %s", device, vendor); + free((void *)device); + free((void *)vendor); + } +#else + if ( + access("/bin/glxinfo", F_OK) == -1 && + access("/usr/bin/glxinfo", F_OK) == -1 && + access("/usr/local/bin/glxinfo", F_OK) == -1 && + access("/usr/X11R6/bin/glxinfo", F_OK) == -1 && + access("/usr/X11R7/bin/glxinfo", F_OK) == -1 && + access("/usr/pkg/bin/glxinfo", F_OK) == -1 + ) return NULL; + + cmd = malloc(256); + if (!cmd) return NULL; + snprintf(cmd, 256, "glxinfo -B | grep -F 'OpenGL renderer string' | " + "sed 's/OpenGL renderer string: //' | sed 's/Mesa //' | " + "sed 's/DRI //' | sed 's/(R)//' | sed 's/(.*$//'"); +#endif + + if (!cmd) return NULL; + out = run_command_s(cmd); + free((void *)cmd); +#if !defined(__HAIKU__) + if (out) to_cache("/tmp/farfetch/gpu", out); +#endif + + return out; +} diff --git a/src/gpu.h b/src/gpu.h new file mode 100644 index 0000000..0d4a787 --- /dev/null +++ b/src/gpu.h @@ -0,0 +1,6 @@ +#ifndef GPU_H +#define GPU_H + +const char *display_gpu(); + +#endif diff --git a/src/host.c b/src/host.c new file mode 100644 index 0000000..27def8c --- /dev/null +++ b/src/host.c @@ -0,0 +1,86 @@ +#include "host.h" +#include "common.h" + +#include +#include +#include + +#if defined(__linux__) +#include +#endif + +const char *display_host() { +#if !defined(__HAIKU__) + char *out = (char *)from_cache("/tmp/farfetch/host"); + if (out) return out; +#else + char *out = NULL; +#endif + const char *cmd = NULL; + +#if defined(__OpenBSD__) + cmd = "sysctl -n hw.vendor && echo \" \" && " + "if [ \"$(sysctl -n hw.version 2>&1)\" != " + "\"sysctl: hw.version: value is not available\" ]; then " + "sysctl -n hw.version && echo \" \"; fi && " + "sysctl -n hw.product"; +#elif defined(__FreeBSD__) + cmd = "kenv | grep smbios.system.family | sed 's/\"//g' | " + "sed 's/smbios.system.family=//' && " + "kenv | grep smbios.system.version | sed 's/\"//g' | " + "sed 's/smbios.system.version=//' && " + "kenv | grep smbios.system.product | sed 's/\"//g' | " + "sed 's/smbios.system.product=//' && " + "kenv | grep smbios.system.maker | sed 's/\"//g' | " + "sed 's/smbios.system.maker=//'"; +#elif defined(__NetBSD__) + cmd = "sysctl -n machdep.dmi.system-vendor && " + "echo \" \" && sysctl -n machdep.dmi.system-version && " + "echo \" \" && sysctl -n machdep.dmi.system-product"; +#elif defined(__sun) + cmd = "smbios | grep \"Product\" | " + "sed 's/ Product: //' | awk '{$1=$1};1' | head -1"; +#elif defined(__linux__) + const char *pre_cmd = NULL; + + if (access("/system/app/", F_OK) != -1) { + pre_cmd = "getprop ro.product.brand && echo \" \" && getprop ro.product.model"; + } else if ( + access("/sys/devices/virtual/dmi/id/product_name", F_OK) != -1 && + access("/sys/devices/virtual/dmi/id/product_version", F_OK) != 1 + ) { + pre_cmd = "cat /sys/devices/virtual/dmi/id/product_name && echo \" \" && " + "cat /sys/devices/virtual/dmi/id/product_version"; + } else if (access("/sys/firmware/devicetree/base/model", F_OK) != -1) { + pre_cmd = "cat /sys/firmware/devicetree/base/model"; + } else if (access("/tmp/sysinfo/model", F_OK) != 1) { + pre_cmd = "cat /tmp/sysinfo/model"; + } else { + return "Unknown"; + } + + size_t cmdlen = 1024; + cmd = malloc(cmdlen); + if (!cmd) return "Unknown"; + + snprintf((char *)cmd, cmdlen, "%s | sed '/To be filled by O.E.M./d; " + "/To Be Filled By O.E.M./d; /OEM/d; /Not Applicable/d; " + "/System Product Name/d; /System Version/d; /Undefined/d; /Default string/d; " + "/Not Specified/d; /Type1ProductConfigId/d; /INVALID/d; " + "/All Series/d' ", pre_cmd); +#elif defined(__APPLE__) + cmd = "sysctl -n hw.model"; +#endif + + if (!cmd) return "Unknown"; + + out = (char *)run_command_s(cmd); +#if defined(__linux__) + free((void *)cmd); +#endif +#if !defined(__HAIKU__) + to_cache("/tmp/farfetch/host", out); +#endif + + return out; +} diff --git a/src/host.h b/src/host.h new file mode 100644 index 0000000..ded843c --- /dev/null +++ b/src/host.h @@ -0,0 +1,6 @@ +#ifndef HOST_H +#define HOST_H + +const char *display_host(); + +#endif diff --git a/src/libc.c b/src/libc.c new file mode 100644 index 0000000..e739976 --- /dev/null +++ b/src/libc.c @@ -0,0 +1,24 @@ +#include "libc.h" +#include "common.h" + +#include +#include +#include + +const char *display_libc() { +#if defined(__linux__) + const char *musl = run_command_s("ldd $(which ls) | grep libc | grep musl"); + if (musl != NULL && strlen(musl) != 0) { + free((void *)musl); + return "musl"; + } + + const char *glibc = run_command_s("ldd $(which ls) | grep libc | grep gnu"); + if (glibc != NULL && strlen(glibc) != 0) { + free((void *)glibc); + return "glibc"; + } +#endif + + return NULL; +} diff --git a/src/libc.h b/src/libc.h new file mode 100644 index 0000000..0558a77 --- /dev/null +++ b/src/libc.h @@ -0,0 +1,6 @@ +#ifndef LIBC_H +#define LIBC_H + +const char *display_libc(); + +#endif diff --git a/src/logo/colors.h b/src/logo/colors.h new file mode 100644 index 0000000..8d773b2 --- /dev/null +++ b/src/logo/colors.h @@ -0,0 +1,22 @@ +#ifndef LOGO_COLORS_H +#define LOGO_COLORS_H + +#if defined(__OpenBSD__) || defined(__linux__) || defined(__sun) +#define MIN_SIZE 15 +#else +#define MIN_SIZE 14 +#endif + +#define LOGO_SIZE 24 + +#define GREY "\e[1;30m" +#define RED "\e[1;31m" +#define GREEN "\e[1;32m" +#define YELLOW "\e[1;33m" +#define BLUE "\e[1;34m" +#define MAGENTA "\e[1;35m" +#define CYAN "\e[1;36m" +#define WHITE "\e[1;37m" +#define RESET "\e[0m" + +#endif diff --git a/src/logo/freebsd.c b/src/logo/freebsd.c new file mode 100644 index 0000000..bb70374 --- /dev/null +++ b/src/logo/freebsd.c @@ -0,0 +1,80 @@ +#if defined(__FreeBSD__) +#include "freebsd.h" +#include "../config.h" +#include "../resolution.h" +#include "../wm.h" + +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +size_t logosize = 16; +int minsize = MIN_SIZE; + +void getOS() { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + const char *wm = display_wm(); + if (!wm) minsize--; + else free((void *)wm); + + if (!isbiglogo && !issmalllogo) { + for (int i = 0; i < LOGO_SIZE; i++) { + LOGO[i] = NULL; + LOGO_SMALL[i] = NULL; + } + } + + if (!isbiglogo) { + LOGO[0] = WHITE "``` " RED "` " RESET; + LOGO[1] = WHITE " ` `.....---..." RED "....--.``` -/ " RESET; + LOGO[2] = WHITE " +o .--` " RED "/y:` +. " RESET; + LOGO[3] = WHITE " yo`:. " RED ":o `+- " RESET; + LOGO[4] = WHITE " y/ " RED "-/` -o/ " RESET; + LOGO[5] = WHITE " .- " RED "::/sy+:. " RESET; + LOGO[6] = WHITE " / " RED "`-- / " RESET; + LOGO[7] = WHITE " `: " RED ":` " RESET; + LOGO[8] = WHITE " `: " RED ":` " RESET; + LOGO[9] = WHITE " / " RED "/ " RESET; + LOGO[10] = WHITE " .- " RED "-. " RESET; + LOGO[11] = WHITE " -- " RED "-. " RESET; + LOGO[12] = WHITE " `:` " RED "`:` " RESET; + LOGO[13] = RED " .-- `--. " RESET; + LOGO[14] = RED " .---.....----. " RESET; + LOGO[15] = RED " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = RED "/\\,-'''''-,/\\ " RESET; + LOGO_SMALL[1] = RED "\\_) (_/ " RESET; + LOGO_SMALL[2] = RED "| | " RESET; + LOGO_SMALL[3] = RED "| | " RESET; + LOGO_SMALL[4] = RED " ; ; " RESET; + LOGO_SMALL[5] = RED " '-_____-' " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } +} +#endif diff --git a/src/logo/freebsd.h b/src/logo/freebsd.h new file mode 100644 index 0000000..d1cd99a --- /dev/null +++ b/src/logo/freebsd.h @@ -0,0 +1,17 @@ +#if defined(__FreeBSD__) +#ifndef LOGO_FREEBSD_H +#define LOGO_FREEBSD_H + +#include +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern size_t logosize; + +void getOS(); + +#endif +#endif diff --git a/src/logo/haiku.c b/src/logo/haiku.c new file mode 100644 index 0000000..42d8e48 --- /dev/null +++ b/src/logo/haiku.c @@ -0,0 +1,81 @@ +#if defined(__HAIKU__) +#include "haiku.h" +#include "../config.h" +#include "../resolution.h" + +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +size_t logosize = 20; +int minsize = MIN_SIZE; + +void getOS() { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + + if (!isbiglogo && !issmalllogo) { + for (int i = 0; i < LOGO_SIZE; i++) { + LOGO[i] = NULL; + LOGO_SMALL[i] = NULL; + } + } + + if (!isbiglogo) { + LOGO[0] = YELLOW " / " RESET; + LOGO[1] = YELLOW " // " RESET; + LOGO[2] = YELLOW " / \\ " RESET; + LOGO[3] = YELLOW " / - " RESET; + LOGO[4] = YELLOW " / \\ " RESET; + LOGO[5] = YELLOW " \\ \\ " RESET; + LOGO[6] = YELLOW " - / " RESET; + LOGO[7] = YELLOW "/ / " RESET; + LOGO[8] = YELLOW "| \\ " RESET; + LOGO[9] = YELLOW "| \\ " RESET; + LOGO[10] = YELLOW "\\ \\ " RESET; + LOGO[11] = YELLOW "- - " RESET; + LOGO[12] = YELLOW "\\ \\ " RESET; + LOGO[13] = YELLOW " \\ \\ " RESET; + LOGO[14] = YELLOW " \\ / " RESET; + LOGO[15] = YELLOW " \\ / " RESET; + LOGO[16] = YELLOW " \\ / " RESET; + LOGO[17] = YELLOW " | | " RESET; + LOGO[18] = YELLOW " | | " RESET; + LOGO[19] = YELLOW " |_| " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = YELLOW " / " RESET; + LOGO_SMALL[1] = YELLOW " / \\ " RESET; + LOGO_SMALL[2] = YELLOW "/ | " RESET; + LOGO_SMALL[3] = YELLOW "| | " RESET; + LOGO_SMALL[4] = YELLOW "\\ / " RESET; + LOGO_SMALL[5] = YELLOW " || " RESET; + LOGO_SMALL[6] = YELLOW " || " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = YELLOW " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } +} +#endif diff --git a/src/logo/haiku.h b/src/logo/haiku.h new file mode 100644 index 0000000..aec945a --- /dev/null +++ b/src/logo/haiku.h @@ -0,0 +1,17 @@ +#if defined(__HAIKU__) +#ifndef LOGO_HAIKU_H +#define LOGO_HAIKU_H + +#include +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern size_t logosize; + +void getOS(); + +#endif +#endif diff --git a/src/logo/linux.c b/src/logo/linux.c new file mode 100644 index 0000000..ce205a4 --- /dev/null +++ b/src/logo/linux.c @@ -0,0 +1,1652 @@ +#if defined(__linux__) +#include "linux.h" +#include "../config.h" +#include "../resolution.h" +#include "../wm.h" +#include "../libc.h" + +#include +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +const char *logoname; +size_t logosize; +int minsize = MIN_SIZE; + +void getDistro(const char *distroname) { + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + const char *wm = display_wm(); + if (!wm) minsize--; + else free((void *)wm); + const char *clang = display_libc(); + if (clang) minsize++; + + if (logoname == NULL) logoname = distroname; + else { + for (size_t i = 0; i < logosize; i++) { + LOGO[i] = ""; + } + for (int i = 0; i < minsize; i++) { + LOGO_SMALL[i] = ""; + } + } + + if (strncmp((char *)logoname, "alpine", strlen("alpine")) == 0) { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 21; + + if (!isbiglogo) { + LOGO[0] = BLUE " .hddddddddddddddddddddddh. " RESET; + LOGO[1] = BLUE " :dddddddddddddddddddddddddd: " RESET; + LOGO[2] = BLUE " /dddddddddddddddddddddddddddd/ " RESET; + LOGO[3] = BLUE " +dddddddddddddddddddddddddddddd+ " RESET; + LOGO[4] = BLUE " `sdddddddddddddddddddddddddddddddds` " RESET; + LOGO[5] = BLUE " `ydddddddddddd++hdddddddddddddddddddy` " RESET; + LOGO[6] = BLUE ".hddddddddddd+` `+ddddh:-sdddddddddddh. " RESET; + LOGO[7] = BLUE "hdddddddddd+` `+y: .sddddddddddh " RESET; + LOGO[8] = BLUE "ddddddddh+` `//` `.` -sddddddddd " RESET; + LOGO[9] = BLUE "ddddddh+` `/hddh/` `:s- -sddddddd " RESET; + LOGO[10] = BLUE "ddddh+` `/+/dddddh/` `+s- -sddddd " RESET; + LOGO[11] = BLUE "ddd+` `/o` :dddddddh/` `oy- .yddd " RESET; + LOGO[12] = BLUE "hdddyo+ohddyosdddddddddho+oydddy++ohdddh " RESET; + LOGO[13] = BLUE ".hddddddddddddddddddddddddddddddddddddh. " RESET; + LOGO[14] = BLUE " `yddddddddddddddddddddddddddddddddddy` " RESET; + LOGO[15] = BLUE " `sdddddddddddddddddddddddddddddddds` " RESET; + LOGO[16] = BLUE " +dddddddddddddddddddddddddddddd+ " RESET; + LOGO[17] = BLUE " /dddddddddddddddddddddddddddd/ " RESET; + LOGO[18] = BLUE " :dddddddddddddddddddddddddd: " RESET; + LOGO[19] = BLUE " .hddddddddddddddddddddddh. " RESET; + LOGO[20] = BLUE " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " /\\ /\\ " RESET; + LOGO_SMALL[1] = BLUE " /" WHITE "/ " BLUE "\\ \\ " RESET; + LOGO_SMALL[2] = BLUE " /" WHITE "/ " BLUE "\\ \\ " RESET; + LOGO_SMALL[3] = BLUE "/" WHITE "// " BLUE "\\ \\ " RESET; + LOGO_SMALL[4] = WHITE "// " BLUE "\\ \\ " RESET; + LOGO_SMALL[5] = BLUE " \\ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "arch", strlen("arch")) == 0) { + if (!customcolor) color = CYAN; + else color = customcolor; + if (!customtitlecolor) titlecolor = CYAN; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = CYAN " -` " RESET; + LOGO[1] = CYAN " .o+` " RESET; + LOGO[2] = CYAN " `ooo/ " RESET; + LOGO[3] = CYAN " `+oooo: " RESET; + LOGO[4] = CYAN " `+oooooo: " RESET; + LOGO[5] = CYAN " -+oooooo+: " RESET; + LOGO[6] = CYAN " `/:-:++oooo+: " RESET; + LOGO[7] = CYAN " `/++++/+++++++: " RESET; + LOGO[8] = CYAN " `/++++++++++++++: " RESET; + LOGO[9] = CYAN " `/+++ooooooooooooo/` " RESET; + LOGO[10] = CYAN " ./ooosssso++osssssso+` " RESET; + LOGO[11] = CYAN " .oossssso-````/ossssss+` " RESET; + LOGO[12] = CYAN " -osssssso. :ssssssso. " RESET; + LOGO[13] = CYAN " :osssssss/ osssso+++. " RESET; + LOGO[14] = CYAN " /ossssssss/ +ssssooo/- " RESET; + LOGO[15] = CYAN " `/ossssso+/:- -:/+osssso+- " RESET; + LOGO[16] = CYAN " `+sso+:-` `.-/+oso: " RESET; + LOGO[17] = CYAN "`++:. `-/+/ " RESET; + LOGO[18] = CYAN ".` `/ " RESET; + LOGO[19] = CYAN " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = CYAN " /\\ " RESET; + LOGO_SMALL[1] = CYAN " / \\ " RESET; + LOGO_SMALL[2] = CYAN " /\\ \\ " RESET; + LOGO_SMALL[3] = WHITE " / \\ " RESET; + LOGO_SMALL[4] = WHITE " / ,, \\ " RESET; + LOGO_SMALL[5] = WHITE " / | | -\\ " RESET; + LOGO_SMALL[6] = WHITE "/_-'' ''-_\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = CYAN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "arco", strlen("arch")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = WHITE; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = BLUE " /- " RESET; + LOGO[1] = BLUE " ooo: " RESET; + LOGO[2] = BLUE " yoooo/ " RESET; + LOGO[3] = BLUE " yooooooo " RESET; + LOGO[4] = BLUE " yooooooooo " RESET; + LOGO[5] = BLUE " yooooooooooo " RESET; + LOGO[6] = BLUE " .yooooooooooooo " RESET; + LOGO[7] = BLUE " .oooooooooooooooo " RESET; + LOGO[8] = BLUE " .oooooooarcoooooooo " RESET; + LOGO[9] = BLUE " .ooooooooo-oooooooooo " RESET; + LOGO[10] = BLUE " .ooooooooo- oooooooooo " RESET; + LOGO[11] = BLUE " :ooooooooo. :ooooooooo " RESET; + LOGO[12] = BLUE " :ooooooooo. :ooooooooo " RESET; + LOGO[13] = BLUE " :oooarcooo .oooarcooo " RESET; + LOGO[14] = BLUE " :ooooooooy .ooooooooo " RESET; + LOGO[15] = BLUE " :ooooooooo " WHITE "/ooooooooooooooooooo " RESET; + LOGO[16] = BLUE " :ooooooooo " WHITE ".-ooooooooooooooooo. " RESET; + LOGO[17] = BLUE " ooooooooo- " WHITE "-ooooooooooooo. " RESET; + LOGO[18] = BLUE " ooooooooo- " WHITE ".-oooooooooo. " RESET; + LOGO[19] = BLUE "ooooooooo. " WHITE "-ooooooooo " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " A " RESET; + LOGO_SMALL[1] = BLUE " ooo " RESET; + LOGO_SMALL[2] = BLUE " ooooo " RESET; + LOGO_SMALL[3] = BLUE " ooooooo " RESET; + LOGO_SMALL[4] = BLUE " ooooooooo " RESET; + LOGO_SMALL[5] = BLUE " ooooo ooooo " RESET; + LOGO_SMALL[6] = BLUE " ooooo ooooo " RESET; + LOGO_SMALL[7] = BLUE " ooooo ooooo " RESET; + LOGO_SMALL[8] = BLUE " ooooo " WHITE " " RESET; + LOGO_SMALL[9] = BLUE " ooooo " WHITE " " RESET; + LOGO_SMALL[10] = BLUE "ooooo " WHITE " " RESET; + for (int i = 11; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "artix", strlen("artix")) == 0) { + if (!customcolor) color = CYAN; + else color = customcolor; + if (!customtitlecolor) titlecolor = CYAN; + else titlecolor = customtitlecolor; + logosize = 21; + + if (!isbiglogo) { + LOGO[0] = CYAN " ' " RESET; + LOGO[1] = CYAN " 'o' " RESET; + LOGO[2] = CYAN " 'ooo' " RESET; + LOGO[3] = CYAN " 'ooxoo' " RESET; + LOGO[4] = CYAN " 'ooxxxoo' " RESET; + LOGO[5] = CYAN " 'oookkxxoo' " RESET; + LOGO[6] = CYAN " 'oiioxkkxxoo' " RESET; + LOGO[7] = CYAN " ':;:iiiioxxxoo' " RESET; + LOGO[8] = CYAN " `'.;::ioxxoo' " RESET; + LOGO[9] = CYAN " '-. `':;jiooo' " RESET; + LOGO[10] = CYAN " 'oooio-.. `'i:io' " RESET; + LOGO[11] = CYAN " 'ooooxxxxoio:,. `'-;' " RESET; + LOGO[12] = CYAN " 'ooooxxxxxkkxoooIi:-. `' " RESET; + LOGO[13] = CYAN " 'ooooxxxxxkkkkxoiiiiiji' " RESET; + LOGO[14] = CYAN " 'ooooxxxxxkxxoiiii:'` .i' " RESET; + LOGO[15] = CYAN " 'ooooxxxxxoi:::'` .;ioxo' " RESET; + LOGO[16] = CYAN " 'ooooxooi::'` .:iiixkxxo' " RESET; + LOGO[17] = CYAN " 'ooooi:'` `'';ioxxo' " RESET; + LOGO[18] = CYAN " 'i:'` '':io' " RESET; + LOGO[19] = CYAN "'` `' " RESET; + LOGO[20] = CYAN " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = CYAN " /\\ " RESET; + LOGO_SMALL[1] = CYAN " / \\ " RESET; + LOGO_SMALL[2] = CYAN " /`'.,\\ " RESET; + LOGO_SMALL[3] = CYAN " / ', " RESET; + LOGO_SMALL[4] = CYAN " / ,`\\ " RESET; + LOGO_SMALL[5] = CYAN " / ,.'`. \\ " RESET; + LOGO_SMALL[6] = CYAN "/.,'` `'.\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = CYAN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "centos", strlen("centos")) == 0) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = YELLOW; + else titlecolor = customtitlecolor; + logosize = 18; + + if (!isbiglogo) { + LOGO[0] = YELLOW " .. " RESET; + LOGO[1] = YELLOW " .PLTJ. " RESET; + LOGO[2] = YELLOW " <><><><> " RESET; + LOGO[3] = GREEN " KKSSV' 4KKK " YELLOW "LJ" MAGENTA " KKKL.'VSSKK " RESET; + LOGO[4] = GREEN " KKV' 4KKKKK " YELLOW "LJ" MAGENTA " KKKKAL 'VKK " RESET; + LOGO[5] = GREEN " V' ' 'VKKKK " YELLOW "LJ" MAGENTA " KKKKV' ' 'V " RESET; + LOGO[6] = GREEN " .4MA.' 'VKK " YELLOW "LJ" MAGENTA " KKV' '.4Mb. " RESET; + LOGO[7] = GREEN " . KKKKKA.' 'V " YELLOW "LJ" MAGENTA " V' '.4KKKKK . " RESET; + LOGO[8] = GREEN " .4D KKKKKKKA.'' " YELLOW "LJ" MAGENTA " ''.4KKKKKKK FA. " RESET; + LOGO[9] = MAGENTA " " RESET; + LOGO[10] = GREEN " 'VD KKKKKKKK'.. " GREEN "LJ " YELLOW "..'KKKKKKKK FV " RESET; + LOGO[11] = BLUE " ' VKKKKK'. .4 " GREEN "LJ " YELLOW "K. .'KKKKKV ' " RESET; + LOGO[12] = BLUE " 'VK'. .4KK " GREEN "LJ " YELLOW "KKA. .'KV' " RESET; + LOGO[13] = BLUE " A. . .4KKKK " GREEN "LJ " YELLOW "KKKKA. . .4 " RESET; + LOGO[14] = BLUE " KKA. 'KKKKK " GREEN "LJ " YELLOW "KKKKK' .4KK " RESET; + LOGO[15] = BLUE " KKSSA. VKKK " GREEN "LJ " YELLOW "KKKV .4SSKK " RESET; + LOGO[16] = GREEN " <><><><> " RESET; + LOGO[17] = GREEN " 'MKKM' " RESET; + LOGO[18] = GREEN " '' " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " ____" YELLOW "^" MAGENTA "____ " RESET; + LOGO_SMALL[1] = GREEN " |\\ " YELLOW "|" MAGENTA " /| " RESET; + LOGO_SMALL[2] = GREEN " | \\ " YELLOW "|" MAGENTA " / | " RESET; + LOGO_SMALL[3] = MAGENTA "<---- " BLUE "----> " RESET; + LOGO_SMALL[4] = BLUE " | / " GREEN "|" YELLOW " \\ | " RESET; + LOGO_SMALL[5] = BLUE " |/__" GREEN "|" YELLOW "__\\| " RESET; + LOGO_SMALL[6] = GREEN " v " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "crux", strlen("crux")) == 0) { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 19; + + if (!isbiglogo) { + LOGO[0] = BLUE " odddd " RESET; + LOGO[1] = BLUE " oddxkkkxxdoo " RESET; + LOGO[2] = BLUE " ddcoddxxxdoool " RESET; + LOGO[3] = BLUE " xdclodod olol " RESET; + LOGO[4] = BLUE " xoc xdd olol " RESET; + LOGO[5] = BLUE " xdc " MAGENTA "k00" BLUE "Okdlol " RESET; + LOGO[6] = BLUE " xxd" MAGENTA "kOKKKOkd" BLUE "ldd " RESET; + LOGO[7] = BLUE " xdco" MAGENTA "xOkdlo" BLUE "dldd " RESET; + LOGO[8] = BLUE " ddc:cl" MAGENTA "lll" BLUE "oooodo " RESET; + LOGO[9] = BLUE " odxxdd" WHITE "xkO000kx" BLUE "ooxdo " RESET; + LOGO[10] = BLUE " oxdd" WHITE "x0NMMMMMMWW0od" BLUE "kkxo " RESET; + LOGO[11] = BLUE " oooxd" WHITE "0WMMMMMMMMMW0o" BLUE "dxkx " RESET; + LOGO[12] = BLUE "docldkXW" WHITE "MMMMMMMWWN" BLUE "Odolco " RESET; + LOGO[13] = BLUE "xx" MAGENTA "dx" BLUE "kxxOKN" WHITE "WMMWN" BLUE "0xdoxo::c " RESET; + LOGO[14] = MAGENTA "xOkkO" BLUE "0oo" WHITE "odOW" MAGENTA "WW" BLUE "XkdodOxc:l " RESET; + LOGO[15] = MAGENTA "dkkkxkkk" WHITE "OKX" MAGENTA "NNNX0Oxx" BLUE "xc:cd " RESET; + LOGO[16] = MAGENTA " odxxdx" WHITE "xllod" MAGENTA "ddooxx" BLUE "dc:ldo " RESET; + LOGO[17] = MAGENTA " lodd" BLUE "dolccc" MAGENTA "ccox" BLUE "xoloo " RESET; + LOGO[18] = BLUE " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " ___ " RESET; + LOGO_SMALL[1] = BLUE " (" WHITE ".·" BLUE " | " RESET; + LOGO_SMALL[2] = BLUE " (" MAGENTA "<>" BLUE " | " RESET; + LOGO_SMALL[3] = BLUE " / " WHITE "__" BLUE " \\ " RESET; + LOGO_SMALL[4] = BLUE " ( " WHITE "/ \\" BLUE " /| " RESET; + LOGO_SMALL[5] = MAGENTA "_" BLUE "/\\ "WHITE "__)" BLUE "/" MAGENTA "_" BLUE ") " RESET; + LOGO_SMALL[6] = MAGENTA "\\/" BLUE "-____" MAGENTA "\\/ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "debian", strlen("debian")) == 0) { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + logosize = 18; + + if (!isbiglogo) { + LOGO[0] = WHITE " _,met$$$$$gg. " RESET; + LOGO[1] = WHITE " ,g$$$$$$$$$$$$$$$P. " RESET; + LOGO[2] = WHITE " ,g$$P\" \"\"\"Y$$.\". " RESET; + LOGO[3] = WHITE " ,$$P' `$$$. " RESET; + LOGO[4] = WHITE "',$$P ,ggs. `$$b: " RESET; + LOGO[5] = WHITE "`d$$' ,$P\"' " RED "." WHITE " $$$ " RESET; + LOGO[6] = WHITE " $$P d$' " RED "," WHITE " $$P " RESET; + LOGO[7] = WHITE " $$: $$. - ,d$$' " RESET; + LOGO[8] = WHITE " $$; Y$b._ _,d$P' " RESET; + LOGO[9] = WHITE " Y$$. " RED "`." WHITE "`\"Y$$$$P\"' " RESET; + LOGO[10] = WHITE " `$$b " RED "\"-.__" WHITE " " RESET; + LOGO[11] = WHITE " `Y$$ " RESET; + LOGO[12] = WHITE " `Y$$. " RESET; + LOGO[13] = WHITE " `$$b. " RESET; + LOGO[14] = WHITE " `Y$$b. " RESET; + LOGO[15] = WHITE " `\"Y$b._ " RESET; + LOGO[16] = WHITE " `\"\"\" " RESET; + LOGO[17] = RED " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = RED " _____ " RESET; + LOGO_SMALL[1] = RED " / __ \\ " RESET; + LOGO_SMALL[2] = RED "| / | " RESET; + LOGO_SMALL[3] = RED "| \\___- " RESET; + LOGO_SMALL[4] = RED "-_ " RESET; + LOGO_SMALL[5] = RED " --_ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "devuan", strlen("devuan")) == 0) { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = MAGENTA; + else titlecolor = customtitlecolor; + logosize = 16; + + if (!isbiglogo) { + LOGO[0] = MAGENTA " ..,,;;;::;,.. " RESET; + LOGO[1] = MAGENTA " `':ddd;:,. " RESET; + LOGO[2] = MAGENTA " `'dPPd:,. " RESET; + LOGO[3] = MAGENTA " `:b$$b`. " RESET; + LOGO[4] = MAGENTA " 'P$$$d` " RESET; + LOGO[5] = MAGENTA " .$$$$$` " RESET; + LOGO[6] = MAGENTA " ;$$$$$P " RESET; + LOGO[7] = MAGENTA " .:P$$$$$$` " RESET; + LOGO[8] = MAGENTA " .,:b$$$$$$$;' " RESET; + LOGO[9] = MAGENTA " .,:dP$$$$$$$$b:' " RESET; + LOGO[10] = MAGENTA " .,:;db$$$$$$$$$$Pd'` " RESET; + LOGO[11] = MAGENTA " ,db$$$$$$$$$$$$$$b:'` " RESET; + LOGO[12] = MAGENTA ":$$$$$$$$$$$$b:'` " RESET; + LOGO[13] = MAGENTA " `$$$$$bd:''` " RESET; + LOGO[14] = MAGENTA " `'''` " RESET; + LOGO[15] = MAGENTA " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = MAGENTA "__ " RESET; + LOGO_SMALL[1] = MAGENTA " \\ " RESET; + LOGO_SMALL[2] = MAGENTA " _/ " RESET; + for (int i = 3; i < minsize; i++) { + LOGO_SMALL[i] = MAGENTA " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "fedora", strlen("fedora")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 17; + + if (!isbiglogo) { + LOGO[0] = BLUE " /:-------------:\\ " RESET; + LOGO[1] = BLUE " :-------------------:: " RESET; + LOGO[2] = BLUE " :-----------" WHITE "/shhOHbmp" BLUE "---:\\ " RESET; + LOGO[3] = BLUE " /-----------" WHITE "omMMMNNNMMD" BLUE " ---: " RESET; + LOGO[4] = BLUE " :-----------" WHITE "sMMMMNMNMP" BLUE ". ---: " RESET; + LOGO[5] = BLUE " :-----------" WHITE ":MMMdP" BLUE "------- ---\\ " RESET; + LOGO[6] = BLUE ",------------" WHITE ":MMMd" BLUE "-------- ---: " RESET; + LOGO[7] = BLUE ":------------" WHITE ":MMMd" BLUE "------- .---: " RESET; + LOGO[8] = BLUE ":---- " WHITE "oNMMMMMMMMMNho" BLUE " .----: " RESET; + LOGO[9] = BLUE ":-- ." WHITE "+shhhMMMmhhy++" BLUE " .------/ " RESET; + LOGO[10] = BLUE ":- -------:" WHITE "MMMd" BLUE "--------------: " RESET; + LOGO[11] = BLUE ":- --------" WHITE "/MMMd" BLUE "-------------; " RESET; + LOGO[12] = BLUE ":- ------" WHITE "/hMMMy" BLUE "------------: " RESET; + LOGO[13] = BLUE ":-- " WHITE ":dMNdhhdNMMNo" BLUE "------------; " RESET; + LOGO[14] = BLUE ":---" WHITE ":sdNMMMMNds:" BLUE "------------: " RESET; + LOGO[15] = BLUE ":------" WHITE ":://:" BLUE "-------------:: " RESET; + LOGO[16] = BLUE ":---------------------:// " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = WHITE " _____ " RESET; + LOGO_SMALL[1] = WHITE " / __)" BLUE "\\ " RESET; + LOGO_SMALL[2] = WHITE " | / " BLUE "\\ \\ " RESET; + LOGO_SMALL[3] = BLUE " __" WHITE "_| |_" BLUE "_/ / " RESET; + LOGO_SMALL[4] = BLUE " / " WHITE "(_ _)" BLUE "_/ " RESET; + LOGO_SMALL[5] = BLUE "/ / " WHITE "| | " RESET; + LOGO_SMALL[6] = BLUE "\\ \\" WHITE "__/ | " RESET; + LOGO_SMALL[7] = BLUE " \\" WHITE "(_____/ " RESET; + for (int i = 8; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "gentoo", strlen("gentoo")) == 0) { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = MAGENTA; + else titlecolor = customtitlecolor; + logosize = 19; + + if (!isbiglogo) { + LOGO[0] = MAGENTA " -/oyddmdhs+:. " RESET; + LOGO[1] = MAGENTA " -o" WHITE "dNMMMMMMMMNNmhy+" MAGENTA "-` " RESET; + LOGO[2] = MAGENTA " -y" WHITE "NMMMMMMMMMMMNNNmmdhy" MAGENTA "+- " RESET; + LOGO[3] = MAGENTA " `o" WHITE "mMMMMMMMMMMMMNmdmmmmddhhy" MAGENTA "/` " RESET; + LOGO[4] = MAGENTA " om" WHITE "MMMMMMMMMMMN" MAGENTA "hhyyyo" WHITE "hmdddhhhd" MAGENTA "o` " RESET; + LOGO[5] = MAGENTA ".y" WHITE "dMMMMMMMMMMd" MAGENTA "hs++so/s" WHITE "mdddhhhhdm" MAGENTA "+` " RESET; + LOGO[6] = MAGENTA " oy" WHITE "hdmNMMMMMMMN" MAGENTA "dyooy" WHITE "dmddddhhhhyhN" MAGENTA "d. " RESET; + LOGO[7] = MAGENTA " :o" WHITE "yhhdNNMMMMMMMNNNmmdddhhhhhyym" MAGENTA "Mh " RESET; + LOGO[8] = MAGENTA " .:" WHITE "+sydNMMMMMNNNmmmdddhhhhhhmM" MAGENTA "my " RESET; + LOGO[9] = MAGENTA " /m" WHITE "MMMMMMNNNmmmdddhhhhhmMNh" MAGENTA "s: " RESET; + LOGO[10] = MAGENTA " `o" WHITE "NMMMMMMMNNNmmmddddhhdmMNhs" MAGENTA "+` " RESET; + LOGO[11] = MAGENTA " `s" WHITE "NMMMMMMMMNNNmmmdddddmNMmhs" MAGENTA "/. " RESET; + LOGO[12] = MAGENTA " /N" WHITE "MMMMMMMMNNNNmmmdddmNMNdso" MAGENTA ":` " RESET; + LOGO[13] = MAGENTA "+M" WHITE "MMMMMMNNNNNmmmmdmNMNdso" MAGENTA "/- " RESET; + LOGO[14] = MAGENTA "yM" WHITE "MNNNNNNNmmmmmNNMmhs+/" MAGENTA" -` " RESET; + LOGO[15] = MAGENTA "/h" WHITE "MMNNNNNNNNMNdhs++/" MAGENTA "-` " RESET; + LOGO[16] = MAGENTA "`/" WHITE "ohdmmddhys+++/:" MAGENTA ".` " RESET; + LOGO[17] = MAGENTA " `-//////:--. " RESET; + LOGO[18] = MAGENTA " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = MAGENTA " _-----_ " RESET; + LOGO_SMALL[1] = MAGENTA "( \\ " RESET; + LOGO_SMALL[2] = MAGENTA "\\ 0 \\ " RESET; + LOGO_SMALL[3] = WHITE " \\ ) " RESET; + LOGO_SMALL[4] = WHITE " / _/ " RESET; + LOGO_SMALL[5] = WHITE "( _- " RESET; + LOGO_SMALL[6] = WHITE "\\____- " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = MAGENTA " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "hyperbola", strlen("hyperbola")) == 0) { + if (!customcolor) color = GREY; + else color = customcolor; + if (!customtitlecolor) titlecolor = WHITE; + else titlecolor = customtitlecolor; + logosize = 16; + + if (!isbiglogo) { + LOGO[0] = GREY " WW " RESET; + LOGO[1] = GREY " KX W " RESET; + LOGO[2] = GREY " WO0W NX0O " RESET; + LOGO[3] = GREY " NOO0NW WNXK0OOKW " RESET; + LOGO[4] = GREY " W0OOOOOOOOOOOOKN " RESET; + LOGO[5] = GREY " N0OOOOOOO0KXW " RESET; + LOGO[6] = GREY " WNXXXNW " RESET; + LOGO[7] = GREY " NXK00000KN " RESET; + LOGO[8] = GREY " WNK0OOOOOOOOOO0W " RESET; + LOGO[9] = GREY " NK0OOOOOOOOOOOOOO0W " RESET; + LOGO[10] = GREY " X0OOOOOOO00KK00OOOOOK " RESET; + LOGO[11] = GREY " X0OOOO0KNWW WX0OO0W " RESET; + LOGO[12] = GREY " X0OO0XNW KOOW " RESET; + LOGO[13] = GREY " N00KNW KOW " RESET; + LOGO[14] = GREY " NKXN W0W " RESET; + LOGO[15] = GREY "WW W " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREY " |`__.`/ " RESET; + LOGO_SMALL[1] = GREY " \\____/ " RESET; + LOGO_SMALL[2] = GREY " .--. " RESET; + LOGO_SMALL[3] = GREY " / \\ " RESET; + LOGO_SMALL[4] = GREY " / ___ \\ " RESET; + LOGO_SMALL[5] = GREY " / .` `.\\ " RESET; + LOGO_SMALL[6] = GREY "/.` `.\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = GREY " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "kubuntu", strlen("kubuntu")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = BLUE " `.:/ossyyyysso/:. " RESET; + LOGO[1] = BLUE " .:oyyyyyyyyyyyyyyyyyyo:` " RESET; + LOGO[2] = BLUE " -oyyyyyyyo" WHITE "dMMy" BLUE "yyyyyyysyyyyo- " RESET; + LOGO[3] = BLUE " -syyyyyyyyyy" WHITE "dMMy" BLUE "oyyyy" WHITE "dmMMy" BLUE "yyyys- " RESET; + LOGO[4] = BLUE " oyyys" WHITE "dMy" BLUE "syyyy" WHITE "dMMMMMMMMMMMMMy" BLUE "yyyyyyo " RESET; + LOGO[5] = BLUE " `oyyyy" WHITE "dMMMMy" BLUE "syysoooooo" WHITE "dMMMMy" BLUE "yyyyyyyyo` " RESET; + LOGO[6] = BLUE " oyyyyyy" WHITE "dMMMMy" BLUE "yyyyyyyyyyy" WHITE "sdMMy" BLUE "sssssyyyo " RESET; + LOGO[7] = BLUE "-yyyyyyyy" WHITE "dMy" BLUE "syyyyyyyyyyyyyys" WHITE "dMMMMMy" BLUE "syyy- " RESET; + LOGO[8] = BLUE "oyyyysoo" WHITE "dMy" BLUE "yyyyyyyyyyyyyyyyyy" WHITE "dMMMMy" BLUE "syyyo " RESET; + LOGO[9] = BLUE "yyys" WHITE "dMMMMMy" BLUE "yyyyyyyyyyyyyyyyyysosyyyyyyyy " RESET; + LOGO[10] = BLUE "yyys" WHITE "dMMMMMy" BLUE "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy " RESET; + LOGO[11] = BLUE "oyyyyysos" WHITE "dy" BLUE "yyyyyyyyyyyyyyyyyy" WHITE "dMMMMy" BLUE "syyyo " RESET; + LOGO[12] = BLUE "-yyyyyyyy" WHITE "dMy" BLUE "syyyyyyyyyyyyyys" WHITE "dMMMMMy" BLUE "syyy- " RESET; + LOGO[13] = BLUE " oyyyyyy" WHITE "dMMMy" BLUE "syyyyyyyyyyys" WHITE "dMMy" BLUE "oyyyoyyyo " RESET; + LOGO[14] = BLUE " `oyyyy" WHITE "dMMMy" BLUE "syyyoooooo" WHITE "dMMMMy" BLUE "oyyyyyyyyo " RESET; + LOGO[15] = BLUE " oyyysyyoyyyys" WHITE "dMMMMMMMMMMMy" BLUE "yyyyyyyo " RESET; + LOGO[16] = BLUE " -syyyyyyyyy" WHITE "dMMMy" BLUE "syyy" WHITE "dMMMy" BLUE "syyyys- " RESET; + LOGO[17] = BLUE " -oyyyyyyy" WHITE "dMMy" BLUE "yyyyyysosyyyyo- " RESET; + LOGO[18] = BLUE " ./oyyyyyyyyyyyyyyyyyyo/. " RESET; + LOGO[19] = BLUE " `.:/oosyyyysso/:.` " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " | " RESET; + LOGO_SMALL[1] = BLUE " \\ ---\\/ " RESET; + LOGO_SMALL[2] = BLUE " / --- \\ " RESET; + LOGO_SMALL[3] = BLUE " -| | | =" RESET; + LOGO_SMALL[4] = BLUE " \\ --- _/ " RESET; + LOGO_SMALL[5] = BLUE " / ---/ \\ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "linuxmint", strlen("linuxmint")) == 0) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 19; + + if (!isbiglogo) { + LOGO[0] = WHITE " ...-:::::-... " RESET; + LOGO[1] = WHITE " .-MMMMMMMMMMMMMMM-. " RESET; + LOGO[2] = WHITE " .-MMMM" GREEN "`..-:::::::-..`" WHITE "MMMM-. " RESET; + LOGO[3] = WHITE " .:MMMM" GREEN ".:MMMMMMMMMMMMMMM:." WHITE "MMMM:. " RESET; + LOGO[4] = WHITE " -MMM" GREEN "-M---MMMMMMMMMMMMMMMMMMM." WHITE "MMM- " RESET; + LOGO[5] = WHITE " `:MMM" GREEN ":MM` :MMMM:....::-...-MMMM:" WHITE "MMM:` " RESET; + LOGO[6] = WHITE " :MMM" GREEN ":MMM` :MM:` `` `` `:MMM:" WHITE "MMM: " RESET; + LOGO[7] = WHITE ".MMM" GREEN ".MMMM` :MM. -MM. .MM- `MMMM." WHITE "MMM. " RESET; + LOGO[8] = WHITE ":MMM" GREEN ":MMMM` :MM. -MM- .MM: `MMMM-" WHITE "MMM: " RESET; + LOGO[9] = WHITE ":MMM" GREEN ":MMMM` :MM. -MM- .MM: `MMMM:" WHITE "MMM: " RESET; + LOGO[10] = WHITE ":MMM" GREEN ":MMMM` :MM. -MM- .MM: `MMMM-" WHITE "MMM: " RESET; + LOGO[11] = WHITE ".MMM" GREEN ".MMMM` :MM:--:MM:--:MM: `MMMM." WHITE "MMM. " RESET; + LOGO[12] = WHITE " :MMM" GREEN ":MMM- `-MMMMMMMMMMMM-` -MMM-" WHITE "MMM: " RESET; + LOGO[13] = WHITE " :MMM" GREEN ":MMM:` `:MMM:" WHITE "MMM: " RESET; + LOGO[14] = WHITE " .MMM" GREEN ".MMMM:--------------:MMMM." WHITE "MMM. " RESET; + LOGO[15] = WHITE " '-MMMM" GREEN ".-MMMMMMMMMMMMMMM-." WHITE "MMMM-' " RESET; + LOGO[16] = WHITE " '.-MMMM" GREEN "``--:::::--``" WHITE "MMMM-.' " RESET; + LOGO[17] = WHITE " '-MMMMMMMMMMMMM-' " RESET; + LOGO[18] = WHITE " ``-:::::-`` " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " ___________ " RESET; + LOGO_SMALL[1] = GREEN "|_ \\ " RESET; + LOGO_SMALL[2] = GREEN " | " WHITE "| _____ " GREEN "| " RESET; + LOGO_SMALL[3] = GREEN " | " WHITE "| | | | " GREEN "| " RESET; + LOGO_SMALL[4] = GREEN " | " WHITE "| | | | " GREEN "| " RESET; + LOGO_SMALL[5] = GREEN " | " WHITE "\\_____/ " GREEN "| " RESET; + LOGO_SMALL[6] = GREEN " \\_________/ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "lubuntu", strlen("lubuntu")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = BLUE " `-mddhhhhhhhhhddmss` " RESET; + LOGO[1] = BLUE " ./mdhhhhhhhhhhhhhhhhhhhhhh. " RESET; + LOGO[2] = BLUE " :mdhhhhhhhhhhhhhhhhhhhhhhhhhhhm` " RESET; + LOGO[3] = BLUE " :ymhhhhhhhhhhhhhhhyyyyyyhhhhhhhhhy: " RESET; + LOGO[4] = BLUE " `odhyyyhhhhhhhhhy+-````./syhhhhhhhho` " RESET; + LOGO[5] = BLUE " `hhy..:oyhhhhhhhy-`:osso/..:/++oosyyyh` " RESET; + LOGO[6] = BLUE " dhhs .-/syhhhhs`shhhhhhyyyyyyyyyyyyhs " RESET; + LOGO[7] = BLUE ":hhhy` yso/:+syhy/yhhhhhshhhhhhhhhhhhhh: " RESET; + LOGO[8] = BLUE "hhhhho. +hhhys++oyyyhhhhh-yhhhhhhhhhhhhhs " RESET; + LOGO[9] = BLUE "hhhhhhs-`/syhhhhyssyyhhhh:-yhhhhhhhhhhhhh " RESET; + LOGO[10] = BLUE "hhhhhhs `:/+ossyyhyyhhhhs -yhhhhhhhhhhhh " RESET; + LOGO[11] = BLUE "hhhhhhy/ `syyyssyyyyhhhhhh: :yhhhhhhhhhhs " RESET; + LOGO[12] = BLUE ":hhhhhhyo:-/osyhhhhhhhhhhho ohhhhhhhhhh: " RESET; + LOGO[13] = BLUE " sdhhhhhhhyyssyyhhhhhhhhhhh+ +hhhhhhhhs " RESET; + LOGO[14] = BLUE " `shhhhhhhhhhhhhhhhhhhhhhy+` .yhhhhhhhh` " RESET; + LOGO[15] = BLUE " +sdhhhhhhhhhhhhhhhhhyo/. `/yhhhhhhhd` " RESET; + LOGO[16] = BLUE " `:shhhhhhhhhh+---..``.:+yyhhhhhhh: " RESET; + LOGO[17] = BLUE " `:mdhhhhhh/.syssyyyyhhhhhhhd:` " RESET; + LOGO[18] = BLUE " `+smdhhh+shhhhhhhhhhhhdm` " RESET; + LOGO[19] = BLUE " `sNmdddhhhhhhhddm-` " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " _____ " RESET; + LOGO_SMALL[1] = BLUE " / _ \\ " RESET; + LOGO_SMALL[2] = BLUE " /\\\\_|_\\ \\ " RESET; + LOGO_SMALL[3] = BLUE " | | \\ |" RESET; + LOGO_SMALL[4] = BLUE " \\ __/ / " RESET; + LOGO_SMALL[5] = BLUE " \\_____/ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "manjaro", strlen("manjaro")) == 0) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 14; + + if (!isbiglogo) { + LOGO[0] = GREEN "██████████████████ ████████ " RESET; + LOGO[1] = GREEN "██████████████████ ████████ " RESET; + LOGO[2] = GREEN "██████████████████ ████████ " RESET; + LOGO[3] = GREEN "██████████████████ ████████ " RESET; + LOGO[4] = GREEN "████████ ████████ " RESET; + LOGO[5] = GREEN "████████ ████████ ████████ " RESET; + LOGO[6] = GREEN "████████ ████████ ████████ " RESET; + LOGO[7] = GREEN "████████ ████████ ████████ " RESET; + LOGO[8] = GREEN "████████ ████████ ████████ " RESET; + LOGO[9] = GREEN "████████ ████████ ████████ " RESET; + LOGO[10] = GREEN "████████ ████████ ████████ " RESET; + LOGO[11] = GREEN "████████ ████████ ████████ " RESET; + LOGO[12] = GREEN "████████ ████████ ████████ " RESET; + LOGO[13] = GREEN "████████ ████████ ████████ " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN "||||||||| |||| " RESET; + LOGO_SMALL[1] = GREEN "||||||||| |||| " RESET; + LOGO_SMALL[2] = GREEN "|||| |||| " RESET; + LOGO_SMALL[3] = GREEN "|||| |||| |||| " RESET; + LOGO_SMALL[4] = GREEN "|||| |||| |||| " RESET; + LOGO_SMALL[5] = GREEN "|||| |||| |||| " RESET; + LOGO_SMALL[6] = GREEN "|||| |||| |||| " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "opensuse", strlen("opensuse")) == 0) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 18; + + if (!isbiglogo) { + LOGO[0] = WHITE " .;ldkO0000Okdl;. " RESET; + LOGO[1] = WHITE " .;d00xl:^''''''^:ok00d;. " RESET; + LOGO[2] = WHITE " .d00l' 'o00d. " RESET; + LOGO[3] = WHITE " .d0Kd' " GREEN "Okxol:;,." WHITE " :O0d. " RESET; + LOGO[4] = WHITE " .OK" GREEN "KKK0kOKKKKKKKKKKOxo:," WHITE " lKO. " RESET; + LOGO[5] = WHITE " ,0K" GREEN "KKKKKKKKKKKKKKK0P^,,,^dx:" WHITE " ;00, " RESET; + LOGO[6] = WHITE ".OK" GREEN "KKKKKKKKKKKKKKKk'.oOPPb.'0k." WHITE " cKO. " RESET; + LOGO[7] = WHITE ":KK" GREEN "KKKKKKKKKKKKKKK: kKx..dd lKd" WHITE " 'OK: " RESET; + LOGO[8] = WHITE "dKK" GREEN "KKKKKKKKKOx0KKKd ^0KKKO' kKKc" WHITE " dKd " RESET; + LOGO[9] = WHITE "dKK" GREEN "KKKKKKKKKK;.;oOKx,..^..;kKKK0." WHITE " dKd " RESET; + LOGO[10] = WHITE ":KK" GREEN "KKKKKKKKKK0o;...^cdxxOK0O/^^'" WHITE " .0K: " RESET; + LOGO[11] = WHITE " kKK" GREEN "KKKKKKKKKKKKK0x;,,......,;od" WHITE " lKk " RESET; + LOGO[12] = WHITE " '0K" GREEN "KKKKKKKKKKKKKKKKKKKK00KKOo^" WHITE " c00' " RESET; + LOGO[13] = WHITE " 'kK" GREEN "KKOxddxkOO00000Okxoc;''" WHITE " .dKk' " RESET; + LOGO[14] = WHITE " l0Ko. .c00l' " RESET; + LOGO[15] = WHITE " 'l0Kk:. .;xK0l' " RESET; + LOGO[16] = WHITE " 'lkK0xl:;,,,,;:ldO0kl' " RESET; + LOGO[17] = WHITE " '^:ldxkkkkxdl:^' " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " _______ " RESET; + LOGO_SMALL[1] = GREEN "__| __ \\ " RESET; + LOGO_SMALL[2] = GREEN " / .\\ \\ " RESET; + LOGO_SMALL[3] = GREEN " \\__/ | " RESET; + LOGO_SMALL[4] = GREEN " _______| " RESET; + LOGO_SMALL[5] = GREEN " \\_______ " RESET; + LOGO_SMALL[6] = GREEN "__________/ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "parabola", strlen("parabola")) == 0) { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = MAGENTA; + else titlecolor = customtitlecolor; + logosize = 16; + + if (!isbiglogo) { + LOGO[0] = MAGENTA " `.-. `. " RESET; + LOGO[1] = MAGENTA " `.` `:++. `-+o+. " RESET; + LOGO[2] = MAGENTA " `` `:+/. `:+/. `-+oooo+ " RESET; + LOGO[3] = MAGENTA " ``-::-.:+/. `:+/. `-+oooooo+ " RESET; + LOGO[4] = MAGENTA " `.-:///- ..` .-. `-+oooooooo- " RESET; + LOGO[5] = MAGENTA " `..-..` `+ooooooooo: " RESET; + LOGO[6] = MAGENTA "`` :oooooooo/ " RESET; + LOGO[7] = MAGENTA " `ooooooo: " RESET; + LOGO[8] = MAGENTA " `oooooo: " RESET; + LOGO[9] = MAGENTA " -oooo+. " RESET; + LOGO[10] = MAGENTA " +ooo/` " RESET; + LOGO[11] = MAGENTA " -ooo- " RESET; + LOGO[12] = MAGENTA " `+o/. " RESET; + LOGO[13] = MAGENTA " /+- " RESET; + LOGO[14] = MAGENTA " //` " RESET; + LOGO[15] = MAGENTA " -. " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = MAGENTA " __ __ __ _ " RESET; + LOGO_SMALL[1] = MAGENTA ".`_//_//_/ / `. " RESET; + LOGO_SMALL[2] = MAGENTA " / .` " RESET; + LOGO_SMALL[3] = MAGENTA " / .` " RESET; + LOGO_SMALL[4] = MAGENTA " /.` " RESET; + LOGO_SMALL[5] = MAGENTA " /` " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = MAGENTA " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "popos", strlen("popos")) == 0) { + if (!customcolor) color = CYAN; + else color = customcolor; + if (!customtitlecolor) titlecolor = CYAN; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = CYAN " ///////////// " RESET; + LOGO[1] = CYAN " ///////////////////// " RESET; + LOGO[2] = CYAN " ///////" WHITE "*767" CYAN "//////////////// " RESET; + LOGO[3] = CYAN " //////" WHITE "7676767676*" CYAN "////////////// " RESET; + LOGO[4] = CYAN " /////" WHITE "76767" CYAN "//" WHITE "7676767" CYAN "////////////// " RESET; + LOGO[5] = CYAN " /////" WHITE "767676" CYAN "///" WHITE "*76767" CYAN "/////////////// " RESET; + LOGO[6] = CYAN " ///////" WHITE "767676" CYAN "///" WHITE "76767" CYAN ".///" WHITE "7676*" CYAN "/////// " RESET; + LOGO[7] = CYAN "/////////" WHITE "767676" CYAN "//" WHITE "76767" CYAN "///" WHITE "767676" CYAN "//////// " RESET; + LOGO[8] = CYAN "//////////" WHITE "76767676767" CYAN "////" WHITE "76767" CYAN "///////// " RESET; + LOGO[9] = CYAN "///////////" WHITE "76767676" CYAN "//////" WHITE "7676" CYAN "////////// " RESET; + LOGO[10] = CYAN "////////////," WHITE "7676" CYAN ",///////" WHITE "767" CYAN "/////////// " RESET; + LOGO[11] = CYAN "/////////////*" WHITE "7676" CYAN "///////" WHITE "76" CYAN "//////////// " RESET; + LOGO[12] = CYAN "///////////////" WHITE "7676" CYAN "//////////////////// " RESET; + LOGO[13] = CYAN " ///////////////" WHITE "7676" CYAN "///" WHITE "767" CYAN "//////////// " RESET; + LOGO[14] = CYAN " //////////////////////" WHITE "'" CYAN "//////////// " RESET; + LOGO[15] = CYAN " //////" WHITE ".7676767676767676767," CYAN "////// " RESET; + LOGO[16] = CYAN " /////" WHITE "767676767676767676767" CYAN "///// " RESET; + LOGO[17] = CYAN " /////////////////////////// " RESET; + LOGO[18] = CYAN " ///////////////////// " RESET; + LOGO[19] = CYAN " ///////////// " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = CYAN "______ " RESET; + LOGO_SMALL[1] = CYAN "\\ _ \\ __ " RESET; + LOGO_SMALL[2] = CYAN " \\ \\ \\ \\ / / " RESET; + LOGO_SMALL[3] = CYAN " \\ \\_\\ \\ / / " RESET; + LOGO_SMALL[4] = CYAN " \\ ___\\ /_/ " RESET; + LOGO_SMALL[5] = CYAN " \\ \\ _ " RESET; + LOGO_SMALL[6] = CYAN " __\\_\\__(_)_ " RESET; + LOGO_SMALL[7] = CYAN " (___________)` " RESET; + for (int i = 8; i < minsize; i++) { + LOGO_SMALL[i] = CYAN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if ( + strncmp((char *)logoname, "postmarketos", strlen("postmarketos")) == 0 + ) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 18; + + if (!isbiglogo) { + LOGO[0] = GREEN " /\\ " RESET; + LOGO[1] = GREEN " / \\ " RESET; + LOGO[1] = GREEN " / \\ " RESET; + LOGO[2] = GREEN " / \\ " RESET; + LOGO[3] = GREEN " / \\ " RESET; + LOGO[4] = GREEN " / \\ " RESET; + LOGO[5] = GREEN " \\ \\ " RESET; + LOGO[6] = GREEN " /\\ \\____ \\ " RESET; + LOGO[7] = GREEN " / \\____ \\ \\ " RESET; + LOGO[8] = GREEN " / / \\ \\ " RESET; + LOGO[9] = GREEN " / / \\ ___\\ " RESET; + LOGO[10] = GREEN " / / \\ / ____ " RESET; + LOGO[11] = GREEN " / / \\/ / \\ " RESET; + LOGO[12] = GREEN " / / __________/ \\ " RESET; + LOGO[13] = GREEN " / \\ \\ \\ " RESET; + LOGO[14] = GREEN " / \\ \\ \\ " RESET; + LOGO[15] = GREEN " / / / \\ " RESET; + LOGO[16] = GREEN "/___________/ /____________________\\ " RESET; + LOGO[17] = GREEN " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " /\\ " RESET; + LOGO_SMALL[1] = GREEN " / \\ " RESET; + LOGO_SMALL[2] = GREEN " / \\ " RESET; + LOGO_SMALL[3] = GREEN " \\__ \\ " RESET; + LOGO_SMALL[4] = GREEN " /\\__ \\ _\\ " RESET; + LOGO_SMALL[5] = GREEN " / / \\/ __ " RESET; + LOGO_SMALL[6] = GREEN " / / ____/ \\ " RESET; + LOGO_SMALL[7] = GREEN " / \\ \\ \\ " RESET; + LOGO_SMALL[8] = GREEN "/_____/ /________\\ " RESET; + for (int i = 9; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "redhat", strlen("redhat")) == 0) { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + logosize = 18; + + if (!isbiglogo) { + LOGO[0] = RED " .MMM..:MMMMMMM " RESET; + LOGO[1] = RED " MMMMMMMMMMMMMMMMMM " RESET; + LOGO[2] = RED " MMMMMMMMMMMMMMMMMMMM. " RESET; + LOGO[3] = RED " MMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[4] = RED " ,MMMMMMMMMMMMMMMMMMMMMM: " RESET; + LOGO[5] = RED " MMMMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[6] = RED " .MMMM' MMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[7] = RED " MMMMMM `MMMMMMMMMMMMMMMMMMMM. " RESET; + LOGO[8] = RED "MMMMMMMM MMMMMMMMMMMMMMMMMM . " RESET; + LOGO[9] = RED "MMMMMMMMM. `MMMMMMMMMMMMM' MM. " RESET; + LOGO[10] = RED "MMMMMMMMMMM. MMMM " RESET; + LOGO[11] = RED "`MMMMMMMMMMMMM. ,MMMMM. " RESET; + LOGO[12] = RED " `MMMMMMMMMMMMMMMMM. ,MMMMMMMM. " RESET; + LOGO[13] = RED " MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[14] = RED " MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM: " RESET; + LOGO[15] = RED " MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[16] = RED " `MMMMMMMMMMMMMMMMMMMMMMMM: " RESET; + LOGO[17] = RED " ``MMMMMMMMMMMMMMMMM' " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = RED " /=======\\ " RESET; + LOGO_SMALL[1] = RED " | | " RESET; + LOGO_SMALL[2] = RED " | | " RESET; + LOGO_SMALL[3] = RED " / \\ \\ " RESET; + LOGO_SMALL[4] = RED " = ======+\\ " RESET; + LOGO_SMALL[5] = RED "/ \\________/ \\ " RESET; + LOGO_SMALL[6] = RED "\\ | " RESET; + LOGO_SMALL[7] = RED " \\___________/ " RESET; + for (int i = 8; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "rocky", strlen("rocky")) == 0) { + if (!customcolor) color = GREEN; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 17; + + if (!isbiglogo) { + LOGO[0] = GREEN " .-/+oossssoo+/-. " RESET; + LOGO[1] = GREEN " `:+ssssssssssssssssss+:` " RESET; + LOGO[2] = GREEN " -+ssssssssssssssssssyyssss+- " RESET; + LOGO[3] = GREEN " .osssssssssssssssssssssssssssso. " RESET; + LOGO[4] = GREEN " /ssssssssssssssssssssssssssssssss/ " RESET; + LOGO[5] = GREEN " +ssssssssssssssssssssssssssssssssss+ " RESET; + LOGO[6] = GREEN " /ssssssssssssssssssssssssssssssssssss/ " RESET; + LOGO[7] = GREEN ".ssssssssssssssssssssssssssssssssssssss. " RESET; + LOGO[8] = GREEN "+ssssssssssssssssssssssssssssssssssssss+ " RESET; + LOGO[9] = GREEN ".sssssssssssssssssssss sssssssssssssss. " RESET; + LOGO[10] = GREEN " /sssssssssssssssss ssss sssssssssss/ " RESET; + LOGO[11] = GREEN " +ssssssssssssss ssssssss ssssssss+ " RESET; + LOGO[12] = GREEN " /sssssssssss sssssssssssss ssss/ " RESET; + LOGO[13] = GREEN " .osssssss sssssssssssssssss o. " RESET; + LOGO[14] = GREEN " -+sss sssssssssssssssssss+- " RESET; + LOGO[15] = GREEN " ` ssssssssssssssssss+:` " RESET; + LOGO[16] = GREEN " .-/+oossssoo+/-. " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " _____ " RESET; + LOGO_SMALL[1] = GREEN " / \\ " RESET; + LOGO_SMALL[2] = GREEN " | /\\ | " RESET; + LOGO_SMALL[3] = GREEN " | / \\| " RESET; + LOGO_SMALL[4] = GREEN " \\/____/ " RESET; + for (int i = 5; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "ubuntubudgie", strlen("ubuntubudgie")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = WHITE " ./oydmMMMMMMmdyo/. " RESET; + LOGO[1] = WHITE " :smMMMMMMMMMMMhs+:++yhs: " RESET; + LOGO[2] = WHITE " `omMMMMMMMMMMMN+` `odo` " RESET; + LOGO[3] = WHITE " /NMMMMMMMMMMMMN- `sN/ " RESET; + LOGO[4] = WHITE " `hMMMMmhhmMMMMMMh sMh` " RESET; + LOGO[5] = WHITE " .mMmo- /yMMMMm` `MMm. " RESET; + LOGO[6] = WHITE " mN/ yMMMMMMMd- MMMm " RESET; + LOGO[7] = WHITE "oN- oMMMMMMMMMms+//+o+: :MMMMo " RESET; + LOGO[8] = WHITE "m/ +NMMMMMMMMMMMMMMMMm. :NMMMMm " RESET; + LOGO[9] = WHITE "M` .NMMMMMMMMMMMMMMMNodMMMMMMM " RESET; + LOGO[10] = WHITE "M- sMMMMMMMMMMMMMMMMMMMMMMMMM " RESET; + LOGO[11] = WHITE "mm` mMMMMMMMMMNdhhdNMMMMMMMMMm " RESET; + LOGO[12] = WHITE "oMm/ .dMMMMMMMMh: :dMMMMMMMo " RESET; + LOGO[13] = WHITE " mMMNyo/:/sdMMMMMMMMM+ sMMMMMm " RESET; + LOGO[14] = WHITE " .mMMMMMMMMMMMMMMMMMs `NMMMm. " RESET; + LOGO[15] = WHITE " `hMMMMMMMMMMM.oo+. `MMMh` " RESET; + LOGO[16] = WHITE " /NMMMMMMMMMo sMN/ " RESET; + LOGO[17] = WHITE " `omMMMMMMMMy. :dmo` " RESET; + LOGO[18] = WHITE " :smMMMMMMMh+-` `.:ohs: " RESET; + LOGO[19] = WHITE " ./oydmMMMMMMdhyo/. " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = WHITE " ____ " RESET; + LOGO_SMALL[1] = WHITE " / / \\\\ " RESET; + LOGO_SMALL[2] = WHITE " /// \\/ \\ " RESET; + LOGO_SMALL[3] = WHITE " | \\ /|| " RESET; + LOGO_SMALL[4] = WHITE " \\\\\\/ \\ // " RESET; + LOGO_SMALL[5] = WHITE " \\_____/ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp( + (char *)logoname, + "ubuntucinnamon", + strlen("ubuntucinnamon")) == 0 + ) { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + logosize = 21; + + if (!isbiglogo) { + LOGO[0] = RED " +++++++++++++ " RESET; + LOGO[1] = RED " +++++++++++++++++++++ " RESET; + LOGO[2] = RED " +++++++++++++++++++" WHITE "/|" RED "++++ " RESET; + LOGO[3] = RED " ++++++++++++++++++++" WHITE "/x|" RED "++++++ " RESET; + LOGO[4] = RED " +++++++++++++++++++++" WHITE "/xx|" RED "++++++++ " RESET; + LOGO[5] = RED " +++++++++++++" WHITE "xxxxxxxxx" RED "-++:+++++++++ " RESET; + LOGO[6] = RED " +++++++++++" WHITE "xx" RED "++++++++++" WHITE "xxx" RED "+++++++++++ " RESET; + LOGO[7] = RED " ++++++++++" WHITE "xx" RED "+++++++++++++" WHITE "xx" RED "-+++++++++ " RESET; + LOGO[8] = RED "++++++++++" WHITE "xx" RED "+++++++++++++++" WHITE "xx" RED "=+++++++++ " RESET; + LOGO[9] = RED "+++++" WHITE "-/." RED "+." WHITE "x" RED "+++++++" WHITE "xxx" RED "++" WHITE "x" RED ":+++" WHITE "xx" RED "+++++++++ " RESET; + LOGO[10] = RED "+++" WHITE " | |" RESET; + LOGO_SMALL[4] = GREEN " \\ \\__|\\ / " RESET; + LOGO_SMALL[5] = GREEN " \\_____/ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "ubuntuunity", strlen("ubuntuunity")) == 0) { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 19; + + if (!isbiglogo) { + LOGO[0] = BLUE " SSSSSSSSSSSSS " RESET; + LOGO[1] = BLUE " SSSSSSSSSSSSSSSSS " RESET; + LOGO[2] = BLUE " SSSSSSS" WHITE "xxxx" BLUE "SS" WHITE "x" MAGENTA "EEEEEEEE " RESET; + LOGO[3] = BLUE " SSSSS" WHITE "xxx" BLUE "SSSSS" WHITE "xxxxxx" MAGENTA "EEEEEE " RESET; + LOGO[4] = BLUE " SSSS" WHITE "xx" BLUE "SSS" WHITE "xxxx" MAGENTA "E" WHITE "xxxxxx" MAGENTA "E" WHITE "xx" MAGENTA "EEEE " RESET; + LOGO[5] = BLUE " SSS" WHITE "xx" BLUE "SS" WHITE "xx" BLUE "SSS" WHITE "xxx" BLUE "S" WHITE "xxx" MAGENTA "EE" WHITE "x" MAGENTA "EE" WHITE "xx" MAGENTA "EEE " RESET; + LOGO[6] = BLUE " SSS" WHITE "xx" BLUE "SS" WHITE "x" BLUE "SS" WHITE "xx" MAGENTA "EEEEEEE" WHITE "xx" MAGENTA "EE" WHITE "x" MAGENTA "EE" WHITE "xx" MAGENTA "EEE " RESET; + LOGO[7] = BLUE " SSS" WHITE "x" BLUE "SSS" WHITE "x" BLUE "S" WHITE "xx" MAGENTA "EEEEEEEEEEE" WHITE "x" RED "XX" WHITE "x" RED "XX" WHITE "x" RED "XXXX " RESET; + LOGO[8] = BLUE "SSSSS" WHITE "xxx" MAGENTA "EEEEEEEEEEEEEEEE" WHITE "x" RED "X" WHITE "xx" RED "X" WHITE "x" RED "XXXXX " RESET; + LOGO[9] = BLUE "SSSS" WHITE "xxxxxx" MAGENTA "EEEEEEEEEEEEEE" WHITE "x" RED "XX" WHITE "x" RED "XX" WHITE "x" RED "XXXX " RESET; + LOGO[10] = BLUE "SSSS" WHITE "xxxxxx" MAGENTA "EEEEEEEEEEEE" RED "XX" WHITE "x" RED "X" WHITE "xx" RED "XX" WHITE "x" RED "XXXX " RESET; + LOGO[11] = MAGENTA "EEEEEE" WHITE "x" MAGENTA "EEEE" WHITE "x" MAGENTA "EEEEEEEE" RED "XXX" WHITE "x" RED "XX" WHITE "x" RED "XX" WHITE "xx" RED "XXXX " RESET; + LOGO[12] = MAGENTA " EEEE" WHITE "xx" MAGENTA "E" WHITE "xx" MAGENTA "EE" WHITE "xx" MAGENTA "EEEE" RED "XXXX" WHITE "xxxxx" RED "X" WHITE "xx" RED "XXXX " RESET; + LOGO[13] = MAGENTA " EEEE" WHITE "xx" MAGENTA "EE" WHITE "xx" MAGENTA "EE" RED "X" WHITE "xxxx" RED "X" WHITE "xxxxxxx" RED "X" WHITE "x" RED "XXXX " RESET; + LOGO[14] = MAGENTA " EEEE" WHITE "xxx" MAGENTA "EE" WHITE "xxxxxxx" RED "X" WHITE "xxxxxxx" RED "XXXXX " RESET; + LOGO[15] = MAGENTA " EEEEE" WHITE "xxxx" RED "XXXXXXXX" WHITE "xxxxx" RED "XXXXX " RESET; + LOGO[16] = MAGENTA " EEEEEEE" WHITE "xxxxxxxxx+" RED "XXXXXXX " RESET; + LOGO[17] = MAGENTA " EEE" RED "XXXXXXXXXXXXXXXXX " RESET; + LOGO[18] = RED " XXXXXXXXXXXXXXXX " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " _ " RESET; + LOGO_SMALL[1] = BLUE " ---<_> " RESET; + LOGO_SMALL[2] = MAGENTA " _/ --- \\ " RESET; + LOGO_SMALL[3] = MAGENTA "<_> | | " RESET; + LOGO_SMALL[4] = RED " \\ --- _/ " RESET; + LOGO_SMALL[5] = RED " ---<_> " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "ubuntu", strlen("ubuntu")) == 0) { + if (!customcolor) color = RED; + else color = customcolor; + if (!customtitlecolor) titlecolor = RED; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = RED " .-/+oossssoo+/-. " RESET; + LOGO[1] = RED " `:+ssssssssssssssssss+:` " RESET; + LOGO[2] = RED " -+ssssssssssssssssssyyssss+- " RESET; + LOGO[3] = RED " .ossssssssssssssssss" WHITE "dMMMNy" RED "sssso. " RESET; + LOGO[4] = RED " /sssssssssss" WHITE "hdmmNNmmyNMMMMh" RED "ssssss/ " RESET; + LOGO[5] = RED " +sssssssss" WHITE "hm" RED "yd" WHITE "MMMMMMMNddddy" RED "ssssssss+ " RESET; + LOGO[6] = RED " /ssssssss" WHITE "hNMMM" RED "yh" WHITE "hyyyyhmNMMMNh" RED "ssssssss/ " RESET; + LOGO[7] = RED ".ssssssss" WHITE "dMMMNh" RED "ssssssssss" WHITE "hNMMMd" RED "ssssssss. " RESET; + LOGO[8] = RED "+ssss" WHITE "hhhyNMMNy" RED "ssssssssssss" WHITE "yNMMMy" RED "sssssss+ " RESET; + LOGO[9] = RED "oss" WHITE "yNMMMNyMMh" RED "ssssssssssssss" WHITE "hmmmh" RED "ssssssso " RESET; + LOGO[10] = RED "oss" WHITE "yNMMMNyMMh" RED "sssssssssssssshmmmhssssssso " RESET; + LOGO[11] = RED "+ssss" WHITE "hhhyNMMNy" RED "ssssssssssss" WHITE "yNMMMy" RED "sssssss+ " RESET; + LOGO[12] = RED ".ssssssss" WHITE "dMMMNh" RED "ssssssssss" WHITE "hNMMMd" RED "ssssssss. " RESET; + LOGO[13] = RED " /ssssssss" WHITE "hNMMM" RED "yh" WHITE "hyyyyhdNMMMNh" RED "ssssssss/ " RESET; + LOGO[14] = RED " +sssssssss" WHITE "dm" RED "yd" WHITE "MMMMMMMMddddy" RED "ssssssss+ " RESET; + LOGO[15] = RED " /sssssssssss" WHITE "hdmNNNNmyNMMMMh" RED "ssssss/ " RESET; + LOGO[16] = RED " .ossssssssssssssssss" WHITE "dMMMNy" RED "sssso. " RESET; + LOGO[17] = RED " -+sssssssssssssssss" WHITE "yyy" RED "ssss+- " RESET; + LOGO[18] = RED " `:+ssssssssssssssssss+:` " RESET; + LOGO[19] = RED " .-/+oossssoo+/-. " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = RED " _ " RESET; + LOGO_SMALL[1] = RED " ---(_) " RESET; + LOGO_SMALL[2] = RED " _/ --- \\ " RESET; + LOGO_SMALL[3] = RED "(_) | | " RESET; + LOGO_SMALL[4] = RED " \\ --- _/ " RESET; + LOGO_SMALL[5] = RED " ---(_) " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "void", strlen("void")) == 0) { + if (!customcolor) color = WHITE; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + logosize = 19; + + if (!isbiglogo) { + LOGO[0] = GREEN " __.;=====;.__ " RESET; + LOGO[1] = GREEN " _.=+==++=++=+=+===;. " RESET; + LOGO[2] = GREEN " -=+++=+===+=+=+++++=_ " RESET; + LOGO[3] = GREEN " . -=:`` `--==+=++==. " RESET; + LOGO[4] = GREEN " _vi, ` --+=++++: " RESET; + LOGO[5] = GREEN " .uvnvi. _._ -==+==+. " RESET; + LOGO[6] = GREEN " .vvnvnI` .;==|==;. :|=||=|. " RESET; + LOGO[7] = GREY "+QmQQm" GREEN "pvvnv; " GREY "_yYsyQQWUUQQQm #QmQ#" GREEN ":" GREY "QQQWUV$QQm. " RESET; + LOGO[8] = GREY " -QQWQW" GREEN "pvvo" GREY "wZ?.wQQQE" GREEN "==<" GREY "!QWWQ/QWQW.QQWW" GREEN "(: " GREY "jQWQE " RESET; + LOGO[9] = GREY " -$QQQQmmU' jQQQ@" GREEN "+=<" GREY "QWQQ)mQQQ.mQQQC" GREEN "+;" GREY "jWQQ@' " RESET; + LOGO[10] = GREY " -$WQ8Y" GREEN "nI: " GREY "QWQQwgQQWV" GREEN"`" GREY "mWQQ.jQWQQgyyWW@! " RESET; + LOGO[11] = GREEN " -1vvnvv. `~+++` ++|+++ " RESET; + LOGO[12] = GREEN " +vnvnnv, `-|=== " RESET; + LOGO[13] = GREEN " +vnvnvns. . :=- " RESET; + LOGO[14] = GREEN " -Invnvvnsi..___..=sv=. ` " RESET; + LOGO[15] = GREEN " +Invnvnvnnnnnnnnvvnn;. " RESET; + LOGO[16] = GREEN " ~|Invnvnvvnvvvnnv}+` " RESET; + LOGO[17] = GREEN " -~|{*l}*|~ " RESET; + LOGO[18] = GREEN " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " _______ " RESET; + LOGO_SMALL[1] = GREEN " _ \\______ - " RESET; + LOGO_SMALL[2] = GREEN "| \\ ___ \\ | " RESET; + LOGO_SMALL[3] = GREEN "| | / \\ | | " RESET; + LOGO_SMALL[4] = GREEN "| | \\___/ | | " RESET; + LOGO_SMALL[5] = GREEN "| \\______ \\_| " RESET; + LOGO_SMALL[6] = GREEN " -_______\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = GREEN " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else if (strncmp((char *)logoname, "xubuntu", strlen("xubuntu")) == 0) { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 20; + + if (!isbiglogo) { + LOGO[0] = BLUE " `-/osyhddddhyso/-` " RESET; + LOGO[1] = BLUE " .+yddddddddddddddddddy+. " RESET; + LOGO[2] = BLUE " :yddddddddddddddddddddddddy: " RESET; + LOGO[3] = BLUE " -yddddddddddddddddddddhdddddddy- " RESET; + LOGO[4] = BLUE " odddddddddddyshdddddddh`dddd+ydddo " RESET; + LOGO[5] = BLUE " `yddddddhshdd- ydddddd+`ddh.:dddddy` " RESET; + LOGO[6] = BLUE " sddddddy /d. :dddddd-:dy`-ddddddds " RESET; + LOGO[7] = BLUE ":ddddddds /+ .dddddd`yy`:ddddddddd: " RESET; + LOGO[8] = BLUE "sdddddddd` . .-:/+ssdyodddddddddds " RESET; + LOGO[9] = BLUE "ddddddddy `:ohddddddddd " RESET; + LOGO[10] = BLUE "dddddddd. +dddddddd " RESET; + LOGO[11] = BLUE "sddddddy ydddddds " RESET; + LOGO[12] = BLUE ":dddddd+ .oddddddd: " RESET; + LOGO[13] = BLUE " sdddddo ./ydddddddds " RESET; + LOGO[14] = BLUE " `yddddd. `:ohddddddddddy` " RESET; + LOGO[15] = BLUE " oddddh/` `.:+shdddddddddddddo " RESET; + LOGO[16] = BLUE " -ydddddhyssyhdddddddddddddddddy- " RESET; + LOGO[17] = BLUE " :yddddddddddddddddddddddddy: " RESET; + LOGO[18] = BLUE " .+yddddddddddddddddddy+. " RESET; + LOGO[19] = BLUE " `-/osyhddddhyso/-` " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = BLUE " _____ " RESET; + LOGO_SMALL[1] = BLUE " / \\ " RESET; + LOGO_SMALL[2] = BLUE " / ||_ / \\ " RESET; + LOGO_SMALL[3] = BLUE " | | \\ |" RESET; + LOGO_SMALL[4] = BLUE " \\ \\__/ / " RESET; + LOGO_SMALL[5] = BLUE " \\_____/ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = BLUE " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else { + if (!customcolor) color = WHITE; + else color = customcolor; + if (!customtitlecolor) titlecolor = WHITE; + else titlecolor = customtitlecolor; + logosize = 13; + + if (!isbiglogo) { + LOGO[0] = GREY " ##### " RESET; + LOGO[1] = GREY " ####### " RESET; + LOGO[2] = GREY " ##" WHITE "O" GREY "#" WHITE "O" GREY "## " RESET; + LOGO[3] = GREY " #" YELLOW "#####" GREY "# " RESET; + LOGO[4] = GREY " ##" WHITE "##" YELLOW "###" WHITE "##" GREY "## " RESET; + LOGO[5] = GREY " #" WHITE "##########" GREY "## " RESET; + LOGO[6] = GREY " #" WHITE "############" GREY "## " RESET; + LOGO[7] = GREY " #" WHITE "############" GREY "### " RESET; + LOGO[8] = YELLOW " ##" GREY "#" WHITE "###########" GREY "##" YELLOW "# " RESET; + LOGO[9] = YELLOW "######" YELLOW "#" GREY "#" WHITE "######" GREY "#" YELLOW "###### " RESET; + LOGO[10] = YELLOW "#######" GREY "#" WHITE "#####" GREY "#" YELLOW "####### " RESET; + LOGO[11] = YELLOW " #####" GREY "#######" YELLOW "##### " RESET; + LOGO[12] = GREY " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREY " ___ " RESET; + LOGO_SMALL[1] = GREY " / \\ " RESET; + LOGO_SMALL[2] = GREY " |" WHITE "0 0" GREY "| " RESET; + LOGO_SMALL[3] = GREY " | " YELLOW "v" GREY " | " RESET; + LOGO_SMALL[4] = GREY " / " WHITE "/ \\" GREY " \\ " RESET; + LOGO_SMALL[5] = GREY " | " WHITE "\\_/" GREY " | " RESET; + LOGO_SMALL[6] = YELLOW "/ " GREY "_____" YELLOW " \\ " RESET; + LOGO_SMALL[7] = YELLOW "\\/ \\/ " RESET; + for (int i = 8; i < minsize; i++) { + LOGO_SMALL[i] = GREY " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } +} +#endif diff --git a/src/logo/linux.h b/src/logo/linux.h new file mode 100644 index 0000000..85c8312 --- /dev/null +++ b/src/logo/linux.h @@ -0,0 +1,19 @@ +#if defined(__linux__) +#ifndef LOGO_LINUX_H +#define LOGO_LINUX_H + +#include +#include "../distro.h" +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern const char *logoname; +extern size_t logosize; + +void getDistro(const char *distroname); + +#endif +#endif diff --git a/src/logo/macos.c b/src/logo/macos.c new file mode 100644 index 0000000..fdc89a4 --- /dev/null +++ b/src/logo/macos.c @@ -0,0 +1,72 @@ +#if defined(__APPLE__) +#include "macos.h" +#include "../config.h" +#include "../packages.h" + +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +size_t logosize = 17; +int minsize = MIN_SIZE; + +void getOS() { + if (!customcolor) color = YELLOW; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREEN; + else titlecolor = customtitlecolor; + const char *pac = display_packages(); + if (!pac) minsize--; + else free((void *)pac); + + if (!isbiglogo) { + LOGO[0] = GREEN " 'c. " RESET; + LOGO[1] = GREEN " ,xNMM. " RESET; + LOGO[2] = GREEN " .OMMMMo " RESET; + LOGO[3] = GREEN " OMMM0, " RESET; + LOGO[4] = GREEN " .;loddo:' loolloddol;. " RESET; + LOGO[5] = GREEN " cKMMMMMMMMMMNWMMMMMMMMMM0: " RESET; + LOGO[6] = YELLOW " .KMMMMMMMMMMMMMMMMMMMMMMMWd. " RESET; + LOGO[7] = YELLOW " XMMMMMMMMMMMMMMMMMMMMMMMX. " RESET; + LOGO[8] = RED ";MMMMMMMMMMMMMMMMMMMMMMMM: " RESET; + LOGO[9] = RED ":MMMMMMMMMMMMMMMMMMMMMMMM: " RESET; + LOGO[10] = RED ".MMMMMMMMMMMMMMMMMMMMMMMMX. " RESET; + LOGO[11] = RED " kMMMMMMMMMMMMMMMMMMMMMMMMWd. " RESET; + LOGO[12] = MAGENTA " .XMMMMMMMMMMMMMMMMMMMMMMMMMMk " RESET; + LOGO[13] = MAGENTA " .XMMMMMMMMMMMMMMMMMMMMMMMMK. " RESET; + LOGO[14] = BLUE " kMMMMMMMMMMMMMMMMMMMMMMd " RESET; + LOGO[15] = BLUE " ;KMMMMMMMWXXWMMMMMMMk. " RESET; + LOGO[16] = BLUE " .cooc,. .,coo:. " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREEN " .:' " RESET; + LOGO_SMALL[1] = GREEN " _ :'_ " RESET; + LOGO_SMALL[2] = YELLOW " .'`_`-'_``. " RESET; + LOGO_SMALL[3] = YELLOW ":________.-' " RESET; + LOGO_SMALL[4] = RED ":_______: " RESET; + LOGO_SMALL[5] = RED ":_______: " RESET; + LOGO_SMALL[6] = MAGENTA " :_______`-; " RESET; + LOGO_SMALL[7] = BLUE " `._.-._.' " RESET; + for (int i = 8; i < minsize; i++) { + LOGO_SMALL[i] = RED " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } +} +#endif diff --git a/src/logo/macos.h b/src/logo/macos.h new file mode 100644 index 0000000..4e1469f --- /dev/null +++ b/src/logo/macos.h @@ -0,0 +1,17 @@ +#if defined(__APPLE__) +#ifndef LOGO_MACOS_H +#define LOGO_MACOS_H + +#include +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern size_t logosize; + +void getOS(); + +#endif +#endif diff --git a/src/logo/netbsd.c b/src/logo/netbsd.c new file mode 100644 index 0000000..9a10b51 --- /dev/null +++ b/src/logo/netbsd.c @@ -0,0 +1,76 @@ +#if defined(__NetBSD__) +#include "netbsd.h" +#include "../config.h" +#include "../resolution.h" +#include "../wm.h" + +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +size_t logosize = 18; +int minsize = MIN_SIZE; + +void getOS() { + if (!customcolor) color = MAGENTA; + else color = customcolor; + if (!customtitlecolor) titlecolor = MAGENTA; + else titlecolor = customtitlecolor; + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + const char *wm = display_wm(); + if (!wm) minsize--; + else free((void *)wm); + + if (!isbiglogo) { + LOGO[0] = MAGENTA " `-/oshdmNMNdhyo+:-` " RESET; + LOGO[1] = WHITE "y" MAGENTA "/s+:-`` `.-:+oydNMMMMNhs/-`` " RESET; + LOGO[2] = WHITE "-m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` " RESET; + LOGO[3] = WHITE " -m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMMmy+:` " RESET; + LOGO[4] = WHITE " -N/" MAGENTA "dMMMMMMMMMMMMMMMds:` " RESET; + LOGO[5] = WHITE " -N/" MAGENTA "hMMMMMMMMMmho:` " RESET; + LOGO[6] = WHITE " -N/" MAGENTA "-:/++/:.` " RESET; + LOGO[7] = WHITE " :M+ " RESET; + LOGO[8] = WHITE " :Mo " RESET; + LOGO[9] = WHITE " :Ms " RESET; + LOGO[10] = WHITE " :Ms " RESET; + LOGO[11] = WHITE " :Ms " RESET; + LOGO[12] = WHITE " :Ms " RESET; + LOGO[13] = WHITE " :Ms " RESET; + LOGO[14] = WHITE " :Ms " RESET; + LOGO[15] = WHITE " :Ms " RESET; + LOGO[16] = WHITE " :Ms " RESET; + LOGO[17] = WHITE " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = "\\\\" MAGENTA "\\`-______,----__ " RESET; + LOGO_SMALL[1] = " \\\\ " MAGENTA "__,---\\`_ " RESET; + LOGO_SMALL[2] = " \\\\ " MAGENTA "\\`.____ " RESET; + LOGO_SMALL[3] = " \\\\" MAGENTA "-______,----\\`- " RESET; + LOGO_SMALL[4] = " \\\\ " RESET; + LOGO_SMALL[5] = " \\\\ " RESET; + LOGO_SMALL[6] = " \\\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = MAGENTA " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } +} +#endif diff --git a/src/logo/netbsd.h b/src/logo/netbsd.h new file mode 100644 index 0000000..7728899 --- /dev/null +++ b/src/logo/netbsd.h @@ -0,0 +1,17 @@ +#if defined(__NetBSD__) +#ifndef LOGO_NETBSD_H +#define LOGO_NETBSD_H + +#include +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern size_t logosize; + +void getOS(); + +#endif +#endif diff --git a/src/logo/openbsd.c b/src/logo/openbsd.c new file mode 100644 index 0000000..53242cf --- /dev/null +++ b/src/logo/openbsd.c @@ -0,0 +1,89 @@ +#if defined(__OpenBSD__) +#include "openbsd.h" +#include "../config.h" +#include "../resolution.h" +#include "../wm.h" + +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +size_t logosize = 23; +int minsize = MIN_SIZE; + +void getOS() { + if (!customcolor) color = YELLOW; + else color = customcolor; + if (!customtitlecolor) titlecolor = YELLOW; + else titlecolor = customtitlecolor; + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + const char *wm = display_wm(); + if (!wm) minsize--; + else free((void *)wm); + + if (!isbiglogo && !issmalllogo) { + for (int i = 0; i < LOGO_SIZE; i++) { + LOGO[i] = NULL; + LOGO_SMALL[i] = NULL; + } + } + + if (!isbiglogo) { + LOGO[0] = CYAN " _ " RESET; + LOGO[1] = CYAN " (_) " RESET; + LOGO[2] = YELLOW " | . " RESET; + LOGO[3] = YELLOW " . |L /| . " CYAN "_ " RESET; + LOGO[4] = YELLOW " _ . |\\ _| \\--+._/| . " CYAN " (_) " RESET; + LOGO[5] = YELLOW " / ||\\| Y J ) / |/| ./ " RESET; + LOGO[6] = YELLOW " J |)'( | ` F`.'/ " CYAN " _ " RESET; + LOGO[7] = YELLOW " -<| F __ .-< " CYAN " (_) " RESET; + LOGO[8] = YELLOW " | / .-'" CYAN "." YELLOW " `. /" CYAN "-. " YELLOW "L___ " RESET; + LOGO[9] = YELLOW " J \\ < " CYAN "\\ " YELLOW " | |" GREY " O" CYAN "\\" YELLOW "|.-' " CYAN " _ " RESET; + LOGO[10] = YELLOW " _J \\ .- \\" CYAN "/" GREY " O " CYAN "|" YELLOW" | \\ |F " CYAN " (_) " RESET; + LOGO[11] = YELLOW " '-F -<_. \\ .-' `-' L__ " RESET; + LOGO[12] = YELLOW "__J _ _. >-' )" RED "._." YELLOW " |-' " RESET; + LOGO[13] = YELLOW " `-|.' /_. " RED "\\_|" YELLOW " F " RESET; + LOGO[14] = YELLOW " /.- . _.< " RESET; + LOGO[15] = YELLOW " /' /.' .' `\\ " RESET; + LOGO[16] = YELLOW " /L /' |/ _.-'-\\ " RESET; + LOGO[17] = YELLOW " /'J ___.---'\\| " RESET; + LOGO[18] = YELLOW " |\\ .--' V | `. ` " RESET; + LOGO[19] = YELLOW " |/`. `-. `._) " RESET; + LOGO[20] = YELLOW " / .-.\\ " RESET; + LOGO[21] = YELLOW " \\ ( `\\ " RESET; + LOGO[22] = YELLOW " `.\\ " RESET; + LOGO[22] = YELLOW " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = YELLOW " _____ " RESET; + LOGO_SMALL[1] = YELLOW " \\- -/ " RESET; + LOGO_SMALL[2] = YELLOW " \\_/ \\ " RESET; + LOGO_SMALL[3] = YELLOW " | " WHITE "O O" YELLOW" | " RESET; + LOGO_SMALL[4] = YELLOW " |_ < ) 3 ) " RESET; + LOGO_SMALL[5] = YELLOW " / \\ / " RESET; + LOGO_SMALL[6] = YELLOW " /-_____-\\ " RESET; + for (int i = 7; i < minsize; i++) { + LOGO_SMALL[i] = YELLOW " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } +} +#endif diff --git a/src/logo/openbsd.h b/src/logo/openbsd.h new file mode 100644 index 0000000..961e62f --- /dev/null +++ b/src/logo/openbsd.h @@ -0,0 +1,17 @@ +#if defined(__OpenBSD__) +#ifndef LOGO_OPENBSD_H +#define LOGO_OPENBSD_H + +#include +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern size_t logosize; + +void getOS(); + +#endif +#endif diff --git a/src/logo/sunos.c b/src/logo/sunos.c new file mode 100644 index 0000000..3544e6b --- /dev/null +++ b/src/logo/sunos.c @@ -0,0 +1,128 @@ +#if defined(__sun) +#include "sunos.h" +#include "../config.h" +#include "../resolution.h" +#include "../wm.h" + +#include +#include +#include + +char *LOGO[23]; +char *LOGO_SMALL[23]; +const char *color; +const char *titlecolor; +const char *logoname; +size_t logosize; +int minsize = MIN_SIZE; + +void getDistro(const char *distroname) { + const char *res = display_resolution(); + if (!res) minsize--; + else free((void *)res); + const char *wm = display_wm(); + if (!wm) minsize--; + else free((void *)wm); + + if (logoname == NULL) distroname = logoname; + else { + for (size_t i = 0; i < logosize; i++) { + LOGO[i] = ""; + } + for (int i = 0; i < minsize; i++) { + LOGO_SMALL[i] = ""; + } + } + + if (!isbiglogo && !issmalllogo) { + for (int i = 0; i < LOGO_SIZE; i++) { + LOGO[i] = NULL; + LOGO_SMALL[i] = NULL; + } + } + + if (strncmp((char *)logoname, "omnios", strlen("omnios")) == 0) { + if (!customcolor) color = YELLOW; + else color = customcolor; + if (!customtitlecolor) titlecolor = GREY; + else titlecolor = customtitlecolor; + logosize = 13; + + if (!isbiglogo) { + LOGO[0] = GREY " ###### " RESET; + LOGO[1] = GREY " ### ### " RESET; + LOGO[2] = GREY " ## ## " RESET; + LOGO[3] = GREY "## ## " RESET; + LOGO[4] = GREY "## " YELLOW "###### " RESET; + LOGO[5] = GREY " ## " YELLOW "### " GREY "## " YELLOW "### " RESET; + LOGO[6] = GREY " ### " YELLOW "## " GREY "### " YELLOW "## " RESET; + LOGO[7] = GREY " " YELLOW "##" GREY "#### " YELLOW "## " RESET; + LOGO[8] = YELLOW " ## ## " RESET; + LOGO[9] = YELLOW " ## ## " RESET; + LOGO[10] = YELLOW " ### ### " RESET; + LOGO[11] = YELLOW " ###### " RESET; + for (size_t i = 12; i < logosize; i++) { + LOGO[i] = YELLOW " " RESET; + } + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + + if (!issmalllogo) { + LOGO_SMALL[0] = GREY " __ " RESET; + LOGO_SMALL[1] = GREY " / \\ " RESET; + LOGO_SMALL[2] = GREY "| " YELLOW "__ " RESET; + LOGO_SMALL[3] = GREY " \\_" YELLOW "/" GREY "/ " YELLOW "\\ " RESET; + LOGO_SMALL[4] = YELLOW " | | " RESET; + LOGO_SMALL[5] = YELLOW " \\__/ " RESET; + for (int i = 6; i < minsize; i++) { + LOGO_SMALL[i] = YELLOW " " RESET; + } + } else { + if (smalllogoi < (size_t)minsize) { + for (size_t i = smalllogoi; i < (size_t)minsize; i++) { + LOGO_SMALL[i] = WHITE " " RESET; + } + } + } + } else { + if (!customcolor) color = BLUE; + else color = customcolor; + if (!customtitlecolor) titlecolor = BLUE; + else titlecolor = customtitlecolor; + logosize = 17; + + if (!isbiglogo) { + LOGO[0] = WHITE " .sy/ " RESET; + LOGO[1] = WHITE " .yh+ " RESET; + LOGO[2] = WHITE " " RESET; + LOGO[3] = BLUE " " BLUE "-+syyyo+-" WHITE " /+. " RESET; + LOGO[4] = BLUE " " BLUE "+ddo/---/sdh/" WHITE " ym- " RESET; + LOGO[5] = BLUE " " BLUE "`hm+ `sms" WHITE " ym-```````.-. " RESET; + LOGO[6] = BLUE " " BLUE "sm+ sm/" WHITE " ym- +s " RESET; + LOGO[7] = BLUE " " BLUE "hm. /mo" WHITE " ym- /h " RESET; + LOGO[8] = BLUE " " BLUE "omo ym:" WHITE " ym- `os` " RESET; + LOGO[9] = BLUE " " BLUE "smo` .ym+" WHITE " ym- .os- " RESET; + LOGO[10] = WHITE " `` " BLUE ":ymy+///oyms-" WHITE " ym- .+s+. " RESET; + LOGO[11] = WHITE " ..` " BLUE "`:+oo+/-`" WHITE " -//oyo- " RESET; + LOGO[12] = WHITE " -:` .:oys/. " RESET; + LOGO[13] = WHITE "+- `./oyys/. " RESET; + LOGO[14] = WHITE "h+` `.-:+oyyyo/-` " RESET; + LOGO[15] = WHITE "`/ossssysso+/-.` " RESET; + LOGO[16] = WHITE " " RESET; + } else { + logosize = biglogoi; + if (biglogoi < (size_t)minsize) { + for (size_t i = biglogoi; i < (size_t)minsize; i++) { + LOGO[i] = WHITE " " RESET; + } + } + } + } +} +#endif diff --git a/src/logo/sunos.h b/src/logo/sunos.h new file mode 100644 index 0000000..5a772b4 --- /dev/null +++ b/src/logo/sunos.h @@ -0,0 +1,19 @@ +#if defined(__sun) +#ifndef LOGO_SUNOS_H +#define LOGO_SUNOS_H + +#include +#include "../distro.h" +#include "colors.h" + +extern char *LOGO[23]; +extern char *LOGO_SMALL[23]; +extern const char *color; +extern const char *titlecolor; +extern const char *logoname; +extern size_t logosize; + +void getDistro(const char *distroname); + +#endif +#endif diff --git a/src/memory.c b/src/memory.c new file mode 100644 index 0000000..4f6dfa9 --- /dev/null +++ b/src/memory.c @@ -0,0 +1,89 @@ +#include "memory.h" +#include "common.h" + +#include + +#if defined(__OpenBSD__) +#include +#include + +void display_memory() { + int mib[2]; + long long memtotal; + size_t len = sizeof(memtotal); + + mib[0] = CTL_HW; + mib[1] = HW_PHYSMEM64; + if (sysctl(mib, 2, &memtotal, &len, NULL, 0) != 0) { + perror("sysctl"); + return; + } + + struct uvmexp uvm; + mib[0] = CTL_VM; + mib[1] = VM_UVMEXP; + len = sizeof(uvm); + if (sysctl(mib, 2, &uvm, &len, NULL, 0) != 0) { + perror("sysctl"); + return; + } + +#define pgtok(a) ((a) * ((unsigned int)uvm.pagesize >> 10)) + + unsigned int memused = pgtok(uvm.active + uvm.swpginuse) / 1024; + + printf("%u MiB / %lld MiB", memused, memtotal / 1024LL / 1024LL); +} +#else +void display_memory() { + long long int memused = 0; + long long int memtotal = 0; +#if defined(__FreeBSD__) || defined(__DragonFly__) + // 13M Active, 200M Inact, 184M Laundry, + long long int used1 = run_command_lld("top | grep \"Mem:\" | awk '{print $2}' | " + "sed 's/M//'"); + long long int used2 = run_command_lld("top | grep \"Mem:\" | awk '{print $4}' | " + "sed 's/M//'"); + long long int used3 = run_command_lld("top | grep \"Mem:\" | awk '{print $6}' | " + "sed 's/M//'"); + long long int used4 = run_command_lld("top | grep \"ARC:\" | awk '{print $6}' | " + "sed 's/M//'"); + memused = used1 + used2 + used3 + used4; + memtotal = run_command_lld("sysctl -n hw.physmem") / 1024LL / 1024LL; +#elif defined(__NetBSD__) + memused = run_command_lld("top | grep \"Memory:\" | awk '{print $2}' | " + "sed 's/M//'"); + memtotal = run_command_lld("sysctl -n hw.physmem64") / 1024LL / 1024LL; +#elif defined(__sun) + // Memory: 3993M phys mem, 504M free mem, + memused = run_command_lld("top | grep \"Memory:\" | awk '{print $5}' | " + "sed 's/M//'"); + memtotal = run_command_lld("top | grep \"Memory:\" | awk '{print $2}' | " + "sed 's/M//'"); + /* memtotal = run_command_lld("sysctl -n hw.physmem64") / 1024LL / 1024LL; */ +#elif defined(__minix) + memtotal = run_command_lld("sysctl -n hw.physmem") / 1024LL / 1024LL; +#elif defined(__linux__) + long long int memaval = run_command_lld("cat /proc/meminfo | grep MemAvailable | " + "awk '{print $2}'") / 1024LL; + memtotal = run_command_lld("cat /proc/meminfo | grep MemTotal | " + "awk '{print $2}'") / 1024LL; + memused = memtotal - memaval; + /* memused = run_command_lld("cat /proc/meminfo | grep MemFree | " + "awk '{print $2}'") / 1024LL; */ +#elif defined(__APPLE__) + memtotal = run_command_lld("sysctl -n hw.memsize") / 1024LL / 1024LL; + long long int memwired = run_command_lld("vm_stat | awk '/ wired/ { print $4 }'"); + long long int memactive = run_command_lld("vm_stat | awk '/ active/ { printf $3 }'"); + long long int memcompressed = run_command_lld("vm_stat | " + "awk '/ occupied/ { printf $5 }'"); + memused = (memwired + memactive + memcompressed) * 4LL / 1024LL; +#elif defined(__HAIKU__) + memtotal = run_command_lld("vmstat | awk '/max memory:/ {max=$3} END {print max/1024/1024}'"); + long long int memfree = run_command_lld("vmstat | awk '/free memory:/ {free=$3} END {print free/1024/1024}'"); + memused = memtotal - memfree; +#endif + + printf("%lld MiB / %lld MiB", memused, memtotal); +} +#endif diff --git a/src/memory.h b/src/memory.h new file mode 100644 index 0000000..16d89de --- /dev/null +++ b/src/memory.h @@ -0,0 +1,6 @@ +#ifndef MEMORY_H +#define MEMORY_H + +void display_memory(); + +#endif diff --git a/src/os.c b/src/os.c new file mode 100644 index 0000000..fa81fc5 --- /dev/null +++ b/src/os.c @@ -0,0 +1,74 @@ +#include "os.h" +#include "common.h" + +#include +#include + +const char *display_os() { + const char *osname = NULL; + const char *osversion = NULL; + const char *osarch = NULL; + char *cmd; + +#if defined(__APPLE__) + if (!from_cache("/tmp/farfetch/os")) { + osname = run_command_s("sw_vers | grep \"ProductName\" | awk '{print $2}'"); + osversion = run_command_s("sw_vers | grep \"ProductVersion\" | awk '{print $2}'"); + osarch = run_command_s("uname -m"); + + cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) { + perror("malloc"); + free((void *)osname); + free((void *)osversion); + free((void *)osarch); + return NULL; + } + snprintf(cmd, 128, "%s %s %s", osname, osversion, osarch); + + to_cache("/tmp/farfetch/os", cmd); + } else { + cmd = (char *)from_cache("/tmp/farfetch/os"); + } +#elif defined(__HAIKU__) + osname = run_command_s("uname -s"); + osversion = run_command_s("uname -r"); + osarch = run_command_s("uname -m"); + + cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) { + perror("malloc"); + free((void *)osname); + free((void *)osversion); + free((void *)osarch); + return NULL; + } + snprintf(cmd, 128, "%s %s %s", osname, osversion, osarch); +#else + if (!from_cache("/tmp/farfetch/os")) { + osname = run_command_s("uname -s"); + osversion = run_command_s("uname -r"); + osarch = run_command_s("uname -m"); + + cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) { + perror("malloc"); + free((void *)osname); + free((void *)osversion); + free((void *)osarch); + return NULL; + } + snprintf(cmd, 128, "%s %s %s", osname, osversion, osarch); + + to_cache("/tmp/farfetch/os", cmd); + } else { + cmd = (char *)from_cache("/tmp/farfetch/os"); + } +#endif + + free((void *)osname); + free((void *)osversion); + free((void *)osarch); + + return cmd; +} diff --git a/src/os.h b/src/os.h new file mode 100644 index 0000000..4943036 --- /dev/null +++ b/src/os.h @@ -0,0 +1,6 @@ +#ifndef OS_H +#define OS_H + +const char *display_os(); + +#endif diff --git a/src/packages.c b/src/packages.c new file mode 100644 index 0000000..56a8b47 --- /dev/null +++ b/src/packages.c @@ -0,0 +1,49 @@ +#include "packages.h" +#include "common.h" + +#if defined(__linux__) +#include "distro.h" +#elif defined(__sun) +#include +#endif + +#include + +const char *display_packages() { +#if defined(__OpenBSD__) || defined(__NetBSD__) + return run_command_s("pkg_info -a | wc -l | sed \"s/ //g\" && " + "echo \" (pkg_info)\""); +#elif defined(__FreeBSD__) || defined(__DragonFly__) + return run_command_s("pkg info -a | wc -l | sed \"s/ //g\" && " + "echo \" (pkg info)\""); +#elif defined(__sun) + return run_command_s("pkg list | wc -l | sed 's/ *//' && echo \" (pkg list)\""); +#elif defined(__linux__) + if (access("/bin/xbps-query", F_OK) != -1) { + return run_command_s("xbps-query -l | wc -l | sed \"s/ //g\" && " + "echo \" (xbps-query)\""); + } else if (access("/usr/bin/dpkg-query", F_OK) != -1) { + return run_command_s("dpkg-query -f '.\n' -W | wc -l | sed \"s/ //g\" && " + "echo \" (dpkg-query)\""); + } else if (access("/usr/bin/pacman", F_OK) != -1) { + return run_command_s("pacman -Qq | wc -l | sed \"s/ //g\" && " + "echo \" (pacman)\""); + } else if (access("/usr/bin/rpm", F_OK) != -1) { + return run_command_s("rpm -qa | wc -l | sed \"s/ //g\" && " + "echo \" (rpm)\""); + } + + return NULL; +#elif defined(__APPLE__) + const char *command = ""; + // TODO: macportとpkgin対応 + if (access("/usr/local/bin/brew", F_OK) != -1) { + command = "ls -l /usr/local/Cellar | wc -l | sed \"s/ //g\" && echo \" (brew)\""; + } + return run_command_s(command); +#elif defined(__HAIKU__) + return run_command_s("find /boot/system/packages -type f -name \"*.hpkg\" | " + "wc -l && echo \" (pkgman)\""); +#endif + return NULL; +} diff --git a/src/packages.h b/src/packages.h new file mode 100644 index 0000000..5a1a29f --- /dev/null +++ b/src/packages.h @@ -0,0 +1,6 @@ +#ifndef PACKAGES_H +#define PACKAGES_H + +const char *display_packages(); + +#endif diff --git a/src/recording.c b/src/recording.c new file mode 100644 index 0000000..459b1f7 --- /dev/null +++ b/src/recording.c @@ -0,0 +1,12 @@ +#if defined(__OpenBSD__) +#include "recording.h" +#include "common.h" + +const char *display_recording_audio() { + return run_command_s("sysctl -n kern.audio.record"); +} + +const char *display_recording_video() { + return run_command_s("sysctl -n kern.video.record"); +} +#endif diff --git a/src/recording.h b/src/recording.h new file mode 100644 index 0000000..99fe7e7 --- /dev/null +++ b/src/recording.h @@ -0,0 +1,9 @@ +#if defined(__OpenBSD__) +#ifndef RECORDING_H +#define RECORDING_H + +const char *display_recording_audio(); +const char *display_recording_video(); + +#endif +#endif diff --git a/src/resolution.c b/src/resolution.c new file mode 100644 index 0000000..6addca9 --- /dev/null +++ b/src/resolution.c @@ -0,0 +1,96 @@ +#include "resolution.h" +#include "common.h" + +#include +#include +#include +#include + +const char *usingxrandr() { + return run_command_s("xrandr --nograb --current | " + "awk -F 'connected |\\\\+|\\\\(' '/ " + "connected.*[0-9]+x[0-9]+\\+/ && $2 {printf $2 " + "\", \"}' | sed 's/primary //' | " + "sed 's/,\\([^,]*\\)$/\\1/'"); +} + +const char *usingxwininfo() { + return run_command_s("xwininfo -root | awk '/Width/ {width=$2} /Height/ " + "{height=$2} END {printf \"%dx%d\\n\", width, height}'"); +} + +const char *usingxdpyinfo() { + return run_command_s("xdpyinfo | awk '/dimensions:/ {printf $2}'"); +} + +const char *usingdrm() { + return run_command_s("for dev in /sys/class/drm/card*-*/status; do " + "if grep -q \"connected\" \"$dev\"; then " + "dir=$(dirname \"$dev\"); " + "modefile=\"$dir/modes\"; " + "dis=$(echo \"$dir\" | sed -e 's/^.*drm\\///'); " + "if [ -f \"$modefile\" ]; then " + "mode=$(head -n 1 \"$modefile\"); " + "if [ -n \"$mode\" ]; then " + "echo \"$mode, \"; " + "fi " + "fi " + "fi " + "done | sed '$s/,//'"); +} + +const char *display_resolution() { +#if defined(__HAIKU__) + return run_command_s("screenmode | sed 's/Resolution: //' | sed 's/,.*$//' | " + "sed 's/ /x/'"); +#elif defined(__APPLE__) + return run_command_s("system_profiler SPDisplaysDataType | grep Resolution | " + "sed 's/^.*: //' | sed 's/ Retina//' | sed 's/ //g'"); +#else + if (access("/sys/class/drm", F_OK) == 0) { + return usingdrm(); + } + + const char *display = run_command_s("echo $DISPLAY"); + if (display == NULL || strlen(display) == 0) return NULL; + else free((void *)display); + + const char *isxrandr = run_command_s("which xrandr"); + if ( + isxrandr != NULL && + strlen(isxrandr) != 0 && + strncmp(isxrandr, "xrandr not found", strlen("xrandr not found")) != 0 && + !strstr(isxrandr, "which: no xrandr in") + ) { + free((void *)isxrandr); + return usingxrandr(); + } + free((void *)isxrandr); + + const char *isxwininfo = run_command_s("which xwininfo"); + if ( + isxwininfo != NULL && + strlen(isxwininfo) != 0 && + strncmp(isxwininfo, "xwininfo not found", strlen("xwininfo not found")) != 0 && + !strstr(isxwininfo, "which: no xwininfo in") + ) { + free((void *)isxwininfo); + return usingxwininfo(); + } + free((void *)isxwininfo); + + const char *isxdpyinfo = run_command_s("which xdpyinfo"); + if ( + isxdpyinfo != NULL && + strlen(isxdpyinfo) != 0 && + strncmp(isxdpyinfo, "xdpyinfo not found", strlen("xdpyinfo not found")) != 0 && + !strstr(isxdpyinfo, "which: no xdpyinfo in") + ) { + free((void *)isxdpyinfo); + return usingxdpyinfo(); + } + free((void *)isxdpyinfo); + + return NULL; +#endif +} diff --git a/src/resolution.h b/src/resolution.h new file mode 100644 index 0000000..68dff4f --- /dev/null +++ b/src/resolution.h @@ -0,0 +1,6 @@ +#ifndef RESOLUTION_H +#define RESOLUTION_H + +const char *display_resolution(); + +#endif diff --git a/src/shell.c b/src/shell.c new file mode 100644 index 0000000..84c082f --- /dev/null +++ b/src/shell.c @@ -0,0 +1,42 @@ +#include "shell.h" +#include "common.h" + +#include +#include +#include + +const char *display_shell() { + char *shell = (char *)malloc(64 * sizeof(char)); + if (shell == NULL) { + return NULL; + } + + const char *ver = NULL; + const char *name = run_command_s("echo ${SHELL##*/}"); + + if (strncmp(name, "bash", strlen("bash")) == 0) { + ver = run_command_s("echo $BASH_VERSION"); + } else if (strncmp(name, "ksh", strlen("ksh")) == 0) { + ver = run_command_s("echo $KSH_VERSION | sed 's/^.*v//' | sed 's/ .*$//'"); + } else if (strncmp(name, "zsh", strlen("zsh")) == 0) { + ver = run_command_s("zsh --version | sed 's/ (.*$//' | sed 's/zsh //'"); + } else if (strncmp(name, "yash", strlen("yash")) == 0) { + ver = run_command_s("LC_ALL=C yash --version | head -1 | " + "sed 's/Yet another shell, version //'"); + } else if (strncmp(name, "tsch", strlen("tsch")) == 0) { + ver = run_command_s("tcsh --version | sed 's/tcsh //' | sed 's/ .*$//'"); + } else { + ver = NULL; + } + + if (ver != NULL) { + snprintf(shell, 64, "%s %s", name, ver); + } else { + snprintf(shell, 64, "%s", name); + } + + free((void *)name); + if (ver != NULL) free((void *)ver); + + return shell; +} diff --git a/src/shell.h b/src/shell.h new file mode 100644 index 0000000..c52e9fe --- /dev/null +++ b/src/shell.h @@ -0,0 +1,6 @@ +#ifndef SHELL_H +#define SHELL_H + +const char *display_shell(); + +#endif diff --git a/src/storage.c b/src/storage.c new file mode 100644 index 0000000..a578023 --- /dev/null +++ b/src/storage.c @@ -0,0 +1,92 @@ +#include "storage.h" +#include "common.h" + +#if defined(__HAIKU__) +#include +#endif +#include +#include + +const char *display_storage() { + const char *excode = run_command_s("zpool list 2>/dev/null || echo $?"); + if (excode != NULL && (strncmp(excode, "127", strlen("127")) == 0)) { + free((void *)excode); +#if defined(__HAIKU__) + long long int usedstore = 0; + long long int totalstore = run_command_lld("df -h | " + "awk '/^\\/boot / {printf \"%s\", $3}'"); + long long int freestore = run_command_lld("df -h | " + "awk '/^\\/boot / {printf \"%s\", $5}'"); + const char *totunit = run_command_s("df -h | " + "awk '/^\\/boot / {printf \"%s\", $4}'"); + const char *freunit = run_command_s("df -h | " + "awk '/^\\/boot / {printf \"%s\", $6}'"); + char tu[2] = {'\0'}; + char uu[2] = {'\0'}; + + if (strncmp(totunit, "TiB", 3) == 0) tu[0] = 'T'; + else if (strncmp(totunit, "GiB", 3) == 0) tu[0] = 'G'; + else if (strncmp(totunit, "MiB", 3) == 0) tu[0] = 'M'; + else if (strncmp(totunit, "KiB", 3) == 0) tu[0] = 'K'; + else tu[0] = 'B'; + tu[1] = '\0'; + + if (strncmp(freunit, "TiB", 3) == 0) uu[0] = 'T'; + else if (strncmp(freunit, "GiB", 3) == 0) uu[0] = 'G'; + else if (strncmp(freunit, "MiB", 3) == 0) uu[0] = 'M'; + else if (strncmp(freunit, "KiB", 3) == 0) uu[0] = 'K'; + else uu[0] = 'B'; + uu[1] = '\0'; + + if (strncmp(totunit, freunit, 3) != 0) { + if (strncmp(totunit, "TiB", 3) == 0 && strncmp(freunit, "GiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024)); + else if (strncmp(totunit, "GiB", 3) == 0 && strncmp(freunit, "MiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024)); + else if (strncmp(totunit, "MiB", 3) == 0 && strncmp(freunit, "KiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024)); + else if (strncmp(totunit, "KiB", 3) == 0 && strncmp(freunit, "B", 3) == 0) + usedstore = (totalstore - (freestore / 1024)); + else if (strncmp(totunit, "TiB", 3) == 0 && strncmp(freunit, "MiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024)); + else if (strncmp(totunit, "GiB", 3) == 0 && strncmp(freunit, "KiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024)); + else if (strncmp(totunit, "MiB", 3) == 0 && strncmp(freunit, "B", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024)); + else if (strncmp(totunit, "TiB", 3) == 0 && strncmp(freunit, "KiB", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024 / 1024)); + else if (strncmp(totunit, "GiB", 3) == 0 && strncmp(freunit, "B", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024 / 1024)); + else if (strncmp(totunit, "TiB", 3) == 0 && strncmp(freunit, "B", 3) == 0) + usedstore = (totalstore - (freestore / 1024 / 1024 / 1024 / 1024)); + } else { + usedstore = (totalstore - freestore); + } + + char *cmd = (char *)malloc(128 * sizeof(char)); + if (!cmd) { + return NULL; + } + + snprintf(cmd, 128, "/boot: %lld%s / %lld%s", usedstore, uu, totalstore, tu); + + return cmd; +#else + return run_command_s("df -h | " + "awk '/^\\/dev\\// {printf \"%s: %s / %s, \", $1, $3, $2}' | " + "awk '{sub(/, $/, \"\"); print}'"); +#endif + } + + free((void *)excode); + const char *test = run_command_s("zpool list 2>/dev/null || echo $?"); + if (strncmp(test, "1", strlen("1")) == 0) { + free((void *)test); + return NULL; + } + + free((void *)test); + return run_command_s("zpool list | " + "awk 'NR>1 {printf \"%s: %s / %s, \", $1, $3, $2}' | " + "awk '{sub(/, $/, \"\"); print}'"); +} diff --git a/src/storage.h b/src/storage.h new file mode 100644 index 0000000..9ec2217 --- /dev/null +++ b/src/storage.h @@ -0,0 +1,6 @@ +#ifndef STORAGE_H +#define STORAGE_H + +const char *display_storage(); + +#endif diff --git a/src/uptime.c b/src/uptime.c new file mode 100644 index 0000000..269cdda --- /dev/null +++ b/src/uptime.c @@ -0,0 +1,41 @@ +#include "uptime.h" +#include "common.h" + +#include +#include +#include + +const char *display_days() { + const char *days = run_command_s("uptime | awk '{for (i=1; i<=NF; i++) " + "if ($i ~ /day/) print $(i-1), $i}'"); + + if (days == NULL || strlen(days) == 0) { + return strndup("0 days,", 7); + } + + return days; +} + +const char *display_time() { + const char *uptime = run_command_s("uptime"); + if (uptime == NULL) { + return NULL; + } + + char *days = strstr(uptime, "day"); + int nodays = 0; + if (days == NULL) { + nodays = 1; + days = strstr(uptime, "days"); + } + + free((void *)uptime); + + if (nodays) { + return run_command_s("uptime | awk '{print $3}' | sed 's/,//' | " + "sed 's/:/ hours, /' && echo \" mins\""); + } + + return run_command_s("uptime | awk '{print $5}' | sed 's/,//' | " + "sed 's/:/ hours, /' && echo \" mins\""); +} diff --git a/src/uptime.h b/src/uptime.h new file mode 100644 index 0000000..92ba7ad --- /dev/null +++ b/src/uptime.h @@ -0,0 +1,7 @@ +#ifndef UPTIME_H +#define UPTIME_H + +const char *display_days(); +const char *display_time(); + +#endif diff --git a/src/user.c b/src/user.c new file mode 100644 index 0000000..1779394 --- /dev/null +++ b/src/user.c @@ -0,0 +1,11 @@ +#include "user.h" +#include "common.h" + +const char *display_user_name() { + return run_command_s("whoami"); +} + +const char *display_user_host() { + return run_command_s("command -v hostname >/dev/null 2>&1 && hostname || " + "cat /etc/hostname"); +} diff --git a/src/user.h b/src/user.h new file mode 100644 index 0000000..a9f4d97 --- /dev/null +++ b/src/user.h @@ -0,0 +1,7 @@ +#ifndef USER_H +#define USER_H + +const char *display_user_name(); +const char *display_user_host(); + +#endif diff --git a/src/wm.c b/src/wm.c new file mode 100644 index 0000000..564939d --- /dev/null +++ b/src/wm.c @@ -0,0 +1,49 @@ +#include "wm.h" +#include "common.h" + +#include +#include +#include + +const char *display_wm() { +#if defined(__APPLE__) + return "Aqua"; +#elif defined(__HAIKU__) + return "Stack & Tile"; +#else + const char *display = run_command_s("echo $DISPLAY"); + if (display == NULL || strlen(display) == 0) return NULL; + else free((void *)display); + + const char *xproptest = run_command_s("xprop -root -notype _NET_SUPPORTING_WM_CHECK"); + if ( + strncmp( + xproptest, + "xprop: error: Invalid window id format: -notype.", + strlen("xprop: error: Invalid window id format: -notype.") + ) + ) return NULL; + else free((void *)xproptest); + + char cmd[512]; + const char *id = run_command_s("xprop -root -notype _NET_SUPPORTING_WM_CHECK | " + "awk '{print $5}'"); + + snprintf( + cmd, + sizeof(cmd), + "%s%s%s", + "xprop -id ", + id, + " -notype -len 100 -f _NET_WM_NAME 8t | awk '{print $3}' | head -1 | " + "sed 's/\"//g'" + ); + + free((void *)id); + + const char *wm = run_command_s(cmd); + + return wm; +#endif + return NULL; +} diff --git a/src/wm.h b/src/wm.h new file mode 100644 index 0000000..fea9a25 --- /dev/null +++ b/src/wm.h @@ -0,0 +1,6 @@ +#ifndef WM_H +#define WM_H + +const char *display_wm(); + +#endif