From a2b924d7e9492b978ad6dc33b6c1ffcb304b4bc5 Mon Sep 17 00:00:00 2001 From: Nippy Date: Sat, 9 May 2026 13:33:09 +0200 Subject: raveos update --- .../DankMaterialShell/core/internal/utils/dbus.go | 37 --- .../DankMaterialShell/core/internal/utils/exec.go | 44 ---- .../core/internal/utils/flatpak.go | 83 ------- .../core/internal/utils/flatpak_test.go | 271 --------------------- .../DankMaterialShell/core/internal/utils/group.go | 37 --- .../core/internal/utils/group_test.go | 142 ----------- .../core/internal/utils/gsettings.go | 31 --- .../DankMaterialShell/core/internal/utils/math.go | 13 - .../DankMaterialShell/core/internal/utils/paths.go | 70 ------ .../core/internal/utils/paths_test.go | 43 ---- .../core/internal/utils/slices.go | 56 ----- .../core/internal/utils/slices_test.go | 72 ------ 12 files changed, 899 deletions(-) delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/dbus.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/exec.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak_test.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group_test.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/gsettings.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/math.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths_test.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices.go delete mode 100644 raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices_test.go (limited to 'raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils') diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/dbus.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/dbus.go deleted file mode 100644 index bafd51f..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/dbus.go +++ /dev/null @@ -1,37 +0,0 @@ -package utils - -import ( - "slices" - - "github.com/godbus/dbus/v5" -) - -func IsDBusServiceAvailable(busName string) bool { - conn, err := dbus.ConnectSystemBus() - if err != nil { - return false - } - defer conn.Close() - - obj := conn.Object("org.freedesktop.DBus", "/org/freedesktop/DBus") - var owned bool - if err := obj.Call("org.freedesktop.DBus.NameHasOwner", 0, busName).Store(&owned); err != nil { - return false - } - return owned -} - -func IsDBusServiceActivatable(busName string) bool { - conn, err := dbus.ConnectSystemBus() - if err != nil { - return false - } - defer conn.Close() - - obj := conn.Object("org.freedesktop.DBus", "/org/freedesktop/DBus") - var activatable []string - if err := obj.Call("org.freedesktop.DBus.ListActivatableNames", 0).Store(&activatable); err != nil { - return false - } - return slices.Contains(activatable, busName) -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/exec.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/exec.go deleted file mode 100644 index aa1eb31..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/exec.go +++ /dev/null @@ -1,44 +0,0 @@ -package utils - -import ( - "os/exec" -) - -type AppChecker interface { - CommandExists(cmd string) bool - AnyCommandExists(cmds ...string) bool - FlatpakExists(name string) bool - AnyFlatpakExists(flatpaks ...string) bool -} - -type DefaultAppChecker struct{} - -func (DefaultAppChecker) CommandExists(cmd string) bool { - return CommandExists(cmd) -} - -func (DefaultAppChecker) AnyCommandExists(cmds ...string) bool { - return AnyCommandExists(cmds...) -} - -func (DefaultAppChecker) FlatpakExists(name string) bool { - return FlatpakExists(name) -} - -func (DefaultAppChecker) AnyFlatpakExists(flatpaks ...string) bool { - return AnyFlatpakExists(flatpaks...) -} - -func CommandExists(cmd string) bool { - _, err := exec.LookPath(cmd) - return err == nil -} - -func AnyCommandExists(cmds ...string) bool { - for _, cmd := range cmds { - if CommandExists(cmd) { - return true - } - } - return false -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak.go deleted file mode 100644 index f1c9009..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak.go +++ /dev/null @@ -1,83 +0,0 @@ -package utils - -import ( - "bytes" - "errors" - "os/exec" - "slices" - "strings" -) - -func FlatpakInPath() bool { - _, err := exec.LookPath("flatpak") - return err == nil -} - -func FlatpakExists(name string) bool { - if !FlatpakInPath() { - return false - } - - cmd := exec.Command("flatpak", "info", name) - err := cmd.Run() - return err == nil -} - -func FlatpakSearchBySubstring(substring string) bool { - if !FlatpakInPath() { - return false - } - - cmd := exec.Command("flatpak", "list", "--app") - var stdout bytes.Buffer - cmd.Stdout = &stdout - - if err := cmd.Run(); err != nil { - return false - } - - out := stdout.String() - - for line := range strings.SplitSeq(out, "\n") { - fields := strings.Fields(line) - if len(fields) > 1 { - id := fields[1] - idParts := strings.Split(id, ".") - // We are assuming that the last part of the ID is - // the package name we're looking for. This might - // not always be true, some developers use arbitrary - // suffixes. - if len(idParts) > 0 && idParts[len(idParts)-1] == substring { - cmd := exec.Command("flatpak", "info", id) - err := cmd.Run() - return err == nil - } - } - } - return false -} - -func AnyFlatpakExists(flatpaks ...string) bool { - return slices.ContainsFunc(flatpaks, FlatpakExists) -} - -func FlatpakInstallationDir(name string) (string, error) { - if !FlatpakInPath() { - return "", errors.New("flatpak not found in PATH") - } - - cmd := exec.Command("flatpak", "info", "--show-location", name) - var stdout bytes.Buffer - cmd.Stdout = &stdout - - if err := cmd.Run(); err != nil { - return "", errors.New("flatpak not installed: " + name) - } - - location := strings.TrimSpace(stdout.String()) - if location == "" { - return "", errors.New("installation directory not found for: " + name) - } - - return location, nil -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak_test.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak_test.go deleted file mode 100644 index 97282ae..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/flatpak_test.go +++ /dev/null @@ -1,271 +0,0 @@ -package utils - -import ( - "os" - "path/filepath" - "strings" - "testing" -) - -func TestFlatpakInPathAvailable(t *testing.T) { - result := FlatpakInPath() - if !result { - t.Skip("flatpak not in PATH") - } - if !result { - t.Errorf("expected true when flatpak is in PATH") - } -} - -func TestFlatpakInPathUnavailable(t *testing.T) { - tempDir := t.TempDir() - t.Setenv("PATH", tempDir) - - result := FlatpakInPath() - if result { - t.Errorf("expected false when flatpak not in PATH, got true") - } -} - -func TestFlatpakExistsValidPackage(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - result := FlatpakExists("com.nonexistent.package.test") - if result { - t.Logf("package exists (unexpected but not an error)") - } -} - -func TestFlatpakExistsNoFlatpak(t *testing.T) { - tempDir := t.TempDir() - t.Setenv("PATH", tempDir) - - result := FlatpakExists("any.package.name") - if result { - t.Errorf("expected false when flatpak not in PATH, got true") - } -} - -func TestFlatpakSearchBySubstringNoFlatpak(t *testing.T) { - tempDir := t.TempDir() - t.Setenv("PATH", tempDir) - - result := FlatpakSearchBySubstring("test") - if result { - t.Errorf("expected false when flatpak not in PATH, got true") - } -} - -func TestFlatpakSearchBySubstringNonexistent(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - result := FlatpakSearchBySubstring("ThisIsAVeryUnlikelyPackageName12345") - if result { - t.Errorf("expected false for nonexistent package substring") - } -} - -func TestFlatpakInstallationDirNoFlatpak(t *testing.T) { - tempDir := t.TempDir() - t.Setenv("PATH", tempDir) - - _, err := FlatpakInstallationDir("any.package.name") - if err == nil { - t.Errorf("expected error when flatpak not in PATH") - } - if err != nil && !strings.Contains(err.Error(), "not found in PATH") { - t.Errorf("expected 'not found in PATH' error, got: %v", err) - } -} - -func TestFlatpakInstallationDirNonexistent(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - _, err := FlatpakInstallationDir("com.nonexistent.package.test") - if err == nil { - t.Errorf("expected error for nonexistent package") - } - if err != nil && !strings.Contains(err.Error(), "not installed") { - t.Errorf("expected 'not installed' error, got: %v", err) - } -} - -func TestFlatpakInstallationDirValid(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - // This test requires a known installed flatpak - // We can't guarantee any specific flatpak is installed, - // so we'll skip if we can't find a common one - commonFlatpaks := []string{ - "org.mozilla.firefox", - "org.gnome.Calculator", - "org.freedesktop.Platform", - } - - var testPackage string - for _, pkg := range commonFlatpaks { - if FlatpakExists(pkg) { - testPackage = pkg - break - } - } - - if testPackage == "" { - t.Skip("no common flatpak packages found for testing") - } - - result, err := FlatpakInstallationDir(testPackage) - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if result == "" { - t.Errorf("expected non-empty installation directory") - } - if !strings.Contains(result, testPackage) { - t.Logf("installation directory %s doesn't contain package name (may be expected)", result) - } -} - -func TestFlatpakExistsCommandFailure(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - // Mock a failing flatpak command through PATH interception - tempDir := t.TempDir() - fakeFlatpak := filepath.Join(tempDir, "flatpak") - - script := "#!/bin/sh\nexit 1\n" - err := os.WriteFile(fakeFlatpak, []byte(script), 0o755) - if err != nil { - t.Fatalf("failed to create fake flatpak: %v", err) - } - - originalPath := os.Getenv("PATH") - t.Setenv("PATH", tempDir+":"+originalPath) - - result := FlatpakExists("test.package") - if result { - t.Errorf("expected false when flatpak command fails, got true") - } -} - -func TestFlatpakSearchBySubstringCommandFailure(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - // Mock a failing flatpak command through PATH interception - tempDir := t.TempDir() - fakeFlatpak := filepath.Join(tempDir, "flatpak") - - script := "#!/bin/sh\nexit 1\n" - err := os.WriteFile(fakeFlatpak, []byte(script), 0o755) - if err != nil { - t.Fatalf("failed to create fake flatpak: %v", err) - } - - originalPath := os.Getenv("PATH") - t.Setenv("PATH", tempDir+":"+originalPath) - - result := FlatpakSearchBySubstring("test") - if result { - t.Errorf("expected false when flatpak command fails, got true") - } -} - -func TestFlatpakInstallationDirCommandFailure(t *testing.T) { - if !FlatpakInPath() { - t.Skip("flatpak not in PATH") - } - - // Mock a failing flatpak command through PATH interception - tempDir := t.TempDir() - fakeFlatpak := filepath.Join(tempDir, "flatpak") - - script := "#!/bin/sh\nexit 1\n" - err := os.WriteFile(fakeFlatpak, []byte(script), 0o755) - if err != nil { - t.Fatalf("failed to create fake flatpak: %v", err) - } - - originalPath := os.Getenv("PATH") - t.Setenv("PATH", tempDir+":"+originalPath) - - _, err = FlatpakInstallationDir("test.package") - if err == nil { - t.Errorf("expected error when flatpak command fails") - } - if err != nil && !strings.Contains(err.Error(), "not installed") { - t.Errorf("expected 'not installed' error, got: %v", err) - } -} - -func TestAnyFlatpakExistsSomeExist(t *testing.T) { - tempDir := t.TempDir() - fakeFlatpak := filepath.Join(tempDir, "flatpak") - - // Script that succeeds only for "app.exists.test" - script := `#!/bin/sh -if [ "$1" = "info" ] && [ "$2" = "app.exists.test" ]; then - exit 0 -fi -exit 1 -` - err := os.WriteFile(fakeFlatpak, []byte(script), 0o755) - if err != nil { - t.Fatalf("failed to create fake flatpak: %v", err) - } - - originalPath := os.Getenv("PATH") - t.Setenv("PATH", tempDir+":"+originalPath) - - result := AnyFlatpakExists("com.nonexistent.flatpak", "app.exists.test", "com.another.nonexistent") - if !result { - t.Errorf("expected true when at least one flatpak exists") - } -} - -func TestAnyFlatpakExistsNoneExist(t *testing.T) { - tempDir := t.TempDir() - fakeFlatpak := filepath.Join(tempDir, "flatpak") - - script := "#!/bin/sh\nexit 1\n" - err := os.WriteFile(fakeFlatpak, []byte(script), 0o755) - if err != nil { - t.Fatalf("failed to create fake flatpak: %v", err) - } - - originalPath := os.Getenv("PATH") - t.Setenv("PATH", tempDir+":"+originalPath) - - result := AnyFlatpakExists("com.nonexistent.flatpak1", "com.nonexistent.flatpak2") - if result { - t.Errorf("expected false when no flatpaks exist") - } -} - -func TestAnyFlatpakExistsNoFlatpak(t *testing.T) { - tempDir := t.TempDir() - t.Setenv("PATH", tempDir) - - result := AnyFlatpakExists("any.package.name", "another.package") - if result { - t.Errorf("expected false when flatpak not in PATH, got true") - } -} - -func TestAnyFlatpakExistsEmpty(t *testing.T) { - result := AnyFlatpakExists() - if result { - t.Errorf("expected false when no flatpaks specified") - } -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group.go deleted file mode 100644 index 1a0a950..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group.go +++ /dev/null @@ -1,37 +0,0 @@ -package utils - -import ( - "os" - "strings" -) - -func HasGroup(groupName string) bool { - return HasGroupIn(groupName, "/etc/group") -} - -func HasGroupIn(groupName, path string) bool { - data, err := os.ReadFile(path) - if err != nil { - return false - } - return HasGroupData(groupName, string(data)) -} - -func HasGroupData(groupName, data string) bool { - prefix := groupName + ":" - for line := range strings.SplitSeq(data, "\n") { - if strings.HasPrefix(line, prefix) { - return true - } - } - return false -} - -func FindGroupData(data string, candidates ...string) (string, bool) { - for _, candidate := range candidates { - if HasGroupData(candidate, data) { - return candidate, true - } - } - return "", false -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group_test.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group_test.go deleted file mode 100644 index 4b401dc..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/group_test.go +++ /dev/null @@ -1,142 +0,0 @@ -package utils - -import "testing" - -const testGroupData = `root:x:0:brltty,root -sys:x:3:bin,testuser -mem:x:8: -ftp:x:11: -mail:x:12: -log:x:19: -smmsp:x:25: -proc:x:26: -games:x:50: -lock:x:54: -network:x:90: -floppy:x:94: -scanner:x:96: -power:x:98: -nobody:x:65534: -adm:x:999:daemon -wheel:x:998:testuser -utmp:x:997: -audio:x:996:brltty -disk:x:995: -input:x:994:brltty,testuser,greeter -kmem:x:993: -kvm:x:992:libvirt-qemu,qemu,testuser -lp:x:991:cups,testuser -optical:x:990: -render:x:989: -sgx:x:988: -storage:x:987: -tty:x:5:brltty -uucp:x:986:brltty -video:x:985:cosmic-greeter,greeter,testuser -users:x:984: -groups:x:983: -systemd-journal:x:982: -rfkill:x:981: -bin:x:1:daemon -daemon:x:2:bin -http:x:33: -dbus:x:81: -systemd-coredump:x:980: -systemd-network:x:979: -systemd-oom:x:978: -systemd-journal-remote:x:977: -systemd-resolve:x:976: -systemd-timesync:x:975: -tss:x:974: -uuidd:x:973: -alpm:x:972: -polkitd:x:102: -testuser:x:1000: -avahi:x:971: -git:x:970: -nvidia-persistenced:x:143: -i2c:x:969:testuser -seat:x:968: -rtkit:x:133: -brlapi:x:967:brltty -gdm:x:120: -brltty:x:966: -colord:x:965: -flatpak:x:964: -geoclue:x:963:testuser -gnome-remote-desktop:x:962: -saned:x:961: -usbmux:x:140: -cosmic-greeter:x:960: -greeter:x:959:testuser -openvpn:x:958: -nm-openvpn:x:957: -named:x:40: -_talkd:x:956: -keyd:x:955: -cups:x:209:testuser -docker:x:954:testuser -mysql:x:953: -radicale:x:952: -onepassword:x:1001: -nixbld:x:951:nixbld01,nixbld02,nixbld03,nixbld04,nixbld05,nixbld06,nixbld07,nixbld08,nixbld09,nixbld10 -virtlogin:x:940: -libvirt:x:939:testuser -libvirt-qemu:x:938: -qemu:x:937: -dnsmasq:x:936: -clock:x:935: -dms-greeter:x:1002:greeter,testuser -pcscd:x:934: -test:x:1003: -empower:x:933: -` - -func TestHasGroupData(t *testing.T) { - tests := []struct { - group string - want bool - }{ - {"greeter", true}, - {"root", true}, - {"docker", true}, - {"cosmic-greeter", true}, - {"dms-greeter", true}, - {"nonexistent", false}, - {"greet", false}, - } - - for _, tt := range tests { - if got := HasGroupData(tt.group, testGroupData); got != tt.want { - t.Errorf("HasGroupData(%q) = %v, want %v", tt.group, got, tt.want) - } - } -} - -func TestFindGroupData(t *testing.T) { - tests := []struct { - name string - candidates []string - wantGroup string - wantFound bool - }{ - {"first match wins", []string{"greeter", "greetd", "_greeter"}, "greeter", true}, - {"fallback to second", []string{"greetd", "greeter"}, "greeter", true}, - {"none found", []string{"_greetd", "greetd"}, "", false}, - {"single match", []string{"docker"}, "docker", true}, - } - - for _, tt := range tests { - got, found := FindGroupData(testGroupData, tt.candidates...) - if got != tt.wantGroup || found != tt.wantFound { - t.Errorf("%s: FindGroupData(%v) = (%q, %v), want (%q, %v)", - tt.name, tt.candidates, got, found, tt.wantGroup, tt.wantFound) - } - } -} - -func TestHasGroupDataEmpty(t *testing.T) { - if HasGroupData("greeter", "") { - t.Error("expected false for empty data") - } -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/gsettings.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/gsettings.go deleted file mode 100644 index cc8d084..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/gsettings.go +++ /dev/null @@ -1,31 +0,0 @@ -package utils - -import ( - "fmt" - "os/exec" - "strings" -) - -func dconfPath(schema, key string) string { - return "/" + strings.ReplaceAll(schema, ".", "/") + "/" + key -} - -// GsettingsGet reads a gsettings value, falling back to dconf read. -func GsettingsGet(schema, key string) (string, error) { - if out, err := exec.Command("gsettings", "get", schema, key).Output(); err == nil { - return strings.TrimSpace(string(out)), nil - } - out, err := exec.Command("dconf", "read", dconfPath(schema, key)).Output() - if err != nil { - return "", fmt.Errorf("gsettings/dconf get failed for %s %s: %w", schema, key, err) - } - return strings.TrimSpace(string(out)), nil -} - -// GsettingsSet writes a gsettings value, falling back to dconf write. -func GsettingsSet(schema, key, value string) error { - if err := exec.Command("gsettings", "set", schema, key, value).Run(); err == nil { - return nil - } - return exec.Command("dconf", "write", dconfPath(schema, key), "'"+value+"'").Run() -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/math.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/math.go deleted file mode 100644 index 408af9f..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/math.go +++ /dev/null @@ -1,13 +0,0 @@ -package utils - -import "golang.org/x/exp/constraints" - -func Clamp[T constraints.Ordered](val, min, max T) T { - if val < min { - return min - } - if val > max { - return max - } - return val -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths.go deleted file mode 100644 index 053097e..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths.go +++ /dev/null @@ -1,70 +0,0 @@ -package utils - -import ( - "os" - "path/filepath" - "strings" -) - -func XDGStateHome() string { - if dir := os.Getenv("XDG_STATE_HOME"); dir != "" { - return dir - } - home, _ := os.UserHomeDir() - return filepath.Join(home, ".local", "state") -} - -func XDGDataHome() string { - if dir := os.Getenv("XDG_DATA_HOME"); dir != "" { - return dir - } - home, _ := os.UserHomeDir() - return filepath.Join(home, ".local", "share") -} - -func XDGCacheHome() string { - if dir, err := os.UserCacheDir(); err == nil { - return dir - } - home, _ := os.UserHomeDir() - return filepath.Join(home, ".cache") -} - -func XDGConfigHome() string { - if dir, err := os.UserConfigDir(); err == nil { - return dir - } - home, _ := os.UserHomeDir() - return filepath.Join(home, ".config") -} - -func EmacsConfigDir() string { - home, _ := os.UserHomeDir() - - emacsD := filepath.Join(home, ".emacs.d") - if info, err := os.Stat(emacsD); err == nil && info.IsDir() { - return emacsD - } - - xdgEmacs := filepath.Join(XDGConfigHome(), "emacs") - if info, err := os.Stat(xdgEmacs); err == nil && info.IsDir() { - return xdgEmacs - } - - return "" -} - -func ExpandPath(path string) (string, error) { - expanded := os.ExpandEnv(path) - expanded = filepath.Clean(expanded) - - if strings.HasPrefix(expanded, "~") { - home, err := os.UserHomeDir() - if err != nil { - return "", err - } - expanded = filepath.Join(home, expanded[1:]) - } - - return expanded, nil -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths_test.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths_test.go deleted file mode 100644 index 964f2a7..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/paths_test.go +++ /dev/null @@ -1,43 +0,0 @@ -package utils - -import ( - "os" - "path/filepath" - "testing" -) - -func TestExpandPathTilde(t *testing.T) { - home, err := os.UserHomeDir() - if err != nil { - t.Skip("no home directory") - } - result, err := ExpandPath("~/test") - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - expected := filepath.Join(home, "test") - if result != expected { - t.Errorf("expected %s, got %s", expected, result) - } -} - -func TestExpandPathEnvVar(t *testing.T) { - t.Setenv("TEST_PATH_VAR", "/custom/path") - result, err := ExpandPath("$TEST_PATH_VAR/subdir") - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if result != "/custom/path/subdir" { - t.Errorf("expected /custom/path/subdir, got %s", result) - } -} - -func TestExpandPathAbsolute(t *testing.T) { - result, err := ExpandPath("/absolute/path") - if err != nil { - t.Fatalf("unexpected error: %v", err) - } - if result != "/absolute/path" { - t.Errorf("expected /absolute/path, got %s", result) - } -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices.go deleted file mode 100644 index b636ddc..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices.go +++ /dev/null @@ -1,56 +0,0 @@ -package utils - -func Filter[T any](items []T, predicate func(T) bool) []T { - var result []T - for _, item := range items { - if predicate(item) { - result = append(result, item) - } - } - return result -} - -func Find[T any](items []T, predicate func(T) bool) (T, bool) { - for _, item := range items { - if predicate(item) { - return item, true - } - } - var zero T - return zero, false -} - -func Map[T, U any](items []T, transform func(T) U) []U { - result := make([]U, len(items)) - for i, item := range items { - result[i] = transform(item) - } - return result -} - -func Contains[T comparable](items []T, target T) bool { - for _, item := range items { - if item == target { - return true - } - } - return false -} - -func Any[T any](items []T, predicate func(T) bool) bool { - for _, item := range items { - if predicate(item) { - return true - } - } - return false -} - -func All[T any](items []T, predicate func(T) bool) bool { - for _, item := range items { - if !predicate(item) { - return false - } - } - return true -} diff --git a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices_test.go b/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices_test.go deleted file mode 100644 index 8edcee5..0000000 --- a/raveos-hyprland-theme/theme-data/DankMaterialShell/core/internal/utils/slices_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package utils - -import ( - "testing" -) - -func TestFilter(t *testing.T) { - nums := []int{1, 2, 3, 4, 5} - evens := Filter(nums, func(n int) bool { return n%2 == 0 }) - if len(evens) != 2 || evens[0] != 2 || evens[1] != 4 { - t.Errorf("expected [2, 4], got %v", evens) - } -} - -func TestFilterEmpty(t *testing.T) { - result := Filter([]int{1, 2, 3}, func(n int) bool { return n > 10 }) - if len(result) != 0 { - t.Errorf("expected empty slice, got %v", result) - } -} - -func TestFind(t *testing.T) { - nums := []int{1, 2, 3, 4, 5} - val, found := Find(nums, func(n int) bool { return n == 3 }) - if !found || val != 3 { - t.Errorf("expected 3, got %v (found=%v)", val, found) - } -} - -func TestFindNotFound(t *testing.T) { - nums := []int{1, 2, 3} - val, found := Find(nums, func(n int) bool { return n == 99 }) - if found || val != 0 { - t.Errorf("expected zero value not found, got %v (found=%v)", val, found) - } -} - -func TestMap(t *testing.T) { - nums := []int{1, 2, 3} - doubled := Map(nums, func(n int) int { return n * 2 }) - if len(doubled) != 3 || doubled[0] != 2 || doubled[1] != 4 || doubled[2] != 6 { - t.Errorf("expected [2, 4, 6], got %v", doubled) - } -} - -func TestMapTypeConversion(t *testing.T) { - nums := []int{1, 2, 3} - strs := Map(nums, func(n int) string { return string(rune('a' + n - 1)) }) - if strs[0] != "a" || strs[1] != "b" || strs[2] != "c" { - t.Errorf("expected [a, b, c], got %v", strs) - } -} - -func TestContains(t *testing.T) { - nums := []int{1, 2, 3} - if !Contains(nums, 2) { - t.Error("expected to contain 2") - } - if Contains(nums, 99) { - t.Error("expected not to contain 99") - } -} - -func TestAny(t *testing.T) { - nums := []int{1, 2, 3, 4, 5} - if !Any(nums, func(n int) bool { return n > 4 }) { - t.Error("expected any > 4") - } - if Any(nums, func(n int) bool { return n > 10 }) { - t.Error("expected none > 10") - } -} -- cgit v1.3