From dfd1e8854333d9ecdd62ca0cd03c6408e4ef98bd Mon Sep 17 00:00:00 2001 From: cyber-sushi Date: Sun, 23 Jun 2024 22:01:03 +0200 Subject: [PATCH] Added per application bindings for Niri compositor --- src/active_client.rs | 22 ++++++++++++++++++++++ src/udev_monitor.rs | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/active_client.rs b/src/active_client.rs index e16e377..0ba46b7 100644 --- a/src/active_client.rs +++ b/src/active_client.rs @@ -55,6 +55,28 @@ pub async fn get_active_window(environment: &Environment, config: &Vec) Client::Default } } + "niri" => { + let query = Command::new("niri") + .args(["msg", "-j", "focused-window"]) + .output() + .unwrap(); + if let Ok(reply) = serde_json::from_str::( + std::str::from_utf8(query.stdout.as_slice()).unwrap(), + ) { + let active_window = + Client::Class(reply["app_id"].to_string().replace("\"", "")); + if let Some(_) = config + .iter() + .find(|&x| x.associations.client == active_window) + { + active_window + } else { + Client::Default + } + } else { + Client::Default + } + } "KDE" => { let (user, running_as_root) = if let Ok(sudo_user) = environment.sudo_user.clone() { diff --git a/src/udev_monitor.rs b/src/udev_monitor.rs index 7c0556a..2ab2fb1 100644 --- a/src/udev_monitor.rs +++ b/src/udev_monitor.rs @@ -184,7 +184,7 @@ fn set_environment() -> Environment { env::set_var("XDG_SESSION_TYPE", "wayland") } - let supported_compositors = vec!["Hyprland", "sway", "KDE"] + let supported_compositors = vec!["Hyprland", "sway", "KDE", "niri"] .into_iter() .map(|str| String::from(str)) .collect::>();