2022-09-07 15:09:50 +02:00
package main
import (
2022-09-07 17:28:27 +02:00
"fmt"
2022-09-09 10:45:27 +02:00
"io/ioutil"
2022-09-07 17:28:27 +02:00
"os"
"os/exec"
2022-09-09 21:41:50 +02:00
"path/filepath"
2022-09-07 17:28:27 +02:00
"strconv"
"strings"
2022-09-09 22:24:04 +02:00
2022-09-22 14:05:20 +02:00
"github.com/exhq/neowofetch/utils"
2022-09-07 15:09:50 +02:00
)
2022-09-08 17:57:10 +02:00
var isuwuified bool = true
2022-09-18 16:20:27 +02:00
2022-09-09 22:24:04 +02:00
func getHome ( ) string {
return os . Getenv ( "HOME" )
2022-09-18 16:20:27 +02:00
}
2022-09-09 17:09:19 +02:00
2022-09-09 22:24:04 +02:00
func getConfigFile ( ) string {
return getHome ( ) + "/.config/neowofetch/conf"
2022-09-09 10:45:27 +02:00
}
func handleConfig ( ) {
2022-09-09 22:24:04 +02:00
_ , folder := os . Stat ( filepath . Dir ( getConfigFile ( ) ) )
_ , file := os . Stat ( getConfigFile ( ) )
2022-09-09 10:45:27 +02:00
if os . IsNotExist ( folder ) {
2022-09-09 22:24:04 +02:00
os . Mkdir ( filepath . Dir ( getConfigFile ( ) ) , os . ModePerm )
2022-09-09 10:45:27 +02:00
}
if os . IsNotExist ( file ) {
2022-09-10 08:31:27 +02:00
println ( "config was not found. a default config file has been generated in '~/.config/neowofetch/conf'" )
2022-09-09 22:24:04 +02:00
f , _ := os . Create ( getConfigFile ( ) )
2022-09-22 09:54:22 +02:00
_ , _ = f . WriteString ( "println green neOwOfetch 🔥\ninfo magenta username\nprint blue @\ninfoln blue hostname\nprint white uptime: \ninfoln red uptime\nprint white shell: \ninfoln blue shell\nprint white distro: \ninfoln blue distro\nprint white terminal: \ninfoln blue terminal\nprint white memory: \ninfo blue memoryUsed\nprint white /\ninfoln blue memoryAll" )
2022-09-09 10:45:27 +02:00
} else {
2022-09-09 22:24:04 +02:00
body , _ := ioutil . ReadFile ( getConfigFile ( ) )
2022-09-18 16:20:27 +02:00
sbody := ( string ( body ) )
fbody := strings . Split ( sbody , "\n" )
for _ , line := range fbody {
word := strings . Split ( line , " " )
if len ( word ) < 3 {
2022-09-09 10:45:27 +02:00
continue
}
2022-09-18 16:20:27 +02:00
action := word [ 0 ]
color := word [ 1 ]
rest := strings . Join ( word [ 2 : ] , " " )
handlePrint ( action , color , rest )
}
}
}
2022-09-22 14:05:20 +02:00
func handlePrint ( action , format string , rest string ) {
2022-09-18 16:20:27 +02:00
if action == "print" {
2022-09-22 14:05:20 +02:00
utils . CutePrint ( rest , format )
2022-09-18 16:20:27 +02:00
} else if action == "println" {
2022-09-22 14:05:20 +02:00
utils . CutePrint ( rest , format )
utils . CuteNewLine ( )
2022-09-18 16:20:27 +02:00
} else if action == "info" || action == "infoln" {
switch rest {
case "distro" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getDistro ( ) , format )
2022-09-18 16:20:27 +02:00
case "username" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getUsername ( ) , format )
2022-09-18 16:20:27 +02:00
case "uptime" :
no , _ := strconv . Atoi ( getUptime ( ) )
2022-09-22 14:05:20 +02:00
utils . CutePrint ( formatTime ( no ) , format )
2022-09-18 16:20:27 +02:00
case "hostname" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getHostname ( ) , format )
2022-09-21 13:17:42 +02:00
case "GPU" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getGPU ( ) , format )
2022-09-21 13:17:42 +02:00
case "shell" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getShell ( ) , format )
2022-09-22 09:12:47 +02:00
case "terminal" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getTerminal ( ) , format )
2022-09-22 09:12:47 +02:00
case "memoryAll" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getMemory ( false ) , format )
2022-09-22 09:12:47 +02:00
case "memoryUsed" :
2022-09-22 14:05:20 +02:00
utils . CutePrint ( getMemory ( true ) , format )
2022-09-22 09:12:47 +02:00
default :
print ( "{UNKNOWN KEYWORD}" )
2022-09-09 10:45:27 +02:00
}
2022-09-22 14:05:20 +02:00
if action == "infoln" {
utils . CuteNewLine ( )
2022-09-18 16:20:27 +02:00
}
}
2022-09-09 22:24:04 +02:00
}
2022-09-09 10:45:27 +02:00
2022-09-07 17:28:27 +02:00
func getHostname ( ) string {
cmd := exec . Command ( "uname" , "-n" )
shell , _ := cmd . Output ( )
return strings . Replace ( string ( shell ) , "\n" , "" , - 1 )
}
func getUsername ( ) string {
cmd := exec . Command ( "whoami" )
shell , _ := cmd . Output ( )
return strings . Replace ( string ( shell ) , "\n" , "" , - 1 )
}
2022-09-09 21:41:50 +02:00
2022-09-07 17:28:27 +02:00
func getDistro ( ) string {
2022-09-07 15:09:50 +02:00
distro , err := os . Open ( "/etc/os-release" )
if err != nil {
fmt . Println ( "Error:" , err )
os . Exit ( 0 )
}
distro_info := make ( [ ] byte , 1024 )
distro . Read ( distro_info )
2022-09-22 14:05:20 +02:00
defer distro . Close ( )
2022-09-07 15:09:50 +02:00
distro_list := strings . Split ( string ( distro_info ) , "\n" )
distro_tuples := make ( map [ string ] string )
for _ , v := range distro_list {
if strings . Contains ( v , "=" ) {
kv := strings . Split ( v , "=" )
kv [ 0 ] = strings . TrimSpace ( kv [ 0 ] )
kv [ 1 ] = strings . TrimSpace ( kv [ 1 ] )
distro_tuples [ kv [ 0 ] ] = kv [ 1 ]
}
}
2022-09-07 17:28:27 +02:00
return strings . Trim ( distro_tuples [ "PRETTY_NAME" ] , "\"" )
2022-09-07 15:09:50 +02:00
}
func getKernel ( ) string {
2022-09-07 17:28:27 +02:00
cmd := exec . Command ( "uname" , "-r" )
kernel , err := cmd . Output ( )
if err != nil {
fmt . Println ( err . Error ( ) )
return "fuck you"
}
return string ( kernel )
2022-09-07 15:09:50 +02:00
}
2022-09-08 13:36:04 +02:00
func getUptime ( ) string {
2022-09-09 17:09:19 +02:00
content , _ := os . ReadFile ( "/proc/uptime" )
return ( string ( content [ 0 : strings . Index ( string ( content ) , "." ) ] ) )
2022-09-07 15:09:50 +02:00
}
func getPackages ( ) {
}
func getShell ( ) string {
2022-09-07 17:28:27 +02:00
return os . Getenv ( "SHELL" )
2022-09-07 15:09:50 +02:00
}
func getResolution ( ) {
2022-09-07 17:28:27 +02:00
2022-09-07 15:09:50 +02:00
}
func getWM ( ) {
}
func getTheme ( ) {
}
func getIcons ( ) {
}
2022-09-08 09:34:39 +02:00
func getTerminal ( ) string {
2022-09-22 14:05:20 +02:00
a , existprgm := os . LookupEnv ( "TERM_PROGRAM" )
2022-09-22 09:12:47 +02:00
if ! existprgm {
return os . Getenv ( "TERM" )
} else {
2022-09-22 14:05:20 +02:00
return a
2022-09-22 09:12:47 +02:00
}
2022-09-07 15:09:50 +02:00
}
func getCPU ( ) {
2022-09-22 09:12:47 +02:00
mem , _ := os . Open ( "/proc/cpuinfo" )
2022-09-08 09:34:39 +02:00
mem_info := make ( [ ] byte , 1024 )
mem . Read ( mem_info )
mem . Close ( )
2022-09-22 09:12:47 +02:00
// mem_list := strings.Split(string(mem_info), "\n")
// mem_map := make(map[string]string)
print ( mem_info )
2022-09-07 15:09:50 +02:00
}
2022-09-07 17:28:27 +02:00
func getGPU ( ) string {
cmd := exec . Command ( "lspci" , "-v" )
shell , err := cmd . Output ( )
_ = err
var bruh string
//return strings.Replace(string(shell), "\n", "", -1)
//return string(shell)
for _ , line := range strings . Split ( strings . TrimSuffix ( string ( shell ) , "\n" ) , "\n" ) {
if strings . Contains ( line , "VGA" ) {
bruh += line [ strings . Index ( line , ": " ) + 2 : strings . Index ( line , " (" ) ]
}
}
return bruh
2022-09-07 15:09:50 +02:00
}
2022-09-08 09:34:39 +02:00
func getMemory ( used bool ) string {
2022-09-07 15:09:50 +02:00
2022-09-07 17:28:27 +02:00
//
// The coolest part about this function unlike neofetch is that it also takes account of the basic os operations
// into account thus not giving an illusion that your os is completely having fun
// honestly idk lmao
//
mem , err := os . Open ( "/proc/meminfo" )
if err != nil {
fmt . Println ( err . Error ( ) )
os . Exit ( 0 )
}
mem_info := make ( [ ] byte , 1024 )
mem . Read ( mem_info )
mem . Close ( )
mem_list := strings . Split ( string ( mem_info ) , "\n" )
mem_map := make ( map [ string ] string )
for _ , v := range mem_list {
if strings . Contains ( v , ":" ) {
kv := strings . Split ( v , ":" )
kv [ 0 ] = strings . TrimSpace ( kv [ 0 ] )
kv [ 1 ] = strings . TrimSpace ( kv [ 1 ] )
kv [ 1 ] = strings . Replace ( kv [ 1 ] , "kB" , "" , 3 )
kv [ 1 ] = strings . TrimSpace ( kv [ 1 ] )
mem_map [ kv [ 0 ] ] = kv [ 1 ]
}
}
mem_free , _ := strconv . Atoi ( mem_map [ "MemFree" ] )
mem_total , _ := strconv . Atoi ( mem_map [ "MemTotal" ] )
mem_used := mem_total - mem_free
2022-09-08 09:34:39 +02:00
//memory := fmt.Sprintf("%d/%d", mem_used/1024, mem_total/1024)
if used {
return strconv . Itoa ( mem_used / 1024 )
} else {
return strconv . Itoa ( mem_total / 1024 )
}
2022-09-07 15:09:50 +02:00
}
2022-09-08 17:57:10 +02:00
func formatTime ( seconds int ) string {
2022-09-08 13:36:04 +02:00
minutes := seconds / 60
secondsre := strconv . Itoa ( seconds % 60 )
hour := strconv . Itoa ( minutes / 60 )
minutesre := strconv . Itoa ( minutes % 60 )
return ( hour + "h " + minutesre + "m " + secondsre + "s" )
}
2022-09-07 17:28:27 +02:00
func getColorPalette ( ) {
}
2022-09-07 15:09:50 +02:00
func main ( ) {
2022-09-22 12:48:20 +02:00
utils . Initargs ( )
2022-09-22 14:05:20 +02:00
utils . CutePrintInit ( utils . Getascii ( getDistro ( ) ) )
2022-09-09 10:45:27 +02:00
handleConfig ( )
2022-09-22 14:05:20 +02:00
utils . CutePrintEnd ( )
2022-09-07 15:09:50 +02:00
}