------------------------------------------------- -- 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