Skip to content

Commit

Permalink
Add system info
Browse files Browse the repository at this point in the history
  • Loading branch information
k3yss committed Oct 27, 2023
1 parent d5e909e commit ebd9926
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 12 deletions.
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
module github.com/k3yss/gofetch

go 1.21.1

require github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y=
Binary file modified gofetch
Binary file not shown.
150 changes: 138 additions & 12 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,143 @@
package main

import "fmt"
import (
"bufio"
"fmt"
"os"
"os/exec"
"os/user"
"runtime"
"strconv"
"strings"
)

type Memory struct {
MemTotal int
MemFree int
MemAvailable int
}

func ReadMemoryStats() Memory {
file, err := os.Open("/proc/meminfo")
if err != nil {
panic(err)
}
defer file.Close()
bufio.NewScanner(file)
scanner := bufio.NewScanner(file)
res := Memory{}
for scanner.Scan() {
key, value := parseLine(scanner.Text())
switch key {
case "MemTotal":
res.MemTotal = value
case "MemFree":
res.MemFree = value
case "MemAvailable":
res.MemAvailable = value
}
}
return res
}

func parseLine(raw string) (key string, value int) {
text := strings.ReplaceAll(raw[:len(raw)-2], " ", "")
keyValue := strings.Split(text, ":")
return keyValue[0], toInt(keyValue[1])
}

func toInt(raw string) int {
if raw == "" {
return 0
}
res, err := strconv.Atoi(raw)
if err != nil {
panic(err)
}
return res
}

func main() {
fmt.Println(" ,_---~~~~~----._ ")
fmt.Println(" _,,_,*^____ _____``*g*\"*, ")
fmt.Println(" / __/ /' ^. / \\ ^@q f ")
fmt.Println("[ @f | @)) | | @)) l 0 _/ ")
fmt.Println(" `\\ \\~____ / __ \\_____/ \\ ")
fmt.Println(" | _l__l_ I ")
fmt.Println(" } [______] I ")
fmt.Println(" ] | | | | ")
fmt.Println(" ] ~ ~ | ")
fmt.Println(" | | ")
fmt.Println(" | | ")
reset := "\033[0m"
gopherColor := "\033[36m"
cCyan := "\033[34m"

Hostname, err := os.Hostname()
if err != nil {
panic(err)
}

currentUser, err := user.Current()
if err != nil {
panic(err)
}

username := currentUser.Username

dashLength := len(username) + len(Hostname) + 1

// distroname
cmd := exec.Command("lsb_release", "-d")

distro, err := cmd.CombinedOutput()
if err != nil {
panic(err)
}
distroString := string(distro)
CollonIndex := strings.Index(distroString, ":")
distroName := strings.TrimSpace(distroString[CollonIndex+1:])

// RAM usage

mem := ReadMemoryStats()

totalMem := mem.MemTotal / 1024

usedMem := (mem.MemTotal - mem.MemAvailable) / 1024

// Uptime
cmd = exec.Command("uptime", "-p")

uptime, err := cmd.CombinedOutput()
if err != nil {
panic(err)
}

uptimeString := string(uptime)
uptimeValue := uptimeString[2:]

// terminal color designs
const (
bold = "\033[1m"
inverse = "\033[7m"
)

colors := []string{
"\033[30m", // Black
"\033[31m", // Red
"\033[32m", // Green
"\033[33m", // Yellow
"\033[34m", // Blue
"\033[35m", // Magenta
"\033[36m", // Cyan
"\033[37m", // White
}

fmt.Println()
fmt.Print(reset)

fmt.Println(gopherColor + " ,_---~~~~~----._ ")
fmt.Println(" _,,_,*^____ _____``*g*\"*, \t" + cCyan + username + reset + "@" + cCyan + Hostname + gopherColor)
fmt.Println(" / __/ /' ^. / \\ ^@q f \t" + reset + strings.Repeat("-", dashLength) + gopherColor)
fmt.Println("[ @f | @)) | | @)) l 0 _/ \t" + cCyan + "OS: \t" + reset + distroName + gopherColor)
fmt.Println(" `\\ \\~____ / __ \\_____/ \\ \t" + cCyan+ "RAM: \t" + reset + strconv.Itoa(usedMem) + " MiB / " + strconv.Itoa(totalMem) + " MiB" + gopherColor)
fmt.Println(" | _l__l_ I \t" + cCyan+ "Cores: \t" + reset + strconv.Itoa(runtime.NumCPU()) + gopherColor)
fmt.Println(" } [______] I \t" + cCyan+ "Uptime:\t" + reset + strings.TrimSpace(uptimeValue) + gopherColor)
fmt.Println(" ] " + reset + " | | | " + gopherColor + " | \t")
fmt.Print(" ] " + reset + " ~ ~ " + gopherColor + " | \t")
fmt.Printf("%s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬\n", colors[1], colors[2], colors[3], colors[4], colors[5], colors[6])
fmt.Print(gopherColor + " | | \t")
fmt.Printf("%s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬ %s▬▬▬▬▬\n", bold+colors[1], bold+colors[2], bold+colors[3], bold+colors[4], bold+colors[5], bold+colors[6])
fmt.Println(gopherColor + " | | " + reset)

}

0 comments on commit ebd9926

Please sign in to comment.