From 06bbde54c43e1b65a62d8224b61a9b123fcafec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AB=8F=E8=A8=AA=E5=AD=90?= Date: Sat, 13 Jul 2024 21:57:05 +0900 Subject: [PATCH] =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=83=95=E3=82=A3=E3=82=B0?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E6=A9=9F=E8=83=BD=E6=80=A7?= =?UTF-8?q?=E3=81=AE=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + Makefile | 22 +++- farfetch.conf | 15 ++- farfetch.conf.5 | 15 +++ main.c | 274 ++++++++++++++++++++++++++++-------------------- src/config.c | 87 +++++++++++++++ src/config.h | 27 +++++ 7 files changed, 320 insertions(+), 121 deletions(-) create mode 100644 farfetch.conf.5 create mode 100644 src/config.c create mode 100644 src/config.h diff --git a/CHANGELOG.md b/CHANGELOG.md index e19973d..ee69791 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Rocky Linuxロゴの追加 * CentOSロゴの追加 * Red Hatロゴの追加 +* コンフィグファイル機能性の追加 # 0.1.1 * ストレージ情報の修正(今も元気ハツラツ太郎さん) diff --git a/Makefile b/Makefile index 2ece264..612f73b 100644 --- a/Makefile +++ b/Makefile @@ -20,15 +20,26 @@ 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 @@ -55,7 +66,8 @@ dist: man: mkdir -p release/man - cp ${NAME}.1 release/man/${NAME}-${VERSION}.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}.1 > release/man/${NAME}-${VERSION}.1 + sed "s/VERSION/${VERSION}/g" < ${NAME}.conf.5 > release/man/${NAME}.conf-${VERSION}.5 depend: ${DEPS} @@ -69,10 +81,14 @@ release: install: mkdir -p ${DESTDIR}${PREFIX}/bin cp -f ${NAME} ${DESTDIR}${PREFIX}/bin + cp -f ${NAME}.conf ${DESTDIR}${CNFPREFIX}/examples chmod 755 ${DESTDIR}${PREFIX}/bin/${NAME} - mkdir -p ${DESTDIR}${MANPREFIX}/man1 + mkdir -p ${DESTDIR}${MANPREFIX}/man1 ${DESTDIR}${MANPREFIX}/man5 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}.conf.5 >\ + ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf.5 + chmod 644 ${DESTDIR}${MANPREFIX}/man5/${NAME}.conf.5 uninstall: rm -f ${DESTDIR}${PREFIX}/bin/${NAME} diff --git a/farfetch.conf b/farfetch.conf index e05a807..b9d5891 100644 --- a/farfetch.conf +++ b/farfetch.conf @@ -1,3 +1,14 @@ -logo "default" +show os +show host +show distro +show uptime +show recording +show libc +show packages +show resolution +show wm +show shell show cpu -hide gpu +show gpu +show memory +show storage diff --git a/farfetch.conf.5 b/farfetch.conf.5 new file mode 100644 index 0000000..647c475 --- /dev/null +++ b/farfetch.conf.5 @@ -0,0 +1,15 @@ +.TH FARFETCH.CONF 5 VERSION +.SH NAME +.B farfetch.conf +.SH DESCRIPTION +.PP +利用するには、`cp /etc/farfetch.conf ~/.config`を実効して下さい。 +.br +Haikuの場合は不要です。 +.SH GLOBAL CONFIGURATION +\fB\,hide\fR [\fI\,context\fR] +.TP +隠す +.SH AUTHORS +.PP +テクニカル諏訪子(開発者) diff --git a/main.c b/main.c index b3cbb3f..ec9657a 100644 --- a/main.c +++ b/main.c @@ -22,6 +22,8 @@ #include "src/memory.h" #include "src/storage.h" +#include "src/config.h" + const char *sofname = "farfetch"; const char *version = "0.2.0"; #if defined(__linux__) || defined(__sun) @@ -72,6 +74,8 @@ int main(int argc, char *argv[]) { return 1; } + getconf(); + #if defined(__OpenBSD__) #include "src/logo/openbsd.h" getOS(); @@ -127,22 +131,32 @@ int main(int argc, char *argv[]) { int minsize = MIN_SIZE; - const char *res = display_resolution(); - if (!res) minsize--; - else free((void *)res); + 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__) else free((void *)winman); #endif - const char *clang = display_libc(); - if (clang) minsize++; - const char *store = display_storage(); - if (!store) minsize--; - else free((void *)store); - const char *graph = display_gpu(); - if (!graph) minsize--; - else free((void *)graph); + } 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; @@ -178,137 +192,165 @@ int main(int argc, char *argv[]) { printf("------------------\n"); lc++; - const char *os = display_os(); - if (os) { - printf("%s ", LOGO[lc]); - printf("%sOS%s: %s\n", color, reset, os); - free((void *)os); - 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) - const char *distroo = display_distro(); - if (distroo) { - printf("%s ", LOGO[lc]); - printf("%sDistro%s: %s\n", color, reset, distroo); - lc++; - free((void *)distroo); - } + 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 - printf("%s ", LOGO[lc]); - printf("%s%s%s%s", color, "Host", reset, ": "); - display_host_model(); - printf("\n"); - lc++; - - const char *days = display_days(); - const char *time = display_time(); - if (days || time) { + if (ishost) { 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("%s%s%s%s", color, "Host", reset, ": "); + display_host_model(); printf("\n"); - if (days) free((void *)days); - if (time) free((void *)time); lc++; - } + } else minsize--; + + 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__) - 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 (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++; } - if (video) { - printf("video = %s", video); - } - printf("\n"); - if (audio) free((void *)audio); - if (video) free((void *)video); - lc++; - } + } else minsize--; #endif - const char *packages = display_packages(); - if (packages) { - printf("%s ", LOGO[lc]); - printf("%sPackages%s: %s\n", color, reset, packages); - lc++; - free((void *)packages); + 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); + } } - const char *resolution = display_resolution(); - if (resolution) { - printf("%s ", LOGO[lc]); - printf("%sResolution%s: %s\n", color, reset, resolution); - lc++; - free((void *)resolution); - } - - const char *wm = display_wm(); - if (wm) { - printf("%s ", LOGO[lc]); - printf("%sWM%s: %s\n", color, reset, wm); + if (iswm) { + const char *wm = display_wm(); + if (wm) { + printf("%s ", LOGO[lc]); + printf("%sWM%s: %s\n", color, reset, wm); #if !defined(__APPLE__) - free((void *)wm); + free((void *)wm); #endif - lc++; + lc++; + } } - const char *shell = display_shell(); - if (shell) { - printf("%s ", LOGO[lc]); - printf("%sShell%s: %s\n", color, reset, shell); - free((void *)shell); - lc++; - } - - const char *libc = display_libc(); - if (libc) { - printf("%s ", LOGO[lc]); - printf("%slibc%s: %s\n", color, reset, libc); - 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); + 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); + } } - const char *gpu = display_gpu(); - if (gpu) { + if (ismemory) { printf("%s ", LOGO[lc]); - printf("%sGPU%s: %s\n", color, reset, gpu); + printf("%s%s%s%s", color, "Memory", reset, ": "); + display_memory(); + printf("\n"); lc++; - free((void *)gpu); - } + } else minsize--; - printf("%s ", LOGO[lc]); - printf("%s%s%s%s", color, "Memory", reset, ": "); - display_memory(); - printf("\n"); - lc++; - - const char *storage = display_storage(); - if (storage) { - printf("%s ", LOGO[lc]); - printf("%sStorage%s: %s\n", color, reset, storage); - lc++; - free((void *)storage); + 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++) { diff --git a/src/config.c b/src/config.c new file mode 100644 index 0000000..54e5b0f --- /dev/null +++ b/src/config.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +#include "config.h" + +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; + +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[20]; + while (fgets(line, sizeof(line), file)) { + if (line[0] == '#' || line[0] == '\n') continue; + if (strstr(line, "hide ") != NULL) { + if (strstr(line, "os") != NULL) isos = false; + if (strstr(line, "host") != NULL) ishost = false; +#if defined(__linux__) || defined(__sunos) + if (strstr(line, "distro") != NULL) isdistro = false; +#endif + if (strstr(line, "uptime") != NULL) isuptime = false; +#if defined (__OpenBSD__) + if (strstr(line, "recording") != NULL) isrecording = false; +#endif + if (strstr(line, "packages") != NULL) ispackages = false; + if (strstr(line, "libc") != NULL) islibc = false; + if (strstr(line, "resolution") != NULL) isresolution = false; + if (strstr(line, "wm") != NULL) iswm = false; + if (strstr(line, "shell") != NULL) isshell = false; + if (strstr(line, "cpu") != NULL) iscpu = false; + if (strstr(line, "gpu") != NULL) isgpu = false; + if (strstr(line, "memory") != NULL) ismemory = false; + if (strstr(line, "storage") != NULL) isstorage = false; + } + } + + fclose(file); + return; +} diff --git a/src/config.h b/src/config.h new file mode 100644 index 0000000..624fb2b --- /dev/null +++ b/src/config.h @@ -0,0 +1,27 @@ +#ifndef CONFIG_H +#define CONFIG_H + +#include + +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; + +void getconf(); + +#endif