mod application; mod cli; mod config; mod core; mod i18n; mod ui; mod window; use clap::Parser; use glib::ExitCode; use gtk::prelude::*; use application::DriftwoodApplication; use config::{APP_ID, GSETTINGS_SCHEMA_DIR}; fn main() -> ExitCode { // Point GSettings at our compiled schema directory (dev builds). // SAFETY: Called before any threads are spawned, at program start. unsafe { std::env::set_var("GSETTINGS_SCHEMA_DIR", GSETTINGS_SCHEMA_DIR); } // Parse CLI arguments let parsed = cli::Cli::parse(); // If a subcommand was given, run in CLI mode (no GUI) if let Some(command) = parsed.command { // Initialize GTK minimally for GSettings access gtk::init().expect("Failed to initialize GTK"); return cli::run_command(command); } // Otherwise, launch the full GUI application gio::resources_register_include!("driftwood.gresource") .expect("Failed to register resources"); let app = DriftwoodApplication::new(APP_ID, &gio::ApplicationFlags::empty()); app.run() }