lunchctl 0.2.2

Library for convenient management of background services and startup items in macOS.
Documentation
#![allow(clippy::print_stdout)]

use lunchctl::{LaunchAgentBuilder, LaunchControllable};
use std::thread;
use std::time::Duration;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let timestamp = std::time::SystemTime::now()
        .duration_since(std::time::UNIX_EPOCH)?
        .as_secs();
    let label = format!("co.myrt.lunchctl.builder.{timestamp}");

    let agent = LaunchAgentBuilder::default()
        .label(label)
        .arg("/usr/bin/tail".into())
        .arg("-f".into())
        .arg("/dev/null".into())
        .keep_alive(true)
        .run_at_load(true)
        .build()?;

    println!("Writing plist to {}", agent.path().display());
    agent.write()?;

    println!("Bootstrapping '{}'", agent.label);
    agent.bootstrap()?;

    thread::sleep(Duration::from_millis(300));
    println!("Is running: {}", agent.is_running()?);

    println!("Booting out '{}'", agent.label);
    agent.boot_out()?;

    println!("Removing plist {}", agent.path().display());
    agent.remove()?;

    Ok(())
}