use crate::theme::model::Mode;
pub fn detect() -> Mode {
if let Ok(forced) = std::env::var("COLORANT_MODE") {
match forced.to_ascii_lowercase().as_str() {
"dark" => return Mode::Dark,
"light" => return Mode::Light,
_ => {}
}
}
#[cfg(target_os = "macos")]
{
use std::process::Command;
match Command::new("defaults")
.args(["read", "-g", "AppleInterfaceStyle"])
.output()
{
Ok(out) if out.status.success() => {
let s = String::from_utf8_lossy(&out.stdout);
if s.trim().eq_ignore_ascii_case("Dark") {
Mode::Dark
} else {
Mode::Light
}
}
Ok(out) => {
let stderr = String::from_utf8_lossy(&out.stderr);
if stderr.contains("does not exist") {
Mode::Light } else {
Mode::Unknown }
}
Err(_) => Mode::Unknown,
}
}
#[cfg(not(target_os = "macos"))]
{
Mode::Unknown
}
}