Adding wireless status widget/watcher
This commit is contained in:
parent
90ffa05114
commit
5a6a267646
|
@ -22,6 +22,7 @@ to improve your Awesome setup.
|
|||
* [Battery Indicator (UPower)](https://github.com/stefano-m/awesome-power_widget)
|
||||
* [[Google Play Music Desktop Player|recipes/gpmdp]]
|
||||
* [Set of simple widgets](https://github.com/streetturtle/awesome-wm-widgets) - widgets for battery, cpu, brightness, volume, email, etc.
|
||||
* [Wireless status](../recipes/wirelessStatus)
|
||||
|
||||
## Libraries
|
||||
|
||||
|
|
|
@ -0,0 +1,190 @@
|
|||
--[[
|
||||
|
||||
Licensed under GNU General Public License v2
|
||||
* (c) 2021, bzgec
|
||||
|
||||
|
||||
# Wireless status widget/watcher
|
||||
Get wireless Quality link (converted to percentages) and wireless status.
|
||||
|
||||
## Requirements:
|
||||
- `iw`
|
||||
|
||||
## Usage:
|
||||
- Download [wirelessStatus.lua](https://awesomewm.org/recipes/wirelessStatus.lua) file and put it
|
||||
into awesome's folder (like `~/.config/awesome/widgets/wirelessStatus.lua`)
|
||||
- Add widget to `theme.lua`:
|
||||
|
||||
```lua
|
||||
local widgets = {
|
||||
wirelessStatus = require("widgets/wirelessStatus"),
|
||||
}
|
||||
-- Wireless status widget
|
||||
theme.wirelessStatus = widgets.wirelessStatus({
|
||||
notification_preset = { font = "Mononoki Nerd Font 10", fg = theme.fg_normal },
|
||||
timeout = 10,
|
||||
settings = function(self)
|
||||
if self.status == "1" or self.status == "" then
|
||||
self.widget:set_image(theme.wifidisc)
|
||||
else
|
||||
if self.perc <= 5 then
|
||||
self.widget:set_image(theme.wifinone)
|
||||
elseif self.perc <= 25 then
|
||||
self.widget:set_image(theme.wifilow)
|
||||
elseif self.perc <= 50 then
|
||||
self.widget:set_image(theme.wifimed)
|
||||
elseif self.perc <= 75 then
|
||||
self.widget:set_image(theme.wifihigh)
|
||||
else
|
||||
self.widget:set_image(theme.wififull)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
local widget_wirelessStatus = wibox.widget { nil, theme.wirelessStatus.widget, layout = wibox.layout.align.horizontal }
|
||||
```
|
||||
|
||||
- Set which application to run on widget press (add to `rc.lua`):
|
||||
|
||||
```lua
|
||||
-- wirelessStatus widget pressed function - open terminal and start `nmtui`
|
||||
beautiful.wirelessStatus.pressed = function(self, button)
|
||||
if button == 1 then -- left mouse click
|
||||
awful.spawn(terminal.." -e nmtui")
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
--]]
|
||||
|
||||
|
||||
local wibox = require("wibox")
|
||||
local naughty = require("naughty")
|
||||
local awful = require("awful")
|
||||
local gears = require("gears")
|
||||
|
||||
local function factory(args)
|
||||
local args = args or {}
|
||||
|
||||
local wirelessStatus = {
|
||||
widget = args.widget or wibox.widget.imagebox(),
|
||||
settings = args.settings or function(self) end,
|
||||
timeout = args.timeout or 10,
|
||||
pressed = args.pressed or function(self, button) end,
|
||||
followtag = args.followtag or false,
|
||||
notification_preset = args.notification_preset or {},
|
||||
showpopup = args.showpopup or "on", -- Show notification popup while hovering above widget
|
||||
timer = gears.timer,
|
||||
interface = "",
|
||||
perc = 0,
|
||||
status = "",
|
||||
notification_text = "No connection",
|
||||
}
|
||||
|
||||
-- Reset to default values
|
||||
function wirelessStatus:reset()
|
||||
wirelessStatus.interface = ""
|
||||
wirelessStatus.perc = 0
|
||||
wirelessStatus.status = ""
|
||||
wirelessStatus.notification_text = "No connection"
|
||||
end
|
||||
|
||||
-- Show notification popup
|
||||
function wirelessStatus:show(seconds)
|
||||
self:hide()
|
||||
|
||||
-- Update every time
|
||||
self:update()
|
||||
|
||||
if self.followtag then
|
||||
self.notification_preset.screen = focused()
|
||||
end
|
||||
|
||||
self.notification = naughty.notify {
|
||||
preset = self.notification_preset,
|
||||
text = self.notification_text,
|
||||
timeout = type(seconds) == "number" and seconds or self.notification_preset.timeout
|
||||
}
|
||||
end
|
||||
|
||||
-- Hide notification popup
|
||||
function wirelessStatus:hide()
|
||||
if self.notification then
|
||||
naughty.destroy(self.notification)
|
||||
self.notification = nil
|
||||
end
|
||||
end
|
||||
|
||||
function wirelessStatus:attach()
|
||||
self.widget:connect_signal("mouse::enter", function()
|
||||
self:show(0)
|
||||
end)
|
||||
self.widget:connect_signal("mouse::leave", function()
|
||||
self:hide()
|
||||
end)
|
||||
end
|
||||
|
||||
-- Get name of wireless interface
|
||||
function wirelessStatus:getInterface()
|
||||
awful.spawn.easy_async_with_shell(
|
||||
"awk 'NR==3 {printf(\"%s\\n\", $1)}' /proc/net/wireless",
|
||||
function(stdout, exitcode)
|
||||
-- Store interface name
|
||||
-- Remove last character/s from string ("wlp4s0:"" -> "wlp4s0")
|
||||
self.interface = stdout:sub(0, -3)
|
||||
|
||||
-- This is needed the first time there is an update
|
||||
-- (or every time the `.interface` is equal to "")
|
||||
self:update()
|
||||
end
|
||||
)
|
||||
end
|
||||
|
||||
function wirelessStatus:update()
|
||||
self.timer:emit_signal("timeout")
|
||||
end
|
||||
|
||||
-- Get status and Quality link (convert quality link to percentages)
|
||||
wirelessStatus, wirelessStatus.timer = awful.widget.watch(
|
||||
"awk 'NR==3 {printf(\"%d-%.0f\\n\", $2, $3*10/7)}' /proc/net/wireless",
|
||||
wirelessStatus.timeout,
|
||||
function(self, stdout, stderr, exitreason, exitcode)
|
||||
if stdout == "" then
|
||||
-- No output from command above -> reset internal values to default
|
||||
self:reset()
|
||||
else
|
||||
-- Status and Quality link received
|
||||
local status, perc = stdout:match("(%d)-(%d+)")
|
||||
perc = tonumber(perc)
|
||||
self.perc = perc
|
||||
self.status = status
|
||||
|
||||
if self.interface == "" then
|
||||
-- Get interface name
|
||||
self:getInterface()
|
||||
else
|
||||
-- Get information about active connection
|
||||
local cmd_getInfo = "iw dev "..self.interface.." link"
|
||||
awful.spawn.easy_async_with_shell(cmd_getInfo, function(stdout, exitcode)
|
||||
self.notification_text = stdout
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
-- Call user/theme defined function
|
||||
self:settings()
|
||||
end,
|
||||
wirelessStatus -- base_widget (passed in callback function as first parameter)
|
||||
)
|
||||
|
||||
-- Show notification popup while hovering above widget
|
||||
if wirelessStatus.showpopup == "on" then wirelessStatus:attach(wirelessStatus.widget) end
|
||||
|
||||
wirelessStatus.widget:connect_signal("button::press", function(c, _, _, button)
|
||||
wirelessStatus:pressed(button)
|
||||
end)
|
||||
|
||||
return wirelessStatus
|
||||
end
|
||||
|
||||
return factory
|
|
@ -0,0 +1,50 @@
|
|||
# Wireless status widget/watcher
|
||||
Get wireless Quality link (converted to percentages) and wireless status.
|
||||
|
||||
## Requirements:
|
||||
- `iw`
|
||||
|
||||
## Usage:
|
||||
- Download [wirelessStatus.lua](https://awesomewm.org/recipes/wirelessStatus.lua) file and put it
|
||||
into awesome's folder (like `~/.config/awesome/widgets/wirelessStatus.lua`)
|
||||
- Add widget to `theme.lua`:
|
||||
|
||||
```lua
|
||||
local widgets = {
|
||||
wirelessStatus = require("widgets/wirelessStatus"),
|
||||
}
|
||||
-- Wireless status widget
|
||||
theme.wirelessStatus = widgets.wirelessStatus({
|
||||
notification_preset = { font = "Mononoki Nerd Font 10", fg = theme.fg_normal },
|
||||
timeout = 10,
|
||||
settings = function(self)
|
||||
if self.status == "1" or self.status == "" then
|
||||
self.widget:set_image(theme.wifidisc)
|
||||
else
|
||||
if self.perc <= 5 then
|
||||
self.widget:set_image(theme.wifinone)
|
||||
elseif self.perc <= 25 then
|
||||
self.widget:set_image(theme.wifilow)
|
||||
elseif self.perc <= 50 then
|
||||
self.widget:set_image(theme.wifimed)
|
||||
elseif self.perc <= 75 then
|
||||
self.widget:set_image(theme.wifihigh)
|
||||
else
|
||||
self.widget:set_image(theme.wififull)
|
||||
end
|
||||
end
|
||||
end,
|
||||
})
|
||||
local widget_wirelessStatus = wibox.widget { nil, theme.wirelessStatus.widget, layout = wibox.layout.align.horizontal }
|
||||
```
|
||||
|
||||
- Set which application to run on widget press (add to `rc.lua`):
|
||||
|
||||
```lua
|
||||
-- wirelessStatus widget pressed function - open terminal and start `nmtui`
|
||||
beautiful.wirelessStatus.pressed = function(self, button)
|
||||
if button == 1 then -- left mouse click
|
||||
awful.spawn(terminal.." -e nmtui")
|
||||
end
|
||||
end
|
||||
```
|
Loading…
Reference in New Issue