Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Overhaul dependencies and features #208

Merged
merged 58 commits into from
Apr 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
e9c8047
Remove lazy_static dependency, add once_cell
REALERvolker1 Apr 9, 2024
c42b405
Remove unused tokio features
REALERvolker1 Apr 9, 2024
ea88f72
Group dependencies
REALERvolker1 Apr 9, 2024
d15e45e
Remove strum dependency
REALERvolker1 Apr 9, 2024
d3223db
Minimize derive_more required features
REALERvolker1 Apr 9, 2024
b8ca184
remove dependency on futures, use std::future
REALERvolker1 Apr 9, 2024
0c867a4
Rename feature async-net to async-lite
REALERvolker1 Apr 9, 2024
7ece9af
Add missing docs
REALERvolker1 Apr 9, 2024
70ac716
remove async_trait dependency
REALERvolker1 Apr 9, 2024
a0bd1b6
Dependency cleaning
REALERvolker1 Apr 9, 2024
fc6f1e5
Change default release opt level to 3
REALERvolker1 Apr 9, 2024
bf653f6
Add ahash as a potential hashmap perf improvement
REALERvolker1 Apr 9, 2024
a4b5f8c
More dependency shenanigans
REALERvolker1 Apr 9, 2024
c1269dd
Switch to fixed versions
REALERvolker1 Apr 9, 2024
0401161
Refactor "stupid hack"
REALERvolker1 Apr 9, 2024
e016579
Change event set to a vec for cheaper iteration
REALERvolker1 Apr 9, 2024
2985bdf
Refactor event parser logic
REALERvolker1 Apr 9, 2024
33dd3f3
Remove ahash dependency
REALERvolker1 Apr 9, 2024
e2bb5a0
Use a Boxed slice rather than a Vec for events
REALERvolker1 Apr 9, 2024
b35f39b
Remove strum
REALERvolker1 Apr 9, 2024
94b1dd5
Refactor Address formatting
REALERvolker1 Apr 9, 2024
2b76a2f
replace std::fmt::Display impl with derive_more
REALERvolker1 Apr 10, 2024
8389d4c
replace boxed slice with array for events
REALERvolker1 Apr 10, 2024
3077f71
remove doc comment dependency (#61)
REALERvolker1 Apr 10, 2024
a6b72ef
impl derive_more::Display on HyprError
REALERvolker1 Apr 10, 2024
bc24c6c
impl TryFrom<i32> for WorkspaceType to fix panic
REALERvolker1 Apr 10, 2024
ef0227a
reorganize Address methods, derive Display
REALERvolker1 Apr 10, 2024
eadcf09
Clean up wording of panics
REALERvolker1 Apr 10, 2024
e9c4e3b
Add convenience traits to public structs for API
REALERvolker1 Apr 10, 2024
9d969f0
Add try_from impls for integer types
REALERvolker1 Apr 10, 2024
b03e08f
Remove, or revise descriptions of several panics
REALERvolker1 Apr 10, 2024
1d8db10
Refactor socket path function to only run once
REALERvolker1 Apr 10, 2024
c07052d
Remove dependency on hex
REALERvolker1 Apr 10, 2024
77fa63d
Box the events slice, remove unused imports
REALERvolker1 Apr 10, 2024
aadd360
Switch to event parser v2
REALERvolker1 Apr 10, 2024
e02fb2b
Modify socket path code to address perf penalties
REALERvolker1 Apr 10, 2024
3376c67
Tweak error handling
REALERvolker1 Apr 11, 2024
1318937
Replace BTreeSet with HashSet, potential perf gain
REALERvolker1 Apr 11, 2024
fa4c28e
Add ahash again -- noticeable perf difference
REALERvolker1 Apr 11, 2024
8cb0b4f
Remove more panics
REALERvolker1 Apr 11, 2024
a070f3e
Create hypr_err macro
REALERvolker1 Apr 11, 2024
582461b
Update MSRV
REALERvolker1 Apr 11, 2024
e83cae3
Move examples into separate subdirectories
REALERvolker1 Apr 11, 2024
4c74895
Revise potential dual imports
REALERvolker1 Apr 11, 2024
d03102c
Remove event parser v1
REALERvolker1 Apr 11, 2024
fad2afe
look at dispatch function, remove HashSetExt
REALERvolker1 Apr 11, 2024
7fc16ef
Remove deprecated dispatchers
REALERvolker1 Apr 11, 2024
bf0b92d
Switch to derive_more::Display for more things
REALERvolker1 Apr 11, 2024
5d0b65c
Update Cargo.lock
REALERvolker1 Apr 13, 2024
53c62a9
Remove unsafe send+sync impls
REALERvolker1 Apr 13, 2024
845eb3d
Remove unnecessary lifetime declaration
REALERvolker1 Apr 13, 2024
e3d7417
Replace env queries with thread-local storage
REALERvolker1 Apr 13, 2024
8c9ce21
very minor tweaks
REALERvolker1 Apr 13, 2024
a17d658
Add unsafe impls again, under a feature flag
REALERvolker1 Apr 16, 2024
08f02c7
only check socket paths once
REALERvolker1 Apr 16, 2024
c7a27e2
Update deps, fix merge conflict
REALERvolker1 Apr 20, 2024
6aa7d96
Merge branch 'master' into master
yavko Apr 20, 2024
12e7025
Fix terminology in unreachables, remove dead code
REALERvolker1 Apr 22, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
797 changes: 407 additions & 390 deletions Cargo.lock

Large diffs are not rendered by default.

67 changes: 48 additions & 19 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,23 @@ author.workspace = true
repository.workspace = true
keywords.workspace = true
categories.workspace = true
rust-version = "1.75.0"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[package.metadata.nix]
build = true

[profile.release]
opt-level = "z"
opt-level = 3
strip = true
lto = true

[workspace]
members = ["hyprland-macros"]
members = [
"examples/almost_everything",
"examples/almost_everything_async",
"hyprland-macros",
]

[workspace.package]
version = "0.3.13"
Expand All @@ -33,27 +38,48 @@ authors = ["yavko <[email protected]>"]

[dependencies]
hyprland-macros = { path = "hyprland-macros", version = "0.3.4" }
serde = {version = "1", features = ["derive"]}
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_repr = "0.1"
hex = "0.4"
tokio = { version = "1", features = ["full"], optional = true }
async-net = { version = "2", optional = true }
async-std = { version = "1", optional = true }
futures-lite = { version = "2", optional = true }
lazy_static = "1.4"
regex = "1.10"
async-trait = "0.1"
num-traits = "0.2"
doc-comment = "0.3"
paste = "1"
strum = { version = "0.26", features = ["derive"] }
derive_more = "0.99"
futures = "0.3"
tokio = { version = "1", features = [
"io-std",
"io-util",
"net",
], optional = true }
async-net = { version = "2.0", optional = true }
async-std = { version = "1.12", optional = true }
futures-lite = { version = "2.3", optional = true, default-features = false }
regex = { version = "1.10", default-features = false, features = [
"std",
"perf",
"unicode",
] }
num-traits = "0.2.18"
paste = "1.0.14"
derive_more = { version = "0.99", default-features = false, features = [
"display",
"constructor",
] }
once_cell = "1.19"
parking_lot = { version = "0.12", optional = true }
ahash = { version = "0.8", features = [
"std",
"no-rng",
"serde",
], optional = true, default-features = false }

[features]
default = ["listener", "dispatch", "data", "keyword", "config", "ctl", "tokio"]
async-net = ["dep:async-net", "dep:futures-lite"]
default = [
"listener",
"dispatch",
"data",
"keyword",
"config",
"ctl",
"tokio",
"ahash",
]
async-lite = ["dep:async-net", "dep:futures-lite"]
async-std = ["dep:async-std", "dep:futures-lite"]
tokio = ["dep:tokio"]
dispatch = []
Expand All @@ -63,3 +89,6 @@ keyword = []
config = ["dispatch", "keyword"]
listener = ["data", "dispatch"]
silent = []
parking_lot = ["dep:parking_lot", "once_cell/parking_lot", "tokio?/parking_lot"]
ahash = ["dep:ahash"]
unsafe-impl = []
14 changes: 14 additions & 0 deletions examples/almost_everything/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
name = "almost_everything"
edition = "2021"
version.workspace = true
license.workspace = true
repository.workspace = true
keywords.workspace = true
categories.workspace = true
authors.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
hyprland = { version = "0.3.13", path = "../..", default-features = false, features = ["config", "ctl", "data", "dispatch", "keyword", "listener", "async-lite"] }
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ fn main() -> hyprland::Result<()> {
println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace: {work:#?}");

// Create a event listener
let mut event_listener = EventListener::new();
let mut event_listener = EventListener::new()?;

// Shows when active window changes
event_listener.add_active_window_change_handler(|data, _| {
Expand Down
98 changes: 0 additions & 98 deletions examples/almost_everything_async.rs

This file was deleted.

20 changes: 20 additions & 0 deletions examples/almost_everything_async/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[package]
name = "almost_everything_async"
edition = "2021"
version.workspace = true
license.workspace = true
repository.workspace = true
keywords.workspace = true
categories.workspace = true
authors.workspace = true

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
hyprland = { version = "0.3.13", path = "../.." }
tokio = { version = "1", features = [
"macros",
"io-std",
"rt-multi-thread",
"time",
] }
108 changes: 108 additions & 0 deletions examples/almost_everything_async/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
use hyprland::data::{Animations, Client, Clients, Monitors, Workspace};
use hyprland::event_listener::AsyncEventListener;
use hyprland::keyword::*;
use hyprland::prelude::*;
//use hyprland::shared::WorkspaceType;
use hyprland::{async_closure, dispatch::*};

fn main() -> hyprland::Result<()> {
// It is always a good practice to configure your runtime to your specifications
tokio::runtime::Builder::new_multi_thread().enable_io().enable_time().worker_threads(1).build()?.block_on(async move {
// We can call dispatchers with the dispatch function!

// Here we are telling hyprland to open kitty using the dispatch macro!
hyprland::dispatch!(async; Exec, "kitty").await?;

// Here we are adding a keybinding to Hyprland using the bind macro!
hyprland::bind!(async; SUPER, Key, "i" => ToggleFloating, None).await?;

// Here we are moving the cursor to the top left corner! We can also just use the Dispatch
// struct!
Dispatch::call_async(DispatchType::MoveCursorToCorner(Corner::TopLeft)).await?;

let border_size = match Keyword::get_async("general:border_size").await?.value {
OptionValue::Int(i) => i,
_ => panic!("border size can only be a int"),
};
println!("{border_size}");

// Here we change a keyword, yes its a dispatcher don't complain
Keyword::set_async("general:border_size", border_size * 2).await?;
// get all monitors
let monitors = Monitors::get_async().await?;
// and the active window
let win = Client::get_active_async().await?;
// and all open windows
let clients = Clients::get_async().await?;
// and the active workspace
let work = Workspace::get_active_async().await?;
// and printing them all out!
println!("monitors: {monitors:#?},\nactive window: {win:#?},\nclients {clients:#?}\nworkspace:{work:#?}");
let animations = Animations::get_async().await?;
println!("{animations:#?}");
// Create a event listener
let mut event_listener = AsyncEventListener::new();

//This changes the workspace to 5 if the workspace is switched to 9
//this is a performance and mutable state test
// event_listener.add_workspace_change_handler(async_closure! {|id, state| {
// if id == WorkspaceType::Regular('9'.to_string()) {
// *state.workspace = '2'.to_string();
// }
// }});
/*
event_listener.add_workspace_change_handler(|id, state| {
Box::pin(async move {
if id == WorkspaceType::Regular('9'.to_string()) {
*state.workspace = '2'.to_string();
}
})
});

// This makes it so you can't turn on fullscreen lol
event_listener.add_fullscreen_state_change_handler(async_closure! {|fstate, state| {
if fstate {
*state.fullscreen = false;
}
}});
// Makes a monitor unfocusable
event_listener.add_active_monitor_change_handler(async_closure! {|data, state| {
let hyprland::event_listener::MonitorEventData{ monitor_name, .. } = data;

if monitor_name == *"DP-1".to_string() {
*state.monitor = "eDP-1".to_string()
}
}});
*/
// add event, yes functions and closures both work!

event_listener.add_workspace_change_handler(
async_closure! { move |id| println!("workspace changed to {id:#?}")},
);
event_listener.add_active_window_change_handler(
async_closure! { move |data| println!("window changed to {data:#?}")},
);
// Waybar example
// event_listener.add_active_window_change_handler(|data| {
// use hyprland::event_listener::WindowEventData;
// let string = match data {
// Some(WindowEventData(class, title)) => format!("{class}: {title}"),
// None => "".to_string()
// };
// println!(r#"{{"text": "{string}", class: "what is this?"}}"#);
// });

// reset your border size back to normal
tokio::spawn(async move {
tokio::time::sleep(std::time::Duration::from_secs(5)).await;
println!("Resetting border size!");
Keyword::set_async("general:border_size", border_size).await?;
Ok::<_, hyprland::shared::HyprError>(())
});

// and execute the function
// here we are using the blocking variant
// but there is a async version too
event_listener.start_listener_async().await
})
}
Loading
Loading