mod capture; mod cast_session; mod config; mod model; mod niri_ipc; mod publish; mod supervisor; mod window_registry; use anyhow::Result; use clap::Parser; use tracing::info; use crate::config::Config; #[tokio::main] async fn main() -> Result<()> { tracing_subscriber::fmt::init(); let config = Config::parse().resolve()?; capture::init()?; let publisher = publish::Publisher::new(config.snapshot_dir.clone())?; let server_publisher = publisher.clone(); let server_socket = config.socket.clone(); std::thread::Builder::new() .name("castd-api".into()) .spawn(move || { if let Err(error) = server_publisher.serve(&server_socket) { tracing::error!(?error, "publisher server stopped"); } })?; info!( fps = %config.fps, max_width = config.max_width, "niri-window-castd starting" ); supervisor::run(config, publisher).await }