ix-daemon 0.1.0

Global per-user daemon for Ixchel IPC, sync queueing, and single-writer enforcement
Documentation
use clap::Parser;
use ix_daemon::{DEFAULT_IDLE_TIMEOUT_MS, DEFAULT_SOCKET_PATH, Server};
use std::process::ExitCode;

#[derive(Parser)]
#[command(name = "ixcheld", about = "Ixchel daemon for IPC and background sync")]
struct Args {
    #[arg(long, default_value = DEFAULT_SOCKET_PATH)]
    socket: String,

    #[arg(long, default_value_t = DEFAULT_IDLE_TIMEOUT_MS, help = "Idle timeout in milliseconds (0 to disable)")]
    idle_timeout: u64,
}

#[tokio::main]
async fn main() -> ExitCode {
    tracing_subscriber::fmt()
        .with_env_filter(
            tracing_subscriber::EnvFilter::from_default_env()
                .add_directive(tracing::Level::INFO.into()),
        )
        .init();

    let args = Args::parse();
    let server = Server::with_idle_timeout(&args.socket, args.idle_timeout);

    tracing::info!("Starting ixcheld with socket: {}", args.socket);

    if let Err(e) = server.run().await {
        tracing::error!("Server error: {}", e);
        return ExitCode::from(1);
    }

    ExitCode::SUCCESS
}