use brewdiff;
use std::fmt::Write;
use std::path::Path;
struct StdoutWriter;
impl Write for StdoutWriter {
fn write_str(&mut self, s: &str) -> std::fmt::Result {
print!("{}", s);
Ok(())
}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Brewdiff Example - Comparing Homebrew state with nix-darwin profile\n");
let current_profile = Path::new("/run/current-system");
if !current_profile.exists() {
eprintln!("No nix-darwin system found at /run/current-system");
eprintln!("This example requires a nix-darwin system with Homebrew configuration");
return Ok(());
}
println!("📊 Current Homebrew State:");
match brewdiff::get_current_homebrew_state() {
Ok(state) => {
println!(" Formulae: {} installed", state.installed_brews.len());
println!(" Casks: {} installed", state.installed_casks.len());
println!(" Taps: {} configured", state.installed_taps.len());
}
Err(e) => {
println!(" Error detecting Homebrew state: {}", e);
}
}
println!("\n📋 Nix-Darwin Intent:");
match brewdiff::extract_nix_darwin_intent(current_profile) {
Ok(intent) => {
println!(" Formulae: {} declared", intent.brews.len());
println!(" Casks: {} declared", intent.casks.len());
println!(" Taps: {} declared", intent.taps.len());
}
Err(e) => {
println!(" Error extracting intent: {}", e);
return Ok(());
}
}
println!("\n🔄 Differences (current vs intended):");
let mut writer = StdoutWriter;
let lines = brewdiff::write_homebrew_diffln(
&mut writer,
Path::new("/run/current-system"),
current_profile,
)?;
if lines == 3 {
println!(" Your Homebrew installation matches the nix-darwin configuration!");
}
Ok(())
}