use anyhow::Result;
use clap::Parser;
#[derive(Parser, Debug)]
#[command(name = "phosphor", about = "A terminal & graphical DAW", version)]
struct Cli {
#[arg(long, conflicts_with = "gui")]
tui: bool,
#[arg(long, conflicts_with = "tui")]
gui: bool,
#[arg(long, default_value = "64")]
buffer_size: u32,
#[arg(long, default_value = "44100")]
sample_rate: u32,
#[arg(long)]
no_audio: bool,
#[arg(long)]
no_midi: bool,
}
fn main() -> Result<()> {
let cli = Cli::parse();
let config = phosphor_core::EngineConfig {
buffer_size: cli.buffer_size,
sample_rate: cli.sample_rate,
};
if cli.gui {
tracing_subscriber::fmt()
.with_env_filter(
tracing_subscriber::EnvFilter::try_from_default_env()
.unwrap_or_else(|_| tracing_subscriber::EnvFilter::new("info")),
)
.init();
tracing::info!(
"Phosphor v{} starting (buffer_size={}, sample_rate={})",
env!("CARGO_PKG_VERSION"),
cli.buffer_size,
cli.sample_rate,
);
phosphor_gui::run(config)
} else {
tracing_subscriber::fmt()
.with_env_filter(tracing_subscriber::EnvFilter::new("off"))
.init();
phosphor_tui::run(config, !cli.no_audio, !cli.no_midi)
}
}