mirror of
https://github.com/don-philipe/knorke.git
synced 2025-11-08 22:57:03 +01:00
Compare commits
6 Commits
6956f354d1
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f33155f3c | ||
|
|
d427081284 | ||
|
|
a7b10c63fa | ||
|
|
4fa74ea78c | ||
|
|
4f112a6726 | ||
|
|
e5d68db691 |
113
audio.lua
113
audio.lua
@@ -1,10 +1,18 @@
|
|||||||
|
-- requires pulseaudio-ctl and lua53-dkjson installed
|
||||||
|
|
||||||
|
local awful = require("awful")
|
||||||
local vicious = require("vicious")
|
local vicious = require("vicious")
|
||||||
local wibox = require("wibox")
|
local wibox = require("wibox")
|
||||||
|
local naughty = require("naughty")
|
||||||
|
local beautiful = require("beautiful")
|
||||||
|
local json = require("dkjson") --require("knorke.json")
|
||||||
|
|
||||||
local icon_mute
|
local icon_mute
|
||||||
local icon_low
|
local icon_low
|
||||||
local icon_medium
|
local icon_medium
|
||||||
local icon_high
|
local icon_high
|
||||||
|
local mute_state
|
||||||
|
local vol_id
|
||||||
|
|
||||||
|
|
||||||
-- Create layout with widgets
|
-- Create layout with widgets
|
||||||
@@ -37,6 +45,23 @@ vicious.register(widget.text, vicious.widgets.volume,
|
|||||||
return " " .. args[1] .. "%"
|
return " " .. args[1] .. "%"
|
||||||
end, 1, "Master")
|
end, 1, "Master")
|
||||||
|
|
||||||
|
local function change_volume(amount)
|
||||||
|
if (amount < 0) then
|
||||||
|
awful.util.spawn("amixer -qD pipewire sset Master " .. math.abs(amount) .. "%-")
|
||||||
|
else
|
||||||
|
awful.util.spawn("amixer -qD pipewire sset Master " .. math.abs(amount) .. "%+")
|
||||||
|
end
|
||||||
|
local f = io.popen("amixer -D pipewire get Master")
|
||||||
|
local vol = 0
|
||||||
|
for line in f:lines() do
|
||||||
|
for word in string.gmatch(line, "(%d%d?%d?)%%") do
|
||||||
|
vol = word
|
||||||
|
end
|
||||||
|
end
|
||||||
|
-- add changed amount as the current value is not yet changed when calling io.popen
|
||||||
|
return tonumber(vol) + amount
|
||||||
|
end
|
||||||
|
|
||||||
-- Widget function that is available from the outside.
|
-- Widget function that is available from the outside.
|
||||||
function widget.set_icons(mute, low, medium, high)
|
function widget.set_icons(mute, low, medium, high)
|
||||||
icon_mute = mute
|
icon_mute = mute
|
||||||
@@ -45,4 +70,92 @@ function widget.set_icons(mute, low, medium, high)
|
|||||||
icon_high = high
|
icon_high = high
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function widget.notify_mute()
|
||||||
|
-- evaluate old state as util.spawn is too slow and io.popen will be evaluated before
|
||||||
|
local old_state = io.popen("pulseaudio-ctl full-status")
|
||||||
|
for line in old_state:lines() do
|
||||||
|
for val in string.gmatch(line, "%d%d?%d?%s(%w%w%w?)") do
|
||||||
|
mute_state = val
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local notify_icon = beautiful.icons.vol_mute
|
||||||
|
if mute_state == "yes" then
|
||||||
|
notify_icon = beautiful.icons.vol_high
|
||||||
|
end
|
||||||
|
awful.util.spawn("amixer -qD pipewire sset Master toggle")
|
||||||
|
|
||||||
|
vol_id = naughty.notify({
|
||||||
|
icon = notify_icon,
|
||||||
|
position = "top_middle",
|
||||||
|
border_width = 0,
|
||||||
|
icon_size = 128,
|
||||||
|
replaces_id = vol_id }).id
|
||||||
|
end
|
||||||
|
|
||||||
|
function widget.notify_volume(delta)
|
||||||
|
local volume = change_volume(delta)
|
||||||
|
if (volume > 50) then
|
||||||
|
notify_icon = beautiful.icons.vol_high
|
||||||
|
elseif (volume == 0) then
|
||||||
|
notify_icon = beautiful.icons.vol_mute
|
||||||
|
else
|
||||||
|
notify_icon = beautiful.icons.vol_low
|
||||||
|
end
|
||||||
|
local notify_icon_vol = naughty.notify({
|
||||||
|
position = "top_middle",
|
||||||
|
border_width = 0,
|
||||||
|
icon = notify_icon,
|
||||||
|
replaces_id = vol_id })
|
||||||
|
vol_id = notify_icon_vol.id
|
||||||
|
local notify_width = notify_icon_vol.width
|
||||||
|
local bar = wibox.widget.progressbar()
|
||||||
|
bar:set_value(volume)
|
||||||
|
bar:set_max_value(100)
|
||||||
|
bar:set_color(beautiful.archcolor)
|
||||||
|
bar:set_background_color(beautiful.archcolor_bg)
|
||||||
|
wibox.widget.draw_to_svg_file(bar, "/tmp/vol-bar.svg", 128, 10)
|
||||||
|
vol_id_1 = naughty.notify({
|
||||||
|
position = "top_middle",
|
||||||
|
border_width = 0,
|
||||||
|
icon = "/tmp/vol-bar.svg",
|
||||||
|
width = notify_width,
|
||||||
|
replaces_id = vol_id_1 }).id
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Show audio sinks in tooltip
|
||||||
|
awful.tooltip(
|
||||||
|
{
|
||||||
|
objects = { widget },
|
||||||
|
mode = "outside",
|
||||||
|
align = "right",
|
||||||
|
fg = "white",
|
||||||
|
margin_leftright = 10,
|
||||||
|
margin_topbottom = 10,
|
||||||
|
timeout = 5,
|
||||||
|
timer_function = function()
|
||||||
|
local handle = io.popen("pw-dump -N", "r")
|
||||||
|
local json_string = ""
|
||||||
|
local results = {}
|
||||||
|
for line in handle:lines() do
|
||||||
|
json_string = json_string .. line
|
||||||
|
end
|
||||||
|
local json_obj, pos, err = json.decode(json_string)
|
||||||
|
if not err then
|
||||||
|
for i = 1, #json_obj do
|
||||||
|
if json_obj[i].info and json_obj[i].info.props["media.class"] == "Audio/Sink" then
|
||||||
|
local active = ""
|
||||||
|
if json_obj[i].info.state == "running" then
|
||||||
|
active = " *"
|
||||||
|
end
|
||||||
|
table.insert(results, tostring(json_obj[i].info.props["node.description"]) .. active)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
handle:close()
|
||||||
|
return table.concat(results, "\n")
|
||||||
|
end,
|
||||||
|
preferred_positions = {"right", "left", "top", "bottom"}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
return widget
|
return widget
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ local gears = require("gears")
|
|||||||
local is_on
|
local is_on
|
||||||
local icon_dis
|
local icon_dis
|
||||||
local icon_enab
|
local icon_enab
|
||||||
|
local icon_conn
|
||||||
|
|
||||||
local widget = wibox.widget {
|
local widget = wibox.widget {
|
||||||
{
|
{
|
||||||
@@ -33,9 +34,10 @@ widget:buttons(awful.util.table.join(
|
|||||||
|
|
||||||
-- Add icons vor various BT states.
|
-- Add icons vor various BT states.
|
||||||
-- These icons should come as beautiful.icons
|
-- These icons should come as beautiful.icons
|
||||||
function widget.set_icons(disabled, enabled)
|
function widget.set_icons(disabled, enabled, connected)
|
||||||
icon_dis = disabled
|
icon_dis = disabled
|
||||||
icon_enab = enabled
|
icon_enab = enabled
|
||||||
|
icon_conn = connected
|
||||||
end
|
end
|
||||||
|
|
||||||
awful.tooltip(
|
awful.tooltip(
|
||||||
@@ -59,6 +61,7 @@ watch("bluetoothctl show", 5,
|
|||||||
function(_, stdout)
|
function(_, stdout)
|
||||||
-- Check if there bluetooth
|
-- Check if there bluetooth
|
||||||
local checker = stdout:match("Powered: yes") -- If 'Powered: yes' string is detected on stdout
|
local checker = stdout:match("Powered: yes") -- If 'Powered: yes' string is detected on stdout
|
||||||
|
-- TODO check for connection and set connected icon
|
||||||
local widget_icon_nme
|
local widget_icon_nme
|
||||||
if (checker ~= nil) then
|
if (checker ~= nil) then
|
||||||
is_on = true
|
is_on = true
|
||||||
|
|||||||
24
vpn.lua
24
vpn.lua
@@ -20,7 +20,7 @@ gears.timer {
|
|||||||
timeout = 10,
|
timeout = 10,
|
||||||
autostart = true,
|
autostart = true,
|
||||||
callback = function ()
|
callback = function ()
|
||||||
awful.spawn.easy_async_with_shell("ifconfig | grep \"tun.*:\"",
|
awful.spawn.easy_async_with_shell("ifconfig | grep \"tun.*:\\|wg.*:\"",
|
||||||
function (stdout, _, _, _)
|
function (stdout, _, _, _)
|
||||||
if (stdout == "") then
|
if (stdout == "") then
|
||||||
widget.icon:set_image(icon_vpn_noconn)
|
widget.icon:set_image(icon_vpn_noconn)
|
||||||
@@ -37,4 +37,26 @@ function widget.set_icons(vpn_noconn, vpn_conn)
|
|||||||
icon_vpn_conn = vpn_conn
|
icon_vpn_conn = vpn_conn
|
||||||
end
|
end
|
||||||
|
|
||||||
|
awful.tooltip(
|
||||||
|
{
|
||||||
|
objects = { widget },
|
||||||
|
mode = "outside",
|
||||||
|
align = "right",
|
||||||
|
fg = "white",
|
||||||
|
margin_leftright = 10,
|
||||||
|
margin_topbottom = 10,
|
||||||
|
preferred_positions = { "right", "left", "top", "bottom" },
|
||||||
|
timer_function = function()
|
||||||
|
local num_vpnc_proc = awful.spawn.with_shell("ps aux | grep vpnc | wc -l")
|
||||||
|
if (tonumber(num_vpnc_proc) > 1) then
|
||||||
|
return "VPNC"
|
||||||
|
end
|
||||||
|
local num_openconnect_proc = awful.spawn.with_shell("ps aux | grep openconnect | wc -l")
|
||||||
|
if (tonumber(num_openconnect_proc) > 1) then
|
||||||
|
return "OPENCONNECT"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
return widget
|
return widget
|
||||||
|
|||||||
Reference in New Issue
Block a user