use std::sync::Arc; use assets::Assets; use dock::TAB_BAR_HEIGHT; use gpui::*; use gpui_component::theme; use gpui_platform::application; fn main() { // Initialize logging tracing_subscriber::fmt::init(); application() .with_assets(Assets) .with_http_client(Arc::new(reqwest_client::ReqwestClient::new())) .run(move |cx| { // Set app identity cx.set_app_identity("su.reya.signed", "Signed"); // Initialize components gpui_component::init(cx); // Initialize the dock (registers the panel registry used to // deserialize persisted layouts). dock::init(cx); // Initialize theme theme::init(cx); // Install the shared image cache so avatars can be freed when // their views close, instead of staying in memory forever. workspace::image_cache::init(cx); // Initialize backend and stores (connects relays, restores session) std::fs::create_dir_all(paths::nostr_dir()).ok(); signed_state::init(paths::nostr_dir(), cx); // Local git clone cache for browsing repository contents. std::fs::create_dir_all(paths::repos_dir()).ok(); signed_state::GitStore::set_global(paths::repos_dir().clone(), cx); // Set up the window options let bounds = Bounds::centered(None, size(px(1120.0), px(750.0)), cx); // The dock's tab bar acts as the window title bar: the app owns // title-bar dragging (via `start_window_move` on the tab bar), so // AppKit must not treat the top strip as a native drag region. let opts = WindowOptions { window_background: WindowBackgroundAppearance::Opaque, window_decorations: Some(WindowDecorations::Client), window_bounds: Some(WindowBounds::Windowed(bounds)), window_min_size: Some(size(px(960.0), px(640.0))), kind: WindowKind::Normal, app_id: Some("Signed".to_owned()), titlebar: Some(TitlebarOptions { title: Some(SharedString::new_static("Signed")), // AppKit's traffic-light buttons are 14 pt tall; offset them so their vertical center matches the tab bar. traffic_light_position: Some(point( px(9.0), px(TAB_BAR_HEIGHT / px(2.) - 14. / 2.), )), appears_transparent: true, }), app_owns_titlebar_drag: true, ..Default::default() }; cx.spawn(async move |cx| { cx.open_window(opts, workspace::root).ok(); }) .detach(); // Bring the app to the foreground cx.activate(true); }); }