local awful = require('awful') local beautiful = require('beautiful') local wibox = require('wibox') local gears = require('gears') local icons = require('theme.icons') local dpi = beautiful.xresources.apply_dpi local clickable_container = require('widget.clickable-container') local task_list = require('widget.task-list') local TopPanel = function(s, offset) local offsetx = 0 if offset == true then offsetx = dpi(45) end local panel = wibox { ontop = true, screen = s, type = 'dock', height = dpi(28), width = s.geometry.width - offsetx, x = s.geometry.x + offsetx, y = s.geometry.y, stretch = false, bg = beautiful.background, fg = beautiful.fg_normal } panel:struts { top = dpi(28) } panel:connect_signal( 'mouse::enter', function() local w = mouse.current_wibox if w then w.cursor = 'left_ptr' end end ) s.add_button = wibox.widget { { { { { image = icons.plus, resize = true, widget = wibox.widget.imagebox }, margins = dpi(4), widget = wibox.container.margin }, widget = clickable_container }, bg = beautiful.transparent, shape = gears.shape.circle, widget = wibox.container.background }, margins = dpi(4), widget = wibox.container.margin } s.add_button:buttons( gears.table.join( awful.button( {}, 1, nil, function() awful.spawn( awful.screen.focused().selected_tag.default_app, { tag = mouse.screen.selected_tag, placement = awful.placement.bottom_right } ) end ) ) ) local layout_box = function(s) local layoutbox = wibox.widget { { awful.widget.layoutbox(s), margins = dpi(7), widget = wibox.container.margin }, widget = clickable_container } layoutbox:buttons( awful.util.table.join( awful.button( {}, 1, function() awful.layout.inc(1) end ), awful.button( {}, 3, function() awful.layout.inc(-1) end ), awful.button( {}, 4, function() awful.layout.inc(1) end ), awful.button( {}, 5, function() awful.layout.inc(-1) end ) ) ) return layoutbox end s.clock_widget = wibox.widget.textclock( '%l:%M %p', 1 ) s.clock_widget = wibox.widget { { s.clock_widget, margins = dpi(7), widget = wibox.container.margin }, widget = clickable_container } s.clock_widget:connect_signal( 'mouse::enter', function() local w = mouse.current_wibox if w then old_cursor, old_wibox = w.cursor, w w.cursor = 'hand1' end end ) s.clock_widget:connect_signal( 'mouse::leave', function() if old_wibox then old_wibox.cursor = old_cursor old_wibox = nil end end ) s.clock_tooltip = awful.tooltip { objects = {s.clock_widget}, mode = 'outside', delay_show = 1, preferred_positions = {'right', 'left', 'top', 'bottom'}, preferred_alignments = {'middle'}, margin_leftright = dpi(8), margin_topbottom = dpi(8), timer_function = function() local ordinal = nil local day = os.date('%d') local month = os.date('%B') local first_digit = string.sub(day, 0, 1) local last_digit = string.sub(day, -1) if first_digit == '0' then day = last_digit end if last_digit == '1' and day ~= '11' then ordinal = 'st' elseif last_digit == '2' and day ~= '12' then ordinal = 'nd' elseif last_digit == '3' and day ~= '13' then ordinal = 'rd' else ordinal = 'th' end local date_str = 'Today is the ' .. '' .. day .. ordinal .. ' of ' .. month .. '.\n' .. 'And it\'s ' .. os.date('%A') .. ' ya idiot!' return date_str end, } s.clock_widget:connect_signal( 'button::press', function(self, lx, ly, button) -- Hide the tooltip when you press the clock widget if s.clock_tooltip.visible and button == 1 then s.clock_tooltip.visible = false end end ) s.month_calendar = awful.widget.calendar_popup.month({ start_sunday = true, spacing = dpi(5), font = 'SF Pro Text Regular 10', long_weekdays = true, margin = dpi(5), screen = s, style_month = { border_width = dpi(0), padding = dpi(20), shape = function(cr, width, height) gears.shape.partially_rounded_rect( cr, width, height, true, true, true, true, beautiful.groups_radius ) end }, style_header = { border_width = 0, bg_color = beautiful.transparent }, style_weekday = { border_width = 0, bg_color = beautiful.transparent }, style_normal = { border_width = 0, bg_color = beautiful.transparent }, style_focus = { border_width = dpi(0), border_color = beautiful.fg_normal, bg_color = beautiful.accent, shape = function(cr, width, height) gears.shape.partially_rounded_rect( cr, width, height, true, true, true, true, dpi(4)) end, }, }) s.month_calendar:attach( s.clock_widget, 'tc', { on_pressed = true, on_hover = false } ) s.systray = wibox.widget { visible = false, base_size = dpi(20), horizontal = true, screen = 'primary', widget = wibox.widget.systray } s.tray_toggler = require('widget.tray-toggler') s.updater = require('widget.package-updater')() s.screen_rec = require('widget.screen-recorder')() s.music = require('widget.music')() s.bluetooth = require('widget.bluetooth')() s.network = require('widget.network')() s.battery = require('widget.battery')() s.r_dashboard = require('layout.right-panel.right-panel-opener')() panel : setup { layout = wibox.layout.align.horizontal, expand = "none", { layout = wibox.layout.fixed.horizontal, task_list(s), s.add_button }, s.clock_widget, { layout = wibox.layout.fixed.horizontal, spacing = dpi(5), { s.systray, margins = dpi(5), widget = wibox.container.margin }, s.tray_toggler, s.updater, s.screen_rec, s.music, s.bluetooth, s.network, s.battery, layout_box(s), s.r_dashboard } } return panel end return TopPanel