90 lines
1.9 KiB
Lua
90 lines
1.9 KiB
Lua
-------------------------------------------------
|
|
-- Bluetooth Widget for Awesome Window Manager
|
|
-- Shows the bluetooth status using the bluetoothctl command
|
|
-- Better with Blueman Manager
|
|
-------------------------------------------------
|
|
|
|
local awful = require('awful')
|
|
local gears = require('gears')
|
|
local naughty = require('naughty')
|
|
local wibox = require('wibox')
|
|
|
|
local watch = awful.widget.watch
|
|
local dpi = require('beautiful').xresources.apply_dpi
|
|
|
|
local apps = require('configuration.apps')
|
|
|
|
local clickable_container = require('widget.clickable-container')
|
|
|
|
local config_dir = gears.filesystem.get_configuration_dir()
|
|
|
|
local widget_icon_dir = config_dir .. 'widget/bluetooth/icons/'
|
|
|
|
local return_button = function()
|
|
|
|
local widget =
|
|
wibox.widget {
|
|
{
|
|
id = 'icon',
|
|
image = widget_icon_dir .. 'bluetooth-off' .. '.svg',
|
|
widget = wibox.widget.imagebox,
|
|
resize = true
|
|
},
|
|
layout = wibox.layout.align.horizontal
|
|
}
|
|
|
|
local widget_button = wibox.widget {
|
|
{
|
|
widget,
|
|
margins = dpi(7),
|
|
widget = wibox.container.margin
|
|
},
|
|
widget = clickable_container
|
|
}
|
|
|
|
widget_button:buttons(
|
|
gears.table.join(
|
|
awful.button(
|
|
{},
|
|
1,
|
|
nil,
|
|
function()
|
|
awful.spawn(apps.default.bluetooth_manager, false)
|
|
end
|
|
)
|
|
)
|
|
)
|
|
|
|
local bluetooth_tooltip = awful.tooltip
|
|
{
|
|
objects = {widget_button},
|
|
mode = 'outside',
|
|
align = 'right',
|
|
margin_leftright = dpi(8),
|
|
margin_topbottom = dpi(8),
|
|
preferred_positions = {'right', 'left', 'top', 'bottom'}
|
|
}
|
|
|
|
watch(
|
|
'rfkill list bluetooth',
|
|
5,
|
|
function(_, stdout)
|
|
local widget_icon_name = nil
|
|
if stdout:match('Soft blocked: yes') then
|
|
widget_icon_name = 'bluetooth-off'
|
|
bluetooth_tooltip.markup = 'Bluetooth is off'
|
|
else
|
|
widget_icon_name = 'bluetooth'
|
|
bluetooth_tooltip.markup = 'Bluetooth is on'
|
|
end
|
|
widget.icon:set_image(widget_icon_dir .. widget_icon_name .. '.svg')
|
|
collectgarbage('collect')
|
|
end,
|
|
widget
|
|
)
|
|
|
|
return widget_button
|
|
|
|
end
|
|
|
|
return return_button |