diff --git a/.Xresources b/.Xresources
new file mode 100644
index 0000000..c71bd71
--- /dev/null
+++ b/.Xresources
@@ -0,0 +1,42 @@
+Xft.dpi: 120
+Xft.rgba: rgb
+Xcursor.theme: phinger-cursors
+
+! special
+*.foreground: #dfe2e7
+*.background: #222831
+*.cursorColor: #dfe2e7
+
+! black
+*.color0: #252c36
+*.color8: #36404f
+!*.color8: #2c3440
+
+! red
+*.color1: #de615c
+*.color9: #e8908d
+
+! green
+*.color2: #91d89a
+*.color10: #b2e4b8
+
+! yellow
+*.color3: #ffc469
+*.color11: #ffd696
+
+! blue
+*.color4: #8fc7ff
+*.color12: #b1d8ff
+
+! magenta
+*.color5: #f2b9c1
+*.color13: #f6ced4
+
+! cyan
+*.color6: #9cfdff
+*.color14: #bafeff
+
+! white
+*.color7: #dfe2e7
+*.color15: #e9ebee
+
diff --git a/.config/awesome/assets/phosphor/battery-charging-vertical-fill.svg b/.config/awesome/assets/phosphor/battery-vertical-charging-fill.svg
similarity index 100%
rename from .config/awesome/assets/phosphor/battery-charging-vertical-fill.svg
rename to .config/awesome/assets/phosphor/battery-vertical-charging-fill.svg
diff --git a/.config/awesome/assets/phosphor/battery-warning-vertical-fill.svg b/.config/awesome/assets/phosphor/battery-vertical-warning-fill.svg
similarity index 100%
rename from .config/awesome/assets/phosphor/battery-warning-vertical-fill.svg
rename to .config/awesome/assets/phosphor/battery-vertical-warning-fill.svg
diff --git a/.config/awesome/assets/phosphor/speaker-simple-slash-fill.svg b/.config/awesome/assets/phosphor/speaker-simple-slash-fill.svg
new file mode 100644
index 0000000..fdcfd5d
--- /dev/null
+++ b/.config/awesome/assets/phosphor/speaker-simple-slash-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/.config/awesome/misc/keys.lua b/.config/awesome/misc/keys.lua
index bc5fdb6..432f3eb 100644
--- a/.config/awesome/misc/keys.lua
+++ b/.config/awesome/misc/keys.lua
@@ -1,13 +1,12 @@
-local archaic = require "ui.archaic"
local awful = require "awful"
local cfg = require "misc.cfg"
-local flashy = require "ui.flashy"
local fresnel = require "ui.fresnel"
local gtimer = require "gears.timer"
local insightful = require "ui.insightful"
local naughty = require "naughty"
local qbind = require "quarrel.bind"
local qvars = require "quarrel.vars"
+local playerctl = require "services.playerctl"
local recording = { false, "" }
@@ -15,7 +14,7 @@ client.connect_signal("request::default_mousebindings", function()
awful.mouse.append_client_mousebindings {
qbind:new {
triggers = qvars.btns.left,
- press = function (c)
+ press = function(c)
c:activate {
context = "mouse_click"
}
@@ -26,7 +25,7 @@ client.connect_signal("request::default_mousebindings", function()
qbind:new {
mods = qvars.mods.M,
triggers = qvars.btns.left,
- press = function (c)
+ press = function(c)
c:activate {
context = "mouse_click",
action = "mouse_move"
@@ -38,7 +37,7 @@ client.connect_signal("request::default_mousebindings", function()
qbind:new {
mods = qvars.mods.M,
triggers = qvars.btns.right,
- press = function (c)
+ press = function(c)
c:activate {
context = "mouse_click",
action = "mouse_resize"
@@ -110,19 +109,6 @@ awful.keyboard.append_global_keybindings {
group = "awesome",
desc = "toggle insightful"
},
- qbind:new {
- mods = qvars.mods.MC,
- triggers = "a",
- press = function()
- if flashy._widget.visible then
- flashy:hide()
- else
- flashy:show()
- end
- end,
- group = "awesome",
- desc = "toggle flashy"
- },
qbind:new {
mods = qvars.mods.M,
triggers = "space",
@@ -132,15 +118,6 @@ awful.keyboard.append_global_keybindings {
group = "awesome",
desc = "toggle fresnel"
},
- qbind:new {
- mods = qvars.mods.MC,
- triggers = "d",
- press = function()
- archaic:toggle()
- end,
- group = "awesome",
- desc = "toggle archaic"
- },
qbind:new {
mods = {},
@@ -175,9 +152,9 @@ awful.keyboard.append_global_keybindings {
},
press = function(next)
if next then
- archaic.playerctl:next()
+ playerctl:next()
else
- archaic.playerctl:previous()
+ playerctl:previous()
end
end,
group = "audio",
@@ -187,7 +164,7 @@ awful.keyboard.append_global_keybindings {
mods = {},
triggers = "XF86AudioPlay",
press = function()
- archaic.playerctl:play_pause()
+ playerctl:play_pause()
end,
group = "audio",
desc = "(un)pause song"
diff --git a/.config/awesome/misc/rules.lua b/.config/awesome/misc/rules.lua
index 005b248..b4d1dfa 100644
--- a/.config/awesome/misc/rules.lua
+++ b/.config/awesome/misc/rules.lua
@@ -90,7 +90,7 @@ ruled.client.connect_signal("request::rules", function()
ruled.client.append_rule({
id = "steam",
rule_any = {
- class = { "Steam" }
+ class = { "steam" }
},
properties = {
screen = 1,
diff --git a/.config/awesome/quarrel/json.lua b/.config/awesome/quarrel/json.lua
new file mode 100644
index 0000000..711ef78
--- /dev/null
+++ b/.config/awesome/quarrel/json.lua
@@ -0,0 +1,388 @@
+--
+-- json.lua
+--
+-- Copyright (c) 2020 rxi
+--
+-- Permission is hereby granted, free of charge, to any person obtaining a copy of
+-- this software and associated documentation files (the "Software"), to deal in
+-- the Software without restriction, including without limitation the rights to
+-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+-- of the Software, and to permit persons to whom the Software is furnished to do
+-- so, subject to the following conditions:
+--
+-- The above copyright notice and this permission notice shall be included in all
+-- copies or substantial portions of the Software.
+--
+-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+-- SOFTWARE.
+--
+
+local json = { _version = "0.1.2" }
+
+-------------------------------------------------------------------------------
+-- Encode
+-------------------------------------------------------------------------------
+
+local encode
+
+local escape_char_map = {
+ [ "\\" ] = "\\",
+ [ "\"" ] = "\"",
+ [ "\b" ] = "b",
+ [ "\f" ] = "f",
+ [ "\n" ] = "n",
+ [ "\r" ] = "r",
+ [ "\t" ] = "t",
+}
+
+local escape_char_map_inv = { [ "/" ] = "/" }
+for k, v in pairs(escape_char_map) do
+ escape_char_map_inv[v] = k
+end
+
+
+local function escape_char(c)
+ return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte()))
+end
+
+
+local function encode_nil(val)
+ return "null"
+end
+
+
+local function encode_table(val, stack)
+ local res = {}
+ stack = stack or {}
+
+ -- Circular reference?
+ if stack[val] then error("circular reference") end
+
+ stack[val] = true
+
+ if rawget(val, 1) ~= nil or next(val) == nil then
+ -- Treat as array -- check keys are valid and it is not sparse
+ local n = 0
+ for k in pairs(val) do
+ if type(k) ~= "number" then
+ error("invalid table: mixed or invalid key types")
+ end
+ n = n + 1
+ end
+ if n ~= #val then
+ error("invalid table: sparse array")
+ end
+ -- Encode
+ for i, v in ipairs(val) do
+ table.insert(res, encode(v, stack))
+ end
+ stack[val] = nil
+ return "[" .. table.concat(res, ",") .. "]"
+
+ else
+ -- Treat as an object
+ for k, v in pairs(val) do
+ if type(k) ~= "string" then
+ error("invalid table: mixed or invalid key types")
+ end
+ table.insert(res, encode(k, stack) .. ":" .. encode(v, stack))
+ end
+ stack[val] = nil
+ return "{" .. table.concat(res, ",") .. "}"
+ end
+end
+
+
+local function encode_string(val)
+ return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"'
+end
+
+
+local function encode_number(val)
+ -- Check for NaN, -inf and inf
+ if val ~= val or val <= -math.huge or val >= math.huge then
+ error("unexpected number value '" .. tostring(val) .. "'")
+ end
+ return string.format("%.14g", val)
+end
+
+
+local type_func_map = {
+ [ "nil" ] = encode_nil,
+ [ "table" ] = encode_table,
+ [ "string" ] = encode_string,
+ [ "number" ] = encode_number,
+ [ "boolean" ] = tostring,
+}
+
+
+encode = function(val, stack)
+ local t = type(val)
+ local f = type_func_map[t]
+ if f then
+ return f(val, stack)
+ end
+ error("unexpected type '" .. t .. "'")
+end
+
+
+function json.encode(val)
+ return ( encode(val) )
+end
+
+
+-------------------------------------------------------------------------------
+-- Decode
+-------------------------------------------------------------------------------
+
+local parse
+
+local function create_set(...)
+ local res = {}
+ for i = 1, select("#", ...) do
+ res[ select(i, ...) ] = true
+ end
+ return res
+end
+
+local space_chars = create_set(" ", "\t", "\r", "\n")
+local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",")
+local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u")
+local literals = create_set("true", "false", "null")
+
+local literal_map = {
+ [ "true" ] = true,
+ [ "false" ] = false,
+ [ "null" ] = nil,
+}
+
+
+local function next_char(str, idx, set, negate)
+ for i = idx, #str do
+ if set[str:sub(i, i)] ~= negate then
+ return i
+ end
+ end
+ return #str + 1
+end
+
+
+local function decode_error(str, idx, msg)
+ local line_count = 1
+ local col_count = 1
+ for i = 1, idx - 1 do
+ col_count = col_count + 1
+ if str:sub(i, i) == "\n" then
+ line_count = line_count + 1
+ col_count = 1
+ end
+ end
+ error( string.format("%s at line %d col %d", msg, line_count, col_count) )
+end
+
+
+local function codepoint_to_utf8(n)
+ -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa
+ local f = math.floor
+ if n <= 0x7f then
+ return string.char(n)
+ elseif n <= 0x7ff then
+ return string.char(f(n / 64) + 192, n % 64 + 128)
+ elseif n <= 0xffff then
+ return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128)
+ elseif n <= 0x10ffff then
+ return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128,
+ f(n % 4096 / 64) + 128, n % 64 + 128)
+ end
+ error( string.format("invalid unicode codepoint '%x'", n) )
+end
+
+
+local function parse_unicode_escape(s)
+ local n1 = tonumber( s:sub(1, 4), 16 )
+ local n2 = tonumber( s:sub(7, 10), 16 )
+ -- Surrogate pair?
+ if n2 then
+ return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000)
+ else
+ return codepoint_to_utf8(n1)
+ end
+end
+
+
+local function parse_string(str, i)
+ local res = ""
+ local j = i + 1
+ local k = j
+
+ while j <= #str do
+ local x = str:byte(j)
+
+ if x < 32 then
+ decode_error(str, j, "control character in string")
+
+ elseif x == 92 then -- `\`: Escape
+ res = res .. str:sub(k, j - 1)
+ j = j + 1
+ local c = str:sub(j, j)
+ if c == "u" then
+ local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1)
+ or str:match("^%x%x%x%x", j + 1)
+ or decode_error(str, j - 1, "invalid unicode escape in string")
+ res = res .. parse_unicode_escape(hex)
+ j = j + #hex
+ else
+ if not escape_chars[c] then
+ decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string")
+ end
+ res = res .. escape_char_map_inv[c]
+ end
+ k = j + 1
+
+ elseif x == 34 then -- `"`: End of string
+ res = res .. str:sub(k, j - 1)
+ return res, j + 1
+ end
+
+ j = j + 1
+ end
+
+ decode_error(str, i, "expected closing quote for string")
+end
+
+
+local function parse_number(str, i)
+ local x = next_char(str, i, delim_chars)
+ local s = str:sub(i, x - 1)
+ local n = tonumber(s)
+ if not n then
+ decode_error(str, i, "invalid number '" .. s .. "'")
+ end
+ return n, x
+end
+
+
+local function parse_literal(str, i)
+ local x = next_char(str, i, delim_chars)
+ local word = str:sub(i, x - 1)
+ if not literals[word] then
+ decode_error(str, i, "invalid literal '" .. word .. "'")
+ end
+ return literal_map[word], x
+end
+
+
+local function parse_array(str, i)
+ local res = {}
+ local n = 1
+ i = i + 1
+ while 1 do
+ local x
+ i = next_char(str, i, space_chars, true)
+ -- Empty / end of array?
+ if str:sub(i, i) == "]" then
+ i = i + 1
+ break
+ end
+ -- Read token
+ x, i = parse(str, i)
+ res[n] = x
+ n = n + 1
+ -- Next token
+ i = next_char(str, i, space_chars, true)
+ local chr = str:sub(i, i)
+ i = i + 1
+ if chr == "]" then break end
+ if chr ~= "," then decode_error(str, i, "expected ']' or ','") end
+ end
+ return res, i
+end
+
+
+local function parse_object(str, i)
+ local res = {}
+ i = i + 1
+ while 1 do
+ local key, val
+ i = next_char(str, i, space_chars, true)
+ -- Empty / end of object?
+ if str:sub(i, i) == "}" then
+ i = i + 1
+ break
+ end
+ -- Read key
+ if str:sub(i, i) ~= '"' then
+ decode_error(str, i, "expected string for key")
+ end
+ key, i = parse(str, i)
+ -- Read ':' delimiter
+ i = next_char(str, i, space_chars, true)
+ if str:sub(i, i) ~= ":" then
+ decode_error(str, i, "expected ':' after key")
+ end
+ i = next_char(str, i + 1, space_chars, true)
+ -- Read value
+ val, i = parse(str, i)
+ -- Set
+ res[key] = val
+ -- Next token
+ i = next_char(str, i, space_chars, true)
+ local chr = str:sub(i, i)
+ i = i + 1
+ if chr == "}" then break end
+ if chr ~= "," then decode_error(str, i, "expected '}' or ','") end
+ end
+ return res, i
+end
+
+
+local char_func_map = {
+ [ '"' ] = parse_string,
+ [ "0" ] = parse_number,
+ [ "1" ] = parse_number,
+ [ "2" ] = parse_number,
+ [ "3" ] = parse_number,
+ [ "4" ] = parse_number,
+ [ "5" ] = parse_number,
+ [ "6" ] = parse_number,
+ [ "7" ] = parse_number,
+ [ "8" ] = parse_number,
+ [ "9" ] = parse_number,
+ [ "-" ] = parse_number,
+ [ "t" ] = parse_literal,
+ [ "f" ] = parse_literal,
+ [ "n" ] = parse_literal,
+ [ "[" ] = parse_array,
+ [ "{" ] = parse_object,
+}
+
+
+parse = function(str, idx)
+ local chr = str:sub(idx, idx)
+ local f = char_func_map[chr]
+ if f then
+ return f(str, idx)
+ end
+ decode_error(str, idx, "unexpected character '" .. chr .. "'")
+end
+
+
+function json.decode(str)
+ if type(str) ~= "string" then
+ error("expected argument of type string, got " .. type(str))
+ end
+ local res, idx = parse(str, next_char(str, 1, space_chars, true))
+ idx = next_char(str, idx, space_chars, true)
+ if idx <= #str then
+ decode_error(str, idx, "trailing garbage")
+ end
+ return res
+end
+
+
+return json
diff --git a/.config/awesome/quarrel/math.lua b/.config/awesome/quarrel/math.lua
index bc1f53b..886ce13 100644
--- a/.config/awesome/quarrel/math.lua
+++ b/.config/awesome/quarrel/math.lua
@@ -1,6 +1,9 @@
local qmath = {}
function qmath.step_value(value, steps)
+ if value > steps[#steps - 1][1] then
+ return steps[#steps - 1][2]
+ end
for i, step in ipairs(steps) do
if step[1] <= value and value <= steps[i + 1][1] then
return step[2]
diff --git a/.config/awesome/quarrel/native/Cargo.toml b/.config/awesome/quarrel/native/Cargo.toml
index fdabea0..6c44528 100644
--- a/.config/awesome/quarrel/native/Cargo.toml
+++ b/.config/awesome/quarrel/native/Cargo.toml
@@ -14,6 +14,7 @@ rayon = "1.6.1"
serde = { version = "1.0.152", features = [ "derive" ] }
url = "2.3.1"
rodio = "0.17.1"
+nix = "0.26.2"
[lib]
crate-type = ["cdylib"]
diff --git a/.config/awesome/quarrel/native/src/lenses/calculator.rs b/.config/awesome/quarrel/native/src/lenses/calculator.rs
index 89b738e..c79dd42 100644
--- a/.config/awesome/quarrel/native/src/lenses/calculator.rs
+++ b/.config/awesome/quarrel/native/src/lenses/calculator.rs
@@ -13,14 +13,7 @@ use crate::lenses::entry::{
pub fn query<'a>(lua: &Lua, input: String) -> LuaResult {
let result = match eval(input.trim(), true, Unit::Celsius, false) {
Ok(result) => {
- format!(
- "{}{}",
- result.value,
- match result.unit {
- Unit::NoUnit => "".to_owned(),
- _ => format!(" {:?}", result.unit),
- }
- )
+ format!("{result}")
}
Err(_) => return lua.create_table(),
};
diff --git a/.config/awesome/quarrel/native/src/lib.rs b/.config/awesome/quarrel/native/src/lib.rs
index d265d2d..e21e306 100644
--- a/.config/awesome/quarrel/native/src/lib.rs
+++ b/.config/awesome/quarrel/native/src/lib.rs
@@ -1,5 +1,5 @@
mod lenses;
-// mod sound;
+mod net;
use mlua::prelude::*;
@@ -11,6 +11,7 @@ fn qnative(lua: &Lua) -> LuaResult {
let exports = lua.create_table()?;
exports.set("lenses", lenses)?;
+ exports.set("get_essid", lua.create_function(net::get_first_essid)?)?;
Ok(exports)
}
diff --git a/.config/awesome/quarrel/native/src/net/mod.rs b/.config/awesome/quarrel/native/src/net/mod.rs
new file mode 100644
index 0000000..c9d617c
--- /dev/null
+++ b/.config/awesome/quarrel/native/src/net/mod.rs
@@ -0,0 +1,113 @@
+// This is an attempt to port the iwgetid and iwlib code
+
+mod wireless;
+use std::{
+ ffi::{
+ c_char,
+ c_int,
+ c_uchar,
+ c_void,
+ },
+ mem::size_of,
+ os::fd::RawFd,
+ str,
+};
+
+use mlua::prelude::*;
+use nix::{
+ ioctl_read_bad,
+ libc::IF_NAMESIZE,
+ sys::socket::{
+ socket as open_socket,
+ AddressFamily,
+ SockFlag,
+ SockType,
+ },
+ unistd::close
+};
+use wireless::{
+ IfConf,
+ IfConfData,
+ IwPoint,
+ IwReq,
+ IwReqData,
+ IwReqName,
+ IW_ESSID_MAX_SIZE,
+ SIOCGIFCONF,
+ SIOCGIWESSID,
+};
+
+ioctl_read_bad!(ioctl_get_interfaces, SIOCGIFCONF, IfConf);
+ioctl_read_bad!(ioctl_get_essid, SIOCGIWESSID, IwReq);
+
+pub fn get_first_essid(_: &Lua, _: ()) -> LuaResult {
+ type Buffer = [c_char; 1024];
+ let mut buffer: Buffer = [0; 1024];
+
+ let mut if_conf = IfConf {
+ ifc_len: size_of::() as c_int,
+ data: IfConfData {
+ ifc_buf: buffer.as_mut_ptr(),
+ },
+ };
+
+ let mut if_req;
+ let socket = get_first_socket().map_err(LuaError::external)?;
+
+ unsafe {
+ ioctl_get_interfaces(socket, &mut if_conf).map_err(LuaError::external)?;
+ if_req = if_conf.data.ifc_req;
+ }
+
+ for _ in 0..if_conf.ifc_len / size_of::() as c_int {
+ if let Ok(essid) = get_essid(socket, unsafe { *if_req }.ifr_name) {
+ close(socket).map_err(LuaError::external)?;
+ return Ok(essid);
+ };
+
+ unsafe { if_req = if_req.add(1) };
+ }
+
+ close(socket).map_err(LuaError::external)?;
+ Err(LuaError::external("couldn't find any valid interfaces"))
+}
+
+fn get_essid(socket: RawFd, if_name: [c_char; IF_NAMESIZE]) -> LuaResult {
+ let mut essid: [c_uchar; (IW_ESSID_MAX_SIZE + 1) as usize] =
+ [0; (IW_ESSID_MAX_SIZE + 1) as usize];
+ let mut wrq = IwReq {
+ ifr_ifrn: IwReqName { ifrn_name: if_name },
+ u: IwReqData {
+ essid: IwPoint {
+ pointer: essid.as_mut_ptr().cast::(),
+ length: IW_ESSID_MAX_SIZE + 1,
+ flags: 0,
+ },
+ },
+ };
+
+ unsafe {
+ ioctl_get_essid(socket, &mut wrq).map_err(LuaError::external)?;
+ }
+
+ Ok(str::from_utf8(essid.as_slice())
+ .map_err(LuaError::external)?
+ .to_owned())
+}
+
+fn get_first_socket() -> LuaResult {
+ let families = [
+ AddressFamily::Inet,
+ AddressFamily::Ipx,
+ AddressFamily::Ax25,
+ AddressFamily::AppleTalk,
+ ];
+
+ for family in families {
+ if let Ok(socket) = open_socket(family, SockType::Datagram, SockFlag::empty(), None) {
+ return Ok(socket);
+ }
+ }
+
+ Err(LuaError::external("couldn't get a valid kernel socket"))
+}
diff --git a/.config/awesome/quarrel/native/src/net/wireless.rs b/.config/awesome/quarrel/native/src/net/wireless.rs
new file mode 100644
index 0000000..d3999db
--- /dev/null
+++ b/.config/awesome/quarrel/native/src/net/wireless.rs
@@ -0,0 +1,104 @@
+use std::ffi::{
+ c_char,
+ c_int,
+ c_void,
+};
+
+use nix::libc::{
+ __s16,
+ __s32,
+ __u16,
+ __u8,
+ ifreq as IfReq,
+ sockaddr as SockAddr,
+ IF_NAMESIZE,
+};
+
+pub static SIOCGIFCONF: c_int = 0x8912;
+pub static SIOCGIWESSID: c_int = 0x8B1B;
+pub const IW_ESSID_MAX_SIZE: u16 = 32;
+
+#[repr(C)]
+pub struct IfConf {
+ pub ifc_len: c_int,
+ pub data: IfConfData,
+}
+
+#[repr(C)]
+pub union IfConfData {
+ pub ifc_req: *mut IfReq,
+ pub ifc_buf: *mut c_char,
+}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct IwPoint {
+ pub pointer: *mut c_void,
+ pub length: __u16,
+ pub flags: __u16,
+}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct IwFreq {
+ pub m: __s32,
+ pub e: __s16,
+ pub i: __u8,
+ pub flags: __u8,
+}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct IwParam {
+ pub value: __s32,
+ pub fixed: __u8,
+ pub disabled: __u8,
+ pub flags: __u16,
+}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+pub struct IwQuality {
+ pub qual: __u8,
+ pub level: __u8,
+ pub noise: __u8,
+ pub updated: __u8,
+}
+
+#[repr(C)]
+pub struct IwReq {
+ pub ifr_ifrn: IwReqName,
+ pub u: IwReqData,
+}
+
+#[repr(C)]
+pub union IwReqName {
+ pub ifrn_name: [c_char; IF_NAMESIZE],
+}
+
+#[repr(C)]
+pub union IwReqData {
+ pub name: [c_char; IF_NAMESIZE],
+
+ pub essid: IwPoint,
+ pub nwid: IwParam,
+ pub freq: IwFreq,
+
+ pub sens: IwParam,
+ pub bitrate: IwParam,
+ pub txpower: IwParam,
+ pub rts: IwParam,
+ pub frag: IwParam,
+ pub mode: u32,
+ pub retry: IwParam,
+
+ pub encoding: IwPoint,
+ pub power: IwParam,
+ pub qual: IwQuality,
+
+ pub ap_addr: SockAddr,
+ pub addr: SockAddr,
+
+ pub param: IwParam,
+ pub data: IwPoint,
+}
diff --git a/.config/awesome/quarrel/native/src/sound.rs b/.config/awesome/quarrel/native/src/sound.rs
deleted file mode 100644
index c398d70..0000000
--- a/.config/awesome/quarrel/native/src/sound.rs
+++ /dev/null
@@ -1,17 +0,0 @@
-use std::{
- fs::File,
- io::BufReader,
- path::Path,
- time::Duration,
-};
-
-use mlua::prelude::*;
-use rodio::{
- Decoder,
- OutputStream,
- Sink,
-};
-
-pub fn play_sound(_: &Lua, file: String) -> LuaResult<()> {
-
-}
diff --git a/.config/awesome/quarrel/service.lua b/.config/awesome/quarrel/service.lua
new file mode 100644
index 0000000..2c77651
--- /dev/null
+++ b/.config/awesome/quarrel/service.lua
@@ -0,0 +1,18 @@
+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/vars.lua b/.config/awesome/quarrel/vars.lua
index 76d0b94..391e875 100644
--- a/.config/awesome/quarrel/vars.lua
+++ b/.config/awesome/quarrel/vars.lua
@@ -34,10 +34,10 @@ local char_width, char_height = wibox.widget {
qvars.char_height = char_height
qvars.char_width = char_width
--- qvars.bar_size = dpi(16)
qvars.bar_size = dpi(24) + qvars.big_padding * 2
-qvars.icon_size = qvars.char_height
-qvars.button_size = dpi(12)
+-- 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
qvars.colors = {
fg = x_col.foreground,
diff --git a/.config/awesome/services/battery.lua b/.config/awesome/services/battery.lua
deleted file mode 100644
index c2a7f3e..0000000
--- a/.config/awesome/services/battery.lua
+++ /dev/null
@@ -1,14 +0,0 @@
-local gtimer = require "gears.timer"
-local qfs = require "quarrel.fs"
-
-gtimer {
- timeout = 1,
- call_now = true,
- autostart = true,
- callback = function()
- local capacity = qfs.read("/sys/class/power_supply/BAT0/capacity", "n")
- local status = qfs.read("/sys/class/power_supply/BAT0/status", "l")
-
- awesome.emit_signal("services::battery", capacity, status)
- end
-}
diff --git a/.config/awesome/services/brightness.lua b/.config/awesome/services/brightness.lua
deleted file mode 100644
index b8d07e7..0000000
--- a/.config/awesome/services/brightness.lua
+++ /dev/null
@@ -1,13 +0,0 @@
-local gtimer = require "gears.timer"
-local qfs = require "quarrel.fs"
-
-gtimer {
- timeout = 1,
- call_now = true,
- autostart = true,
- callback = function()
- local brightness = qfs.read("/sys/class/backlight/amdgpu_bl0/actual_brightness", "n")
-
- awesome.emit_signal("services::brightness", brightness)
- end
-}
diff --git a/.config/awesome/services/common.lua b/.config/awesome/services/common.lua
new file mode 100644
index 0000000..07300db
--- /dev/null
+++ b/.config/awesome/services/common.lua
@@ -0,0 +1,118 @@
+local qfs = require "quarrel.fs"
+local gfs = require "gears.filesystem"
+local qservice = require "quarrel.service"
+local qjson = require "quarrel.json"
+local qnative = require "quarrel.native"
+local gcolor = require "gears.color"
+local qmath = require "quarrel.math"
+local phosphor = require "assets.phosphor"
+local qvars = require "quarrel.vars"
+
+-- follows the format `service = { provider, icon_provider }`
+local services = {
+ audio = {
+ -- volume, muted
+ function()
+ if not gfs.file_readable("/tmp/wp_audio_status") then
+ awesome.emit_signal("services::audio", -1, false)
+ return
+ end
+ local audio_status = qjson.decode(qfs.read("/tmp/wp_audio_status"))
+ local default_sink = audio_status["alsa_output.usb-046d_G435_Wireless_Gaming_Headset_V001008005.1-01.analog-stereo"]
+
+ if not default_sink then
+ return nil, false
+ end
+
+ return default_sink.volume, default_sink.muted
+ end,
+ function(volume, muted)
+ if muted or not volume then
+ return gcolor.recolor_image(phosphor["speaker_simple_x_fill"], qvars.colors.red)
+ end
+
+ local icon_data = qmath.step_value(volume, {
+ { 0, "slash" },
+ { 25, "none" },
+ { 50, "low" },
+ { 75, "high" },
+ { 100 }
+ })
+
+ gcolor.recolor_image(phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg)
+ end
+ },
+ battery = {
+ -- capacity, status
+ function()
+ return qfs.read("/sys/class/power_supply/BAT0/capacity", "n"), qfs.read("/sys/class/power_supply/BAT0/status", "l")
+ end,
+ function(capacity, status)
+ local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
+ { 0, { "empty", "red" } },
+ { 20, { "low", "red" } },
+ { 40, { "medium", "yellow" } },
+ { 60, { "high", "green" } },
+ { 80, { "full", "green" } },
+ { 100 }
+ })
+
+ return gcolor.recolor_image(phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])
+ end
+ },
+ brightness = {
+ -- brightness
+ function()
+ return qfs.read("/sys/class/backlight/amdgpu_bl0/actual_brightness", "n")
+ end,
+ function(brightness)
+ local icon_data = qmath.step_value(brightness, {
+ { 0, "cloud_moon" },
+ { 51, "moon" },
+ { 102, "sun_horizon" },
+ { 153, "sun_dim" },
+ { 204, "sun" },
+ { 255 }
+ })
+
+ return gcolor.recolor_image(phosphor[icon_data .. "_fill"], qvars.colors.fg)
+ end
+ },
+ wifi = {
+ -- essid, strength, connected
+ function()
+ local lines = {}
+
+ for line in io.lines("/proc/net/wireless") do
+ table.insert(lines, line)
+ end
+
+ if not lines[3] then
+ return nil, 0, false
+ end
+
+ local strength = lines[3]:match("^%s*(.*)"):match("^.-%s+.-%s+.-(%S+)%.")
+
+ return qnative.get_essid(), math.floor(tonumber(strength) * 10 / 7), true
+ end,
+ function(_, strength, connected)
+ if not connected then
+ return gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red)
+ end
+
+ local icon_data = qmath.step_value(strength, {
+ { 0, { "none", "red" } },
+ { 25, { "low", "yellow" } },
+ { 50, { "medium", "yellow" } },
+ { 75, { "high", "green" } },
+ { 100 }
+ })
+
+ return gcolor.recolor_image(phosphor["wifi_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])
+ end
+ }
+}
+
+for name, service in pairs(services) do
+ qservice.register(name, service[1], service[2])
+end
diff --git a/.config/awesome/services/init.lua b/.config/awesome/services/init.lua
index 23f6dd3..82e2096 100644
--- a/.config/awesome/services/init.lua
+++ b/.config/awesome/services/init.lua
@@ -1,3 +1,2 @@
-require "services.battery"
-require "services.brightness"
-require "services.wifi"
+require "services.playerctl"
+require "services.common"
diff --git a/.config/awesome/services/playerctl.lua b/.config/awesome/services/playerctl.lua
new file mode 100644
index 0000000..01598f8
--- /dev/null
+++ b/.config/awesome/services/playerctl.lua
@@ -0,0 +1,45 @@
+local playerctl = require "lib.bling.signal.playerctl".lib {
+ player = { "spotify", "ncmpcpp", "%any" }
+}
+
+playerctl:connect_signal("metadata", function(...)
+ awesome.emit_signal("services::playerctl::metadata", ...)
+end)
+
+playerctl:connect_signal("position", function(...)
+ awesome.emit_signal("services::playerctl::position", ...)
+end)
+
+playerctl:connect_signal("playback_status", function(...)
+ awesome.emit_signal("services::playerctl::playback_status", ...)
+end)
+
+playerctl:connect_signal("seeked", function(...)
+ awesome.emit_signal("services::playerctl::seeked", ...)
+end)
+
+playerctl:connect_signal("volume", function(...)
+ awesome.emit_signal("services::playerctl::volume", ...)
+end)
+
+playerctl:connect_signal("loop_status", function(...)
+ awesome.emit_signal("services::playerctl::loop_status", ...)
+end)
+
+playerctl:connect_signal("shuffle", function(...)
+ awesome.emit_signal("services::playerctl::shuffle", ...)
+end)
+
+playerctl:connect_signal("exit", function(...)
+ awesome.emit_signal("services::playerctl::exit", ...)
+end)
+
+playerctl:connect_signal("exit", function(...)
+ awesome.emit_signal("services::playerctl::exit", ...)
+end)
+
+playerctl:connect_signal("no_players", function()
+ awesome.emit_signal("services::playerctl::no_players")
+end)
+
+return playerctl
diff --git a/.config/awesome/services/wifi.lua b/.config/awesome/services/wifi.lua
deleted file mode 100644
index f6b67f1..0000000
--- a/.config/awesome/services/wifi.lua
+++ /dev/null
@@ -1,23 +0,0 @@
-local gtimer = require "gears.timer"
-
-gtimer {
- timeout = 1,
- call_now = true,
- autostart = true,
- callback = function()
- local lines = {}
-
- for line in io.lines("/proc/net/wireless") do
- table.insert(lines, line)
- end
-
- if not lines[3] then
- awesome.emit_signal("services::wifi", 0, false)
- return
- end
-
- local strength = lines[3]:match("^%s*(.*)"):match("^.-%s+.-%s+.-(%S+)%.")
-
- awesome.emit_signal("services::wifi", math.floor(tonumber(strength) * 10 / 7), true)
- end
-}
diff --git a/.config/awesome/ui/archaic/init.lua b/.config/awesome/ui/archaic/init.lua
deleted file mode 100644
index df7bbda..0000000
--- a/.config/awesome/ui/archaic/init.lua
+++ /dev/null
@@ -1,238 +0,0 @@
-local awful = require "awful"
-local btn = awful.button.names
-local gc = require "gears.color"
-local gs = require "gears.surface"
-local qvars = require "quarrel.vars"
-local qui = require "quarrel.ui"
-local wibox = require "wibox"
-local beautiful = require "beautiful"
-local rubato = require "lib.rubato"
-local playerctl = require "lib.bling.signal.playerctl".lib {
- player = { "spotify", "cmus", "%any" }
-}
-
-local height = screen[1].geometry.height - (beautiful.useless_gap * 4 + qvars.border_width * 2)
-local inside_width = qvars.bar_size * 20 - (qvars.big_padding * 4 + qvars.border_width * 4 + qvars.bar_size * 4)
-
-local cover = wibox.widget {
- {
- widget = wibox.widget.imagebox,
- clip_shape = qvars.shape,
- forced_width = qvars.bar_size * 4,
- forced_height = qvars.bar_size * 4,
- visible = false,
- id = "cover"
- },
- {
- widget = wibox.container.background,
- forced_width = qvars.bar_size * 4,
- forced_height = qvars.bar_size * 4,
- bg = qvars.colors.black,
- fg = qvars.colors.dim.fg,
- shape = qvars.shape,
- {
- widget = wibox.container.place,
- {
- widget = wibox.widget.textbox,
- text = "",
- font = qui.font(4)
- }
- },
- id = "no_cover"
- },
- layout = wibox.layout.stack
-}
-
-local song = wibox.widget {
- widget = wibox.widget.textbox,
- text = "Nothing Playing ",
- id = "song"
-}
-
-local artist = wibox.widget {
- widget = wibox.widget.textbox,
- markup = qui.markup_fg(qvars.colors.dim.fg, "Nothing Playing "),
- font = qui.font(0.8),
-}
-
-local back = wibox.widget {
- widget = wibox.widget.textbox,
- text = "",
- font = qui.symbol_font(1.5),
- forced_height = beautiful.get_font_height(qui.symbol_font(0.5))
-}
-back:add_button(awful.button {
- modifiers = {},
- button = btn.LEFT,
- on_press = function()
- playerctl:previous()
- end
-})
-
-local play_pause = wibox.widget {
- widget = wibox.widget.textbox,
- text = "",
- font = qui.font(1.5),
- forced_height = beautiful.get_font_height(qui.font(0.5))
-}
-play_pause:add_button(awful.button {
- modifiers = {},
- button = btn.LEFT,
- on_press = function()
- playerctl:play_pause()
- end
-})
-playerctl:connect_signal("playback_status", function(_, playing)
- if playing then
- play_pause:set_text("")
- else
- play_pause:set_text("")
- end
-end)
-
-local forward = wibox.widget {
- widget = wibox.widget.textbox,
- text = "",
- font = qui.font(1.5),
- forced_height = beautiful.get_font_height(qui.font(0.5))
-}
-forward:add_button(awful.button {
-
- modifiers = {},
- button = btn.LEFT,
- on_press = function()
- playerctl:next()
- end
-})
-
-local progress_bar = wibox.widget {
- widget = wibox.widget.progressbar,
- max_value = 1,
- value = 0,
- shape = qvars.shape,
- bar_shape = qvars.shape,
- forced_height = beautiful.get_font_height(qui.font(0.5)),
- forced_width = inside_width - (qvars.padding * 2 + qvars.big_padding + back:get_preferred_size_at_dpi(screen[1].dpi) * 3),
- color = qvars.colors.yellow,
- background_color = qvars.colors.black
-}
-local progress_smoothing = rubato.timed {
- duration = qvars.anim_duration,
- intro = qvars.anim_intro,
- pos = 0,
- subscribed = function(pos)
- progress_bar.value = pos
- end
-}
-playerctl:connect_signal("position", function(_, pos, len)
- -- progress_bar.value = pos
- progress_smoothing.target = pos
- progress_bar.max_value = len
-end)
-
-local archaic = {}
-
-archaic.playerctl = playerctl
-
-archaic.widget = qui.popup {
- placement = function(d)
- return awful.placement.right(d, {
- margins = beautiful.useless_gap * 2
- })
- end,
- ontop = true,
- minimum_width = qvars.bar_size * 20,
- maximum_width = qvars.bar_size * 20,
- minimum_height = height,
- maximum_height = height,
- widget = {
- qui.styled {
- widget = wibox.container.background,
- {
- widget = wibox.container.margin,
- margins = qvars.big_padding,
- {
- cover,
- {
- {
- {
- {
- widget = wibox.container.scroll.horizontal,
- speed = 40,
- fps = 60,
- step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
- song
- },
- {
- widget = wibox.container.scroll.horizontal,
- speed = 40,
- fps = 60,
- step_function = wibox.container.scroll.step_functions.waiting_nonlinear_back_and_forth,
- artist
- },
- layout = wibox.layout.fixed.vertical
- },
- {
- widget = wibox.container.background,
- bg = gc {
- type = "linear",
- from = { 0, 0 },
- to = { inside_width, 0 },
- -- ^-------------------------------------------------------------------------------------- 270px
- stops = {
- { 0, "#0000000" },
- { 0.95, "#0000000" },
- { 0.95, qvars.colors.bg .. "1a" },
- { 1, qvars.colors.bg }
- }
- }
- },
- layout = wibox.layout.stack
- },
- nil,
- {
- progress_bar,
- {
- back,
- play_pause,
- forward,
-
- spacing = qvars.padding,
- layout = wibox.layout.fixed.horizontal
- },
- spacing = qvars.big_padding,
- layout = wibox.layout.fixed.horizontal
- },
- layout = wibox.layout.align.vertical
- },
- spacing = qvars.big_padding - qvars.border_width, -- for some reason awesome adds border_width here
- layout = wibox.layout.fixed.horizontal
- }
- }
- },
- layout = wibox.layout.fixed.vertical
- }
-}
-
-playerctl:connect_signal("metadata", function(_, _song, _artist, _cover)
- -- n { message = "sus" }
- song:set_text(_song .. " ")
- -- ic.widget:emit_signal("widget::redraw_needed")
- artist:set_markup(qui.markup_fg(qvars.colors.dim.fg, _artist .. " "))
- if _cover == "" then
- cover.cover.visible = false
- cover.no_cover.visible = true
- return
- end
- cover.cover.image = gs.load_uncached(_cover)
- cover.cover.visible = true
- cover.no_cover.visible = false
-end)
-
-function archaic:toggle()
- self.widget.visible = not self.widget.visible
-end
-
-archaic:toggle()
-
-return archaic
diff --git a/.config/awesome/ui/decorations/init.lua b/.config/awesome/ui/decorations/init.lua
index 9493a67..5b33dc3 100644
--- a/.config/awesome/ui/decorations/init.lua
+++ b/.config/awesome/ui/decorations/init.lua
@@ -1,2 +1,2 @@
-require "ui.decorations.titlebar"
require "ui.decorations.wallpaper"
+-- require "ui.decorations.clippy"
diff --git a/.config/awesome/ui/decorations/titlebar.lua b/.config/awesome/ui/decorations/titlebar.lua
deleted file mode 100644
index ab96457..0000000
--- a/.config/awesome/ui/decorations/titlebar.lua
+++ /dev/null
@@ -1,84 +0,0 @@
-local awful = require "awful"
-local cfg = require "misc.cfg"
-local gears = require "gears"
-local qvars = require "quarrel.vars"
-local rubato = require "lib.rubato"
-local wibox = require "wibox"
-
-local function button(color, color_focus, callback)
- local widget = wibox.widget {
- widget = wibox.container.background,
- forced_height = qvars.button_size,
- forced_width = qvars.button_size,
- bg = color,
- shape = qvars.shape,
- buttons = { callback }
- }
-
- widget:connect_signal("mouse::enter", function()
- local timed = rubato.timed {
- duration = 0.1,
- intro = 0.05,
- pos = qvars.button_size,
- subscribed = function(pos)
- widget.forced_width = pos
- end
- }
-
- timed.target = qvars.button_size * 2
- widget.bg = color_focus
- end)
-
- widget:connect_signal("mouse::leave", function()
- local timed = rubato.timed {
- duration = 0.1,
- intro = 0.05,
- pos = qvars.button_size * 2,
- subscribed = function(pos)
- widget.forced_width = pos
- end
- }
-
- timed.target = qvars.button_size
- widget.bg = color
- end)
-
- return widget
-end
-
-client.connect_signal("request::titlebars", function(c)
- if not cfg.draw_titlebar then return end
-
- local titlebar = awful.titlebar(c, {
- position = "top",
- size = qvars.button_size + qvars.padding * 2
- })
-
- awful.titlebar.enable_tooltip = false
-
- titlebar.widget = {
- widget = wibox.container.margin,
- margins = qvars.padding,
- {
- nil,
- nil,
- {
- button(qvars.colors.green, qvars.colors.bright.green, awful.button({}, 1, function()
- c.maximized = not c.maximized
- end)),
- button(qvars.colors.yellow, qvars.colors.bright.yellow, awful.button({}, 1, function()
- gears.timer.delayed_call(function()
- c.minimized = true
- end)
- end)),
- button(qvars.colors.red, qvars.colors.bright.red, awful.button({}, 1, function()
- c:kill()
- end)),
-
- spacing = qvars.padding,
- layout = wibox.layout.fixed.horizontal
- },
- layout = wibox.layout.align.horizontal
- }
- }
-end)
diff --git a/.config/awesome/ui/decorations/wallpaper.lua b/.config/awesome/ui/decorations/wallpaper.lua
index e1323b8..dbe54ee 100644
--- a/.config/awesome/ui/decorations/wallpaper.lua
+++ b/.config/awesome/ui/decorations/wallpaper.lua
@@ -25,7 +25,8 @@ screen.connect_signal("request::wallpaper", function(s)
}, "\n")
}
-- {
- -- image = gfs.get_configuration_dir() .. "assets/nightmare_fuel.png",
+ -- -- image = gfs.get_configuration_dir() .. "assets/nightmare_fuel.png",
+ -- image = "/home/delta/Desktop/offline vs online.jpg",
-- resize = true,
-- widget = wibox.widget.imagebox,
-- },
diff --git a/.config/awesome/ui/flashy/init.lua b/.config/awesome/ui/flashy/init.lua
deleted file mode 100644
index 68f1e13..0000000
--- a/.config/awesome/ui/flashy/init.lua
+++ /dev/null
@@ -1,74 +0,0 @@
-local awful = require "awful"
-local beautiful = require "beautiful"
-local gcolor = require "gears.color"
-local gdebug = require "gears.debug"
-local gtable = require "gears.table"
-local phosphor = require "assets.phosphor"
-local qui = require "quarrel.ui"
-local qvars = require "quarrel.vars"
-local rubato = require "lib.rubato"
-local wibox = require "wibox"
-
-local flashy = {}
-flashy._timeout_timer = {}
-
-flashy._widget = qui.popup {
- placement = awful.placement.centered,
- ontop = true,
- minimum_width = qvars.button_size * 15,
- maximum_width = qvars.button_size * 15,
- minimum_height = qvars.button_size * 15,
- maximum_height = qvars.button_size * 15,
- visible = false,
- widget = {
- {
- widget = wibox.container.place,
- valign = "center",
- haligh = "center",
- -- widget = wibox.container.margin,
- -- margins = qvars.big_padding * 8,
- {
- widget = wibox.widget.imagebox,
- image = gcolor.recolor_image(phosphor.battery_warning, qvars.colors.fg),
- -- image = phosphor["battery_warning"],
- forced_width = qvars.button_size * 15 - (qvars.border_width * 2 + qvars.big_padding * 2),
- forced_height = qvars.button_size * 14 - (qvars.border_width * 2 + qvars.big_padding * 2)
- }
- },
- {
- widget = wibox.widget.progressbar,
- max_value = 100,
- value = 50,
- forced_height = qvars.button_size;
- shape = qvars.shape,
- color = qvars.colors.yellow,
- background_color = qvars.colors.black
- },
- layout = wibox.layout.fixed.vertical
- }
-}
-
-flashy._timed = rubato.timed {
- duration = qvars.anim_duration,
- intro = qvars.anim_intro,
- pos = 0,
- subscribed = function(pos)
- flashy._widget.opacity = pos
-
- if pos == 0 then
- flashy._widget.visible = false
- else
- flashy._widget.visible = true
- end
- end
-}
-
-function flashy:show()
- self._timed.target = 1
-end
-
-function flashy:hide()
- self._timed.target = 0
-end
-
-return flashy
diff --git a/.config/awesome/ui/init.lua b/.config/awesome/ui/init.lua
index 9ab3019..e41644f 100644
--- a/.config/awesome/ui/init.lua
+++ b/.config/awesome/ui/init.lua
@@ -1,5 +1,2 @@
--- require "ui.window_switcher"
--- require "ui.conductor"
require "ui.statusbar"
--- require "ui.info_center"
require "ui.decorations"
diff --git a/.config/awesome/ui/statusbar/init.lua b/.config/awesome/ui/statusbar/init.lua
index e923473..7400a76 100644
--- a/.config/awesome/ui/statusbar/init.lua
+++ b/.config/awesome/ui/statusbar/init.lua
@@ -14,6 +14,7 @@ local brightness = require "ui.statusbar.widgets.brightness"
local clock = require "ui.statusbar.widgets.clock"
local keyboardlayout = require "ui.statusbar.widgets.keyboardlayout"
local taglist = require "ui.statusbar.widgets.taglist"
+local volume = require "ui.statusbar.widgets.volume"
local wifi = require "ui.statusbar.widgets.wifi"
screen.connect_signal("request::desktop_decoration", function(s)
@@ -24,8 +25,8 @@ screen.connect_signal("request::desktop_decoration", function(s)
{
widget = wibox.widget.imagebox,
image = gcolor.recolor_image(phosphor.caret_right_fill, qvars.colors.fg),
- forced_width = qvars.icon_size,
- forced_height = qvars.icon_size
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height
},
_expanded = false
}
@@ -51,14 +52,15 @@ screen.connect_signal("request::desktop_decoration", function(s)
widget = wibox.container.place,
valign = "bottom",
{
+ brightness,
+ volume,
+ battery,
+ wifi,
{
widget = wibox.container.place,
keyboardlayout
},
clock,
- wifi,
- brightness,
- battery,
layout = wibox.layout.fixed.vertical,
spacing = qvars.padding * 2
},
@@ -69,7 +71,7 @@ screen.connect_signal("request::desktop_decoration", function(s)
nil,
nil,
layout = wibox.layout.align.horizontal,
- }
+ },
}
local bar_width = bar.width + qvars.border_width * 2
@@ -78,6 +80,8 @@ screen.connect_signal("request::desktop_decoration", function(s)
left = bar_width + beautiful.useless_gap * 4
}
+ local panel_width
+
local timed = rubato.timed {
duration = qvars.anim_duration,
intro = qvars.anim_intro,
@@ -85,6 +89,9 @@ screen.connect_signal("request::desktop_decoration", function(s)
subscribed = function(pos)
if pos ~= bar_width and expand_button._expanded then
bar.widget.widget.third = panel
+ if panel_width == nil then
+ panel_width = bar.widget.widget.third.width
+ end
bar.ontop = true
elseif pos == bar_width and not expand_button._expanded then
bar.widget.widget.third = nil
@@ -104,12 +111,15 @@ screen.connect_signal("request::desktop_decoration", function(s)
if expand_button._expanded then
timed.target = bar_width
else
- timed.target = bar_width + qvars.bar_size * 6
+ timed.target = bar_width + qvars.expanded_bar_size
+ -- timed.target = bar_width + qvars.big_padding + (qvars.big_padding * 2 + qvars.element_size * 4) * 3 + qvars.padding * 2
end
+ -- q.debug(tostring(panel_width))
expand_button._expanded = not expand_button._expanded
end,
hidden = true
}
}
+
end)
diff --git a/.config/awesome/ui/statusbar/panel/init.lua b/.config/awesome/ui/statusbar/panel/init.lua
index fe66789..b9b414c 100644
--- a/.config/awesome/ui/statusbar/panel/init.lua
+++ b/.config/awesome/ui/statusbar/panel/init.lua
@@ -1,65 +1,46 @@
local qvars = require "quarrel.vars"
local wibox = require "wibox"
-local battery_bar = require "ui.statusbar.panel.widgets.battery_bar"
-local brightness_bar = require "ui.statusbar.panel.widgets.brightness_bar"
+local displays = require "ui.statusbar.panel.widgets.displays"
+local power_menu = require "ui.statusbar.panel.widgets.power_menu"
+
local panel = wibox.widget {
- {
+ -- widget = wibox.container.constraint,
+ -- width = qvars.expanded_bar_size,
+ -- strategy = "exact",
+ -- {
widget = wibox.container.margin,
margins = {
- left = qvars.big_padding * 2
- }
- },
- {
- widget = wibox.container.constraint,
- width = qvars.bar_size * 6,
- strategy = "exact",
+ left = qvars.big_padding
+ },
{
- widget = wibox.container.margin,
- margins = {
- right = qvars.big_padding * 4
+ {
+ widget = wibox.container.place,
+ valign = "top",
+ {
+ displays.battery,
+ displays.volume,
+ displays.brightness,
+ layout = wibox.layout.fixed.horizontal,
+ spacing = qvars.padding,
+ }
},
{
+ widget = wibox.container.background,
{
- widget = wibox.widget.calendar.month,
- date = os.date("*t"),
- font = qvars.font,
- -- long_weekdays = true,
- -- flex_height = true,
- -- fn_embed = decorate_cell
- },
- {
- widget = wibox.container.background,
- -- bg = qvars.colors.blue,
- {
- widget = wibox.widget.textbox,
- text = ":)"
- }
- },
- {
- widget = wibox.container.place,
- valign = "bottom",
- {
- {
- widget = wibox.widget.separator,
- forced_height = qvars.char_height * 4 + qvars.padding * 4,
- color = qvars.colors.transparent,
- },
- brightness_bar,
- battery_bar,
- layout = wibox.layout.fixed.vertical,
- spacing = qvars.padding * 2
- },
- },
- layout = wibox.layout.align.vertical,
- }
+ widget = wibox.widget.textbox,
+ text = ":)"
+ }
+ },
+ {
+ widget = wibox.container.place,
+ valign = "bottom",
+ power_menu
+ },
+ layout = wibox.layout.align.vertical,
}
- },
- layout = wibox.layout.fixed.horizontal
+ -- }
}
--- panel:get_children_by_id("ratio_layout"):adjust_ratio(2, 0.3, 0.7, 0)
--- gdebug.dump(panel:get_children_by_id("ratio_layout"))
-
return panel
diff --git a/.config/awesome/ui/statusbar/panel/widgets/battery_bar.lua b/.config/awesome/ui/statusbar/panel/widgets/battery_bar.lua
deleted file mode 100644
index c1466f4..0000000
--- a/.config/awesome/ui/statusbar/panel/widgets/battery_bar.lua
+++ /dev/null
@@ -1,60 +0,0 @@
-local qmath = require "quarrel.math"
-local qvars = require "quarrel.vars"
-local wibox = require "wibox"
-
-local battery_bar = wibox.widget {
- widget = wibox.container.place,
- forced_height = qvars.char_height,
- {
- {
- widget = wibox.container.constraint,
- width = qvars.char_width * 4,
- strategy = "exact",
- {
- widget = wibox.widget.textbox,
- text = "0%"
- },
- id = "text"
- },
- nil,
- {
- widget = wibox.container.margin,
- margins = {
- left = qvars.padding
- },
- {
- widget = wibox.container.place,
- {
- widget = wibox.widget.progressbar,
- max_value = 100,
- value = 0,
- forced_height = qvars.char_height / 4,
- shape = qvars.shape,
- background_color = qvars.colors.black,
- color = qvars.colors.red,
- }
- },
- id = "bar"
- },
- layout = wibox.layout.align.horizontal,
- -- expand = "outside"
- }
-}
-
-awesome.connect_signal("services::battery", function(capacity)
- local color = qmath.step_value(capacity, {
- { 0, "red" },
- { 20, "red" },
- { 40, "yellow" },
- { 60, "green" },
- { 80, "green" },
- { 100 }
- })
-
- battery_bar.widget.bar.widget.widget.color = qvars.colors[color]
- battery_bar.widget.bar.widget.widget.value = capacity
-
- battery_bar.widget.text.widget.text = capacity .. "%"
-end)
-
-return battery_bar
diff --git a/.config/awesome/ui/statusbar/panel/widgets/brightness_bar.lua b/.config/awesome/ui/statusbar/panel/widgets/brightness_bar.lua
deleted file mode 100644
index 7d3e5f0..0000000
--- a/.config/awesome/ui/statusbar/panel/widgets/brightness_bar.lua
+++ /dev/null
@@ -1,46 +0,0 @@
-local qmath = require "quarrel.math"
-local qvars = require "quarrel.vars"
-local wibox = require "wibox"
-
-local brightness_bar = wibox.widget {
- widget = wibox.container.place,
- forced_height = qvars.char_height,
- {
- {
- widget = wibox.widget.textbox,
- text = "0%",
- id = "text"
- },
- nil,
- {
- widget = wibox.container.margin,
- margins = {
- left = qvars.padding
- },
- {
- widget = wibox.container.place,
- {
- widget = wibox.widget.progressbar,
- max_value = 100,
- value = 0,
- forced_height = qvars.char_height / 4,
- shape = qvars.shape,
- background_color = qvars.colors.black,
- color = qvars.colors.fg,
- }
- },
- id = "bar"
- },
- layout = wibox.layout.align.horizontal,
- }
-}
-
-awesome.connect_signal("services::brightness", function(brightness)
- brightness = math.floor(qmath.translate_range(brightness, 0, 255, 0, 100))
-
- brightness_bar.widget.bar.widget.widget.value = brightness
-
- brightness_bar.widget.text.text = brightness .. "%"
-end)
-
-return brightness_bar
diff --git a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
index e69de29..8b13789 100644
--- a/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
+++ b/.config/awesome/ui/statusbar/panel/widgets/calendar.lua
@@ -0,0 +1 @@
+
diff --git a/.config/awesome/ui/statusbar/panel/widgets/displays.lua b/.config/awesome/ui/statusbar/panel/widgets/displays.lua
new file mode 100644
index 0000000..cd05253
--- /dev/null
+++ b/.config/awesome/ui/statusbar/panel/widgets/displays.lua
@@ -0,0 +1,104 @@
+local qmath = require "quarrel.math"
+local qvars = require "quarrel.vars"
+local qui = require "quarrel.ui"
+local wibox = require "wibox"
+local phosphor = require "assets.phosphor"
+local gcolor = require "gears.color"
+
+local function create_display(icon, color)
+ return wibox.widget(qui.styled {
+ widget = wibox.container.background,
+ {
+ widget = wibox.container.margin,
+ margins = qvars.big_padding,
+ {
+ widget = wibox.container.place,
+ {
+ {
+ widget = wibox.container.radialprogressbar,
+ max_value = 100,
+ border_color = qvars.colors.black,
+ color = color,
+ border_width = qvars.border_width * 2,
+ forced_height = qvars.element_size * 4,
+ forced_width = qvars.element_size * 4,
+ {
+ widget = wibox.container.place,
+ {
+ widget = wibox.widget.imagebox,
+ image = icon,
+ forced_height = qvars.char_height,
+ forced_width = qvars.char_height,
+ id = "icon"
+ }
+ },
+ id = "indicator"
+ },
+ {
+ widget = wibox.container.place,
+ {
+ widget = wibox.widget.textbox,
+ text = "0%",
+ id = "text"
+ }
+ },
+ layout = wibox.layout.fixed.vertical,
+ spacing = qvars.big_padding
+ }
+ }
+ }
+ })
+end
+
+local d_battery = create_display(gcolor.recolor_image(phosphor.battery_vertical_warning_fill, qvars.colors.fg), qvars.colors.red)
+
+awesome.connect_signal("services::battery", function(capacity, status)
+ local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
+ { 0, { "empty", "red" } },
+ { 20, { "low", "red" } },
+ { 40, { "medium", "yellow" } },
+ { 60, { "high", "green" } },
+ { 80, { "full", "green" } },
+ { 100 }
+ })
+
+ d_battery:get_children_by_id("indicator")[1].color = qvars.colors[icon_data[2]]
+ d_battery:get_children_by_id("indicator")[1].value = capacity
+ d_battery:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]])
+
+ d_battery:get_children_by_id("text")[1].text = capacity .. "%"
+end)
+
+local d_volume = create_display(gcolor.recolor_image(phosphor.speaker_simple_high_fill, qvars.colors.fg), qvars.colors.fg)
+
+awesome.connect_signal("services::audio", function(volume, muted)
+ d_volume:get_children_by_id("indicator")[1].value = math.min(volume, 100)
+ d_volume:get_children_by_id("text")[1].text = volume .. "%"
+
+ if muted then
+ d_volume:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["speaker_simple_x_fill"], qvars.colors.red)
+ return
+ end
+
+ local icon_data = qmath.step_value(volume, {
+ { 0, "slash" },
+ { 25, "none" },
+ { 50, "low" },
+ { 75, "high" },
+ { 100 }
+ })
+
+ d_volume:get_children_by_id("icon")[1].image = gcolor.recolor_image(phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg)
+end)
+
+local d_brightness = create_display(gcolor.recolor_image(phosphor.sun_fill, qvars.colors.fg), qvars.colors.fg)
+
+awesome.connect_signal("services::brightness", function(brightness)
+ brightness = math.floor(qmath.translate_range(brightness, 0, 255, 0, 100))
+
+ d_brightness:get_children_by_id("indicator")[1].value = brightness
+
+ d_brightness:get_children_by_id("text")[1].text = brightness .. "%"
+end)
+
+return { battery = d_battery, volume = d_volume, brightness = d_brightness }
diff --git a/.config/awesome/ui/statusbar/panel/widgets/power_menu.lua b/.config/awesome/ui/statusbar/panel/widgets/power_menu.lua
new file mode 100644
index 0000000..ffb5a76
--- /dev/null
+++ b/.config/awesome/ui/statusbar/panel/widgets/power_menu.lua
@@ -0,0 +1,62 @@
+local q = require "quarrel"
+local qbind = require "quarrel.bind"
+local qvars = require "quarrel.vars"
+local qui = require "quarrel.ui"
+local wibox = require "wibox"
+
+local power_menu = wibox.widget {
+ qui.styled {
+ widget = wibox.container.background,
+ bg = qvars.colors.black,
+ {
+ widget = wibox.widget.textbox,
+ text = "1",
+ buttons = {
+ qbind:new {
+ triggers = qvars.btns.left,
+ press = function()
+ q.debug("from 1")
+ end,
+ hidden = true
+ }
+ }
+ }
+ },
+ qui.styled {
+ widget = wibox.container.background,
+ bg = qvars.colors.black,
+ {
+ widget = wibox.widget.textbox,
+ text = "2",
+ buttons = {
+ qbind:new {
+ triggers = qvars.btns.left,
+ press = function()
+ q.debug("from 2")
+ end,
+ hidden = true
+ }
+ }
+ }
+ },
+ qui.styled {
+ widget = wibox.container.background,
+ bg = qvars.colors.black,
+ {
+ widget = wibox.widget.textbox,
+ text = "3",
+ buttons = {
+ qbind:new {
+ triggers = qvars.btns.left,
+ press = function()
+ q.debug("from 3")
+ end,
+ hidden = true
+ }
+ }
+ }
+ },
+ layout = wibox.layout.flex.horizontal
+}
+
+return power_menu
diff --git a/.config/awesome/ui/statusbar/widgets/battery.lua b/.config/awesome/ui/statusbar/widgets/battery.lua
index 98af803..f220ff1 100644
--- a/.config/awesome/ui/statusbar/widgets/battery.lua
+++ b/.config/awesome/ui/statusbar/widgets/battery.lua
@@ -10,19 +10,14 @@ local battery = wibox.widget {
halign = "center",
{
widget = wibox.widget.imagebox,
- image = gcolor.recolor_image(phosphor.battery_warning_vertical_fill, qvars.colors.red),
- forced_width = qvars.icon_size,
- forced_height = qvars.icon_size
+ image = gcolor.recolor_image(phosphor.battery_vertical_warning_fill, qvars.colors.red),
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height
}
}
awesome.connect_signal("services::battery", function(capacity, status)
- if status == "Charging" then
- battery.widget.image = gcolor.recolor_image(phosphor.battery_charging_vertical_fill, qvars.colors.green)
- return
- end
-
- local icon_data = qmath.step_value(capacity, {
+ local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
{ 0, { "empty", "red" } },
{ 20, { "low", "red" } },
{ 40, { "medium", "yellow" } },
diff --git a/.config/awesome/ui/statusbar/widgets/brightness.lua b/.config/awesome/ui/statusbar/widgets/brightness.lua
index 5c1cb16..bfb8e91 100644
--- a/.config/awesome/ui/statusbar/widgets/brightness.lua
+++ b/.config/awesome/ui/statusbar/widgets/brightness.lua
@@ -11,8 +11,8 @@ local brightness = wibox.widget {
{
widget = wibox.widget.imagebox,
image = gcolor.recolor_image(phosphor.moon_fill, qvars.colors.fg),
- forced_width = qvars.icon_size,
- forced_height = qvars.icon_size
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height
}
}
diff --git a/.config/awesome/ui/statusbar/widgets/taglist.lua b/.config/awesome/ui/statusbar/widgets/taglist.lua
index 5b479bc..10618aa 100644
--- a/.config/awesome/ui/statusbar/widgets/taglist.lua
+++ b/.config/awesome/ui/statusbar/widgets/taglist.lua
@@ -19,8 +19,8 @@ return awful.widget.taglist {
{
widget = wibox.widget.imagebox,
image = gcolor.recolor_image(phosphor.circle_bold, qvars.colors.fg),
- forced_width = qvars.icon_size,
- forced_height = qvars.icon_size,
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height,
icon = phosphor.dot_fill
},
create_callback = function(self, tag)
diff --git a/.config/awesome/ui/statusbar/widgets/volume.lua b/.config/awesome/ui/statusbar/widgets/volume.lua
index e69de29..72723a0 100644
--- a/.config/awesome/ui/statusbar/widgets/volume.lua
+++ b/.config/awesome/ui/statusbar/widgets/volume.lua
@@ -0,0 +1,36 @@
+local gcolor = require "gears.color"
+local phosphor = require "assets.phosphor"
+local qmath = require "quarrel.math"
+local qvars = require "quarrel.vars"
+local wibox = require "wibox"
+
+local volume_widget = wibox.widget {
+ widget = wibox.container.place,
+ valign = "center",
+ halign = "center",
+ {
+ widget = wibox.widget.imagebox,
+ image = gcolor.recolor_image(phosphor.speaker_simple_slash_fill, qvars.colors.red),
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height
+ }
+}
+
+awesome.connect_signal("services::audio", function(volume, muted)
+ if muted then
+ volume_widget.widget.image = gcolor.recolor_image(phosphor["speaker_simple_x_fill"], qvars.colors.red)
+ return
+ end
+
+ local icon_data = qmath.step_value(volume, {
+ { 0, "slash" },
+ { 25, "none" },
+ { 50, "low" },
+ { 75, "high" },
+ { 100 }
+ })
+
+ volume_widget.widget.image = gcolor.recolor_image(phosphor["speaker_simple_" .. icon_data .. "_fill"], qvars.colors.fg)
+end)
+
+return volume_widget
diff --git a/.config/awesome/ui/statusbar/widgets/wifi.lua b/.config/awesome/ui/statusbar/widgets/wifi.lua
index ec5b72c..c895b0a 100644
--- a/.config/awesome/ui/statusbar/widgets/wifi.lua
+++ b/.config/awesome/ui/statusbar/widgets/wifi.lua
@@ -3,6 +3,8 @@ local phosphor = require "assets.phosphor"
local qmath = require "quarrel.math"
local qvars = require "quarrel.vars"
local wibox = require "wibox"
+local q = require "quarrel"
+local gdebug = require "gears.debug"
local wifi = wibox.widget {
widget = wibox.container.place,
@@ -11,12 +13,12 @@ local wifi = wibox.widget {
{
widget = wibox.widget.imagebox,
image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red),
- forced_width = qvars.icon_size,
- forced_height = qvars.icon_size
+ forced_width = qvars.char_height,
+ forced_height = qvars.char_height
}
}
-awesome.connect_signal("services::wifi", function(strength, connected)
+awesome.connect_signal("services::wifi", function(essid, strength, connected)
if not connected then
wifi.widget.image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red)
return