//go:build darwin package platform import ( "encoding/json" "fmt" "os" "os/exec" "path/filepath" ) func OpenSettings() error { return exec.Command("open", "x-apple.systempreferences:com.apple.settings.Storage").Run() } func GetSystemInfo() (*SystemInfo, error) { // Structs for parsing system_profiler JSON type HardwareItem struct { MachineName string `json:"machine_name"` ChipType string `json:"chip_type"` PhysicalMemory string `json:"physical_memory"` } type SoftwareItem struct { OSVersion string `json:"os_version"` } type SystemProfile struct { Hardware []HardwareItem `json:"SPHardwareDataType"` Software []SoftwareItem `json:"SPSoftwareDataType"` } cmd := exec.Command("system_profiler", "SPHardwareDataType", "SPSoftwareDataType", "-json") output, err := cmd.Output() if err != nil { return nil, err } var profile SystemProfile if err := json.Unmarshal(output, &profile); err != nil { return nil, err } info := &SystemInfo{ Model: "Unknown", Chip: "Unknown", Memory: "Unknown", OS: "Unknown", } if len(profile.Hardware) > 0 { info.Model = profile.Hardware[0].MachineName info.Chip = profile.Hardware[0].ChipType info.Memory = profile.Hardware[0].PhysicalMemory } if len(profile.Software) > 0 { info.OS = profile.Software[0].OSVersion } return info, nil } func EmptyTrash() error { home, err := os.UserHomeDir() if err != nil { return err } trashPath := filepath.Join(home, ".Trash") entries, err := os.ReadDir(trashPath) if err != nil { return err } for _, entry := range entries { itemPath := filepath.Join(trashPath, entry.Name()) os.RemoveAll(itemPath) } return nil } func GetCachePath() (string, error) { home, err := os.UserHomeDir() if err != nil { return "", err } return filepath.Join(home, "Library", "Caches"), nil } func GetDockerPath() (string, error) { dockerPath, err := exec.LookPath("docker") if err != nil { // Try common locations commonPaths := []string{ "/usr/local/bin/docker", "/opt/homebrew/bin/docker", "/Applications/Docker.app/Contents/Resources/bin/docker", } for _, p := range commonPaths { if _, e := os.Stat(p); e == nil { dockerPath = p return dockerPath, nil } } } if dockerPath != "" { return dockerPath, nil } return "", fmt.Errorf("docker not found") } func OpenBrowser(url string) error { return exec.Command("open", url).Start() }