From f67cf6422d5f5837511103199490780a9a107441 Mon Sep 17 00:00:00 2001 From: Panic Date: Mon, 8 Dec 2025 20:01:59 -0700 Subject: [PATCH] feat(persona): Set RGB on personal rig --- cmd/persona/set.go | 8 ++++++++ cmd/root.go | 2 +- go.mod | 1 + go.sum | 2 ++ internal/config/types.go | 9 +++++---- internal/platform/interface.go | 4 ++++ internal/platform/personal_rig.go | 32 +++++++++++++++++++++++++++++++ 7 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 internal/platform/personal_rig.go diff --git a/cmd/persona/set.go b/cmd/persona/set.go index 7c87114..2da764d 100644 --- a/cmd/persona/set.go +++ b/cmd/persona/set.go @@ -6,6 +6,7 @@ import ( "github.com/Print-and-Panic/panic-cli/internal/config" "github.com/Print-and-Panic/panic-cli/internal/git" + "github.com/Print-and-Panic/panic-cli/internal/platform" "github.com/Print-and-Panic/panic-cli/internal/system" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -79,6 +80,13 @@ func setPersona(persona config.PersonaConfig) error { fmt.Printf("❌ Failed to set KDE Theme: %v\n", err) } + if sc, ok := system.CurrentSystem.(platform.StudioController); ok && persona.StudioPreset != "" { + err = sc.ApplyStudioPreset(persona.StudioPreset) + if err != nil { + fmt.Printf("❌ Failed to apply Studio Preset: %v\n", err) + } + } + return nil } diff --git a/cmd/root.go b/cmd/root.go index b1266fa..e2505fc 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -23,7 +23,7 @@ var RootCmd = &cobra.Command{ system.CurrentSystem = &platform.MockSystem{} fmt.Println("⚠️ Running in DRY-RUN mode. No changes will be applied.") } else { - system.CurrentSystem = &platform.LinuxKDE{} + system.CurrentSystem = &platform.PersonalRig{} } }, } diff --git a/go.mod b/go.mod index 4995574..dd674bf 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( cloud.google.com/go/auth v0.17.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/compute/metadata v0.9.0 // indirect + github.com/Alatec/go-openrgb v0.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-logr/logr v1.4.3 // indirect diff --git a/go.sum b/go.sum index 0ac704e..473b836 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,8 @@ cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIi cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +github.com/Alatec/go-openrgb v0.1.0 h1:RR3a7YGQwKM3crjEWmSiKR3eshwV357m+yQS7tlWYUg= +github.com/Alatec/go-openrgb v0.1.0/go.mod h1:0yk6Bq2hOY9icPj/zRkywt431BtzjFee2FiTH4P53mw= github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/internal/config/types.go b/internal/config/types.go index dab928b..3d02edf 100644 --- a/internal/config/types.go +++ b/internal/config/types.go @@ -3,10 +3,11 @@ package config var AppConfig Config type PersonaConfig struct { - GitName string `mapstructure:"git_name"` - GitEmail string `mapstructure:"git_email"` - KdeTheme string `mapstructure:"kde_theme"` - Wallpaper string `mapstructure:"wallpaper"` + GitName string `mapstructure:"git_name"` + GitEmail string `mapstructure:"git_email"` + KdeTheme string `mapstructure:"kde_theme"` + Wallpaper string `mapstructure:"wallpaper"` + StudioPreset string `mapstructure:"studio_preset"` } type PersonaManagement struct { diff --git a/internal/platform/interface.go b/internal/platform/interface.go index a65a334..fd0e2e7 100644 --- a/internal/platform/interface.go +++ b/internal/platform/interface.go @@ -17,3 +17,7 @@ type System interface { GitIdentityProvider ThemeHandler } + +type StudioController interface { + ApplyStudioPreset(string) error +} diff --git a/internal/platform/personal_rig.go b/internal/platform/personal_rig.go new file mode 100644 index 0000000..9fb7d3f --- /dev/null +++ b/internal/platform/personal_rig.go @@ -0,0 +1,32 @@ +package platform + +import ( + "fmt" + + "github.com/Alatec/go-openrgb" +) + +var _ StudioController = (*PersonalRig)(nil) + +type PersonalRig struct { + LinuxKDE +} + +func (p *PersonalRig) ApplyStudioPreset(persona string) error { + client := openrgb.NewOpenRGBClient() + client.Connect("localhost:6742") + defer client.Disconnect() + + profiles, err := client.ListProfiles() + if err != nil { + return err + } + + for _, profile := range profiles { + if profile == persona { + return client.LoadProfile(profile) + } + } + + return fmt.Errorf("profile '%s' not found", persona) +}