local backlight = require "services.backlight" local battery = require "services.battery" local phosphor = require "assets.phosphor" local qmath = require "quarrel.math" local qui = require "quarrel.ui" local qvars = require "quarrel.vars" local wibox = require "wibox" 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, qui.icon { icon = icon, color = color, widget = { 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_audio = create_display(phosphor.speaker_simple_high_fill, qvars.colors.fg) awesome.connect_signal("services::audio", function(volume) if not volume then return end d_audio:get_children_by_id("indicator")[1].value = math.min(volume, 100) d_audio:get_children_by_id("text")[1].text = volume .. "%" end) awesome.connect_signal("services::audio::icon", function(icon, color) d_audio:get_children_by_id("indicator")[1].color = color d_audio:get_children_by_id("icon")[1].image = icon d_audio:get_children_by_id("icon")[1].stylesheet = qui.recolor(color) end) local d_battery = create_display(phosphor.battery_vertical_warning_fill, qvars.colors.red) battery:connect_signal("level", function(_, level) d_battery:get_children_by_id("indicator")[1].value = level d_battery:get_children_by_id("text")[1].text = level .. "%" end) battery:connect_signal("icon", function(_, icon, color) d_battery:get_children_by_id("indicator")[1].color = color d_battery:get_children_by_id("icon")[1].image = icon d_battery:get_children_by_id("icon")[1].stylesheet = qui.recolor(color) end) local d_brightness = create_display(phosphor.sun_fill, qvars.colors.fg) backlight:connect_signal("value", 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) backlight:connect_signal("icon", function(_, icon, color) d_brightness:get_children_by_id("icon")[1].image = icon d_brightness:get_children_by_id("icon")[1].stylesheet = qui.recolor(color) end) return { audio = d_audio, battery = d_battery, brightness = d_brightness }