Files
neo64fetch/src/helpers/wm.rs
2026-01-07 22:35:41 -05:00

43 lines
1.6 KiB
Rust

// https://github.com/fastfetch-cli/fastfetch/blob/dev/src/detection/displayserver/displayserver_apple.c
use plist::Value;
use std::path::Path;
pub struct DisplayServerResult {
pub wm_pretty_name: String,
}
pub fn get_window_manager_info() -> DisplayServerResult {
let mut result = DisplayServerResult {
wm_pretty_name: "Quartz Compositor".to_string(),
};
if cfg!(target_os = "macos") {
let plist_path = "/System/Library/CoreServices/WindowManager.app/Contents/version.plist";
if Path::new(plist_path).exists()
&& let Ok(value) = Value::from_file(plist_path)
&& let Some(dict) = value.as_dictionary()
&& let Some(raw_version) = dict.get("SourceVersion").and_then(|v| v.as_string())
{
// Apple format: AAAABBBCCDDDDDD (Major, Minor, Patch, Build)
if raw_version.len() >= 8 && raw_version.chars().all(|c| c.is_numeric()) {
let major = raw_version[..raw_version.len() - 12].trim_start_matches('0');
let minor = raw_version[raw_version.len() - 12..raw_version.len() - 9]
.trim_start_matches('0');
let patch = raw_version[raw_version.len() - 9..raw_version.len() - 7]
.trim_start_matches('0');
let m = if minor.is_empty() { "0" } else { minor };
let p = if patch.is_empty() { "0" } else { patch };
result.wm_pretty_name = format!("Quartz Compositor {}.{}.{}", major, m, p);
} else {
result.wm_pretty_name = format!("Quartz Compositor {}", raw_version);
}
}
}
result
}