mirror of
https://github.com/EnumeratedDev/stormfetch.git
synced 2026-09-16 07:56:12 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fabc1adbf7
|
||
|
|
3b7cb5e4e2
|
||
|
|
1b0ad32b6b
|
||
|
|
b52145614f
|
||
|
|
705a40047b
|
||
|
|
341138116b
|
||
|
|
051301aacd
|
||
|
|
3131d94429
|
||
|
|
c7bfaf7a31
|
+1
-1
@@ -5,7 +5,7 @@ modules:
|
|||||||
- name: kernel
|
- name: kernel
|
||||||
- name: packages
|
- name: packages
|
||||||
- name: shell
|
- name: shell
|
||||||
- name: init
|
- name: init_system
|
||||||
- name: motherboard
|
- name: motherboard
|
||||||
- name: cpus
|
- name: cpus
|
||||||
- name: gpus
|
- name: gpus
|
||||||
|
|||||||
+9
-5
@@ -5,9 +5,13 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupColorMap(asciiArtHeader string) map[int]string {
|
func setupColorMap(asciiArtHeader string) []string {
|
||||||
colorMap := make(map[int]string)
|
colorMap := make([]string, 10)
|
||||||
colorMap[0] = "\033[0m"
|
|
||||||
|
// Set default color map values
|
||||||
|
for i := range 10 {
|
||||||
|
colorMap[i] = "\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
// Return if header is empty
|
// Return if header is empty
|
||||||
if asciiArtHeader == "" {
|
if asciiArtHeader == "" {
|
||||||
@@ -16,8 +20,8 @@ func setupColorMap(asciiArtHeader string) map[int]string {
|
|||||||
|
|
||||||
// Read colors from ascii art header
|
// Read colors from ascii art header
|
||||||
ansiColors := strings.Split(strings.TrimPrefix(asciiArtHeader, "#/"), ";")
|
ansiColors := strings.Split(strings.TrimPrefix(asciiArtHeader, "#/"), ";")
|
||||||
for i, ansiColor := range ansiColors {
|
for i := 0; i < 9 && i < len(ansiColors); i++ {
|
||||||
colorMap[i+1] = fmt.Sprintf("\033[38;5;%sm", ansiColor)
|
colorMap[i+1] = fmt.Sprintf("\033[38;5;%sm", ansiColors[i])
|
||||||
}
|
}
|
||||||
|
|
||||||
return colorMap
|
return colorMap
|
||||||
|
|||||||
+12
-11
@@ -10,7 +10,6 @@ import (
|
|||||||
|
|
||||||
type StormfetchConfig struct {
|
type StormfetchConfig struct {
|
||||||
Ascii string `yaml:"distro_ascii"`
|
Ascii string `yaml:"distro_ascii"`
|
||||||
DistroName string `yaml:"distro_name"`
|
|
||||||
Modules []stormfetchModuleConfig `yaml:"modules"`
|
Modules []stormfetchModuleConfig `yaml:"modules"`
|
||||||
AnsiiColors []int `yaml:"ansii_colors"`
|
AnsiiColors []int `yaml:"ansii_colors"`
|
||||||
ForceConfigAnsii bool `yaml:"force_config_ansii"`
|
ForceConfigAnsii bool `yaml:"force_config_ansii"`
|
||||||
@@ -22,20 +21,22 @@ var config = StormfetchConfig{
|
|||||||
}
|
}
|
||||||
|
|
||||||
func readConfig() {
|
func readConfig() {
|
||||||
// Get home directory
|
if ConfigPath == "" {
|
||||||
userConfigDir, _ := os.UserConfigDir()
|
// Get home directory
|
||||||
|
userConfigDir, _ := os.UserConfigDir()
|
||||||
|
|
||||||
// Find valid config directory
|
// Find valid config directory
|
||||||
if _, err := os.Stat(path.Join(userConfigDir, "stormfetch/config.yml")); err == nil {
|
if _, err := os.Stat(path.Join(userConfigDir, "stormfetch/config.yml")); err == nil {
|
||||||
configPath = path.Join(userConfigDir, "stormfetch/config.yml")
|
ConfigPath = path.Join(userConfigDir, "stormfetch/config.yml")
|
||||||
} else if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/config.yml")); err == nil {
|
} else if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/config.yml")); err == nil {
|
||||||
configPath = path.Join(SystemConfigDir, "stormfetch/config.yml")
|
ConfigPath = path.Join(SystemConfigDir, "stormfetch/config.yml")
|
||||||
} else {
|
} else {
|
||||||
log.Fatalf("Config file not found: %s", err.Error())
|
log.Fatalf("Config file not found: %s", err.Error())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse config
|
// Parse config
|
||||||
bytes, err := os.ReadFile(configPath)
|
bytes, err := os.ReadFile(ConfigPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-6
@@ -15,22 +15,22 @@ var SystemConfigDir = "/etc/"
|
|||||||
|
|
||||||
// Flag variables
|
// Flag variables
|
||||||
var ShowVersion = false
|
var ShowVersion = false
|
||||||
|
var ConfigPath = ""
|
||||||
|
var Ascii = ""
|
||||||
var ShowModuleTimeTaken = false
|
var ShowModuleTimeTaken = false
|
||||||
|
|
||||||
var configPath = ""
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
readConfig()
|
|
||||||
parseFlags()
|
parseFlags()
|
||||||
|
readConfig()
|
||||||
initializeModuleMap()
|
initializeModuleMap()
|
||||||
run()
|
run()
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseFlags() {
|
func parseFlags() {
|
||||||
flag.BoolVar(&ShowVersion, "version", false, "Show Stormfetch version")
|
flag.BoolVar(&ShowVersion, "version", false, "Show Stormfetch version")
|
||||||
|
flag.StringVar(&ConfigPath, "config", "", "Use the specified config file")
|
||||||
flag.BoolVar(&ShowModuleTimeTaken, "time-taken", false, "Show time taken to execute each module")
|
flag.BoolVar(&ShowModuleTimeTaken, "time-taken", false, "Show time taken to execute each module")
|
||||||
flag.StringVar(&config.Ascii, "ascii", config.Ascii, "Set distro ascii")
|
flag.StringVar(&Ascii, "ascii", "", "Set distro ascii")
|
||||||
flag.StringVar(&config.DistroName, "distro-name", config.DistroName, "Set distro name")
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -91,6 +91,9 @@ func run() {
|
|||||||
text := module.Execute(module)
|
text := module.Execute(module)
|
||||||
end := time.Now().UnixMilli()
|
end := time.Now().UnixMilli()
|
||||||
|
|
||||||
|
// Insert default color at the start of the module's text
|
||||||
|
text = colorMap[0] + text
|
||||||
|
|
||||||
// Show time taken
|
// Show time taken
|
||||||
if ShowModuleTimeTaken {
|
if ShowModuleTimeTaken {
|
||||||
fmt.Printf("Module '%s' took %d milliseconds\n", module.Name, end-start)
|
fmt.Printf("Module '%s' took %d milliseconds\n", module.Name, end-start)
|
||||||
@@ -104,7 +107,7 @@ func run() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Continue if text length is 0
|
// Continue if text length is 0
|
||||||
if len(textNoColor) == 0 {
|
if len(textNoColor)-len(colorMap[0]) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -399,4 +399,37 @@ func initializeModuleMap() {
|
|||||||
return builder.String()
|
return builder.String()
|
||||||
}}
|
}}
|
||||||
RegisterModule(monitorsModule)
|
RegisterModule(monitorsModule)
|
||||||
|
|
||||||
|
// Custom module
|
||||||
|
customModule := StormfetchModule{stormfetchModuleConfig: stormfetchModuleConfig{Name: "custom"}, Execute: func(sm StormfetchModule) string {
|
||||||
|
shell, _ := sm.GetData("shell", "/bin/sh")
|
||||||
|
commandList, _ := sm.GetData("commands", make([]any, 0))
|
||||||
|
|
||||||
|
// Exeucte all commands
|
||||||
|
commandOutput := make(map[int]string)
|
||||||
|
for i, value := range commandList.([]any) {
|
||||||
|
command, ok := value.(string)
|
||||||
|
if !ok {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
commandOutput[i+1] = runCommand(command, shell.(string))
|
||||||
|
}
|
||||||
|
|
||||||
|
return os.Expand(sm.Format, func(s string) string {
|
||||||
|
if len(s) <= 4 || !strings.HasPrefix(s, "CMD_") {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
commandIndexStr := strings.Split(s, "CMD_")[1]
|
||||||
|
|
||||||
|
commandIndex, err := strconv.Atoi(commandIndexStr)
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return commandOutput[commandIndex]
|
||||||
|
})
|
||||||
|
}}
|
||||||
|
RegisterModule(customModule)
|
||||||
}
|
}
|
||||||
|
|||||||
+31
-51
@@ -22,10 +22,6 @@ func GetDistroInfo() DistroInfo {
|
|||||||
LongName: "Unknown",
|
LongName: "Unknown",
|
||||||
ShortName: "Unknown",
|
ShortName: "Unknown",
|
||||||
}
|
}
|
||||||
if strings.TrimSpace(config.DistroName) != "" {
|
|
||||||
info.LongName = strings.TrimSpace(config.DistroName)
|
|
||||||
info.ShortName = strings.TrimSpace(config.DistroName)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect release file location
|
// Detect release file location
|
||||||
var releaseFile string
|
var releaseFile string
|
||||||
@@ -39,20 +35,23 @@ func GetDistroInfo() DistroInfo {
|
|||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Read release file
|
||||||
releaseMap, err := ReadKeyValueFile(releaseFile)
|
releaseMap, err := ReadKeyValueFile(releaseFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set struct fields
|
||||||
if id, ok := releaseMap["ID"]; ok {
|
if id, ok := releaseMap["ID"]; ok {
|
||||||
info.ID = id
|
info.ID = id
|
||||||
}
|
}
|
||||||
if longName, ok := releaseMap["PRETTY_NAME"]; ok && info.LongName == "Unknown" {
|
if longName, ok := releaseMap["PRETTY_NAME"]; ok {
|
||||||
info.LongName = longName
|
info.LongName = longName
|
||||||
}
|
}
|
||||||
if shortName, ok := releaseMap["NAME"]; ok && info.ShortName == "Unknown" {
|
if shortName, ok := releaseMap["NAME"]; ok {
|
||||||
info.ShortName = shortName
|
info.ShortName = shortName
|
||||||
}
|
}
|
||||||
|
|
||||||
return info
|
return info
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,40 +63,36 @@ func GetDistroAsciiArt() string {
|
|||||||
// \ \
|
// \ \
|
||||||
(| | )
|
(| | )
|
||||||
/'\_ _/'\
|
/'\_ _/'\
|
||||||
\___)=(___/ `
|
\___)=(___/`
|
||||||
var id string
|
|
||||||
if config.Ascii == "auto" {
|
// Get ascii name to use
|
||||||
id = GetDistroInfo().ID
|
var asciiName string
|
||||||
|
if Ascii != "" {
|
||||||
|
asciiName = Ascii
|
||||||
|
} else if config.Ascii == "auto" {
|
||||||
|
asciiName = GetDistroInfo().ID
|
||||||
} else {
|
} else {
|
||||||
id = config.Ascii
|
asciiName = config.Ascii
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check for ascii art in home directory
|
||||||
userConfDir, err := os.UserConfigDir()
|
userConfDir, err := os.UserConfigDir()
|
||||||
if err != nil {
|
if err == nil {
|
||||||
if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/ascii/", id)); err == nil {
|
if _, err := os.Stat(path.Join(userConfDir, "stormfetch/ascii/", asciiName)); err == nil {
|
||||||
bytes, err := os.ReadFile(path.Join(SystemConfigDir, "stormfetch/ascii/", id))
|
if bytes, err := os.ReadFile(path.Join(userConfDir, "stormfetch/ascii/", asciiName)); err == nil {
|
||||||
if err != nil {
|
return strings.TrimRight(string(bytes), "\n")
|
||||||
return defaultAscii
|
|
||||||
}
|
}
|
||||||
return string(bytes)
|
|
||||||
} else {
|
|
||||||
return defaultAscii
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if _, err := os.Stat(path.Join(userConfDir, "stormfetch/ascii/", id)); err == nil {
|
|
||||||
bytes, err := os.ReadFile(path.Join(userConfDir, "stormfetch/ascii/", id))
|
// Check for ascii art in system config directory
|
||||||
if err != nil {
|
if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/ascii/", asciiName)); err == nil {
|
||||||
return defaultAscii
|
if bytes, err := os.ReadFile(path.Join(SystemConfigDir, "stormfetch/ascii/", asciiName)); err == nil {
|
||||||
|
return strings.TrimRight(string(bytes), "\n")
|
||||||
}
|
}
|
||||||
return string(bytes)
|
|
||||||
} else if _, err := os.Stat(path.Join(SystemConfigDir, "stormfetch/ascii/", id)); err == nil {
|
|
||||||
bytes, err := os.ReadFile(path.Join(SystemConfigDir, "stormfetch/ascii/", id))
|
|
||||||
if err != nil {
|
|
||||||
return defaultAscii
|
|
||||||
}
|
|
||||||
return strings.TrimRight(string(bytes), "\n\t ")
|
|
||||||
} else {
|
|
||||||
return defaultAscii
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return defaultAscii
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetArch() string {
|
func GetArch() string {
|
||||||
@@ -138,21 +133,6 @@ func GetKernel() (string, string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetInitSystem() string {
|
func GetInitSystem() string {
|
||||||
runCommand := func(command string) string {
|
|
||||||
cmd := exec.Command("/bin/sh", "-c", command)
|
|
||||||
workdir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
cmd.Dir = workdir
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
out, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(string(out))
|
|
||||||
}
|
|
||||||
|
|
||||||
process, err := ps.FindProcess(1)
|
process, err := ps.FindProcess(1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
@@ -161,19 +141,19 @@ func GetInitSystem() string {
|
|||||||
// Special cases
|
// Special cases
|
||||||
// OpenRC check
|
// OpenRC check
|
||||||
if _, err := os.Stat("/usr/sbin/openrc"); err == nil {
|
if _, err := os.Stat("/usr/sbin/openrc"); err == nil {
|
||||||
return "OpenRC " + runCommand("openrc --version | awk '{print $3}'")
|
return "OpenRC " + runCommand("openrc --version | awk '{print $3}'", "/bin/sh")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default PID 1 process name checking
|
// Default PID 1 process name checking
|
||||||
switch process.Executable() {
|
switch process.Executable() {
|
||||||
case "systemd":
|
case "systemd":
|
||||||
return "Systemd " + runCommand("systemctl --version | head -n1 | awk '{print $2}'")
|
return "Systemd " + runCommand("systemctl --version | head -n1 | awk '{print $2}'", "/bin/sh")
|
||||||
case "runit":
|
case "runit":
|
||||||
return "Runit"
|
return "Runit"
|
||||||
case "dinit":
|
case "dinit":
|
||||||
return "Dinit " + runCommand("dinit --version | head -n1 | awk '{print substr($3, 1, length($3)-1)}'")
|
return "Dinit " + runCommand("dinit --version | head -n1 | awk '{print substr($3, 1, length($3)-1)}'", "/bin/sh")
|
||||||
case "enit":
|
case "enit":
|
||||||
return "Enit " + runCommand("enit --version | awk '{print $3}'")
|
return "Enit " + runCommand("enit --version | awk '{print $3}'", "/bin/sh")
|
||||||
default:
|
default:
|
||||||
return process.Executable()
|
return process.Executable()
|
||||||
}
|
}
|
||||||
|
|||||||
+16
-45
@@ -3,7 +3,6 @@ package main
|
|||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"slices"
|
"slices"
|
||||||
"strconv"
|
"strconv"
|
||||||
@@ -19,20 +18,6 @@ type DEWM struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetShell() string {
|
func GetShell() string {
|
||||||
runCommand := func(command string) string {
|
|
||||||
cmd := exec.Command("/bin/sh", "-c", command)
|
|
||||||
workdir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
cmd.Dir = workdir
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
out, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(string(out))
|
|
||||||
}
|
|
||||||
file, err := os.ReadFile("/etc/passwd")
|
file, err := os.ReadFile("/etc/passwd")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return ""
|
return ""
|
||||||
@@ -54,13 +39,13 @@ func GetShell() string {
|
|||||||
case "dash":
|
case "dash":
|
||||||
return "Dash"
|
return "Dash"
|
||||||
case "bash":
|
case "bash":
|
||||||
return "Bash " + runCommand("echo $BASH_VERSION")
|
return "Bash " + runCommand("echo $BASH_VERSION", "/bin/sh")
|
||||||
case "zsh":
|
case "zsh":
|
||||||
return "Zsh " + runCommand("$SHELL --version | awk '{print $2}'")
|
return "Zsh " + runCommand("$SHELL --version | awk '{print $2}'", "/bin/sh")
|
||||||
case "fish":
|
case "fish":
|
||||||
return "Fish " + runCommand("$SHELL --version | awk '{print $3}'")
|
return "Fish " + runCommand("$SHELL --version | awk '{print $3}'", "/bin/sh")
|
||||||
case "nu":
|
case "nu":
|
||||||
return "Nushell " + runCommand("$SHELL --version")
|
return "Nushell " + runCommand("$SHELL --version", "/bin/sh")
|
||||||
default:
|
default:
|
||||||
return "Unknown"
|
return "Unknown"
|
||||||
}
|
}
|
||||||
@@ -79,53 +64,39 @@ func GetDEWM() DEWM {
|
|||||||
processExists := func(process string) bool {
|
processExists := func(process string) bool {
|
||||||
return slices.Contains(executables, process)
|
return slices.Contains(executables, process)
|
||||||
}
|
}
|
||||||
runCommand := func(command string) string {
|
|
||||||
cmd := exec.Command("/bin/sh", "-c", command)
|
|
||||||
workdir, err := os.Getwd()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
cmd.Dir = workdir
|
|
||||||
cmd.Env = os.Environ()
|
|
||||||
out, err := cmd.Output()
|
|
||||||
if err != nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
return strings.TrimSpace(string(out))
|
|
||||||
}
|
|
||||||
if processExists("plasmashell") {
|
if processExists("plasmashell") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "KDE Plasma",
|
Name: "KDE Plasma",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("plasmashell --version | awk '{print $2}'"),
|
Version: runCommand("plasmashell --version | awk '{print $2}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("gnome-session") {
|
} else if processExists("gnome-session") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "Gnome",
|
Name: "Gnome",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("gnome-shell --version | awk '{print $3}'"),
|
Version: runCommand("gnome-shell --version | awk '{print $3}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("xfce4-session") {
|
} else if processExists("xfce4-session") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "XFCE",
|
Name: "XFCE",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("xfce4-session --version | head -n1 | awk '{print $2}'"),
|
Version: runCommand("xfce4-session --version | head -n1 | awk '{print $2}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("cinnamon") {
|
} else if processExists("cinnamon") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "Cinnamon",
|
Name: "Cinnamon",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("cinnamon --version | awk '{print $3}'"),
|
Version: runCommand("cinnamon --version | awk '{print $3}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("mate-panel") {
|
} else if processExists("mate-panel") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "MATE",
|
Name: "MATE",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("mate-about --version | awk '{print $4}'"),
|
Version: runCommand("mate-about --version | awk '{print $4}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("lxsession") {
|
} else if processExists("lxsession") {
|
||||||
@@ -139,23 +110,23 @@ func GetDEWM() DEWM {
|
|||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "LXQt",
|
Name: "LXQt",
|
||||||
Type: "DE",
|
Type: "DE",
|
||||||
Version: runCommand("lxqt-session --version | head -n1 | awk '{print $2}'"),
|
Version: runCommand("lxqt-session --version | head -n1 | awk '{print $2}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("i3") || processExists("i3-with-shmlog") {
|
} else if processExists("i3") || processExists("i3-with-shmlog") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "i3",
|
Name: "i3",
|
||||||
Type: "WM",
|
Type: "WM",
|
||||||
Version: runCommand("i3 --version | awk '{print $3}'"),
|
Version: runCommand("i3 --version | awk '{print $3}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("sway") {
|
} else if processExists("sway") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "Sway",
|
Name: "Sway",
|
||||||
Type: "WM",
|
Type: "WM",
|
||||||
Version: runCommand("sway --version | awk '{print $3}'"),
|
Version: runCommand("sway --version | awk '{print $3}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
if runCommand("sway --version | awk '{print $1}'") == "swayfx" {
|
if runCommand("sway --version | awk '{print $1}'", "/bin/sh") == "swayfx" {
|
||||||
dewm.Name = "SwayFX"
|
dewm.Name = "SwayFX"
|
||||||
} else {
|
} else {
|
||||||
dewm.Name = "Sway"
|
dewm.Name = "Sway"
|
||||||
@@ -165,21 +136,21 @@ func GetDEWM() DEWM {
|
|||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "Bspwm",
|
Name: "Bspwm",
|
||||||
Type: "WM",
|
Type: "WM",
|
||||||
Version: runCommand("bspwm -v"),
|
Version: runCommand("bspwm -v", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("Hyprland") {
|
} else if processExists("Hyprland") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "Hyprland",
|
Name: "Hyprland",
|
||||||
Type: "WM",
|
Type: "WM",
|
||||||
Version: runCommand("hyprctl version | sed -n 3p | awk '{print $2}' | tr -d 'v,'"),
|
Version: runCommand("hyprctl version | sed -n 3p | awk '{print $2}' | tr -d 'v,'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
} else if processExists("icewm-session") {
|
} else if processExists("icewm-session") {
|
||||||
dewm := DEWM{
|
dewm := DEWM{
|
||||||
Name: "IceWM",
|
Name: "IceWM",
|
||||||
Type: "WM",
|
Type: "WM",
|
||||||
Version: runCommand("icewm --version | awk '{print $2}'"),
|
Version: runCommand("icewm --version | awk '{print $2}'", "/bin/sh"),
|
||||||
}
|
}
|
||||||
return dewm
|
return dewm
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"os"
|
"os"
|
||||||
|
"os/exec"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@@ -56,3 +57,18 @@ func ReadKeyValueFile(filepath string) (map[string]string, error) {
|
|||||||
}
|
}
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func runCommand(command string, shell string) string {
|
||||||
|
cmd := exec.Command(shell, "-c", command)
|
||||||
|
workdir, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
cmd.Dir = workdir
|
||||||
|
cmd.Env = os.Environ()
|
||||||
|
out, err := cmd.Output()
|
||||||
|
if err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return strings.TrimSpace(string(out))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user