package rgb import ( "fmt" "os" "github.com/spf13/cobra" intdevice "github.com/wobkey/rgb/internal/device" "github.com/wobkey/rgb/internal/rgb" "github.com/wobkey/rgb/internal/via" ) var effectName string func NewEffectCmd() *cobra.Command { return &cobra.Command{ Use: "effect ", Short: "Set RGB effect", Long: "Set the RGB lighting effect on the connected keyboard.", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { proto, kb, err := OpenDevice() if err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } defer proto.Close() if err := proto.EnableHandshake(); err != nil { fmt.Fprintf(os.Stderr, "Handshake failed: %v\n", err) os.Exit(1) } e, err := rgb.ParseEffect(args[0]) if err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } availEffects := GetAvailableEffects(kb) if availEffects != nil { found := false for _, ef := range availEffects { if ef == e { found = true break } } if !found { fmt.Fprintf(os.Stderr, "Warning: effect %q may not be supported by %s\n", args[0], kb.Name) } } if err := proto.SetValue(via.RGBLight, uint8(rgb.Mode), uint8(e)); err != nil { fmt.Fprintf(os.Stderr, "Error setting effect: %v\n", err) os.Exit(1) } fmt.Printf("Effect set to %q\n", args[0]) }, } } func GetAvailableEffects(kb intdevice.Keyboard) []rgb.Effect { if kb.Name == "Wobkey Impact 80" { return []rgb.Effect{ rgb.Static, rgb.Breathing, rgb.Rainbow, rgb.RainbowWave, rgb.Snake, rgb.Tail, rgb.Gradient, } } return nil }