2022-09-22 14:05:20 +02:00
|
|
|
package utils
|
|
|
|
|
|
|
|
import (
|
2022-09-22 14:44:27 +02:00
|
|
|
"encoding/base64"
|
2022-09-22 14:05:20 +02:00
|
|
|
"fmt"
|
2022-09-25 10:24:09 +02:00
|
|
|
"io/ioutil"
|
2022-09-22 14:44:27 +02:00
|
|
|
"os"
|
2022-09-23 11:03:50 +02:00
|
|
|
"path/filepath"
|
|
|
|
"strconv"
|
2022-09-22 14:05:20 +02:00
|
|
|
"strings"
|
2022-09-22 14:44:27 +02:00
|
|
|
|
2022-09-25 20:50:20 +02:00
|
|
|
"github.com/exhq/neowofetch/asciiarts"
|
2022-09-22 14:44:27 +02:00
|
|
|
"github.com/exhq/neowofetch/data"
|
|
|
|
"github.com/exhq/neowofetch/images"
|
2022-09-22 14:05:20 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
func rgb(r, g, b int) string {
|
|
|
|
return fmt.Sprintf("\x1b[38:2::%d:%d:%dm", r, g, b)
|
|
|
|
}
|
|
|
|
|
2022-09-23 11:03:50 +02:00
|
|
|
var colors = make(map[string]string)
|
2022-10-13 09:32:02 +02:00
|
|
|
var oldcolors = make(map[string]int)
|
2022-09-22 14:05:20 +02:00
|
|
|
|
|
|
|
var logoIndex = 0
|
|
|
|
var isInProgressLine = false
|
|
|
|
var logoLines []string
|
|
|
|
var logoWidth int
|
|
|
|
|
2022-09-22 14:44:27 +02:00
|
|
|
var pngWidth = 12
|
|
|
|
var pngHeight = 12
|
|
|
|
var pngData []byte
|
|
|
|
|
2022-10-14 10:43:33 +02:00
|
|
|
var colorconf = os.Getenv("HOME") + "/.config/neowofetch/colors"
|
|
|
|
var folderconf = filepath.Dir(colorconf)
|
|
|
|
var _, existcolorconf = os.Stat(colorconf)
|
|
|
|
var _, existfolderconf = os.Stat(folderconf)
|
2022-09-23 11:03:50 +02:00
|
|
|
|
2022-10-14 10:43:33 +02:00
|
|
|
func Initcolor() {
|
2022-09-23 11:03:50 +02:00
|
|
|
|
|
|
|
if os.IsNotExist(existfolderconf) {
|
|
|
|
os.Mkdir(folderconf, os.ModePerm)
|
|
|
|
}
|
|
|
|
if os.IsNotExist(existcolorconf) {
|
|
|
|
println("color was not found. a default config file has been generated in '~/.config/neowofetch/colors'. rerun the program")
|
|
|
|
f, _ := os.Create(colorconf)
|
2022-09-26 12:49:32 +02:00
|
|
|
_, _ = f.WriteString("red 255 0 0 \ngreen 0 255 0\nblue 0 0 255\nwhite 255 255 255")
|
2022-09-23 11:03:50 +02:00
|
|
|
os.Exit(0)
|
|
|
|
}
|
|
|
|
|
2022-10-04 12:35:41 +02:00
|
|
|
c, _ := os.ReadFile(colorconf)
|
|
|
|
content := string(c)
|
|
|
|
if Defaultcolor {
|
|
|
|
content = "red 255 0 0 \ngreen 0 255 0\nblue 0 0 255\nwhite 255 255 255"
|
|
|
|
}
|
2022-09-23 11:03:50 +02:00
|
|
|
lines := strings.Split(string(content), "\n")
|
2022-10-13 09:32:02 +02:00
|
|
|
|
2022-09-23 11:03:50 +02:00
|
|
|
for _, line := range lines {
|
|
|
|
word := strings.Split(line, " ")
|
2022-10-13 09:32:02 +02:00
|
|
|
|
2022-09-23 11:03:50 +02:00
|
|
|
R, _ := strconv.Atoi(word[1])
|
|
|
|
G, _ := strconv.Atoi(word[2])
|
|
|
|
B, _ := strconv.Atoi(word[3])
|
|
|
|
colors[word[0]] = rgb(R, G, B)
|
2022-10-13 09:32:02 +02:00
|
|
|
|
2022-09-23 11:03:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-22 14:44:27 +02:00
|
|
|
func CutePrintInit() {
|
|
|
|
dist := data.GetDistroVariable("ID")
|
2022-09-25 20:50:20 +02:00
|
|
|
logo := asciiarts.GetAscii(dist)
|
2022-09-25 12:27:18 +02:00
|
|
|
if asciiforced {
|
2022-09-25 20:50:20 +02:00
|
|
|
logo = asciiarts.GetAscii(forceddistro)
|
2022-09-25 10:24:09 +02:00
|
|
|
}
|
2022-09-22 14:05:20 +02:00
|
|
|
if noascii {
|
|
|
|
logo = ""
|
|
|
|
}
|
2022-09-22 14:44:27 +02:00
|
|
|
if usepng {
|
|
|
|
pngData = images.DistroImages[dist]
|
2022-09-23 11:03:50 +02:00
|
|
|
logo = strings.Repeat(" ", pngWidth) + " " + strings.Repeat("\n", pngHeight)
|
2022-09-22 14:44:27 +02:00
|
|
|
}
|
2022-09-25 12:27:18 +02:00
|
|
|
if Customascii {
|
|
|
|
body, _ := ioutil.ReadFile(asciidir)
|
|
|
|
logo = (string(body))
|
|
|
|
}
|
2022-09-22 14:05:20 +02:00
|
|
|
logoLines = strings.Split(logo, "\n")
|
|
|
|
logoWidth = 0
|
|
|
|
for _, v := range logoLines {
|
2022-09-25 20:50:20 +02:00
|
|
|
lineLength := len([]rune(v)) + 2
|
2022-09-22 14:05:20 +02:00
|
|
|
if lineLength > logoWidth {
|
2022-09-25 20:50:20 +02:00
|
|
|
logoWidth = lineLength
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func printLogoIfAtBeginningOfNewLine() {
|
|
|
|
if !isInProgressLine {
|
|
|
|
isInProgressLine = true
|
|
|
|
if logoIndex < len(logoLines) {
|
|
|
|
logoLine := logoLines[logoIndex]
|
|
|
|
logoLineLength := len([]rune(logoLine))
|
|
|
|
padding := strings.Repeat(" ", logoWidth-logoLineLength)
|
|
|
|
fmt.Printf("%s%s", logoLine, padding)
|
|
|
|
} else {
|
|
|
|
fmt.Printf("%s", strings.Repeat(" ", logoWidth))
|
|
|
|
}
|
2022-09-22 14:44:27 +02:00
|
|
|
logoIndex += 1
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-04 12:35:41 +02:00
|
|
|
func uwuify(message string) string {
|
2022-09-22 14:05:20 +02:00
|
|
|
sentence := strings.Split(message, " ")
|
2022-10-04 12:35:41 +02:00
|
|
|
ret := ""
|
2022-09-22 14:05:20 +02:00
|
|
|
for i, word := range sentence {
|
|
|
|
if !strings.Contains(strings.ToLower(word), "uwu") {
|
|
|
|
word = strings.ReplaceAll(word, "u", "UwU")
|
|
|
|
|
2022-10-04 12:35:41 +02:00
|
|
|
if !strings.Contains(strings.ToLower(word), "owo") {
|
2022-09-22 14:05:20 +02:00
|
|
|
word = strings.ReplaceAll(word, "o", "OwO")
|
|
|
|
}
|
|
|
|
word = strings.ReplaceAll(word, "r", "w")
|
|
|
|
|
|
|
|
}
|
|
|
|
if i != 0 {
|
|
|
|
ret += " "
|
|
|
|
}
|
|
|
|
ret += word
|
|
|
|
}
|
|
|
|
return ret
|
|
|
|
}
|
|
|
|
|
|
|
|
type Format struct {
|
2022-10-13 09:32:02 +02:00
|
|
|
noUwuOverride bool
|
|
|
|
colorFormat string
|
|
|
|
oldcolorFormat int
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func parseFormat(format string) (parsedFormat Format) {
|
|
|
|
for _, v := range strings.Split(format, "|") {
|
|
|
|
colorFormat, isColor := colors[v]
|
2022-10-13 09:32:02 +02:00
|
|
|
parsedFormat.colorFormat += colorFormat
|
2022-09-23 11:03:50 +02:00
|
|
|
if isColor && hascolor {
|
2022-09-22 14:05:20 +02:00
|
|
|
parsedFormat.colorFormat += colorFormat
|
|
|
|
} else {
|
|
|
|
switch v {
|
|
|
|
case "italic":
|
|
|
|
parsedFormat.colorFormat += "\x1b[3m"
|
|
|
|
case "bold":
|
|
|
|
parsedFormat.colorFormat += "\x1b1"
|
|
|
|
case "nouwu":
|
|
|
|
parsedFormat.noUwuOverride = true
|
|
|
|
case "*":
|
|
|
|
default:
|
2022-10-13 09:32:02 +02:00
|
|
|
if hascolor && !colorold {
|
2022-09-23 11:03:50 +02:00
|
|
|
println("Unknown format code: ", v)
|
|
|
|
}
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return parsedFormat
|
|
|
|
}
|
|
|
|
|
2022-09-25 12:27:18 +02:00
|
|
|
func getcustomizeddistro() string {
|
|
|
|
if !asciiforced {
|
|
|
|
return data.GetDistroVariable("ID")
|
|
|
|
} else {
|
|
|
|
return forceddistro
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-22 14:05:20 +02:00
|
|
|
func CutePrint(
|
|
|
|
message string,
|
|
|
|
format string,
|
|
|
|
) {
|
|
|
|
printLogoIfAtBeginningOfNewLine()
|
|
|
|
parsedFormat := parseFormat(format)
|
|
|
|
willUwuify := shoulduwuify && !parsedFormat.noUwuOverride
|
|
|
|
if willUwuify {
|
|
|
|
message = uwuify(message)
|
|
|
|
}
|
2022-10-13 09:32:02 +02:00
|
|
|
if !colorold {
|
|
|
|
fmt.Printf("%s%s\x1b[0m", parsedFormat.colorFormat, message)
|
|
|
|
} else {
|
2022-10-14 10:43:33 +02:00
|
|
|
if os.IsNotExist(existcolorconf) {
|
|
|
|
println("color was not found. a default config file has been generated in '~/.config/neowofetch/colors'. rerun the program")
|
|
|
|
f, _ := os.Create(colorconf)
|
|
|
|
_, _ = f.WriteString("red 255 0 0 \ngreen 0 255 0\nblue 0 0 255\nwhite 255 255 255")
|
|
|
|
os.Exit(0)
|
|
|
|
} else if colorold && hascolor {
|
2022-10-13 09:32:02 +02:00
|
|
|
switch {
|
|
|
|
case strings.Contains(format, "black"):
|
|
|
|
fmt.Printf("\033[1;30m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "red"):
|
|
|
|
fmt.Printf("\033[1;31m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "green"):
|
|
|
|
fmt.Printf("\033[1;32m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "yellow"):
|
|
|
|
fmt.Printf("\033[1;33m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "blue"):
|
|
|
|
fmt.Printf("\033[1;34m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "magenta"):
|
|
|
|
fmt.Printf("\033[1;35m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "cyan"):
|
|
|
|
fmt.Printf("\033[1;36m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "white"):
|
|
|
|
fmt.Printf("\033[1;37m%s\033[0m", message)
|
|
|
|
case strings.Contains(format, "*"):
|
|
|
|
fmt.Printf("\033[1;37m%s\033[0m", message)
|
2022-10-14 10:43:33 +02:00
|
|
|
|
2022-10-13 09:32:02 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
func CuteNewLine() {
|
|
|
|
printLogoIfAtBeginningOfNewLine()
|
|
|
|
isInProgressLine = false
|
|
|
|
fmt.Println()
|
|
|
|
}
|
|
|
|
|
|
|
|
func CutePrintEnd() {
|
|
|
|
for logoIndex < len(logoLines) {
|
|
|
|
CuteNewLine()
|
|
|
|
}
|
2022-09-22 14:44:27 +02:00
|
|
|
if usepng {
|
|
|
|
fmt.Printf("\x1b[%dA", logoIndex)
|
|
|
|
fmt.Printf("\x1b]1337;File=inline=1;width=%d;height=%d:", pngWidth, pngHeight)
|
|
|
|
enc := base64.NewEncoder(base64.StdEncoding, os.Stdout)
|
2022-09-25 12:27:18 +02:00
|
|
|
enc.Write(images.DistroImages[getcustomizeddistro()])
|
2022-09-22 14:44:27 +02:00
|
|
|
enc.Close()
|
|
|
|
fmt.Println("\a")
|
|
|
|
}
|
2022-09-22 14:05:20 +02:00
|
|
|
}
|