diff options
author | delta <darkussdelta@gmail.com> | 2023-05-21 10:12:46 +0200 |
---|---|---|
committer | delta <darkussdelta@gmail.com> | 2023-05-21 10:12:46 +0200 |
commit | f42a3a2cc941e34dd938b1e6bc24785a44781db2 (patch) | |
tree | bec91db370c7bcd5be2bb614d2d315a32c751215 /.config/awesome/quarrel | |
parent | f5612f081db0dc69f5c0ebc69e67fa3b098a9ad9 (diff) |
major update of awesome config
add new icons, switch over to using stylesheets instead of gears.color.recolor_image, add a music widget to the panel, optimize services in common.lua, fix the application lense filtering and increase the update rate of services in common.lua
Signed-off-by: delta <darkussdelta@gmail.com>
Diffstat (limited to '.config/awesome/quarrel')
-rw-r--r-- | .config/awesome/quarrel/bind.lua | 6 | ||||
-rw-r--r-- | .config/awesome/quarrel/native/Cargo.toml | 4 | ||||
-rw-r--r-- | .config/awesome/quarrel/native/src/lenses/application.rs | 6 | ||||
-rw-r--r-- | .config/awesome/quarrel/native/src/lib.rs | 6 | ||||
-rw-r--r-- | .config/awesome/quarrel/native/src/net/mod.rs | 8 | ||||
-rw-r--r-- | .config/awesome/quarrel/native/src/time.rs | 75 | ||||
-rw-r--r-- | .config/awesome/quarrel/service.lua | 18 | ||||
-rw-r--r-- | .config/awesome/quarrel/store.lua | 3 | ||||
-rw-r--r-- | .config/awesome/quarrel/ui.lua | 91 | ||||
-rw-r--r-- | .config/awesome/quarrel/vars.lua | 2 |
10 files changed, 176 insertions, 43 deletions
diff --git a/.config/awesome/quarrel/bind.lua b/.config/awesome/quarrel/bind.lua index 327da0b..4cb5d44 100644 --- a/.config/awesome/quarrel/bind.lua +++ b/.config/awesome/quarrel/bind.lua @@ -1,9 +1,11 @@ local awful = require "awful" local gtable = require "gears.table" -local insightful = require "ui.insightful" +local qstore = require "quarrel.store" local qbind = {} +qstore.bindings = {} + local function get_binding_function(trigger) if type(trigger) == "number" and trigger <= 5 and trigger > 0 then return "button" @@ -37,7 +39,7 @@ local function translate_binding(binding, trigger, multiple) end function qbind:new(binding) - if not binding.hidden then table.insert(insightful._bindings, binding) end + if not binding.hidden then table.insert(qstore.bindings, binding) end binding.mods = binding.mods or {} local awful_bindings = {} diff --git a/.config/awesome/quarrel/native/Cargo.toml b/.config/awesome/quarrel/native/Cargo.toml index 6c44528..9cff8fc 100644 --- a/.config/awesome/quarrel/native/Cargo.toml +++ b/.config/awesome/quarrel/native/Cargo.toml @@ -9,12 +9,14 @@ edition = "2021" freedesktop_entry_parser = "1.3.0" cpc = "1.9.1" mlua = { version = "0.8.7", features = [ "module", "lua54", "serialize" ] } -palette = { version = "0.6.1", default-features = false, features = [ "std" ] } rayon = "1.6.1" serde = { version = "1.0.152", features = [ "derive" ] } url = "2.3.1" rodio = "0.17.1" nix = "0.26.2" +chrono = "0.4.24" +itertools = "0.10.5" +html-escape = "0.2.13" [lib] crate-type = ["cdylib"] diff --git a/.config/awesome/quarrel/native/src/lenses/application.rs b/.config/awesome/quarrel/native/src/lenses/application.rs index b0135d4..0857802 100644 --- a/.config/awesome/quarrel/native/src/lenses/application.rs +++ b/.config/awesome/quarrel/native/src/lenses/application.rs @@ -13,10 +13,6 @@ use crate::lenses::entry::{ Entry, }; -fn contains_ignore_ascii_case(a: &str, b: &str) -> bool { - return false; -} - fn parse_entry(entry: &fd::Entry, path: &PathBuf) -> Result<Entry, ()> { let section = entry.section("Desktop Entry"); let name = section.attr("Name").ok_or(())?.to_string(); @@ -84,7 +80,7 @@ pub fn query(lua: &Lua, input: String) -> LuaResult<LuaTable> { Ok(entries_to_lua_table( parsed_entries .into_iter() - .filter(|entry| entry.message.to_lowercase().contains(&input)) + .filter(|entry| entry.message.to_lowercase().contains(&input.to_lowercase())) .collect(), lua, )) diff --git a/.config/awesome/quarrel/native/src/lib.rs b/.config/awesome/quarrel/native/src/lib.rs index e21e306..d89b610 100644 --- a/.config/awesome/quarrel/native/src/lib.rs +++ b/.config/awesome/quarrel/native/src/lib.rs @@ -2,6 +2,7 @@ mod lenses; mod net; use mlua::prelude::*; +use html_escape::decode_html_entities_to_string; #[mlua::lua_module] fn qnative(lua: &Lua) -> LuaResult<LuaTable> { @@ -12,6 +13,11 @@ fn qnative(lua: &Lua) -> LuaResult<LuaTable> { let exports = lua.create_table()?; exports.set("lenses", lenses)?; exports.set("get_essid", lua.create_function(net::get_first_essid)?)?; + exports.set("decode_html", lua.create_function(|_: &Lua, string: String| { + let mut output = String::new(); + decode_html_entities_to_string(string, &mut output); + Ok(output) + })?)?; Ok(exports) } diff --git a/.config/awesome/quarrel/native/src/net/mod.rs b/.config/awesome/quarrel/native/src/net/mod.rs index c9d617c..71eaeea 100644 --- a/.config/awesome/quarrel/native/src/net/mod.rs +++ b/.config/awesome/quarrel/native/src/net/mod.rs @@ -10,7 +10,6 @@ use std::{ }, mem::size_of, os::fd::RawFd, - str, }; use mlua::prelude::*; @@ -23,7 +22,7 @@ use nix::{ SockFlag, SockType, }, - unistd::close + unistd::close, }; use wireless::{ IfConf, @@ -59,6 +58,7 @@ pub fn get_first_essid(_: &Lua, _: ()) -> LuaResult<String> { if_req = if_conf.data.ifc_req; } + #[allow(clippy::cast_possible_truncation)] for _ in 0..if_conf.ifc_len / size_of::<IfConf>() as c_int { if let Ok(essid) = get_essid(socket, unsafe { *if_req }.ifr_name) { close(socket).map_err(LuaError::external)?; @@ -90,9 +90,7 @@ fn get_essid(socket: RawFd, if_name: [c_char; IF_NAMESIZE]) -> LuaResult<String> ioctl_get_essid(socket, &mut wrq).map_err(LuaError::external)?; } - Ok(str::from_utf8(essid.as_slice()) - .map_err(LuaError::external)? - .to_owned()) + String::from_utf8(essid.to_vec()).map_err(LuaError::external) } fn get_first_socket() -> LuaResult<RawFd> { diff --git a/.config/awesome/quarrel/native/src/time.rs b/.config/awesome/quarrel/native/src/time.rs new file mode 100644 index 0000000..9850822 --- /dev/null +++ b/.config/awesome/quarrel/native/src/time.rs @@ -0,0 +1,75 @@ +use chrono::prelude::*; +use mlua::{ + prelude::*, + LuaSerdeExt, +}; + +// Taken from https://github.com/chronotope/chrono/issues/69#issuecomment-1510506428 +trait NaiveDateExt { + fn days_in_month(&self) -> u32; + fn days_in_year(&self) -> u32; + fn is_leap_year(&self) -> bool; +} + +impl NaiveDateExt for NaiveDate { + fn days_in_month(&self) -> u32 { + let month = self.month(); + match month { + 1 | 3 | 5 | 7 | 8 | 10 | 12 => 31, + 4 | 6 | 9 | 11 => 30, + 2 => { + if self.is_leap_year() { + 29 + } else { + 28 + } + } + _ => panic!("Invalid month: {}", month), + } + } + + fn days_in_year(&self) -> u32 { + if self.is_leap_year() { + 366 + } else { + 365 + } + } + + fn is_leap_year(&self) -> bool { + let year = self.year(); + return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); + } +} + +struct Day { + day: u32, + ce: bool, + weekday: Weekday, +} + +pub fn get_calendar_table(lua: &Lua, (year, month, day): (i32, u32, u32)) -> LuaResult<LuaTable> { + let date = + NaiveDate::from_ymd_opt(year, month, day).ok_or(LuaError::external("invalid date"))?; + let days: Vec<Day> = (1..=date.days_in_month()) + .map(|day| NaiveDate::from_ymd_opt(date.year(), date.month(), day).unwrap()) + .map(|date| { + let (ce, year) = date.year_ce(); + Day { + day: date.day(), + ce, + weekday: date.weekday(), + } + }) + .collect(); + + let calendar: Vec<Vec<Day>> = vec![vec![], vec![], vec![], vec![], vec![], vec![], vec![]]; + + if days[1].weekday != Weekday::Mon { + get_calendar_table(lua) + } + + if days.last().unwrap().weekday != Weekday::Sun {} + + Ok(lua.create_table()?) +} diff --git a/.config/awesome/quarrel/service.lua b/.config/awesome/quarrel/service.lua deleted file mode 100644 index 2c77651..0000000 --- a/.config/awesome/quarrel/service.lua +++ /dev/null @@ -1,18 +0,0 @@ -local gtimer = require "gears.timer" - -local qservice = {} - -function qservice.register(name, service, icon) - gtimer { - timeout = 1, - call_now = true, - autostart = true, - callback = function() - local service_result = table.pack(service()) - awesome.emit_signal("services::" .. name, table.unpack(service_result)) - awesome.emit_signal("services::" .. name .. "::icon", icon(table.unpack(service_result))) - end - } -end - -return qservice diff --git a/.config/awesome/quarrel/store.lua b/.config/awesome/quarrel/store.lua new file mode 100644 index 0000000..9f6cff2 --- /dev/null +++ b/.config/awesome/quarrel/store.lua @@ -0,0 +1,3 @@ +local qstore = {} + +return qstore diff --git a/.config/awesome/quarrel/ui.lua b/.config/awesome/quarrel/ui.lua index 8e979cb..274d48a 100644 --- a/.config/awesome/quarrel/ui.lua +++ b/.config/awesome/quarrel/ui.lua @@ -1,5 +1,6 @@ local awful = require "awful" -local gears = require "gears" +local gtable = require "gears.table" +local qbind = require "quarrel.bind" local qvars = require "quarrel.vars" local wibox = require "wibox" @@ -17,12 +18,8 @@ function qui.font(factor) return qvars.text_font .. " " .. qvars.font_size * (factor or 1) end -function qui.symbol_font(factor) - return qvars.symbol_font .. " " .. qvars.font_size * (factor or 1) -end - function qui.styled(target) - return gears.table.crush({ + return gtable.crush({ bg = qvars.colors.bg, border_color = qvars.colors.bright.black, border_width = qvars.border_width, @@ -30,14 +27,14 @@ function qui.styled(target) }, target) end -function qui.popup(args) - args.widget = { +function qui.popup(target) + target.widget = { widget = wibox.container.margin, margins = qvars.big_padding, - args.widget + target.widget } - return awful.popup(qui.styled(args)) + return awful.popup(qui.styled(target)) end function qui.tooltip(objects, callback) @@ -49,4 +46,78 @@ function qui.tooltip(objects, callback) }) end +function qui.recolor(color) + return "svg{fill:" .. color .. "}" +end + +function qui.icon(image, color, target) + local widget = { + widget = wibox.widget.imagebox, + image = image, + forced_width = qvars.char_height, + forced_height = qvars.char_height, + stylesheet = qui.recolor(color or qvars.colors.fg) + } + if target then + return gtable.crush(widget, target) + else + return widget + end +end + +function qui.button(args) + args.press = args.press or function(_) end + local widget = wibox.widget(gtable.crush({ + widget = wibox.widget.imagebox, + image = args.image, + forced_height = qvars.char_height, + forced_width = qvars.char_height, + stylesheet = qui.recolor(qvars.colors.fg), + press = args.press + }, args.widget or {})) + + widget.buttons = { + qbind:new { + triggers = qvars.btns.left, + press = function() + widget:press() + end, + hidden = true + } + } + + return widget +end + +function qui.toggle(args) + args.press = args.press or function(_) end + local widget = qui.button({ + widget = gtable.crush({ + toggled = false, + silent_press = function(self, state) + if state then + self.toggled = state + else + self.toggled = not self.toggled + end + + if self.toggled then + self.image = args.on + else + self.image = args.off + end + end, + }, args.widget or {}), + image = args.off, + press = function(self) + if not args.manual then + self:silent_press() + end + args.press(self) + end + }) + + return widget +end + return qui diff --git a/.config/awesome/quarrel/vars.lua b/.config/awesome/quarrel/vars.lua index 391e875..27da3f2 100644 --- a/.config/awesome/quarrel/vars.lua +++ b/.config/awesome/quarrel/vars.lua @@ -22,7 +22,6 @@ qvars.padding = dpi(4) qvars.big_padding = dpi(8) qvars.text_font = "Fira Code Nerd Font Mono Medium" -qvars.symbol_font = "Symbols Nerd Font:style=1000-em" qvars.font_size = 8 qvars.font = qvars.text_font .. " " .. qvars.font_size @@ -35,7 +34,6 @@ qvars.char_height = char_height qvars.char_width = char_width qvars.bar_size = dpi(24) + qvars.big_padding * 2 --- qvars.expanded_bar_size = qvars.bar_size * 6 qvars.element_size = dpi(12) qvars.expanded_bar_size = qvars.big_padding + (qvars.big_padding * 2 + qvars.element_size * 4) * 3 + qvars.padding * 2 |