Skip to content
This repository has been archived by the owner on Aug 30, 2024. It is now read-only.

Commit

Permalink
categories and subcatgories no longer hardcoded
Browse files Browse the repository at this point in the history
  • Loading branch information
abs3ntdev committed Jan 4, 2023
1 parent a02d40c commit 9fe49ff
Showing 1 changed file with 48 additions and 43 deletions.
91 changes: 48 additions & 43 deletions reader/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
// io/ioutil is deprecated, use io and os packages instead
)

type ConfigCategory string

type Settings []*Setting

type Setting struct {
Expand All @@ -32,6 +34,23 @@ type ConfigValues struct {

// Read Hyprland configuration file and return lines that start with bind= and bindm=
func ReadHyprlandConfig(configPath string) (*ConfigValues, error) {
categories := []string{
"general",
"input",
"decoration",
"animation",
"gestures",
"misc",
"binds",
"debug",
"device",
}

subcategories := []string{
"touchdevice",
"touchpad",
}

settings := make(Settings, 0)
file, err := os.Open(configPath)
if err != nil {
Expand All @@ -47,27 +66,15 @@ func ReadHyprlandConfig(configPath string) (*ConfigValues, error) {

for scanner.Scan() {
line := scanner.Text()
category, isCategory := getCategory(line, categories)
if isCategory {
settings = append(settings, handler(category, scanner, subcategories))
}
switch {
case strings.HasPrefix(line, "bindm"):
mKeybinds = append(mKeybinds, makeBind(line))
case strings.HasPrefix(line, "bind"):
kbKeybinds = append(kbKeybinds, makeBind(line))
case strings.HasPrefix(line, "input"):
settings = append(settings, handler("input", scanner))
case strings.HasPrefix(line, "general"):
settings = append(settings, handler("general", scanner))
case strings.HasPrefix(line, "decoration"):
settings = append(settings, handler("decoration", scanner))
case strings.HasPrefix(line, "animations"):
settings = append(settings, handler("animations", scanner))
case strings.HasPrefix(line, "gestures"):
settings = append(settings, handler("gestures", scanner))
case strings.HasPrefix(line, "misc"):
settings = append(settings, handler("misc", scanner))
case strings.HasPrefix(line, "binds"):
settings = append(settings, handler("binds", scanner))
case strings.HasPrefix(line, "debug"):
settings = append(settings, handler("debug", scanner))
}
}

Expand All @@ -82,6 +89,24 @@ func ReadHyprlandConfig(configPath string) (*ConfigValues, error) {
return configValues, nil
}

func getCategory(check string, categories []string) (string, bool) {
for _, cat := range categories {
if strings.HasPrefix(strings.ToLower(check), cat) {
return cat, true
}
}
return "", false
}

func getSubCategory(check string, categories []string) (string, bool) {
for _, cat := range categories {
if strings.HasPrefix(strings.ToLower(strings.TrimSpace(check)), cat) {
return cat, true
}
}
return "", false
}

func makeBind(bind string) *Keybind {
split := strings.SplitN(bind, "=", 2)
keyBind := &Keybind{
Expand Down Expand Up @@ -133,10 +158,8 @@ func makeBind(bind string) *Keybind {
return keyBind
}

func handler(name string, scanner *bufio.Scanner) *Setting {
func handler(name string, scanner *bufio.Scanner, subcategories []string) *Setting {
input := make(map[string]string)
touchpad := make(map[string]string)
touchdevice := make(map[string]string)
settings := &Setting{
Name: name,
}
Expand All @@ -146,27 +169,9 @@ func handler(name string, scanner *bufio.Scanner) *Setting {
settings.Settings = input
return settings
}
if strings.HasPrefix(strings.TrimSpace(line), "touchpad") {
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(strings.TrimSpace(line), "}") {
break
}
trimmed := strings.TrimSpace(line)
val := strings.Split(strings.ReplaceAll(trimmed, " ", ""), "=")
if len(val) > 1 {
if val[1] != "" {
touchpad[val[0]] = val[1]
}
}
}
subcategory := &Setting{
Name: "touchpad",
Settings: touchpad,
}
settings.SubCategories = append(settings.SubCategories, *subcategory)
}
if strings.HasPrefix(strings.TrimSpace(line), "touchdevice") {
subCategory, isSubCategory := getSubCategory(line, subcategories)
if isSubCategory {
subSettings := make(map[string]string)
for scanner.Scan() {
line := scanner.Text()
if strings.HasPrefix(strings.TrimSpace(line), "}") {
Expand All @@ -176,13 +181,13 @@ func handler(name string, scanner *bufio.Scanner) *Setting {
val := strings.Split(strings.ReplaceAll(trimmed, " ", ""), "=")
if len(val) > 1 {
if val[1] != "" {
touchdevice[val[0]] = val[1]
subSettings[val[0]] = val[1]
}
}
}
subcategory := &Setting{
Name: "touchdevice",
Settings: touchpad,
Name: subCategory,
Settings: subSettings,
}
settings.SubCategories = append(settings.SubCategories, *subcategory)
}
Expand Down

0 comments on commit 9fe49ff

Please sign in to comment.