use hyprland::data::{Client, Clients, Monitors, Workspace};
use hyprland::dispatch::*;
use hyprland::event_listener::EventListenerMutable as EventListener;
use hyprland::keyword::*;
use hyprland::prelude::*;
use hyprland::shared::WorkspaceType;
fn main() -> hyprland::Result<()> {
hyprland::dispatch!(Exec, "kitty")?;
Dispatch::call(DispatchType::MoveCursorToCorner(Corner::TopLeft))?;
hyprland::bind!(SUPER, Key, "i" => ToggleFloating, None)?;
let border_size = match Keyword::get("general:border_size")?.value {
OptionValue::Int(i) => i,
_ => panic!("border size can only be a int"),
};
println!("{border_size}");
Keyword::set("general:border_size", border_size * 2)?;
let monitors = Monitors::get()?;
let win = Client::get_active()?;
let clients = Clients::get()?;
let work = Workspace::get_active()?;
println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace: {work:#?}");
let mut event_listener = EventListener::new();
event_listener.add_active_window_change_handler(|data, _| {
println!("{data:#?}");
});
event_listener.add_workspace_change_handler(|id, state| {
if id == WorkspaceType::Regular('9'.to_string()) {
state.active_workspace = WorkspaceType::Regular('2'.to_string());
}
});
event_listener.add_fullscreen_state_change_handler(|fstate, state| {
if fstate {
state.fullscreen_state = false;
}
});
event_listener.add_active_monitor_change_handler(|data, state| {
let hyprland::event_listener::MonitorEventData { monitor_name, .. } = data;
if monitor_name == *"DP-1".to_string() {
state.active_monitor = "eDP-1".to_string()
}
});
event_listener.add_workspace_change_handler(|id, _| println!("workspace changed to {id:#?}"));
event_listener.start_listener()
}