2013-04-13 15:17:09 +00:00
|
|
|
local wibox = require("wibox")
|
|
|
|
local vicious = require("vicious")
|
|
|
|
local modkey = conf.modkey or "Mod4"
|
2014-08-28 08:58:03 +00:00
|
|
|
local awful = require("awful")
|
2015-05-28 13:21:42 +00:00
|
|
|
local tag = require("awful.tag")
|
2013-04-13 15:17:09 +00:00
|
|
|
local widgets = { add = {} }
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- table declarations {{{
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
local wlist = {}
|
|
|
|
local bars = {}
|
|
|
|
local leftwibox = {}
|
|
|
|
local rightwibox = {}
|
|
|
|
|
|
|
|
local mytaglist = {}
|
|
|
|
mytaglist.buttons = awful.util.table.join(
|
|
|
|
awful.button({ }, 1, awful.tag.viewonly),
|
|
|
|
awful.button({ modkey }, 1, awful.client.movetotag),
|
|
|
|
awful.button({ }, 3, awful.tag.viewtoggle),
|
|
|
|
awful.button({ modkey }, 3, awful.client.toggletag),
|
|
|
|
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end),
|
|
|
|
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end)
|
|
|
|
)
|
|
|
|
-- }}}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- setup {{{
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
local function setup() -- {{{
|
|
|
|
for s = 1, screen.count() do
|
|
|
|
wlist[s]={}
|
|
|
|
bars[s]={}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- Create the wibox
|
|
|
|
leftwibox[s] = awful.wibox({
|
|
|
|
position = "left",
|
|
|
|
screen = s,
|
|
|
|
width = 18
|
|
|
|
})
|
|
|
|
rightwibox[s] = awful.wibox({
|
|
|
|
position = "right",
|
|
|
|
screen = s,
|
|
|
|
width = 18
|
|
|
|
})
|
|
|
|
|
|
|
|
-- {{{ create layouts
|
|
|
|
local left_bottom_layout = wibox.layout.fixed.horizontal()
|
|
|
|
local left_top_layout = wibox.layout.fixed.horizontal()
|
|
|
|
|
|
|
|
local left_layout = wibox.layout.align.horizontal()
|
|
|
|
left_layout:set_left(left_bottom_layout)
|
|
|
|
left_layout:set_right(left_top_layout)
|
|
|
|
|
|
|
|
local right_bottom_layout = wibox.layout.fixed.horizontal()
|
|
|
|
local right_top_layout = wibox.layout.fixed.horizontal()
|
|
|
|
|
|
|
|
local right_layout = wibox.layout.align.horizontal()
|
|
|
|
right_layout:set_left(right_top_layout)
|
|
|
|
right_layout:set_right(right_bottom_layout)
|
|
|
|
--}}}
|
|
|
|
|
|
|
|
|
|
|
|
-- {{{ rotate layouts and add to wibox
|
|
|
|
local leftrotate = wibox.layout.rotate()
|
|
|
|
leftrotate:set_direction('east')
|
|
|
|
leftrotate:set_widget(left_layout)
|
|
|
|
leftwibox[s]:set_widget(leftrotate)
|
|
|
|
|
|
|
|
local rightrotate = wibox.layout.rotate()
|
|
|
|
rightrotate:set_direction('west')
|
|
|
|
rightrotate:set_widget(right_layout)
|
|
|
|
rightwibox[s]:set_widget(rightrotate)
|
|
|
|
--}}}
|
|
|
|
|
|
|
|
|
|
|
|
bars[s] = {}
|
|
|
|
bars[s].left = {}
|
|
|
|
bars[s].left.bottom = left_bottom_layout
|
|
|
|
bars[s].left.top = left_top_layout
|
|
|
|
bars[s].right = {}
|
|
|
|
bars[s].right.bottom = right_bottom_layout
|
|
|
|
bars[s].right.top = right_top_layout
|
|
|
|
end
|
|
|
|
end -- }}}
|
|
|
|
|
|
|
|
-- }}}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- Utility {{{
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
-- force update of a widget
|
|
|
|
local function update(widgetname, index) -- {{{
|
|
|
|
for s = 1, screen.count() do
|
|
|
|
if wlist[s] ~= nil and wlist[s][widgetname] ~= nil then
|
|
|
|
if index ~= nil then
|
|
|
|
vicious.force({ wlist[s][widgetname][index] })
|
|
|
|
else
|
|
|
|
vicious.force({ wlist[s][widgetname] })
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
--}}}
|
|
|
|
widgets.update = update
|
|
|
|
|
|
|
|
-- get layout for adding widgets
|
|
|
|
local function get_layout(screen, bar, align) --{{{
|
|
|
|
if bars[screen][bar] == nil then return nil end
|
|
|
|
|
2015-03-01 20:18:54 +00:00
|
|
|
return {screen = screen, layout = bars[screen][bar][align]}
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.layout = get_layout
|
|
|
|
|
|
|
|
-- }}}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- widget creators {{{
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
2015-05-28 13:21:42 +00:00
|
|
|
local show = function(self)
|
|
|
|
self:set_widget(self.widget)
|
|
|
|
end
|
|
|
|
|
|
|
|
local hide = function(self)
|
|
|
|
self:set_widget(nil)
|
|
|
|
end
|
|
|
|
|
2015-06-13 22:00:56 +00:00
|
|
|
local function wrap_and_add(name, parent, widget, callback_widget)
|
2015-05-28 13:21:42 +00:00
|
|
|
local container = wibox.layout.margin(widget)
|
|
|
|
container.widget = widget
|
|
|
|
container.show = show
|
|
|
|
container.hide = hide
|
|
|
|
|
2015-06-13 22:00:56 +00:00
|
|
|
wlist[parent.screen][name] = callback_widget == nil and widget or callback_widget
|
2015-05-28 13:21:42 +00:00
|
|
|
parent.layout:add(container)
|
|
|
|
return container
|
|
|
|
end
|
|
|
|
|
|
|
|
|
2013-04-13 15:17:09 +00:00
|
|
|
-- mail widget
|
2015-05-28 13:21:42 +00:00
|
|
|
local function mailwidget(name, parent, mailboxes, notify_pos, title) --{{{
|
2013-04-13 15:17:09 +00:00
|
|
|
local widget = wibox.widget.textbox()
|
|
|
|
local bg = wibox.widget.background()
|
|
|
|
bg:set_widget(widget)
|
2015-05-28 13:21:42 +00:00
|
|
|
|
2015-06-13 22:00:56 +00:00
|
|
|
local container = wrap_and_add(name, parent, bg, widget)
|
2013-04-13 15:17:09 +00:00
|
|
|
vicious.register(widget, vicious.widgets.mdir, function(widget, args)
|
|
|
|
if args[1] > 0 then
|
|
|
|
naughty.notify({
|
2015-05-28 13:21:42 +00:00
|
|
|
title = "New mail arrived in box " .. title,
|
2015-06-13 22:00:56 +00:00
|
|
|
text = title .. " " ..args[2].." / "..args[1],
|
2014-04-25 13:15:11 +00:00
|
|
|
position = notify_pos or "top_left"
|
2013-04-13 15:17:09 +00:00
|
|
|
|
|
|
|
})
|
|
|
|
bg:set_bg(theme.bg_urgent)
|
|
|
|
bg:set_fg(theme.fg_urgent)
|
2015-05-28 13:21:42 +00:00
|
|
|
container:show()
|
2013-04-13 15:17:09 +00:00
|
|
|
elseif args[2] > 0 then
|
|
|
|
bg:set_bg(theme.bg_focus)
|
|
|
|
bg:set_fg(theme.fg_focus)
|
2015-05-28 13:21:42 +00:00
|
|
|
container:show()
|
2013-04-13 15:17:09 +00:00
|
|
|
else
|
|
|
|
bg:set_bg(theme.bg_normal)
|
|
|
|
bg:set_fg(theme.fg_normal)
|
2015-05-28 13:21:42 +00:00
|
|
|
container:hide()
|
2013-04-13 15:17:09 +00:00
|
|
|
end
|
|
|
|
return "⬓⬓ Unread "..args[2].." / New "..args[1].. " "
|
|
|
|
end, 0, mailboxes)
|
2013-04-15 12:30:23 +00:00
|
|
|
widgets.update(name)
|
2015-05-28 13:21:42 +00:00
|
|
|
return container
|
2013-04-13 15:17:09 +00:00
|
|
|
end
|
|
|
|
--}}}
|
|
|
|
widgets.add.mail = mailwidget
|
|
|
|
|
|
|
|
-- text clock
|
2015-03-01 20:18:54 +00:00
|
|
|
local function clockwidget(name, parent) -- {{{
|
2015-05-28 13:21:42 +00:00
|
|
|
return wrap_and_add(name, parent, awful.widget.textclock())
|
2013-04-13 15:17:09 +00:00
|
|
|
end
|
|
|
|
--}}}
|
|
|
|
widgets.add.clock = clockwidget
|
|
|
|
|
|
|
|
-- layoutbox
|
2015-03-01 20:18:54 +00:00
|
|
|
local function layoutwidget(parent) -- {{{
|
2015-05-28 13:21:42 +00:00
|
|
|
return wrap_and_add("layout", parent, awful.widget.layoutbox(s))
|
2013-04-13 15:17:09 +00:00
|
|
|
end
|
|
|
|
--}}}
|
2015-05-28 13:21:42 +00:00
|
|
|
widgets.add.layout_indicator = layoutwidget
|
2013-04-13 15:17:09 +00:00
|
|
|
|
|
|
|
-- taglist
|
2015-03-01 20:18:54 +00:00
|
|
|
local function taglistwidget(name, parent) --{{{
|
2015-05-28 13:21:42 +00:00
|
|
|
local filter_urgentonly = function(t, args)
|
|
|
|
for k, c in pairs(t:clients()) do
|
|
|
|
if c.urgent then return true end
|
|
|
|
end
|
|
|
|
return t.selected
|
|
|
|
end
|
2013-04-13 15:17:09 +00:00
|
|
|
-- Create a taglist widget
|
2015-05-28 13:21:42 +00:00
|
|
|
return wrap_and_add(name, parent,
|
2015-06-13 22:00:56 +00:00
|
|
|
awful.widget.taglist(parent.screen, awful.widget.taglist.filter.noempty, mytaglist.buttons)
|
2015-05-28 13:21:42 +00:00
|
|
|
)
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.taglist = taglistwidget
|
|
|
|
|
|
|
|
-- system tray
|
2013-04-15 12:30:23 +00:00
|
|
|
-- not using a name argument, because only one systray is allowed
|
2015-03-01 20:18:54 +00:00
|
|
|
local function systraywidget(parent) --{{{
|
2013-04-13 15:17:09 +00:00
|
|
|
if (wlist["systray"] ~= nil) then
|
|
|
|
return
|
|
|
|
end
|
|
|
|
wlist["systray"] = wibox.widget.systray()
|
2015-03-01 20:18:54 +00:00
|
|
|
parent.layout:add(wlist["systray"])
|
2015-05-28 13:21:42 +00:00
|
|
|
return wlist["systray"]
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.systray = systraywidget
|
|
|
|
|
|
|
|
-- cpu usage
|
2015-03-01 20:18:54 +00:00
|
|
|
local function cpuwidget(name, parent) --{{{
|
2015-05-28 13:21:42 +00:00
|
|
|
local cpu = wrap_and_add(name, parent, wibox.widget.textbox())
|
2015-03-01 20:18:54 +00:00
|
|
|
vicious.register(wlist[parent.screen][name], vicious.widgets.cpu, "CPU: $1%")
|
2015-05-28 13:21:42 +00:00
|
|
|
return cpu
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.cpu = cpuwidget
|
|
|
|
|
|
|
|
-- battery
|
2015-03-01 20:18:54 +00:00
|
|
|
local function batterywidget(name, parent, batname) --{{{
|
2013-04-15 12:30:23 +00:00
|
|
|
local widget = wibox.widget.textbox()
|
2013-04-13 15:17:09 +00:00
|
|
|
local bg = wibox.widget.background()
|
2013-04-15 12:30:23 +00:00
|
|
|
bg:set_widget(widget)
|
|
|
|
vicious.register(widget, vicious.widgets.bat, function (widget, args)
|
2013-04-13 15:17:09 +00:00
|
|
|
if args[2] == 0 then return ""
|
|
|
|
else
|
|
|
|
if args[2] < 15 then
|
|
|
|
bg:set_bg(theme.bg_urgent)
|
|
|
|
bg:set_fg(theme.fg_urgent)
|
|
|
|
else
|
|
|
|
bg:set_bg(theme.bg_normal)
|
|
|
|
bg:set_fg(theme.fg_normal)
|
|
|
|
end
|
2013-04-15 12:30:23 +00:00
|
|
|
return name .. ": " ..
|
2013-04-13 15:17:09 +00:00
|
|
|
args[1]..args[2].."% - "..args[3]
|
|
|
|
end
|
|
|
|
end, 61, batname)
|
2013-04-15 12:30:23 +00:00
|
|
|
widgets.update(name)
|
2015-05-28 13:21:42 +00:00
|
|
|
return wrap_and_add(name, parent, bg)
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.battery = batterywidget
|
|
|
|
|
|
|
|
-- wireless status
|
2015-03-01 20:18:54 +00:00
|
|
|
local function wifiwidget(name, parent, interface) --{{{
|
2015-05-28 13:21:42 +00:00
|
|
|
local wifi = wrap_and_add(name, parent, wibox.widget.textbox())
|
2015-03-01 20:18:54 +00:00
|
|
|
vicious.register(wlist[parent.screen][name], vicious.widgets.wifi,
|
2015-05-15 19:06:07 +00:00
|
|
|
"WLAN ${ssid} @ ${sign}dBm, Q:${link}/70", 31, interface)
|
2015-05-28 13:21:42 +00:00
|
|
|
return wifi
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.wifi = wifiwidget
|
|
|
|
|
|
|
|
-- }}}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- spacers {{{
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
local spacer = wibox.widget.textbox()
|
|
|
|
spacer:set_text(" ")
|
|
|
|
|
|
|
|
-- manual spacing between widgets
|
2015-03-01 20:18:54 +00:00
|
|
|
local function spacerwidget(parent) --{{{
|
|
|
|
parent.layout:add(spacer)
|
2013-04-13 15:17:09 +00:00
|
|
|
end --}}}
|
|
|
|
widgets.add.spacer = spacerwidget
|
|
|
|
|
|
|
|
-- change appearance of spacers
|
|
|
|
local function spacertext(text) --{{{
|
|
|
|
spacer:set_text(text)
|
|
|
|
end --}}}
|
|
|
|
widgets.set_spacer_text = spacertext
|
|
|
|
|
|
|
|
-- }}}
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
2015-03-01 20:18:54 +00:00
|
|
|
setup()
|
|
|
|
|
2013-04-13 15:17:09 +00:00
|
|
|
return widgets
|
|
|
|
|
|
|
|
-- vim:foldmethod=marker
|