restructure services, add get_essid to quarrel.native and other wip work
This commit is contained in:
parent
ea1bdf6585
commit
f5612f081d
42
.Xresources
Normal file
42
.Xresources
Normal file
|
@ -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
|
||||||
|
|
Before Width: | Height: | Size: 416 B After Width: | Height: | Size: 416 B |
Before Width: | Height: | Size: 360 B After Width: | Height: | Size: 360 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="#000000" viewBox="0 0 256 256"><path d="M184,152V104a8,8,0,0,1,16,0v48a8,8,0,0,1-16,0Zm40-72a8,8,0,0,0-8,8v80a8,8,0,0,0,16,0V88A8,8,0,0,0,224,80ZM53.92,34.62A8,8,0,1,0,42.08,45.38L73.55,80H32A16,16,0,0,0,16,96v64a16,16,0,0,0,16,16H77.25l69.84,54.31A8,8,0,0,0,160,224V175.09l42.08,46.29a8,8,0,1,0,11.84-10.76Zm92.16,77.59A8,8,0,0,0,160,106.83V32a8,8,0,0,0-12.91-6.31l-39.85,31a8,8,0,0,0-1,11.7Z"></path></svg>
|
After Width: | Height: | Size: 477 B |
|
@ -1,13 +1,12 @@
|
||||||
local archaic = require "ui.archaic"
|
|
||||||
local awful = require "awful"
|
local awful = require "awful"
|
||||||
local cfg = require "misc.cfg"
|
local cfg = require "misc.cfg"
|
||||||
local flashy = require "ui.flashy"
|
|
||||||
local fresnel = require "ui.fresnel"
|
local fresnel = require "ui.fresnel"
|
||||||
local gtimer = require "gears.timer"
|
local gtimer = require "gears.timer"
|
||||||
local insightful = require "ui.insightful"
|
local insightful = require "ui.insightful"
|
||||||
local naughty = require "naughty"
|
local naughty = require "naughty"
|
||||||
local qbind = require "quarrel.bind"
|
local qbind = require "quarrel.bind"
|
||||||
local qvars = require "quarrel.vars"
|
local qvars = require "quarrel.vars"
|
||||||
|
local playerctl = require "services.playerctl"
|
||||||
|
|
||||||
local recording = { false, "" }
|
local recording = { false, "" }
|
||||||
|
|
||||||
|
@ -15,7 +14,7 @@ client.connect_signal("request::default_mousebindings", function()
|
||||||
awful.mouse.append_client_mousebindings {
|
awful.mouse.append_client_mousebindings {
|
||||||
qbind:new {
|
qbind:new {
|
||||||
triggers = qvars.btns.left,
|
triggers = qvars.btns.left,
|
||||||
press = function (c)
|
press = function(c)
|
||||||
c:activate {
|
c:activate {
|
||||||
context = "mouse_click"
|
context = "mouse_click"
|
||||||
}
|
}
|
||||||
|
@ -26,7 +25,7 @@ client.connect_signal("request::default_mousebindings", function()
|
||||||
qbind:new {
|
qbind:new {
|
||||||
mods = qvars.mods.M,
|
mods = qvars.mods.M,
|
||||||
triggers = qvars.btns.left,
|
triggers = qvars.btns.left,
|
||||||
press = function (c)
|
press = function(c)
|
||||||
c:activate {
|
c:activate {
|
||||||
context = "mouse_click",
|
context = "mouse_click",
|
||||||
action = "mouse_move"
|
action = "mouse_move"
|
||||||
|
@ -38,7 +37,7 @@ client.connect_signal("request::default_mousebindings", function()
|
||||||
qbind:new {
|
qbind:new {
|
||||||
mods = qvars.mods.M,
|
mods = qvars.mods.M,
|
||||||
triggers = qvars.btns.right,
|
triggers = qvars.btns.right,
|
||||||
press = function (c)
|
press = function(c)
|
||||||
c:activate {
|
c:activate {
|
||||||
context = "mouse_click",
|
context = "mouse_click",
|
||||||
action = "mouse_resize"
|
action = "mouse_resize"
|
||||||
|
@ -110,19 +109,6 @@ awful.keyboard.append_global_keybindings {
|
||||||
group = "awesome",
|
group = "awesome",
|
||||||
desc = "toggle insightful"
|
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 {
|
qbind:new {
|
||||||
mods = qvars.mods.M,
|
mods = qvars.mods.M,
|
||||||
triggers = "space",
|
triggers = "space",
|
||||||
|
@ -132,15 +118,6 @@ awful.keyboard.append_global_keybindings {
|
||||||
group = "awesome",
|
group = "awesome",
|
||||||
desc = "toggle fresnel"
|
desc = "toggle fresnel"
|
||||||
},
|
},
|
||||||
qbind:new {
|
|
||||||
mods = qvars.mods.MC,
|
|
||||||
triggers = "d",
|
|
||||||
press = function()
|
|
||||||
archaic:toggle()
|
|
||||||
end,
|
|
||||||
group = "awesome",
|
|
||||||
desc = "toggle archaic"
|
|
||||||
},
|
|
||||||
|
|
||||||
qbind:new {
|
qbind:new {
|
||||||
mods = {},
|
mods = {},
|
||||||
|
@ -175,9 +152,9 @@ awful.keyboard.append_global_keybindings {
|
||||||
},
|
},
|
||||||
press = function(next)
|
press = function(next)
|
||||||
if next then
|
if next then
|
||||||
archaic.playerctl:next()
|
playerctl:next()
|
||||||
else
|
else
|
||||||
archaic.playerctl:previous()
|
playerctl:previous()
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
group = "audio",
|
group = "audio",
|
||||||
|
@ -187,7 +164,7 @@ awful.keyboard.append_global_keybindings {
|
||||||
mods = {},
|
mods = {},
|
||||||
triggers = "XF86AudioPlay",
|
triggers = "XF86AudioPlay",
|
||||||
press = function()
|
press = function()
|
||||||
archaic.playerctl:play_pause()
|
playerctl:play_pause()
|
||||||
end,
|
end,
|
||||||
group = "audio",
|
group = "audio",
|
||||||
desc = "(un)pause song"
|
desc = "(un)pause song"
|
||||||
|
|
|
@ -90,7 +90,7 @@ ruled.client.connect_signal("request::rules", function()
|
||||||
ruled.client.append_rule({
|
ruled.client.append_rule({
|
||||||
id = "steam",
|
id = "steam",
|
||||||
rule_any = {
|
rule_any = {
|
||||||
class = { "Steam" }
|
class = { "steam" }
|
||||||
},
|
},
|
||||||
properties = {
|
properties = {
|
||||||
screen = 1,
|
screen = 1,
|
||||||
|
|
388
.config/awesome/quarrel/json.lua
Normal file
388
.config/awesome/quarrel/json.lua
Normal file
|
@ -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
|
|
@ -1,6 +1,9 @@
|
||||||
local qmath = {}
|
local qmath = {}
|
||||||
|
|
||||||
function qmath.step_value(value, steps)
|
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
|
for i, step in ipairs(steps) do
|
||||||
if step[1] <= value and value <= steps[i + 1][1] then
|
if step[1] <= value and value <= steps[i + 1][1] then
|
||||||
return step[2]
|
return step[2]
|
||||||
|
|
|
@ -14,6 +14,7 @@ rayon = "1.6.1"
|
||||||
serde = { version = "1.0.152", features = [ "derive" ] }
|
serde = { version = "1.0.152", features = [ "derive" ] }
|
||||||
url = "2.3.1"
|
url = "2.3.1"
|
||||||
rodio = "0.17.1"
|
rodio = "0.17.1"
|
||||||
|
nix = "0.26.2"
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
|
@ -13,14 +13,7 @@ use crate::lenses::entry::{
|
||||||
pub fn query<'a>(lua: &Lua, input: String) -> LuaResult<LuaTable> {
|
pub fn query<'a>(lua: &Lua, input: String) -> LuaResult<LuaTable> {
|
||||||
let result = match eval(input.trim(), true, Unit::Celsius, false) {
|
let result = match eval(input.trim(), true, Unit::Celsius, false) {
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
format!(
|
format!("{result}")
|
||||||
"{}{}",
|
|
||||||
result.value,
|
|
||||||
match result.unit {
|
|
||||||
Unit::NoUnit => "".to_owned(),
|
|
||||||
_ => format!(" {:?}", result.unit),
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
Err(_) => return lua.create_table(),
|
Err(_) => return lua.create_table(),
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
mod lenses;
|
mod lenses;
|
||||||
// mod sound;
|
mod net;
|
||||||
|
|
||||||
use mlua::prelude::*;
|
use mlua::prelude::*;
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ fn qnative(lua: &Lua) -> LuaResult<LuaTable> {
|
||||||
|
|
||||||
let exports = lua.create_table()?;
|
let exports = lua.create_table()?;
|
||||||
exports.set("lenses", lenses)?;
|
exports.set("lenses", lenses)?;
|
||||||
|
exports.set("get_essid", lua.create_function(net::get_first_essid)?)?;
|
||||||
|
|
||||||
Ok(exports)
|
Ok(exports)
|
||||||
}
|
}
|
||||||
|
|
113
.config/awesome/quarrel/native/src/net/mod.rs
Normal file
113
.config/awesome/quarrel/native/src/net/mod.rs
Normal file
|
@ -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<String> {
|
||||||
|
type Buffer = [c_char; 1024];
|
||||||
|
let mut buffer: Buffer = [0; 1024];
|
||||||
|
|
||||||
|
let mut if_conf = IfConf {
|
||||||
|
ifc_len: size_of::<Buffer>() 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::<IfConf>() 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<String> {
|
||||||
|
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::<c_void>(),
|
||||||
|
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<RawFd> {
|
||||||
|
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"))
|
||||||
|
}
|
104
.config/awesome/quarrel/native/src/net/wireless.rs
Normal file
104
.config/awesome/quarrel/native/src/net/wireless.rs
Normal file
|
@ -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,
|
||||||
|
}
|
|
@ -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<()> {
|
|
||||||
|
|
||||||
}
|
|
18
.config/awesome/quarrel/service.lua
Normal file
18
.config/awesome/quarrel/service.lua
Normal file
|
@ -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
|
|
@ -34,10 +34,10 @@ local char_width, char_height = wibox.widget {
|
||||||
qvars.char_height = char_height
|
qvars.char_height = char_height
|
||||||
qvars.char_width = char_width
|
qvars.char_width = char_width
|
||||||
|
|
||||||
-- qvars.bar_size = dpi(16)
|
|
||||||
qvars.bar_size = dpi(24) + qvars.big_padding * 2
|
qvars.bar_size = dpi(24) + qvars.big_padding * 2
|
||||||
qvars.icon_size = qvars.char_height
|
-- qvars.expanded_bar_size = qvars.bar_size * 6
|
||||||
qvars.button_size = dpi(12)
|
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 = {
|
qvars.colors = {
|
||||||
fg = x_col.foreground,
|
fg = x_col.foreground,
|
||||||
|
|
|
@ -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
|
|
||||||
}
|
|
|
@ -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
|
|
||||||
}
|
|
118
.config/awesome/services/common.lua
Normal file
118
.config/awesome/services/common.lua
Normal file
|
@ -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
|
|
@ -1,3 +1,2 @@
|
||||||
require "services.battery"
|
require "services.playerctl"
|
||||||
require "services.brightness"
|
require "services.common"
|
||||||
require "services.wifi"
|
|
||||||
|
|
45
.config/awesome/services/playerctl.lua
Normal file
45
.config/awesome/services/playerctl.lua
Normal file
|
@ -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
|
|
@ -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
|
|
||||||
}
|
|
|
@ -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
|
|
|
@ -1,2 +1,2 @@
|
||||||
require "ui.decorations.titlebar"
|
|
||||||
require "ui.decorations.wallpaper"
|
require "ui.decorations.wallpaper"
|
||||||
|
-- require "ui.decorations.clippy"
|
||||||
|
|
|
@ -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)
|
|
|
@ -25,7 +25,8 @@ screen.connect_signal("request::wallpaper", function(s)
|
||||||
}, "\n")
|
}, "\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,
|
-- resize = true,
|
||||||
-- widget = wibox.widget.imagebox,
|
-- widget = wibox.widget.imagebox,
|
||||||
-- },
|
-- },
|
||||||
|
|
|
@ -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
|
|
|
@ -1,5 +1,2 @@
|
||||||
-- require "ui.window_switcher"
|
|
||||||
-- require "ui.conductor"
|
|
||||||
require "ui.statusbar"
|
require "ui.statusbar"
|
||||||
-- require "ui.info_center"
|
|
||||||
require "ui.decorations"
|
require "ui.decorations"
|
||||||
|
|
|
@ -14,6 +14,7 @@ local brightness = require "ui.statusbar.widgets.brightness"
|
||||||
local clock = require "ui.statusbar.widgets.clock"
|
local clock = require "ui.statusbar.widgets.clock"
|
||||||
local keyboardlayout = require "ui.statusbar.widgets.keyboardlayout"
|
local keyboardlayout = require "ui.statusbar.widgets.keyboardlayout"
|
||||||
local taglist = require "ui.statusbar.widgets.taglist"
|
local taglist = require "ui.statusbar.widgets.taglist"
|
||||||
|
local volume = require "ui.statusbar.widgets.volume"
|
||||||
local wifi = require "ui.statusbar.widgets.wifi"
|
local wifi = require "ui.statusbar.widgets.wifi"
|
||||||
|
|
||||||
screen.connect_signal("request::desktop_decoration", function(s)
|
screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
|
@ -24,8 +25,8 @@ screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
{
|
{
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
image = gcolor.recolor_image(phosphor.caret_right_fill, qvars.colors.fg),
|
image = gcolor.recolor_image(phosphor.caret_right_fill, qvars.colors.fg),
|
||||||
forced_width = qvars.icon_size,
|
forced_width = qvars.char_height,
|
||||||
forced_height = qvars.icon_size
|
forced_height = qvars.char_height
|
||||||
},
|
},
|
||||||
_expanded = false
|
_expanded = false
|
||||||
}
|
}
|
||||||
|
@ -51,14 +52,15 @@ screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
widget = wibox.container.place,
|
widget = wibox.container.place,
|
||||||
valign = "bottom",
|
valign = "bottom",
|
||||||
{
|
{
|
||||||
|
brightness,
|
||||||
|
volume,
|
||||||
|
battery,
|
||||||
|
wifi,
|
||||||
{
|
{
|
||||||
widget = wibox.container.place,
|
widget = wibox.container.place,
|
||||||
keyboardlayout
|
keyboardlayout
|
||||||
},
|
},
|
||||||
clock,
|
clock,
|
||||||
wifi,
|
|
||||||
brightness,
|
|
||||||
battery,
|
|
||||||
layout = wibox.layout.fixed.vertical,
|
layout = wibox.layout.fixed.vertical,
|
||||||
spacing = qvars.padding * 2
|
spacing = qvars.padding * 2
|
||||||
},
|
},
|
||||||
|
@ -69,7 +71,7 @@ screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
layout = wibox.layout.align.horizontal,
|
layout = wibox.layout.align.horizontal,
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
local bar_width = bar.width + qvars.border_width * 2
|
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
|
left = bar_width + beautiful.useless_gap * 4
|
||||||
}
|
}
|
||||||
|
|
||||||
|
local panel_width
|
||||||
|
|
||||||
local timed = rubato.timed {
|
local timed = rubato.timed {
|
||||||
duration = qvars.anim_duration,
|
duration = qvars.anim_duration,
|
||||||
intro = qvars.anim_intro,
|
intro = qvars.anim_intro,
|
||||||
|
@ -85,6 +89,9 @@ screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
subscribed = function(pos)
|
subscribed = function(pos)
|
||||||
if pos ~= bar_width and expand_button._expanded then
|
if pos ~= bar_width and expand_button._expanded then
|
||||||
bar.widget.widget.third = panel
|
bar.widget.widget.third = panel
|
||||||
|
if panel_width == nil then
|
||||||
|
panel_width = bar.widget.widget.third.width
|
||||||
|
end
|
||||||
bar.ontop = true
|
bar.ontop = true
|
||||||
elseif pos == bar_width and not expand_button._expanded then
|
elseif pos == bar_width and not expand_button._expanded then
|
||||||
bar.widget.widget.third = nil
|
bar.widget.widget.third = nil
|
||||||
|
@ -104,12 +111,15 @@ screen.connect_signal("request::desktop_decoration", function(s)
|
||||||
if expand_button._expanded then
|
if expand_button._expanded then
|
||||||
timed.target = bar_width
|
timed.target = bar_width
|
||||||
else
|
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
|
end
|
||||||
|
|
||||||
|
-- q.debug(tostring(panel_width))
|
||||||
expand_button._expanded = not expand_button._expanded
|
expand_button._expanded = not expand_button._expanded
|
||||||
end,
|
end,
|
||||||
hidden = true
|
hidden = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
|
@ -1,65 +1,46 @@
|
||||||
local qvars = require "quarrel.vars"
|
local qvars = require "quarrel.vars"
|
||||||
local wibox = require "wibox"
|
local wibox = require "wibox"
|
||||||
|
|
||||||
local battery_bar = require "ui.statusbar.panel.widgets.battery_bar"
|
local displays = require "ui.statusbar.panel.widgets.displays"
|
||||||
local brightness_bar = require "ui.statusbar.panel.widgets.brightness_bar"
|
local power_menu = require "ui.statusbar.panel.widgets.power_menu"
|
||||||
|
|
||||||
|
|
||||||
local panel = wibox.widget {
|
local panel = wibox.widget {
|
||||||
{
|
-- widget = wibox.container.constraint,
|
||||||
|
-- width = qvars.expanded_bar_size,
|
||||||
|
-- strategy = "exact",
|
||||||
|
-- {
|
||||||
widget = wibox.container.margin,
|
widget = wibox.container.margin,
|
||||||
margins = {
|
margins = {
|
||||||
left = qvars.big_padding * 2
|
left = qvars.big_padding
|
||||||
}
|
},
|
||||||
},
|
|
||||||
{
|
|
||||||
widget = wibox.container.constraint,
|
|
||||||
width = qvars.bar_size * 6,
|
|
||||||
strategy = "exact",
|
|
||||||
{
|
{
|
||||||
widget = wibox.container.margin,
|
{
|
||||||
margins = {
|
widget = wibox.container.place,
|
||||||
right = qvars.big_padding * 4
|
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,
|
widget = wibox.widget.textbox,
|
||||||
date = os.date("*t"),
|
text = ":)"
|
||||||
font = qvars.font,
|
}
|
||||||
-- long_weekdays = true,
|
},
|
||||||
-- flex_height = true,
|
{
|
||||||
-- fn_embed = decorate_cell
|
widget = wibox.container.place,
|
||||||
},
|
valign = "bottom",
|
||||||
{
|
power_menu
|
||||||
widget = wibox.container.background,
|
},
|
||||||
-- bg = qvars.colors.blue,
|
layout = wibox.layout.align.vertical,
|
||||||
{
|
|
||||||
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,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
-- }
|
||||||
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
|
return panel
|
||||||
|
|
|
@ -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
|
|
|
@ -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
|
|
|
@ -0,0 +1 @@
|
||||||
|
|
104
.config/awesome/ui/statusbar/panel/widgets/displays.lua
Normal file
104
.config/awesome/ui/statusbar/panel/widgets/displays.lua
Normal file
|
@ -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 }
|
62
.config/awesome/ui/statusbar/panel/widgets/power_menu.lua
Normal file
62
.config/awesome/ui/statusbar/panel/widgets/power_menu.lua
Normal file
|
@ -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
|
|
@ -10,19 +10,14 @@ local battery = wibox.widget {
|
||||||
halign = "center",
|
halign = "center",
|
||||||
{
|
{
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
image = gcolor.recolor_image(phosphor.battery_warning_vertical_fill, qvars.colors.red),
|
image = gcolor.recolor_image(phosphor.battery_vertical_warning_fill, qvars.colors.red),
|
||||||
forced_width = qvars.icon_size,
|
forced_width = qvars.char_height,
|
||||||
forced_height = qvars.icon_size
|
forced_height = qvars.char_height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
awesome.connect_signal("services::battery", function(capacity, status)
|
awesome.connect_signal("services::battery", function(capacity, status)
|
||||||
if status == "Charging" then
|
local icon_data = status == "Charging" and { "charging", "green" } or qmath.step_value(capacity, {
|
||||||
battery.widget.image = gcolor.recolor_image(phosphor.battery_charging_vertical_fill, qvars.colors.green)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local icon_data = qmath.step_value(capacity, {
|
|
||||||
{ 0, { "empty", "red" } },
|
{ 0, { "empty", "red" } },
|
||||||
{ 20, { "low", "red" } },
|
{ 20, { "low", "red" } },
|
||||||
{ 40, { "medium", "yellow" } },
|
{ 40, { "medium", "yellow" } },
|
||||||
|
|
|
@ -11,8 +11,8 @@ local brightness = wibox.widget {
|
||||||
{
|
{
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
image = gcolor.recolor_image(phosphor.moon_fill, qvars.colors.fg),
|
image = gcolor.recolor_image(phosphor.moon_fill, qvars.colors.fg),
|
||||||
forced_width = qvars.icon_size,
|
forced_width = qvars.char_height,
|
||||||
forced_height = qvars.icon_size
|
forced_height = qvars.char_height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,8 +19,8 @@ return awful.widget.taglist {
|
||||||
{
|
{
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
image = gcolor.recolor_image(phosphor.circle_bold, qvars.colors.fg),
|
image = gcolor.recolor_image(phosphor.circle_bold, qvars.colors.fg),
|
||||||
forced_width = qvars.icon_size,
|
forced_width = qvars.char_height,
|
||||||
forced_height = qvars.icon_size,
|
forced_height = qvars.char_height,
|
||||||
icon = phosphor.dot_fill
|
icon = phosphor.dot_fill
|
||||||
},
|
},
|
||||||
create_callback = function(self, tag)
|
create_callback = function(self, tag)
|
||||||
|
|
|
@ -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
|
|
@ -3,6 +3,8 @@ local phosphor = require "assets.phosphor"
|
||||||
local qmath = require "quarrel.math"
|
local qmath = require "quarrel.math"
|
||||||
local qvars = require "quarrel.vars"
|
local qvars = require "quarrel.vars"
|
||||||
local wibox = require "wibox"
|
local wibox = require "wibox"
|
||||||
|
local q = require "quarrel"
|
||||||
|
local gdebug = require "gears.debug"
|
||||||
|
|
||||||
local wifi = wibox.widget {
|
local wifi = wibox.widget {
|
||||||
widget = wibox.container.place,
|
widget = wibox.container.place,
|
||||||
|
@ -11,12 +13,12 @@ local wifi = wibox.widget {
|
||||||
{
|
{
|
||||||
widget = wibox.widget.imagebox,
|
widget = wibox.widget.imagebox,
|
||||||
image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red),
|
image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red),
|
||||||
forced_width = qvars.icon_size,
|
forced_width = qvars.char_height,
|
||||||
forced_height = qvars.icon_size
|
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
|
if not connected then
|
||||||
wifi.widget.image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red)
|
wifi.widget.image = gcolor.recolor_image(phosphor.wifi_x_fill, qvars.colors.red)
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue