diff --git a/crates/k-launcher/src/client.rs b/crates/k-launcher/src/client.rs new file mode 100644 index 0000000..5975aef --- /dev/null +++ b/crates/k-launcher/src/client.rs @@ -0,0 +1,10 @@ +use std::io::Write; + +pub fn send_show() -> Result<(), Box> { + let runtime_dir = std::env::var("XDG_RUNTIME_DIR") + .unwrap_or_else(|_| "/run/user/1000".to_string()); + let socket_path = format!("{runtime_dir}/k-launcher.sock"); + let mut stream = std::os::unix::net::UnixStream::connect(&socket_path)?; + stream.write_all(b"show\n")?; + Ok(()) +} diff --git a/crates/k-launcher/src/main.rs b/crates/k-launcher/src/main.rs index d15b04e..107b57b 100644 --- a/crates/k-launcher/src/main.rs +++ b/crates/k-launcher/src/main.rs @@ -1,3 +1,5 @@ +mod client; + use std::sync::Arc; use k_launcher_kernel::Kernel; @@ -10,8 +12,25 @@ use plugin_calc::CalcPlugin; use plugin_cmd::CmdPlugin; use plugin_files::FilesPlugin; -fn main() -> iced::Result { +fn main() { tracing_subscriber::fmt::init(); + + let args: Vec = std::env::args().collect(); + if args.get(1).map(|s| s.as_str()) == Some("show") { + if let Err(e) = client::send_show() { + eprintln!("error: failed to send show command: {e}"); + std::process::exit(1); + } + return; + } + + if let Err(e) = run_ui() { + eprintln!("error: UI: {e}"); + std::process::exit(1); + } +} + +fn run_ui() -> iced::Result { let cfg = k_launcher_config::load(); let launcher = Arc::new(UnixAppLauncher::new()); let frecency = FrecencyStore::load(); diff --git a/packaging/systemd/k-launcher.service b/packaging/systemd/k-launcher.service new file mode 100644 index 0000000..2731b69 --- /dev/null +++ b/packaging/systemd/k-launcher.service @@ -0,0 +1,11 @@ +[Unit] +Description=k-launcher command palette daemon +After=graphical-session.target + +[Service] +Type=simple +ExecStart=/usr/bin/k-launcher +Restart=on-failure + +[Install] +WantedBy=graphical-session.target diff --git a/packaging/systemd/k-launcher.socket b/packaging/systemd/k-launcher.socket new file mode 100644 index 0000000..adace73 --- /dev/null +++ b/packaging/systemd/k-launcher.socket @@ -0,0 +1,8 @@ +[Unit] +Description=k-launcher IPC socket + +[Socket] +ListenStream=%t/k-launcher.sock + +[Install] +WantedBy=sockets.target