kfetch/src/fetch.c

86 lines
1.9 KiB
C
Raw Normal View History

2023-11-02 15:00:45 +00:00
#include <pwd.h>
2023-11-02 14:51:10 +00:00
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
2023-11-02 15:00:45 +00:00
#include <unistd.h>
2023-11-02 14:51:10 +00:00
#include <sys/utsname.h>
#include "fetch.h"
#include "config.h"
#include "logo.h"
#define UNUSED(x) ((void)x)
FETCH Init(void) {
FETCH fetch;
if (uname(&fetch.uts) < 0) {
fprintf(stderr, "kfetch: %s\n", strerror(errno));
exit(1);
}
memset(fetch.os_name, '\0', sizeof(fetch.os_name));
if (GetOs(fetch.os_name, sizeof(fetch.os_name)))
snprintf(fetch.os_name, sizeof(fetch.os_name), "%s", fetch.uts.sysname);
else
snprintf(fetch.os_name, sizeof(fetch.os_name), "%s", fetch.os_name + strlen("NAME=\""));
fetch.font_color = FONT_COLOR;
GetArt(&fetch);
return fetch;
}
int GetOs(char *os_name, size_t len) {
FILE *fp = fopen("/etc/os-release", "r");
if (fp == NULL)
return 1;
while (fgets(os_name, len, fp)) {
if (!strncmp(os_name, "NAME=", 5)) {
os_name[strlen(os_name) - 2] = '\0';
fclose(fp);
return 0;
}
}
fclose(fp);
return 1;
}
void GetArt(FETCH *fetch) {
fetch->color = "\033[36m";
fetch->logo = Unknow;
fetch->logo_size = sizeof(Unknow) / sizeof(char *);
}
void GetKernel(const char *title, const FETCH fetch) {
printf("%s%s%s%s", fetch.color, title, fetch.font_color, fetch.uts.release);
}
void PrintOs(const char *title, const FETCH fetch) {
printf("%s%s%s%s", fetch.color, title, fetch.font_color, fetch.os_name);
}
void PrintColors(const char *title, const FETCH fetch) {
UNUSED(title);
UNUSED(fetch);
for (int i = 1; i < 7; i++)
printf("\033[1;3%dm%s\033[0m \033[0;3%dm%s\033[0m ", i, PC_CHAR, i, PC_CHAR);
}
void Blank(const char *title, const FETCH fetch) {
UNUSED(title);
UNUSED(fetch);
printf("");
}
2023-11-02 15:00:45 +00:00
void GetUser(const char *title, const FETCH fetch) {
UNUSED(fetch);
struct passwd *pw = getpwuid(geteuid());
printf("%s%s%s%s", fetch.color, title, fetch.font_color, (pw != 0) ? pw->pw_name : "none");
}