From 605f31b6c216354f1daca5d917f0909076001126 Mon Sep 17 00:00:00 2001 From: r0r-5chach Date: Sun, 21 Jul 2024 20:58:56 +0100 Subject: [PATCH] utils --- .gitignore | 1 + Cargo.lock | 251 +++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 9 ++ src/config.rs | 0 src/lib.rs | 1 + src/main.rs | 2 + src/utils.rs | 18 +++ src/utils/color.rs | 51 +++++++++ src/utils/volume.rs | 60 ++++++++++ src/utils/workspace.rs | 40 +++++++ 10 files changed, 433 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/config.rs create mode 100644 src/lib.rs create mode 100644 src/main.rs create mode 100644 src/utils.rs create mode 100644 src/utils/color.rs create mode 100644 src/utils/volume.rs create mode 100644 src/utils/workspace.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..ff7f4ae --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,251 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad186efb764318d35165f1758e7dcef3b10628e26d41a44bc5550652e6804391" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "clap" +version = "4.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64acc1846d54c1fe936a78dc189c34e28d3f5afc348403f28ecf53660b9b8462" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8393d67ba2e7bfaf28a23458e4e2b543cc73a99595511eb207fdb8aede942" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bac35c6dafb060fd4d275d9a4ffae97917c13a6327903a8be2153cd964f7085" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b82cf0babdbd58558212896d1a4272303a57bdb245c2bf1147185fb45640e70" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "syn" +version = "2.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "yucky-utils" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "hex", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..e15d523 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "yucky-utils" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.86" +clap = { version = "4.5.9", features = ["derive"]} +hex = "0.4.3" diff --git a/src/config.rs b/src/config.rs new file mode 100644 index 0000000..e69de29 diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..b5614dd --- /dev/null +++ b/src/lib.rs @@ -0,0 +1 @@ +pub mod utils; diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..f79c691 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,2 @@ +fn main() { +} diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..e764a91 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,18 @@ +pub mod color; +pub mod volume; +pub mod workspace; + +pub fn update_eww_var(key: &str, value: &str) { + use std::process::Command; + + let _ = Command::new("eww") + .arg("update") + .arg(format!("{}={}", key, value)) + .spawn(); +} + +pub enum Direction { + Up, + Down, + Absolute, +} diff --git a/src/utils/color.rs b/src/utils/color.rs new file mode 100644 index 0000000..c33b335 --- /dev/null +++ b/src/utils/color.rs @@ -0,0 +1,51 @@ +use std::process::Command; + + +pub fn color_picker() { + use super::update_eww_var; + + let output = Command::new("hyprpicker") + .output().unwrap().stdout; + + let hex = String::from_utf8_lossy(&output).to_string(); + let rgb = Rgb::from_color_hex(&hex).get_compliment(); + + update_eww_var("chosen_text_color", &rgb.to_string()); + update_eww_var("color_code", &hex); + add_to_clipboard(&hex); + + std::process::exit(0); +} + +struct Rgb { + r: u8, + g: u8, + b: u8, +} +impl Rgb { + fn from_color_hex(color_hex: &str) -> Self { + Self { + r: hex::decode(color_hex.get(1..3).unwrap_or_else(|| "00")).unwrap()[0], + g: hex::decode(color_hex.get(3..5).unwrap_or_else(|| "00")).unwrap()[0], + b: hex::decode(color_hex.get(5..7).unwrap_or_else(|| "00")).unwrap()[0], + } + } + + fn get_compliment(&self) -> Self { + Self { + r: 255 - self.r, + g: 255 - self.g, + b: 255 - self.b, + } + } + + fn to_string(&self) -> String { + format!("'rgb({}, {}, {})'", self.r, self.g, self.b) + } +} + +fn add_to_clipboard(string: &str) { + let _ = Command::new("wl-copy") + .arg(string) + .spawn(); +} diff --git a/src/utils/volume.rs b/src/utils/volume.rs new file mode 100644 index 0000000..acbf77c --- /dev/null +++ b/src/utils/volume.rs @@ -0,0 +1,60 @@ +use std::process::Command; +use super::Direction; + +pub fn step(directon: Direction) { //onscroll + set(5, directon); +} + +pub fn toggle_mute(saved_volume: u8) { //onclick + use super::update_eww_var; + + let volume = get_current_value(); + set(saved_volume, Direction::Absolute); + update_eww_var("mute_save", &volume.to_string()); + + std::process::exit(0); +} + +pub fn get_current_icon() -> Level { //for path var in image (add to defpoll) + match get_current_value() { + value if value <= 0 => Level::Mute, + value if value <= 25 => Level::Low, + value if value <= 75 => Level::Mid, + _ => Level::High, + } +} + +pub fn get_current_value() -> u8 { //for value in circular-progrss (add to defpoll) + let value = Command::new("amixer") + .arg("sget").arg("Master") + .output().unwrap().stdout; + let value = String::from_utf8(value).unwrap(); + let value: Vec<&str> = value.split("[").collect(); + + value[3].trim().get(0..value.len()-3).unwrap().parse().unwrap() +} + + + +fn set(value: u8, directon: Direction) { + let mut value = value.to_string(); + value.push('%'); + + match directon { + Direction::Up => value.push('+'), + Direction::Down => value.push('-'), + Direction::Absolute => (), + } + + Command::new("amixer") + .arg("sset").arg("Master").arg(value).arg("> /dev/null") + .spawn(); +} + + +enum Level { + High, + Mid, + Low, + Mute, +} diff --git a/src/utils/workspace.rs b/src/utils/workspace.rs new file mode 100644 index 0000000..4ad93f9 --- /dev/null +++ b/src/utils/workspace.rs @@ -0,0 +1,40 @@ +use std::process::Command; + +use super::Direction; + +pub fn step(direction: Direction) { + set(1, direction); +} + +pub fn empty() { + set(0, Direction::Absolute); +} + +pub fn get_active() -> u8 { + let value = Command::new("hyprctl") + .arg("activeworkspace") + .output().unwrap().stdout; + + let value = String::from_utf8(value).unwrap(); + let value: Vec<&str> = value.split("(").collect(); + let value: Vec<&str> = value[1].split(")").collect(); + + value[0].parse().unwrap() +} + +fn set(id: u8, direction: Direction) { + let workspace_arg = match id { + 0 => "emptym", + _ => match direction { + Direction::Up => "m+1", + Direction::Down => "m-1", + Direction::Absolute => &format!("m~{}", id), + } + }; + + Command::new("hyprctl") + .arg("dispatch").arg("workspace").arg(workspace_arg) + .spawn(); + + std::process::exit(0); +}