aboutsummaryrefslogtreecommitdiff
path: root/.config/awesome/quarrel
diff options
context:
space:
mode:
authordelta <darkussdelta@gmail.com>2023-05-21 10:12:46 +0200
committerdelta <darkussdelta@gmail.com>2023-05-21 10:12:46 +0200
commitf42a3a2cc941e34dd938b1e6bc24785a44781db2 (patch)
treebec91db370c7bcd5be2bb614d2d315a32c751215 /.config/awesome/quarrel
parentf5612f081db0dc69f5c0ebc69e67fa3b098a9ad9 (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.lua6
-rw-r--r--.config/awesome/quarrel/native/Cargo.toml4
-rw-r--r--.config/awesome/quarrel/native/src/lenses/application.rs6
-rw-r--r--.config/awesome/quarrel/native/src/lib.rs6
-rw-r--r--.config/awesome/quarrel/native/src/net/mod.rs8
-rw-r--r--.config/awesome/quarrel/native/src/time.rs75
-rw-r--r--.config/awesome/quarrel/service.lua18
-rw-r--r--.config/awesome/quarrel/store.lua3
-rw-r--r--.config/awesome/quarrel/ui.lua91
-rw-r--r--.config/awesome/quarrel/vars.lua2
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