-- =================================================================== -- Initialization -- =================================================================== local awful = require("awful") local beautiful = require("beautiful") local wibox = require("wibox") local theme = require("theme") local lain = require("lain") local tag_list = require("components.widgets.tag-list") local layout_box = require("components.widgets.layout-box") local battery_widget = require("components.widgets.battery-widget.battery") local volume_widget = require("components.widgets.volume-widget.volume") local pl = require("utils.powerline") -- import widgets local task_list = require("components.widgets.task-list") -- =================================================================== -- Custom Widgets -- =================================================================== local top_panel = {} local watch_widget, watch_timer = awful.widget.watch('bash -c "checkupdates | wc -l"', 360) local updates_indicator = wibox.widget{ { layout = wibox.layout.fixed.horizontal, { { widget = watch_widget, }, top = 0, bottom = 2, left = 0, right = 0, widget = wibox.container.margin }, { { image = "/usr/share/icons/Papirus/48x48/apps/org.kde.archUpdate.svg", forced_width = 18, widget = wibox.widget.imagebox, }, top = 5, bottom = 0, left = 5, right = 0, widget = wibox.container.margin } }, widget = wibox.container.background } local frequency_widget = wibox.widget { layout = wibox.layout.fixed.horizontal, awful.widget.watch('bash -c "/usr/bin/cat /proc/cpuinfo | grep MHz | cut -b 12- | sort -r | head -n 1 | xargs printf \'%f / 1000\n\' | bc -l | awk \'{printf \\"%.2f\\n\\", $0}\'"', 1), wibox.widget.textbox('GHz') } local memory_widget = wibox.widget{ layout = wibox.layout.fixed.horizontal, lain.widget.mem({ settings = function() widget:set_markup(lain.util.markup.font(theme.font, mem_now.used .. " MB")) end, }), } local cpu_widget = wibox.widget{ layout = wibox.layout.fixed.horizontal, lain.widget.cpu({ settings = function() widget:set_markup(lain.util.markup.font(theme.font, "CPU: " .. cpu_now.usage .. "%")) end, }) } local clock = wibox.widget.textclock('%a %b %d, %H:%M:%S', 1) local tag_lists = {} local current_tag_list = wibox.widget { layout = wibox.layout.fixed.horizontal } local layout_boxes = {} local current_layout_box = wibox.widget { layout = wibox.layout.fixed.horizontal } local governor_selector, governor_timer = awful.widget.watch('bash -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"', 5) -- =================================================================== -- Bar Creation -- =================================================================== top_panel.create = function(s) local panel = awful.wibar({ screen = s, position = "top", ontop = true, height = beautiful.top_panel_height, width = s.geometry.width, bg = "#12151cbb" }) for t in screen do tag_lists[t] = tag_list.create(t) layout_boxes[t] = layout_box.create(t) end current_tag_list:add(tag_lists[s]) current_layout_box:add(layout_boxes[s]) panel:setup { expand = "none", layout = wibox.layout.align.horizontal, task_list.create(s), current_tag_list, { layout = wibox.layout.fixed.horizontal, pl(wibox.widget{}, theme.bg_normal .. "00", theme.top_panel_powerline), pl(wibox.container.margin(wibox.widget.systray(), 0, 0, 5, 5), theme.top_panel_powerline, theme.bg_normal), pl(volume_widget({widget_type='icon_and_text'}), theme.bg_normal, theme.top_panel_powerline), pl(awful.widget.watch('bash -c "sensors | grep Tctl | cut -f 10 -d \' \' | cut -c 2-"', 5), theme.top_panel_powerline, theme.bg_normal), pl(memory_widget, theme.bg_normal, theme.top_panel_powerline), pl(cpu_widget, theme.top_panel_powerline, theme.bg_normal), pl(frequency_widget, theme.bg_normal, theme.top_panel_powerline), pl(updates_indicator, theme.top_panel_powerline, theme.bg_normal), pl(current_layout_box, theme.bg_normal, theme.top_panel_powerline), pl(clock, theme.top_panel_powerline, theme.top_panel_powerline), } } -- =================================================================== -- Functionality -- =================================================================== -- hide panel when client is fullscreen local function change_panel_visibility(client) if client.screen == s then panel.ontop = not client.fullscreen end end -- connect panel visibility function to relevant signals client.connect_signal("property::fullscreen", change_panel_visibility) client.connect_signal("focus", change_panel_visibility) client.connect_signal("focus", function (c, _) current_tag_list:reset(current_tag_list) current_tag_list:add(tag_lists[c.screen]) current_layout_box:reset(current_layout_box) current_layout_box:add(layout_boxes[c.screen]) end) -- connect panel visibility function to relevant signals updates_indicator:connect_signal("button::press", function(_, _, _, _) local update_command = 'WINIT_X11_SCALE_FACTOR=1 alacritty -e bash -c "yay ; echo \'\nDone, press any key to exit...\' ; read"' awful.spawn.easy_async_with_shell(update_command, function(_) watch_timer:emit_signal("timeout") end) end) clock:connect_signal("button::press", function(_, _, _, _) awful.spawn('gnome-calendar') end) governor_selector:connect_signal("button::press", function(c, _, _, button) awful.spawn.easy_async_with_shell('bash -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"', function(output) output = output:gsub("%s+", "") if output == 'powersave' then awful.spawn.easy_async('sudo /opt/power/performance.sh', function(_) governor_selector:emit_signal("timeout") end) else awful.spawn.easy_async('sudo /opt/power/powersave.sh', function(_) governor_timer:emit_signal("timeout") end) end end) end) end return top_panel