package osstyle import ( "github.com/pkg/errors" "log" "os/exec" "strings" ) const ( errorMessageIndicatingInLightMode = `The domain/default pair of (kCFPreferencesAnyApplication, AppleInterfaceStyle) does not exist` ) // Usage: https://stefan.sofa-rockers.org/2018/10/23/macos-dark-mode-terminal-vim/ func darwinGetOSColorScheme() ColorScheme { d, err := exec.Command("defaults", "read", "-g", "AppleInterfaceStyle").Output() if err != nil { var exitErr *exec.ExitError if errors.As(err, &exitErr) { stdErr := string(exitErr.Stderr) if strings.Contains(stdErr, errorMessageIndicatingInLightMode) { log.Printf("error message indicates that macOS is in light mode") return ColorSchemeLightMode } log.Printf("cannot get current OS color scheme: %v - stderr: [%v]", err, stdErr) } else { log.Printf("cannot get current OS color scheme: %v", err) } return ColorSchemeUnknown } switch string(d) { case "Dark\n": return ColorSchemeDarkMode case "Light\n": return ColorSchemeLightMode } return ColorSchemeUnknown } func init() { getOSColorScheme = darwinGetOSColorScheme }