From 2b46da139c1d5faab764ecef661bcff64130198d Mon Sep 17 00:00:00 2001 From: TheDarkBug Date: Mon, 18 Jan 2021 21:19:20 +0100 Subject: [PATCH] First commit. --- Makefile | 35 ++++++++++++++++ README.md | 34 ++++++++++++++++ main.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 Makefile create mode 100644 README.md create mode 100644 main.c diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a75371a --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +name = lightfetch +files = main.c +install_dir = /usr/bin/ +debug: + @echo Building debug... + gcc -Wall -Wextra -o $(name) $(files) + @echo Build completed! Running... + @echo + ./$(name) + @echo + @exit + +clean: + @echo Building debug... + gcc -Wall -Wextra -o $(name) $(files) + @echo Build completed! Running... + @echo + ./$(name) + @echo + rm -f $(name) + @echo Removed output file. + @exit + +install: + @echo Building release... + sudo gcc -o $(install_dir)$(name) $(files) + @echo Building and installation completed! + @exit + +uninstall: + @echo Uninstalling lightfetch... + sudo rm -f $(install_dir)$(name) + rm ../lightfetch + @echo Uninstall completed! + @exit \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..4a4516e --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# lightfetch + +A light system info tool for Linux. + +## Currently supported distros + +Alpine Linux, ArchBang, Arch Linux, ArcoLinux Artix Linux, CentOS, Debian, Devuan, elementary OS, Fedora, Gentoo Linux, gNewSense, GNU Guix, Hyperbola GNU/Linux-libre, instantOS, KISS Linux, Linux Lite, Linux Mint, Mageia, Manjaro, MX Linux, NixOS, openSUSE, Parabola GNU/Linux-libre, Pop!_OS, PureOS, Raspbian, Slackware, Ubuntu (and its flavours), Void Linux, and Voyager Live. + +## Building and installation + +To install you can type this commands in the terminal: + +```shell +git clone https://github.com/TheDarkBug/lightfetch.git +cd lightfetch +make install +``` + +To uninstall: + +```shell +cd lightfetch +sudo make uninstall +cd .. +rm -rf lightfetch +``` + +## License + +This program is provided under the [GPL-3.0 License](https://github.com/TheDarkBug/LICENSE). + +## Credits + +[ufetch](https://gitlab.com/jschx/ufetch/): ASCII Distro logos (with some edits by me) diff --git a/main.c b/main.c new file mode 100644 index 0000000..26bd0fa --- /dev/null +++ b/main.c @@ -0,0 +1,118 @@ +#include +#include +#include +#include +#include + +void pkgman(); + +int main() { + // init variables and other useful things + char user[32], host[253]; + struct utsname sys; + + // get user and host names + snprintf(user, 32, "%s", getenv("USER")); + gethostname(host, 253); + + if (uname(&sys) == -1) { + printf("Ah sh-t, an error\n"); + } + char version_name[64]; + FILE *fosr = fopen("/etc/os-release", "r"); + fscanf(fosr,"%[^\n]", version_name); + fclose(fosr); + memmove(&version_name[0], &version_name[5], 64); + printf("%s@%s %s %s\n", user, host, version_name, sys.machine); //debug + pkgman(); + return 0; +} + +void pkgman() { + int apt, dnf, emerge, flatpak, nix, pacman, rpm, snap, xbps, yay; + + FILE *fapt = popen("dpkg-query -f '${binary:Package}\n' -W 2>/dev/null | wc -l", "r"); + FILE *fdnf = popen("dnf list installed 2>/dev/null | wc -l", "r"); + FILE *femerge = popen("qlist -I 2>/dev/null | wc -l", "r"); + FILE *fflatpak = popen("flatpak list 2>/dev/null | wc -l", "r"); + FILE *fnix = popen("nix-store -q --requisites /run/current-system/sw 2>/dev/null | wc -l", "r"); + FILE *fpacman = popen("pacman -Q 2>/dev/null | wc -l", "r"); + FILE *frpm = popen("rpm -qa --last 2>/dev/null | wc -l", "r"); + FILE *fsnap = popen("snap list 2>/dev/null | wc -l", "r"); + FILE *fxbps = popen("xbps-query -l 2>/dev/null | wc -l", "r"); + FILE *fyay = popen("yay -Q 2>/dev/null | wc -l", "r"); + fscanf(fapt, "%d", &apt); + fscanf(fdnf, "%d", &dnf); + fscanf(femerge, "%d", &emerge); + fscanf(fflatpak, "%d", &flatpak); + fscanf(fnix, "%d", &nix); + fscanf(fpacman, "%d", &pacman); + fscanf(frpm, "%d", &rpm); + fscanf(fsnap, "%d", &snap); + fscanf(fxbps, "%d", &xbps); + fscanf(fyay, "%d", &yay); + fclose(fapt); + fclose(fdnf); + fclose(femerge); + fclose(fflatpak); + fclose(fnix); + fclose(fpacman); + fclose(frpm); + fclose(fsnap); + fclose(fxbps); + fclose(fyay); + + int comma = 0; + + if (apt > 0) { + if (comma == 1) printf(", "); + printf("apt: %d", apt); + comma = 1; + } + if (dnf > 0) { + if(comma == 1) printf(", "); + printf("dnf: %d", dnf); + comma = 1; + } + if (emerge > 0) { + if (comma == 1) printf(", "); + printf("emerge: %d", emerge); + comma = 1; + } + if (flatpak > 0) { + if (comma == 1) printf(", "); + printf("flatpak: %d", flatpak); + comma = 1; + } + if (nix > 0) { + if (comma == 1) printf(", "); + printf("nix: %d", nix); + comma = 1; + } + if (pacman > 0) { + if (comma == 1) printf(", "); + printf("pacman: %d", pacman); + comma = 1; + } + if (rpm > 0) { + if (comma == 1) printf(", "); + printf("rpm: %d", rpm); + comma = 1; + } + if (snap > 0) { + if (comma == 1) printf(", "); + printf("snap: %d", snap); + comma = 1; + } + if (xbps > 0) { + if (comma == 1) printf(", "); + printf("xbps: %d", xbps); + comma = 1; + } + if (yay > 0) { + if (comma == 1) printf(", "); + printf("yay: %d", yay); + comma = 1; + } + printf("\n"); +} \ No newline at end of file