184 lines
6.5 KiB
Lua
184 lines
6.5 KiB
Lua
-- ===================================================================
|
|
-- 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
|