最初コミット
このコミットが含まれているのは:
コミット
cf13f2d8c1
|
@ -0,0 +1,2 @@
|
|||
farfetch
|
||||
*.core
|
|
@ -0,0 +1,2 @@
|
|||
# 0.0.1
|
||||
* 開始
|
|
@ -0,0 +1,14 @@
|
|||
Copyright © 2004-2011 by Internet Systems Consortium, Inc. ("ISC")
|
||||
Copyright © 2018-2024 by 076.moe
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
||||
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
|
@ -0,0 +1,81 @@
|
|||
UNAME_S != uname -s
|
||||
UNAME_M != uname -m
|
||||
|
||||
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
|
||||
.endif
|
||||
|
||||
MANPREFIX = ${PREFIX}/share/man
|
||||
|
||||
.if ${UNAME_S} == "OpenBSD"
|
||||
MANPREFIX = ${PREFIX}/man
|
||||
.endif
|
||||
|
||||
CC = cc
|
||||
FILES = main.c src/*.c
|
||||
CFLAGS = -Wall -Wextra -O3 -I${PREFIX}/include -L${PREFIX}/lib
|
||||
.if ${UNAME_S} == "NetBSD"
|
||||
CFLAGS += -I/usr/pkg/include -L/usr/pkg/lib -I/usr/include -L/usr/lib
|
||||
.endif
|
||||
LDFLAGS =
|
||||
|
||||
all:
|
||||
${CC} ${CFLAGS} -o ${NAME} ${FILES} ${LDFLAGS}
|
||||
strip ${NAME}
|
||||
|
||||
clean:
|
||||
rm -f ${NAME}
|
||||
|
||||
dist: clean
|
||||
mkdir -p dist
|
||||
mkdir -p ${NAME}-${VERSION}
|
||||
cp -R LICENSE.txt Makefile README.md CHANGELOG.md \
|
||||
${NAME}-completion.zsh ${NAME}.1 main.c src ${NAME}-${VERSION}
|
||||
tar zcfv dist/${NAME}-${VERSION}.tar.gz ${NAME}-${VERSION}
|
||||
rm -rf ${NAME}-${VERSION}
|
||||
|
||||
depend:
|
||||
${DEPS}
|
||||
|
||||
release-openbsd:
|
||||
mkdir -p release
|
||||
${CC} ${CFLAGS} -o release/${NAME}-${VERSION}-openbsd-${UNAME_M} ${FILES} \
|
||||
-static ${LDFLAGS} -lc
|
||||
strip release/${NAME}-${VERSION}-openbsd-${UNAME_M}
|
||||
|
||||
release-freebsd:
|
||||
mkdir -p release
|
||||
${CC} ${CFLAGS} -o release/${NAME}-${VERSION}-freebsd-${UNAME_M} ${FILES} \
|
||||
-static ${LDFLAGS} -lc
|
||||
strip release/${NAME}-${VERSION}-freebsd-${UNAME_M}
|
||||
|
||||
release-netbsd:
|
||||
mkdir -p release
|
||||
export LD_LIBRARY_PATH=/usr/pkg/lib:/usr/local/lib:$LD_LIBRARY_PATH
|
||||
${CC} ${CFLAGS} -o release/${NAME}-${VERSION}-netbsd-${UNAME_M} ${FILES} \
|
||||
-static ${LDFLAGS} -lc
|
||||
strip release/${NAME}-${VERSION}-netbsd-${UNAME_M}
|
||||
|
||||
release-linux:
|
||||
mkdir -p release
|
||||
${CC} ${CFLAGS} -o release/${NAME}-${VERSION}-linux-${UNAME_M} ${FILES} \
|
||||
-static ${LDFLAGS} -lc
|
||||
strip release/${NAME}-${VERSION}-linux-${UNAME_M}
|
||||
|
||||
install: all
|
||||
mkdir -p ${DESTDIR}${PREFIX}/bin
|
||||
cp -f ${NAME} ${DESTDIR}${PREFIX}/bin
|
||||
chmod 755 ${DESTDIR}${PREFIX}/bin/${NAME}
|
||||
mkdir -p ${DESTDIR}${MANPREFIX}/man1
|
||||
sed "s/VERSION/${VERSION}/g" < ${NAME}.1 > ${DESTDIR}${MANPREFIX}/man1/${NAME}.1
|
||||
chmod 644 ${DESTDIR}${MANPREFIX}/man1/${NAME}.1
|
||||
|
||||
uninstall:
|
||||
rm -f ${DESTDIR}${PREFIX}/bin/${NAME}
|
||||
|
||||
.PHONY: all clean dist install uninstall
|
|
@ -0,0 +1,28 @@
|
|||
# farfetch
|
||||
|
||||
## インストールする方法 | Installation
|
||||
### CRUX
|
||||
```sh
|
||||
doas prt-get bmake
|
||||
bmake
|
||||
doas bmake install
|
||||
```
|
||||
|
||||
### Artix
|
||||
```sh
|
||||
doas pacman -S base-devel bmake
|
||||
bmake
|
||||
doas bmake install
|
||||
```
|
||||
|
||||
### OpenBSD
|
||||
```sh
|
||||
make
|
||||
doas make install
|
||||
```
|
||||
|
||||
### FreeBSD
|
||||
```sh
|
||||
make
|
||||
doas make install
|
||||
```
|
|
@ -0,0 +1,3 @@
|
|||
logo "default"
|
||||
show cpu
|
||||
hide gpu
|
|
@ -0,0 +1,53 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "src/user.h"
|
||||
#include "src/os.h"
|
||||
#include "src/host.h"
|
||||
#if defined(__linux__)
|
||||
#include "src/distro.h"
|
||||
#endif
|
||||
|
||||
const char *sofname = "farfetch";
|
||||
const char *version = "0.0.1";
|
||||
|
||||
int main() {
|
||||
display_user_name();
|
||||
printf("@");
|
||||
display_user_host();
|
||||
puts("------------------");
|
||||
|
||||
printf("OS: ");
|
||||
display_os_name();
|
||||
printf(" ");
|
||||
display_os_vers();
|
||||
printf(" ");
|
||||
display_os_arch();
|
||||
printf("\n");
|
||||
|
||||
printf("Host: ");
|
||||
display_host_model();
|
||||
printf("\n");
|
||||
|
||||
#if defined(__linux__)
|
||||
printf("Distro: ");
|
||||
display_distro();
|
||||
printf("\n");
|
||||
#endif
|
||||
|
||||
// TODO:
|
||||
// * ロゴ
|
||||
// * カーネル(LinuxとIllumosのみ)
|
||||
// * 起動時間
|
||||
// * パッケージ
|
||||
// * libc
|
||||
// * シェル
|
||||
// * 解像度
|
||||
// * 端末
|
||||
// * CPU
|
||||
// * GPU
|
||||
// * メモリー
|
||||
// * ストレージ
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
#if defined(__linux__)
|
||||
#include "distro.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
void display_distro() {
|
||||
char buf[64];
|
||||
const char *cmd;
|
||||
|
||||
if (access("/bedrock/etc/bedrock-release", F_OK) != -1) {
|
||||
cmd = "cat /bedrock/etc/bedrock-release";
|
||||
} 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";
|
||||
} else if (access("/etc/mcst_version", F_OK) != -1) {
|
||||
cmd = "echo \"OS Elbrus\" && cat /etc/mcst_version";
|
||||
} else if (access("/etc/GoboLinuxVersion", F_OK) != -1) {
|
||||
cmd = "echo \"GoboLinux\" && cat /etc/GoboLinuxVersion";
|
||||
} else if (access("/etc/os-release", F_OK) != -1) {
|
||||
cmd = "cat /etc/os-release";
|
||||
} else if (access("/usr/lib/os-release", F_OK) != -1) {
|
||||
cmd = "cat /usr/lib/os-release";
|
||||
} else if (access("/etc/openwrt_release", F_OK) != -1) {
|
||||
cmd = "cat /etc/openwrt_release";
|
||||
} else if (access("/etc/lsb-release", F_OK) != -1) {
|
||||
cmd = "cat /etc/lsb-release";
|
||||
} else {
|
||||
perror("不明なディストリビューション。");
|
||||
}
|
||||
|
||||
FILE *p = popen(cmd, "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "ディストロを見つけられるコマンドを実効に失敗: %s", cmd);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
||||
#endif
|
|
@ -0,0 +1,8 @@
|
|||
#if defined(__linux__)
|
||||
#ifndef DISTRO_H
|
||||
#define DISTRO_H
|
||||
|
||||
void display_distro();
|
||||
|
||||
#endif
|
||||
#endif
|
|
@ -0,0 +1,77 @@
|
|||
#include "host.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined(__linux__)
|
||||
#include <unistd.h>
|
||||
#elif defined(__APPLE__)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
void run_command(const char *command) {
|
||||
char buf[64];
|
||||
|
||||
FILE *p = popen(command, "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "ホストコマンドを実効に失敗: %s", command);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
||||
|
||||
void display_host_model() {
|
||||
#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__minix)
|
||||
run_command("sysctl -n hw.vendor hw.product");
|
||||
#elif defined(__sun)
|
||||
run_command("prtconf -b | awk -F':' '/banner-name/ {printf $2}'");
|
||||
#elif defined(__linux__)
|
||||
const char *cmd1, *cmd2;
|
||||
if (access("/system/app/", F_OK) != -1) {
|
||||
cmd1 = "getprop ro.product.brand";
|
||||
cmd2 = "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
|
||||
) {
|
||||
cmd1 = "cat /sys/devices/virtual/dmi/id/product_name";
|
||||
cmd2 = "cat /sys/devices/virtual/dmi/id/product_version";
|
||||
} else if (access("/sys/firmware/base/model", F_OK) != -1) {
|
||||
cmd1 = "cat /sys/firmware/devicetree/base/model";
|
||||
} else if (access("/tmp/sysinfo/model", F_OK) != 1) {
|
||||
cmd1 = "cat /tmp/sysinfo/model";
|
||||
}
|
||||
|
||||
if (!cmd1) {
|
||||
printf("Unknown");
|
||||
} else {
|
||||
run_command(cmd1);
|
||||
}
|
||||
|
||||
if (cmd2) {
|
||||
printf(" ");
|
||||
run_command(cmd2);
|
||||
}
|
||||
#elif defined(__APPLE__)
|
||||
run_command("sysctl -n hw.model");
|
||||
|
||||
FILE *p = popen("kextstat | grep -F -e \"FakeSMC\" -e \"VirtualSMC\"", "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "ホストコマンドを実効に失敗");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
#endif
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
#ifndef HOST_H
|
||||
#define HOST_H
|
||||
|
||||
void display_host_model();
|
||||
|
||||
#endif
|
|
@ -0,0 +1,52 @@
|
|||
#include "os.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
void display_os_name() {
|
||||
char buf[64];
|
||||
FILE *p = popen("uname -s", "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "「uname」コマンドを実効に失敗");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
||||
|
||||
void display_os_vers() {
|
||||
char buf[16];
|
||||
FILE *p = popen("uname -r", "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "「uname」コマンドを実効に失敗");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
||||
|
||||
void display_os_arch() {
|
||||
char buf[16];
|
||||
FILE *p = popen("uname -m", "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "「uname」コマンドを実効に失敗");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
#ifndef OS_H
|
||||
#define OS_H
|
||||
|
||||
void display_os_name();
|
||||
void display_os_vers();
|
||||
void display_os_arch();
|
||||
|
||||
#endif
|
|
@ -0,0 +1,52 @@
|
|||
#include "user.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
void display_user_name() {
|
||||
char buf[128];
|
||||
FILE *p = popen("whoami", "r");
|
||||
if (!p) {
|
||||
fprintf(stderr, "「whoami」コマンドを実効に失敗");
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), p) != NULL) {
|
||||
buf[strcspn(buf, "\n")] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
pclose(p);
|
||||
}
|
||||
|
||||
void display_user_host() {
|
||||
char buf[64];
|
||||
const char *filename;
|
||||
#ifdef __OpenBSD__
|
||||
filename = "/etc/myname";
|
||||
#else
|
||||
filename = "/etc/hostname";
|
||||
#endif
|
||||
FILE *f = fopen(filename, "r");
|
||||
if (!f) {
|
||||
snprintf(buf, sizeof(buf), "「%s」を見つけられません。", filename);
|
||||
perror(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
while (fgets(buf, sizeof(buf), f) != NULL) {
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
/* char hostname[128]; */
|
||||
/* int cnt = 0; */
|
||||
/* for (int i = 0; i < 128; i++) { */
|
||||
/* unsigned char key; */
|
||||
/* fread(&key, sizeof(key), 1, f); */
|
||||
/* hostname[i] = key; */
|
||||
/* cnt += 1; */
|
||||
/* } */
|
||||
|
||||
/* hostname[cnt] = '\0'; */
|
||||
fclose(f);
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef USER_H
|
||||
#define USER_H
|
||||
|
||||
void display_user_name();
|
||||
void display_user_host();
|
||||
|
||||
#endif
|
読み込み中…
新しいイシューから参照