Byron Clark avatar Byron Clark committed 5d28e82

Initial copy from mercurial.

Comments (0)

Files changed (220)

+*.elc
+*.pyc
+
+awesome/localconf.lua
+
+dotfiles/emacs.load/loaddefs.el
+dotfiles/emacs.load/custom.el
+dotfiles/emacs.load/places
+dotfiles/emacs.load/elpa/*
+
+dotfiles/vim/.netrwhist
+dotfiles/vim/doc/tags
+dotfiles/vim/bundle/*/doc/tags
+
+dotfiles/vimperator/info
+
+dotfiles/mutt/temp
+dotfiles/mutt/cache
+dotfiles/mutt/certificates
Add a comment to this file

awesome/icons/battery.png

Added
New image
Added
New image
Added
New image
Add a comment to this file

awesome/icons/volume-control.png

Added
New image

awesome/localconf.lua.example

+local P = {}
+localconf = P
+
+P.theme_path = os.getenv("HOME") .. '/.config/awesome/theme/theme.lua'
+P.has_battery = true
+P.battery = 'BAT0'
+P.mwfact = 0.615
+P.pulse_device = 'alsa_output.pci-0000_00_1b.0.analog-stereo'
+
+return localconf
+-- Standard awesome library
+require("awful")
+require("awful.autofocus")
+require("awful.rules")
+-- Theme handling library
+require("beautiful")
+-- Notification library
+require("naughty")
+
+-- Vicious widget library
+require("vicious")
+require("vicious.contrib")
+
+-- Local definitions
+require("localconf")
+
+-- {{{ Variable definitions
+-- Themes define colours, icons, and wallpapers
+beautiful.init(localconf.theme_path)
+
+-- Text used to separate widgets
+separator_text = '<span color="#333333">|</span>'
+spacer_text = ' '
+
+-- Directory containing icons for the wibox
+icon_path = os.getenv('HOME') .. '/.config/awesome/icons/'
+
+-- This is used later as the default terminal and editor to run.
+terminal = 'urxvt'
+editor = os.getenv("EDITOR") or "vim"
+editor_cmd = terminal .. " -e " .. editor
+
+-- Default modkey.
+-- Usually, Mod4 is the key with a logo between Control and Alt.
+-- If you do not like this or do not have such a key,
+-- I suggest you to remap Mod4 to another key using xmodmap or other tools.
+-- However, you can use another modifier like Mod1, but it may interact with others.
+modkey = "Mod4"
+
+-- Table of layouts to cover with awful.layout.inc, order matters.
+layouts =
+{
+    awful.layout.suit.tile,
+    awful.layout.suit.tile.bottom,
+    awful.layout.suit.max,
+    awful.layout.suit.max.fullscreen,
+    awful.layout.suit.floating
+}
+-- }}}
+
+-- {{{ Tags
+-- Define a tag table which hold all screen tags.
+tags = {}
+for s = 1, screen.count() do
+    -- Each screen has its own tag table.
+    tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, awful.layout.suit.tile)
+    for k,v in pairs(tags[s]) do
+        awful.tag.setmwfact(localconf.mwfact, v)
+    end
+end
+-- }}}
+
+
+-- {{{ Wibox
+-- Create a separator
+separator = widget({ type = "textbox" })
+separator.text = separator_text
+spacer = widget({ type = "textbox" })
+spacer.text = spacer_text
+
+-- CPU usage
+cpuicon = widget({ type = "imagebox" })
+cpuicon.image = image(icon_path .. 'cpu.png')
+cpugraph = awful.widget.graph()
+cpugraph:set_width(30)
+cpugraph:set_height(16)
+cpugraph:set_border_color(beautiful.border_widget)
+cpugraph:set_background_color(beautiful.bg_widget)
+cpugraph:set_color(beautiful.fg_widget)
+vicious.register(cpugraph, vicious.widgets.cpu, '$1')
+
+-- Create a battery monitor
+if localconf.has_battery then
+    batteryicon = widget({ type = "imagebox" })
+    batteryicon.image = image(icon_path .. 'battery.png')
+    battery = awful.widget.progressbar()
+    battery:set_width(8)
+    battery:set_height(16)
+    battery:set_vertical(true)
+    battery:set_border_color(beautiful.border_widget)
+    battery:set_background_color(beautiful.bg_widget)
+    battery:set_color(beautiful.fg_widget)
+    vicious.register(battery, vicious.widgets.bat, '$2', 61, localconf.battery)
+end
+
+-- Create a volume widget
+volumeicon = widget({ type = "imagebox" })
+volumeicon.image = image(icon_path .. 'volume-control.png')
+volume = awful.widget.progressbar()
+volume:set_width(8)
+volume:set_height(16)
+volume:set_vertical(true)
+volume:set_border_color(beautiful.border_widget)
+volume:set_background_color(beautiful.bg_widget)
+volume:set_color(beautiful.fg_widget)
+vicious.register(volume, vicious.contrib.pulse, '$1', 2, localconf.pulse_device)
+volumeicon:buttons(awful.util.table.join(
+   awful.button({ }, 1, function() awful.util.spawn("pavucontrol") end),
+   awful.button({ }, 4, function() vicious.contrib.pulse.add(5, localconf.pulse_device) end),
+   awful.button({ }, 5, function() vicious.contrib.pulse.add(-5, localconf.pulse_device) end)
+))
+
+
+-- Memory usage
+memoryicon = widget({ type = 'imagebox' })
+memoryicon.image = image(icon_path .. 'mem.png')
+memory = awful.widget.progressbar()
+memory:set_width(8)
+memory:set_height(16)
+memory:set_vertical(true)
+memory:set_border_color(beautiful.border_widget)
+memory:set_background_color(beautiful.bg_widget)
+memory:set_color(beautiful.fg_widget)
+vicious.register(memory, vicious.widgets.mem, '$1', 9)
+
+-- Create a textclock widget
+textclock = awful.widget.textclock({ align = "right" }, '<span color="#6f6f6f">%d.%m.%y/%H:%M</span>', 5)
+
+-- Create a systray
+mysystray = widget({ type = "systray" })
+
+-- Create a wibox for each screen and add it
+mywibox = {}
+mypromptbox = {}
+mylayoutbox = {}
+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, awful.tag.viewnext),
+                    awful.button({ }, 5, awful.tag.viewprev)
+                    )
+mytasklist = {}
+mytasklist.buttons = awful.util.table.join(
+                     awful.button({ }, 1, function (c)
+                                              if c == client.focus then
+                                                  c.minimized = true
+                                              else
+                                                  if not c:isvisible() then
+                                                      awful.tag.viewonly(c:tags()[1])
+                                                  end
+                                                  -- This will also un-minimize
+                                                  -- the client, if needed
+                                                  client.focus = c
+                                                  c:raise()
+                                              end
+                                          end),
+                     awful.button({ }, 3, function ()
+                                              if instance then
+                                                  instance:hide()
+                                                  instance = nil
+                                              else
+                                                  instance = awful.menu.clients({ width=250 })
+                                              end
+                                          end),
+                     awful.button({ }, 4, function ()
+                                              awful.client.focus.byidx(1)
+                                              if client.focus then client.focus:raise() end
+                                          end),
+                     awful.button({ }, 5, function ()
+                                              awful.client.focus.byidx(-1)
+                                              if client.focus then client.focus:raise() end
+                                          end))
+
+for s = 1, screen.count() do
+    -- Create a promptbox for each screen
+    mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
+    -- Create an imagebox widget which will contains an icon indicating which layout we're using.
+    -- We need one layoutbox per screen.
+    mylayoutbox[s] = awful.widget.layoutbox(s)
+    mylayoutbox[s]:buttons(awful.util.table.join(
+                           awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end),
+                           awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end),
+                           awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end),
+                           awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end)))
+    -- Create a taglist widget
+    mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons)
+
+    -- Create a tasklist widget
+    mytasklist[s] = awful.widget.tasklist(function(c)
+                                              return awful.widget.tasklist.label.currenttags(c, s)
+                                          end, mytasklist.buttons)
+
+    -- Create the wibox
+    mywibox[s] = awful.wibox({ position = "top", screen = s, height = beautiful.wibox_height })
+    -- Add widgets to the wibox - order matters
+    mywibox[s].widgets = {
+        {
+            mytaglist[s],
+            mylayoutbox[s],
+            mypromptbox[s],
+            layout = awful.widget.layout.horizontal.leftright
+        },
+        s == screen.count() and mysystray or nil,
+        s == screen.count() and separator or nil,
+        textclock, separator,
+        cpugraph.widget, cpuicon, separator,
+        memory.widget, memoryicon, separator,
+        volume.widget, volumeicon, separator,
+        localconf.has_battery and battery.widget or nil,
+        localconf.has_battery and batteryicon or nil,
+        mytasklist[s],
+        layout = awful.widget.layout.horizontal.rightleft
+    }
+end
+-- }}}
+
+-- {{{ Mouse bindings
+root.buttons(awful.util.table.join(
+    awful.button({ }, 4, awful.tag.viewnext),
+    awful.button({ }, 5, awful.tag.viewprev)
+))
+-- }}}
+
+-- {{{ Key bindings
+globalkeys = awful.util.table.join(
+    awful.key({ modkey,           }, "Left",   awful.tag.viewprev       ),
+    awful.key({ modkey,           }, "Right",  awful.tag.viewnext       ),
+    awful.key({ modkey,           }, "Escape", awful.tag.history.restore),
+
+    awful.key({ modkey,           }, "j",
+        function ()
+            awful.client.focus.byidx( 1)
+            if client.focus then client.focus:raise() end
+        end),
+    awful.key({ modkey,           }, "k",
+        function ()
+            awful.client.focus.byidx(-1)
+            if client.focus then client.focus:raise() end
+        end),
+
+    -- Layout manipulation
+    awful.key({ modkey, "Shift"   }, "j", function () awful.client.swap.byidx(  1)    end),
+    awful.key({ modkey, "Shift"   }, "k", function () awful.client.swap.byidx( -1)    end),
+    awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end),
+    awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end),
+    awful.key({ modkey,           }, "u", awful.client.urgent.jumpto),
+    awful.key({ modkey,           }, "Tab",
+        function ()
+            awful.client.focus.history.previous()
+            if client.focus then
+                client.focus:raise()
+            end
+        end),
+
+    -- Standard program
+    awful.key({ modkey,           }, "Return", function () awful.util.spawn(terminal) end),
+    awful.key({ modkey, "Control" }, "r", awesome.restart),
+    awful.key({ modkey, "Shift"   }, "q", awesome.quit),
+    awful.key({ modkey, "Control" }, "s", function () awful.util.spawn('xautolock -locknow') end),
+
+    awful.key({ modkey,           }, "l",     function () awful.tag.incmwfact( 0.05)    end),
+    awful.key({ modkey,           }, "h",     function () awful.tag.incmwfact(-0.05)    end),
+    awful.key({ modkey, "Shift"   }, "h",     function () awful.tag.incnmaster( 1)      end),
+    awful.key({ modkey, "Shift"   }, "l",     function () awful.tag.incnmaster(-1)      end),
+    awful.key({ modkey, "Control" }, "h",     function () awful.tag.incncol( 1)         end),
+    awful.key({ modkey, "Control" }, "l",     function () awful.tag.incncol(-1)         end),
+    awful.key({ modkey,           }, "space", function () awful.layout.inc(layouts,  1) end),
+    awful.key({ modkey, "Shift"   }, "space", function () awful.layout.inc(layouts, -1) end),
+
+    awful.key({ modkey, "Control" }, "n", awful.client.restore),
+
+    -- Prompt
+    awful.key({ modkey },            "p",     function () mypromptbox[mouse.screen]:run() end),
+
+    awful.key({ modkey }, "x",
+              function ()
+                 awful.prompt.run({ prompt = "Run Lua code: " },
+                                  mypromptbox[mouse.screen].widget,
+                                  awful.util.eval, nil,
+                                  awful.util.getdir("cache") .. "/history_eval")
+              end),
+
+    awful.key({ modkey }, "d",
+              function ()
+                 awful.prompt.run({ prompt = "Dial: " },
+                                  mypromptbox[mouse.screen].widget,
+                                  function (number)
+                                     awful.util.spawn("jive-remote '" .. number .. "'")
+                                  end,
+                                  nil,
+                                  awful.util.getdir("cache") .. "/history_dial")
+              end),
+
+    -- Volume Controls
+    awful.key({ }, "XF86AudioRaiseVolume", function () vicious.contrib.pulse.add(5, localconf.pulse_device) end),
+    awful.key({ }, "XF86AudioLowerVolume", function () vicious.contrib.pulse.add(-5, localconf.pulse_device) end),
+    awful.key({ }, "XF86AudioMute",        function () awful.util.spawn('amixer -c 0 set Master toggle') end),
+
+    -- Music Controls
+    awful.key({ modkey, "Control" }, "x", function () awful.util.spawn('toggle-music') end),
+
+    -- Power Management Controls
+    awful.key({ }, "XF86Sleep", function () awful.util.spawn('sudo /usr/sbin/pm-suspend') end),
+    awful.key({ }, "XF86Suspend", function () awful.util.spawn('sudo /usr/sbin/pm-hibernate') end)
+
+)
+
+clientkeys = awful.util.table.join(
+    awful.key({ modkey,           }, "f",      function (c) c.fullscreen = not c.fullscreen  end),
+    awful.key({ modkey, "Shift"   }, "c",      function (c) c:kill()                         end),
+    awful.key({ modkey, "Control" }, "space",  awful.client.floating.toggle                     ),
+    awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
+    awful.key({ modkey,           }, "o",      awful.client.movetoscreen                        ),
+    awful.key({ modkey, "Shift"   }, "r",      function (c) c:redraw()                       end),
+    awful.key({ modkey,           }, "t",      function (c) c.ontop = not c.ontop            end),
+    awful.key({ modkey,           }, "n",
+        function (c)
+            -- The client currently has the input focus, so it cannot be
+            -- minimized, since minimized clients can't have the focus.
+            c.minimized = true
+        end),
+    awful.key({ modkey,           }, "m",
+        function (c)
+            c.maximized_horizontal = not c.maximized_horizontal
+            c.maximized_vertical   = not c.maximized_vertical
+        end)
+)
+
+-- Compute the maximum number of digit we need, limited to 9
+keynumber = 0
+for s = 1, screen.count() do
+   keynumber = math.min(9, math.max(#tags[s], keynumber));
+end
+
+-- Bind all key numbers to tags.
+-- Be careful: we use keycodes to make it works on any keyboard layout.
+-- This should map on the top row of your keyboard, usually 1 to 9.
+for i = 1, keynumber do
+    globalkeys = awful.util.table.join(globalkeys,
+        awful.key({ modkey }, "#" .. i + 9,
+                  function ()
+                        local screen = mouse.screen
+                        if tags[screen][i] then
+                            awful.tag.viewonly(tags[screen][i])
+                        end
+                  end),
+        awful.key({ modkey, "Control" }, "#" .. i + 9,
+                  function ()
+                      local screen = mouse.screen
+                      if tags[screen][i] then
+                          awful.tag.viewtoggle(tags[screen][i])
+                      end
+                  end),
+        awful.key({ modkey, "Shift" }, "#" .. i + 9,
+                  function ()
+                      if client.focus and tags[client.focus.screen][i] then
+                          awful.client.movetotag(tags[client.focus.screen][i])
+                      end
+                  end),
+        awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+                  function ()
+                      if client.focus and tags[client.focus.screen][i] then
+                          awful.client.toggletag(tags[client.focus.screen][i])
+                      end
+                  end))
+end
+
+clientbuttons = awful.util.table.join(
+    awful.button({ }, 1, function (c) client.focus = c; c:raise() end),
+    awful.button({ modkey }, 1, awful.mouse.client.move),
+    awful.button({ modkey }, 3, awful.mouse.client.resize))
+
+-- Set keys
+root.keys(globalkeys)
+-- }}}
+
+-- {{{ Rules
+awful.rules.rules = {
+    -- All clients will match this rule.
+    { rule = { },
+      properties = { border_width = beautiful.border_width,
+                     border_color = beautiful.border_normal,
+                     focus = true,
+                     keys = clientkeys,
+                     buttons = clientbuttons } },
+    { rule = { class = "MPlayer" },
+      properties = { floating = true } },
+    { rule = { class = "pinentry" },
+      properties = { floating = true } },
+    { rule = { class = "gimp" },
+      properties = { floating = true } },
+    -- Set Firefox to always map on tags number 2 of screen 1.
+    -- { rule = { class = "Firefox" },
+    --   properties = { tag = tags[1][2] } },
+}
+-- }}}
+
+-- {{{ Signals
+-- Signal function to execute when a new client appears.
+client.add_signal("manage", function (c, startup)
+    -- Add a titlebar
+    -- awful.titlebar.add(c, { modkey = modkey })
+
+    -- Enable sloppy focus
+    c:add_signal("mouse::enter", function(c)
+        if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
+            and awful.client.focus.filter(c) then
+            client.focus = c
+        end
+    end)
+
+    if not startup then
+        -- Set the windows at the slave,
+        -- i.e. put it at the end of others instead of setting it master.
+        -- awful.client.setslave(c)
+
+        -- Put windows in a smart way, only if they does not set an initial position.
+        if not c.size_hints.user_position and not c.size_hints.program_position then
+            awful.placement.no_overlap(c)
+            awful.placement.no_offscreen(c)
+        end
+    end
+end)
+
+client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end)
+client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
+-- }}}

awesome/theme/README

+Background images:
+    Mikael Eriksson <mikael_eriksson@miffe.org>
+    Licensed under CC-BY-SA-3.0
Add a comment to this file

awesome/theme/background.png

Added
New image
Add a comment to this file

awesome/theme/background_white.png

Added
New image
Add a comment to this file

awesome/theme/layouts/dwindle.png

Added
New image
Add a comment to this file

awesome/theme/layouts/dwindlew.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fairh.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fairhw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fairv.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fairvw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/floating.png

Added
New image
Add a comment to this file

awesome/theme/layouts/floatingw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fullscreen.png

Added
New image
Add a comment to this file

awesome/theme/layouts/fullscreenw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/magnifier.png

Added
New image
Add a comment to this file

awesome/theme/layouts/magnifierw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/max.png

Added
New image
Add a comment to this file

awesome/theme/layouts/maxw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/spiral.png

Added
New image
Add a comment to this file

awesome/theme/layouts/spiralw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tile.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tilebottom.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tilebottomw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tileleft.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tileleftw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tiletop.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tiletopw.png

Added
New image
Add a comment to this file

awesome/theme/layouts/tilew.png

Added
New image
Add a comment to this file

awesome/theme/submenu.png

Added
New image
Add a comment to this file

awesome/theme/taglist/squarefw.png

Added
New image
Add a comment to this file

awesome/theme/taglist/squarew.png

Added
New image
Add a comment to this file

awesome/theme/tasklist/floating.png

Added
New image
Add a comment to this file

awesome/theme/tasklist/floatingw.png

Added
New image

awesome/theme/theme.lua

+---------------------------
+-- Default awesome theme --
+---------------------------
+
+homedir = os.getenv('HOME')
+
+theme = {}
+
+theme.font          = "Terminus 7"
+theme.wibox_height  = 16
+
+theme.bg_normal     = "#222222"
+theme.bg_focus      = "#535d6c"
+theme.bg_urgent     = "#ff0000"
+theme.bg_minimize   = "#444444"
+
+theme.fg_normal     = "#aaaaaa"
+theme.fg_focus      = "#ffffff"
+theme.fg_urgent     = "#ffffff"
+theme.fg_minimize   = "#ffffff"
+
+theme.border_width  = "1"
+theme.border_normal = "#000000"
+theme.border_focus  = "#535d6c"
+theme.border_marked = "#91231c"
+
+-- There are other variable sets
+-- overriding the default one when
+-- defined, the sets are:
+-- [taglist|tasklist]_[bg|fg]_[focus|urgent]
+-- titlebar_[bg|fg]_[normal|focus]
+-- tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
+-- mouse_finder_[color|timeout|animate_timeout|radius|factor]
+-- Example:
+--theme.taglist_bg_focus = "#ff0000"
+
+theme.border_widget = theme.border_normal
+theme.bg_widget = theme.bg_normal
+theme.fg_widget = theme.bg_focus
+
+-- Display the taglist squares
+theme.taglist_squares_sel   = homedir .. "/.config/awesome/theme/taglist/squarefw.png"
+theme.taglist_squares_unsel = homedir .. "/.config/awesome/theme/taglist/squarew.png"
+
+theme.tasklist_floating_icon = homedir .. "/.config/awesome/theme/tasklist/floatingw.png"
+
+-- Variables set for theming the menu:
+-- menu_[bg|fg]_[normal|focus]
+-- menu_[border_color|border_width]
+theme.menu_submenu_icon = homedir .. "/.config/awesome/theme/submenu.png"
+theme.menu_height = "15"
+theme.menu_width  = "100"
+
+-- You can add as many variables as
+-- you wish and access them by using
+-- beautiful.variable in your rc.lua
+--theme.bg_widget = "#cc0000"
+
+-- Define the image to load
+theme.titlebar_close_button_normal = homedir .. "/.config/awesome/theme/titlebar/close_normal.png"
+theme.titlebar_close_button_focus  = homedir .. "/.config/awesome/theme/titlebar/close_focus.png"
+
+theme.titlebar_ontop_button_normal_inactive = homedir .. "/.config/awesome/theme/titlebar/ontop_normal_inactive.png"
+theme.titlebar_ontop_button_focus_inactive  = homedir .. "/.config/awesome/theme/titlebar/ontop_focus_inactive.png"
+theme.titlebar_ontop_button_normal_active = homedir .. "/.config/awesome/theme/titlebar/ontop_normal_active.png"
+theme.titlebar_ontop_button_focus_active  = homedir .. "/.config/awesome/theme/titlebar/ontop_focus_active.png"
+
+theme.titlebar_sticky_button_normal_inactive = homedir .. "/.config/awesome/theme/titlebar/sticky_normal_inactive.png"
+theme.titlebar_sticky_button_focus_inactive  = homedir .. "/.config/awesome/theme/titlebar/sticky_focus_inactive.png"
+theme.titlebar_sticky_button_normal_active = homedir .. "/.config/awesome/theme/titlebar/sticky_normal_active.png"
+theme.titlebar_sticky_button_focus_active  = homedir .. "/.config/awesome/theme/titlebar/sticky_focus_active.png"
+
+theme.titlebar_floating_button_normal_inactive = homedir .. "/.config/awesome/theme/titlebar/floating_normal_inactive.png"
+theme.titlebar_floating_button_focus_inactive  = homedir .. "/.config/awesome/theme/titlebar/floating_focus_inactive.png"
+theme.titlebar_floating_button_normal_active = homedir .. "/.config/awesome/theme/titlebar/floating_normal_active.png"
+theme.titlebar_floating_button_focus_active  = homedir .. "/.config/awesome/theme/titlebar/floating_focus_active.png"
+
+theme.titlebar_maximized_button_normal_inactive = homedir .. "/.config/awesome/theme/titlebar/maximized_normal_inactive.png"
+theme.titlebar_maximized_button_focus_inactive  = homedir .. "/.config/awesome/theme/titlebar/maximized_focus_inactive.png"
+theme.titlebar_maximized_button_normal_active = homedir .. "/.config/awesome/theme/titlebar/maximized_normal_active.png"
+theme.titlebar_maximized_button_focus_active  = homedir .. "/.config/awesome/theme/titlebar/maximized_focus_active.png"
+
+-- You can use your own command to set your wallpaper
+theme.wallpaper_cmd = { "awsetbg -t " .. homedir .. "/.config/awesome/theme/background.png" }
+
+-- You can use your own layout icons like this:
+theme.layout_fairh = homedir .. "/.config/awesome/theme/layouts/fairhw.png"
+theme.layout_fairv = homedir .. "/.config/awesome/theme/layouts/fairvw.png"
+theme.layout_floating  = homedir .. "/.config/awesome/theme/layouts/floatingw.png"
+theme.layout_magnifier = homedir .. "/.config/awesome/theme/layouts/magnifierw.png"
+theme.layout_max = homedir .. "/.config/awesome/theme/layouts/maxw.png"
+theme.layout_fullscreen = homedir .. "/.config/awesome/theme/layouts/fullscreenw.png"
+theme.layout_tilebottom = homedir .. "/.config/awesome/theme/layouts/tilebottomw.png"
+theme.layout_tileleft   = homedir .. "/.config/awesome/theme/layouts/tileleftw.png"
+theme.layout_tile = homedir .. "/.config/awesome/theme/layouts/tilew.png"
+theme.layout_tiletop = homedir .. "/.config/awesome/theme/layouts/tiletopw.png"
+theme.layout_spiral  = homedir .. "/.config/awesome/theme/layouts/spiralw.png"
+theme.layout_dwindle = homedir .. "/.config/awesome/theme/layouts/dwindlew.png"
+
+theme.awesome_icon = "/usr/share/awesome/icons/awesome16.png"
+
+return theme
Add a comment to this file

awesome/theme/titlebar/close_focus.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/close_normal.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/floating_focus_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/floating_focus_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/floating_normal_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/floating_normal_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/maximized_focus_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/maximized_focus_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/maximized_normal_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/maximized_normal_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/ontop_focus_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/ontop_focus_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/ontop_normal_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/ontop_normal_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/sticky_focus_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/sticky_focus_inactive.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/sticky_normal_active.png

Added
New image
Add a comment to this file

awesome/theme/titlebar/sticky_normal_inactive.png

Added
New image

awesome/vicious/CHANGES

+---------------------------------------------------
+Full changelog is available online:
+    http://git.sysphere.org/vicious/log/?showmsg=1
+---------------------------------------------------
+add54f8 README: added missing register() documentation
+fe2e432 TODO: fix contrib/sensors for Ian
+7625933 wifi: proper fix for SSID regexp
+7f7a94d gmail: inbox is now default
+82eb67b wifi: removed spurious bracket from SSID regexp
+304fa33 wifi: properly handle disconnects
+32a7be1 wifi: provide link quality in percent
+c532c0b contrib: fixed email of pulse widget author
+49b0913 wifi: improved SSID regular expression
+932bd8d init: emit timeout instead of forced update
+fbd2af7 init: add set_markup support
+e51d8ac date: turn time widget argument into an offset
+c6085ee date: accept time as a widget argument
+a9d6ea2 init: add connect_signal support, patch by Uli
+86a1394 README: update contrib information
+fbfcc49 init: comment connect_signal for users of awesome master
+1d7f646 pkg: description updated
+88c3d0c contrib: use pcall for luasocket in pop
+b200a80 contrib: dont import pop - requires luasocket
+0350ec9 TODO: document contrib widgets
+f8a8696 contrib: imported POP3 widget from Boris
+1a443cd init: import contrib widgets, commented
+26b0395 contrib: imported contrib widgets
+0d6333e Next release, tag 2.0.1
+1534951 mpd: added some optional stats, commented
+4113d37 pkg: include FreeBSD support
+fc46e7a TODO: solid multigraph support needed
+d912663 net: add operational state support
+8674c91 dio: add partition support
+d6faae1 TODO: remove org-mode extension
+6171734 TODO: added the carrier detection todo
+6d6e98a TODO: included the todo file to encourage contribution
+ca1d8d7 README: cut on the security crap
+fdae848 raid: removed permanent stats storage
+3e12875 pkg: include Mandriva support
+64e5426 uptime: simplified system load regexp
+448275a widgets: reuse existing datasets where appropriate
+a9347ec raid: import raid state widget type by Hagen
+9af29ce pkg: aptitude alternative to apt-show-versions
+94a60fb bat: fixed module description
+338a2ee Next release, tag 2.0.0
+0299c15 widgets: minor cleanup before a tag in cpuinf, fs, mbox...
+4fc6dff wifi: return 0 not N/A when channel is unavailable
+f50ad21 thermal: function argument is already local
+4f86e28 os: merge with entropy widget type
+49b1b09 helpers: index subdirectories in pathtotable()
+7cbf987 bat: fix battery detection
+a4bd307 README: updated link to contrib
+4dad2e3 API: missing warg should not break awesome
+237470c API: transform widgets namespace table to a directory
+9a82d41 init: never pass string to awful.widget widgets
+3ac4fcf init: missing widget type should not break awesome
+febc91d hddtemp: minor style changes
+9338cb9 cpuinf: rewritten and optimized
+96a8e55 Make use of io.lines() where appropriate
+6441db0 README: added a list of needed utilities
+06a455a README: add contributors to Authors section
+178a7eb README: added contrib and vicious-fbsd information
+0dd5b72 README: standardize quotes
+8482b54 mpd: rewritten and now uses curl not mpc
+dda51b1 net: remove redudant string.match call
+1abb451 Next release, tag 1.0.26
+6898d4a dio: add I/O scheduler support
+71f21f3 fs: use -l not --local for portability
+edb4619 os: import operating system information widget
+de15934 fs: further improve the regexp
+3178068 mem: rewrite and simplify
+77d1a0b gmail: switch to ~/.netrc for login storage
+1c0ceff gmail: don't break on non-escaped chars, quote login
+abacd77 fs: include available space in percent, requested by Jon
+94e7ed1 fs: rewritten, less prone to error
+fa40e40 init: never pass nil into awful.widget widgets
+6f79227 Next release, tag 1.0.25
+f34bfaf fs: fix the bug reported by Alex Tergeland
+5f41c7a init: do not use keyword type for user data
+ee64644 API: added force() function to force update widgets
+95e9a77 API: regregister() and update() are not exposed
+ff050a0 README: link to the "Widgets in awesome" document
+5226d10 API: function enable_caching() is now cache()
+9371839 volume: added real mute support
+dbd6c7b weather: capitalize weather and sky stats
+2c6b969 weather: calculate degree Celsius from Fahrenheit
+ad14818 helpers: import capitalize
+0ab8311 wifi: properly handle iwconfig PATH differences
+4fa87fa wifi: properly handle non-existant interface
+9eef646 git: ignore file removed
+4664bee mdir: fix module description
+57004c0 Next release, tag 1.0.24
+b96cb98 bat: added a note about Apple PMU and ACPI/procfs
+23d09f0 README: added the Security section
+e29ea62 helpers: uformat helper replaces formatting done by widgets
+f4cd746 pkg: solve interactive pacman prompt patch from tdy
+5e1d1e0 volume: suggest appending card ID or other options
+24f23fa gmail: reworked feed handling and changed username format
+6c34e85 thermal: added support for procfs and coretemp
+355c838 Next release, tag 1.0.23
+0f3123e README: added textbox fixed width example
+3095ffb pkg: added apt and yum to pkg managers table
+91925e6 pkg: pacman moved to generic packages module
+71566e0 dio: further improved support for multiple devices
+8fe4cf4 net: sanitize time computation to avoid division by zero
+d2a00d7 Next release, tag 1.0.22
+15dd6ea vicious: update copyright
+9e37225 pacman: remove 3.2 example, add ignores+deps example
+cedf171 wifi: return numbers without notations
+fba4db6 weather: fix parsing of negative temperatures
+2100ea1 Next release, tag 1.0.21
+9b5efc7 cpu: simplified table initialization
+9150063 dio: preliminary support for multiple devices
+b4031d2 dio: return separated read and write statistics
+2c900fa README: minor changes in Format functions
+c870691 fs: switched to 1K blocks and new keys
+5cbd759 net: move formatting out of the worker
+14d69f6 net: minor coding style change
+db82c2a Next release, tag 1.0.20
+3834caa hddtemp: fixed support for multiple devices
+1790abb hddtemp: adapt regex to match disks like /dev/sg0
+2492945 fs: minor coding style change
+f5b47dc mdir: support for multiple directories
+1d0cfd3 Cleanup widgets that use pathtotable helper
+76942d1 helpers: simplify pathtotable, patch by filmor
+26c1f07 Next release, tag 1.0.19
+2e9b811 README: document new truncate and scroll usage
+d0aa48a entropy: widget rewritten, poolsize no longer an argument
+493150c uptime: merged with load widget type
+7be560b bat: widget rewritten for sysfs
+a99c1cf cpufreq: widget rewritten, governor symbols enabled
+5f9818f dio: widget type rewritten
+92be5fb thermal: widget rewritten for sysfs
+46d52fa helpers: import pathtotable
+eb661f6 batsys: add note about other charge/rate sources
+6fadee6 batsys: don't return 0 if only rate is missing
+8e21d26 batat: widget type removed, now available in the contrib branch
+e66e507 batsys: import battery widget that uses sysfs
+896df4d De-obfuscate e-mail address
+94cf0b7 Minor changes in mboxc and org
+44d943d gmail: add scrolling support and truncate control
+9e91408 mbox: add scrolling support and truncate control
+5ff8927 mpd: add scrolling support and truncate control
+589feb1 helpers: import scroll from Remy Clouard
+0d73f6d Ensure returned numbers are of type number
+b105ae2 README: updated net description
+3dc7c5e net: unit formatting delegated to a function
+5c6f544 README: more information in Power section
+40d7881 Adapt to awful.widget.graph max_value of 1
+25ce79e batat: better returns when handling insufficient data
+baa3612 Next release, tag 1.0.18
+97d2ecb bat: better returns when handling insufficient data
+4d1af1e bat: better fix for ACPI, from bioe007
+2cfdd5a bat: quick fix for broken BAT/ACPI implementations
+64464ef README: removed obsolete widget names
+11985f6 README: added padding example
+feca5da mem: tonumber is redudant
+7f3d31e uptime: fixed problem discovered by jabbas
+65e57fa README: document tables returned by widget types
+893a85c README: caching documentation improved
+00e7b2d README: fixed disk i/o warg documentation
+0eea1a1 cpu: simplified CPU identification
+e252fd9 Next release, tag 1.0.17
+a2b9de4 mem: widget type rewritten
+c84f515 mbox: read a 30kb chunk by default
+4602ca2 Lots of coding style changes
+af4e85f bat: added a handler for incompetent users
+fcf1027 cpufreq: use string library for find/match
+b4e028b Removed some useless else statements
+b65d509 Reworked counters in mboxc, mdir, org
+b185e96 mbox: don't hide when there is no mail
+724366c Reworked some variables in entropy, load, mpd, net, init
+643ecb0 date: function simplified
+3d97d44 cpuinf: prepend 'cpu' to CPU ID in table keys
+0d5f07b README: included 'Other uses' section
+9d518b8 volume: added mute support
+ddf9646 thermal: added some comments
+0e863a5 bat: coding style changes
+44f95c3 cpufreq: widget type rewritten
+aed9245 README: fixed some typos
+f933566 README: updated gmail information
+f99a74b gmail: count all unread messages
+5dac6a4 mboxc: support for multiple mbox files
+32fe770 README: fixes from git-diff --check
+b0f737e Rewrote all headers
+8e544fd Next release, tag 1.0.16
+b8f288b README: clarified caching usage
+46a7241 README: added more caching information
+eadf0c9 Caching is controlled by users
+0945724 README: minor fix in mem widget example
+51d5255 README: include pbar/graph properties in examples
+c9fba4e Widgets derived from wicked include a notice
+ba6dfae Next release, tag 1.0.15
+1707bc6 README: rewritten and now includes the "Power" section
+e205d66 CHANGES: changelog update
+9ca9e2f Next release, tag 1.0.14
+68b30a3 init: Default to 2s timer
+bc3cf45 README: mpd format function simplified
+7410bc0 Entropy widget cleaned up
+549c8bc Remote file systems in fs widget are optional
+2a5126f General cleanup
+4f3599d README: fixed CPU widget example
+1603b5f Curl connect timeout 1s, max time 3s
+a950bd9 Next release, tag 1.0.13
+161607e Gmail widget included
+e5c980e CHANGES file switched to 'oneline' short format
+fbc3f14 Updated links in the README
+13527a3 Match all punctuation chars in fs partitions and mount points.
+0ca1fd3 Match punctuation characters in wifi SSID.
+cb36f74 Next release, tag 1.0.12.
+11b433c README updated in preparation for release 1.0.12.
+2cc4e97 Removed deprecated data field.
+e7c2e2c Updated graphs and pbars for the upcoming awesome 3.4
+853fafc Updated timers for the upcoming awesome 3.4
+53b2799 Next release, tag 1.0.11.
+c283edc Updated link to wicked home.
+0067dca Removed emtpy lines from mpd.lua
+5e3b953 Link to wicked and add Joerg as contributor.
+4330375 Next release, tag 1.0.10.
+44cd53f Updated the CHANGES file in preparation for a new tag.
+7ad474b Use of LANG=C and improved matching in fs.lua.
+f8eb93a Mention ICAO as the wanted code in the weather widget.
+376591e Added laptop-mode note to the README.
+e5181cc Next release, tag 1.0.9.
+03693e7 Renamed unused loop identifiers to _
+9f75b0d Spurious folds removed from helpers.
+41d4acb Truncate helper, txtlen is local.
+3b3e0dc CHANGES file updated. Will probably switch to shortlog.
+d4595bb All worker functions are local.
+8b38567 Added missing poolsize info to the README + minor change in fs.lua
+798036e Changed fs widget type description.
+8d59a01 Next release, tag 1.0.8.
+d2d244f CPU Information widget included.
+cbd9a53 Next release, tag 1.0.7.
+013dd08 HDD Temperature widget included.
+515cc0d Weather widget switched to curl.
+477b8d2 CHANGES file updated before the next push.
+f14280b Pacman widget updated for pacman 3.3.
+b46278a Lower the wget timeout to 3s in weather.lua
+eaf8470 Cleaned up sample widgets in the README
+44aea40 Remove a spurious comment from helpers.lua
+3c76e0d Introduced the truncate helper.
+2d0cbf5 Fixed the weather widget, wind km/h was broken.
+4c74de7 Padding removed, along with deprecated helper functions.
+2d4efa6 Minor cleanup in init.lua
+22033ba Disallow using a string widget type.
+756215f Next release, tag 1.0.6.
+5909d9e Updated the CHANGES file in preparation for tag v1.0.6.
+cef569b CPU frequency widget included.
+3fe67d4 Coding style changes in entropy, load, thermal, uptime.
+09fda0a Rewrite of the escape helper.
+047dba0 Next release, version/tag 1.0.5.
+cad950a Updated the CHANGES file in preparation for tag v1.0.5.
+418151f Make all widgets return their worker functions when called.
+1630b78 Added wind speed in km/h to the weather widget.
+f841c54 Updated the CHANGES file.
+3f851ff Added a note about weather symbols to the weather widget.
+1b99061 Use utf symbols for some bat states. Mention LuaFileSystem in mdir.lua
+f00558c Next release, version 1.0.4.
+475da04 Mbox mail count widget included.
+dad393b Updated the CHANGES file.
+bc63706 Coding style fixes in battery widgets.
+052748a Fix the key reference to custom keys in the README
+9c973a5 Updated the CHANGES file.
+51770fe Fixed README and moved the ChangeLog to CHANGES.
+2ab90de Updated the ChangeLog file, for v1.0.3.
+0471c6a Next release, version 1.0.3.
+a8dc5c6 Added basic documentation as a README file.
+b06a5b6 Make git ignore org-mode files and archives.
+87d895f Next release, version 1.0.2.
+5ff480d Updated the ChangeLog file in preparation for a new version.
+2921200 Added handlers to batat and fixed the battery_state table.
+e2d503e Added a new, standalone, battery widget.
+19ca7b5 Replaced TODO with Todo in helpers.
+9cd250b Fixed batat module name and expanded bat states and symbols.
+b331cb1 Updated the ChangeLog file.
+76b8978 Battery widget moved to batat.lua in preparation for a new bat widget.
+9da374d Updated the ChangeLog file.
+1f31527 Next release, version 1.0.1.
+11baa09 Added the ChangeLog file.
+3eefddf Weather widget written and included, by request.
+95dd8de Make git ignore backup files and lua binaries.
+98e26ee Import of vicious source tree.

awesome/vicious/LICENSE

+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+			    Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+		    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+			    NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+		     END OF TERMS AND CONDITIONS
+
+	    How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.

awesome/vicious/README

+Vicious
+-------
+Vicious is a modular widget library for the "awesome" window manager,
+derived from the "Wicked" widget library. It has some of the old
+Wicked widget types, a few of them rewritten, and a good number of new
+ones:
+
+  - http://git.sysphere.org/vicious/about/
+
+Vicious widget types are a framework for creating your own awesome
+widgets. Vicious contains modules that gather data about your system,
+and a few helper functions that make it easier to register timers,
+suspend widgets and so on.
+
+For now Vicious doesn't depend on any third party Lua libraries, to
+make it easier to install and use. That means some system utilities
+are used instead, where available:
+
+  - hddtemp        for the HDD Temperature widget type
+  - alsa-utils     for the Volume widget type
+  - wireless_tools for the Wireless widget type
+  - curl           for widget types accessing network resources
+
+
+Usage
+-----
+To use vicious move it to your awesome configuration directory in
+$XDG_CONFIG_HOME (usually ~/.config):
+
+  $ mv vicious $XDG_CONFIG_HOME/awesome/
+
+If you want you can disable widgets you will not use, to avoid having
+useless modules sitting in your memory. You can comment out any widget
+type from the "Configure widgets" list in the widgets/init.lua file.
+
+Then add the following to the top of your rc.lua:
+
+  require("vicious")
+
+Once you create a widget (a textbox, graph or a progressbar) call
+vicious.register() to register it with Vicious:
+
+  vicious.register(widget, wtype, format, interval, warg)
+
+    widget
+      - widget created with widget() or awful.widget() (in case of a
+        graph or a progressbar)
+
+    wtype
+      - one of the available widget types, see below for a list
+
+    format
+      - string argument or a function
+        - $1, $2, $3... will be replaced by their respective value
+          returned by the widget type, some widget types return tables
+          with string keys, in that case use: ${key}
+      - function
+        - function(widget, args) can be used to manipulate data
+          returned by the widget type, more about this below
+
+    interval
+      - number of seconds between updates of the widget, 2s by
+        default, also read the "Power" section below
+
+    warg
+      - some widget types require an argument to be passed, for example
+        the battery ID
+
+
+Other functions
+---------------
+Unregister a widget:
+  vicious.unregister(widget, keep)
+
+    - if keep is true widget will be suspended, waiting to be
+      activated
+
+Suspend all widgets:
+  vicious.suspend()
+
+    - example automation script for the "laptop-mode-tools" start-stop
+      module: http://sysphere.org/~anrxc/local/sources/lmt-vicious.sh
+
+Restart suspended widgets:
+  vicious.activate(widget)
+
+    - if widget is provided only that widget will be activated
+
+Enable caching of a widget type:
+  vicious.cache(wtype)
+
+    - enable caching of values returned by a widget type
+
+Force update of widgets:
+  vicious.force({ widget, })
+
+    - widget argument is a table with one or more widgets that will be
+      updated
+
+
+Widget types
+------------
+Widget types consist of worker functions that take the "format"
+argument given to vicious.register as the first argument, "warg" as
+the second, and return a table of values to insert in the format
+string.
+
+vicious.widgets.cpu
+  - provides CPU usage for all available CPUs/cores
+  - returns 1st value as usage of all CPUs/cores, 2nd as usage of
+    first CPU/core, 3rd as usage of second CPU/core etc.
+
+vicious.widgets.cpuinf
+  - provides speed and cache information for all available CPUs/cores
+  - returns a table with string keys, using CPU ID as a base:
+    {cpu0 mhz}, {cpu0 ghz}, {cpu0 kb}, {cpu0 mb}, {cpu1 mhz} etc.
+
+vicious.widgets.cpufreq
+  - provides freq, voltage and governor info for a requested CPU
+  - takes the CPU ID as an argument, i.e. "cpu0"
+  - returns 1st value as frequency of requested CPU in MHz, 2nd in
+    GHz, 3rd as voltage in mV, 4th as voltage in V and 5th as the
+    governor state
+
+vicious.widgets.thermal
+  - provides temperature levels of ACPI and coretemp thermal zones
+  - takes the thermal zone as an argument, i.e. "thermal_zone0", or a
+    table with 1st field as thermal zone and 2nd as data source -
+    available data sources are "proc", "core" and "sys" - which is the
+    default when only the zone is provided
+  - returns 1st value as temperature of requested thermal zone
+
+vicious.widgets.uptime
+  - provides system uptime and load information
+  - returns 1st value as uptime in days, 2nd as uptime in hours, 3rd
+    as uptime in minutes, 4th as load average for past 1 minute, 5th
+    for 5 minutes and 6th for 15 minutes
+
+vicious.widgets.bat
+  - provides state, charge, and remaining time for a requested battery
+  - takes battery ID as an argument, i.e. "BAT0"
+  - returns 1st value as state of requested battery, 2nd as charge
+    level in percent and 3rd as remaining (charging or discharging)
+    time
+
+vicious.widgets.mem
+  - provides RAM and Swap usage statistics
+  - returns 1st value as memory usage in percent, 2nd as memory usage,
+    3rd as total system memory, 4th as free memory, 5th as swap usage
+    in percent, 6th as swap usage, 7th as total system swap and 8th as
+    free swap
+
+vicious.widgets.os
+  - provides operating system information
+  - returns 1st value as the operating system in use, 2nd as the
+    release version, 3rd as your username, 4th the hostname, 5th as
+    available system entropy and 6th value as available entropy in
+    percent
+
+vicious.widgets.fs
+  - provides file system disk space usage
+  - takes an (optional) argument which, if true, includes remote file
+    systems, only local file systems are included by default
+  - returns a table with string keys, using mount points as a base:
+    {/ size_mb}, {/ size_gb}, {/ used_mb}, {/ used_gb}, {/ used_p},
+    {/ avail_mb}, {/ avail_gb}, {/ avail_p}, {/home size_mb} etc.
+
+vicious.widgets.dio
+  - provides I/O statistics for requested storage devices
+  - takes the disk as an argument, i.e. "sda" (or a specific
+    partition, i.e. "sda/sda2")
+  - returns a table with string keys: {total_s}, {total_kb}, {total_mb},
+    {read_s}, {read_kb}, {read_mb}, {write_s}, {write_kb}, {write_mb}
+    and {sched}
+
+vicious.widgets.raid
+  - provides state information for a requested RAID array
+  - takes the RAID array ID as an argument
+  - returns 1st value as the number of assigned, and 2nd as active,
+    devices in the array
+
+vicious.widgets.hddtemp
+  - provides hard drive temperatures using the hddtemp daemon
+  - takes the hddtemp listening port as an argument, or defaults to
+    port 7634
+  - returns a table with string keys, using hard drives as a base:
+    {/dev/sda} and {/dev/sdc} for example
+
+vicious.widgets.net
+  - provides state and usage statistics of all network interfaces
+  - returns a table with string keys, using net interfaces as a base:
+    {eth0 carrier}, {eth0 rx_b}, {eth0 tx_b}, {eth0 rx_kb}, {eth0 tx_kb},
+    {eth0 rx_mb}, {eth0 tx_mb}, {eth0 rx_gb}, {eth0 tx_gb}, {eth0 down_b},
+    {eth0 up_b}, {eth0 down_kb}, {eth0 up_kb}, {eth0 down_mb},
+    {eth0 up_mb}, {eth0 down_gb}, {eth0 up_gb}, {eth1 rx_b} etc.
+
+vicious.widgets.wifi
+  - provides wireless information for a requested interface
+  - takes the network interface as an argument, i.e. "wlan0"
+  - returns a table with string keys: {ssid}, {mode}, {chan}, {rate},
+    {link}, {linp} and {sign}
+
+vicious.widgets.mbox
+  - provides the subject of last e-mail in a mbox file
+  - takes the full path to the mbox as an argument, or a table with
+    1st field as path, 2nd as maximum lenght and 3rd (optional) as
+    widget name - if 3rd field is present scrolling will be used
+  - returns 1st value as the subject of the last e-mail
+
+vicious.widgets.mboxc
+  - provides the count of total, old and new messages in mbox files
+  - takes a table with full paths to mbox files as an argument
+  - returns 1st value as the total count of messages, 2nd as the count
+    of old messages and 3rd as the count of new messages
+
+vicious.widgets.mdir
+  - provides the number of new and unread messages in Maildir
+    structures/directories
+  - takes a table with full paths to Maildir structures as an argument
+  - returns 1st value as the count of new messages and 2nd as the
+    count of "old" messages lacking the Seen flag
+
+vicious.widgets.gmail
+  - provides count of new and subject of last e-mail on Gmail
+  - takes an (optional) argument, if it's a number subject will be
+    truncated, if a table, with 1st field as maximum lenght and 2nd
+    the widget name (i.e. "gmailwidget"), scrolling will be used
+  - keeps login information in the ~/.netrc file, example:
+    machine mail.google.com login user password pass
+  - returns a table with string keys: {count} and {subject}
+
+vicious.widgets.org
+  - provides agenda statistics for Emacs org-mode
+  - takes a table with full paths to agenda files, that will be
+    parsed, as an argument
+  - returns 1st value as count of tasks you forgot to do, 2nd as count
+    of tasks for today, 3rd as count of tasks for the next 3 days and
+    4th as count of tasks to do in the week
+
+vicious.widgets.pkg
+  - provides number of pending updates on UNIX systems
+  - takes the distribution name as an argument, i.e. "Arch"
+  - returns 1st value as the count of available updates
+
+vicious.widgets.mpd
+  - provides Music Player Daemon information
+  - takes a table as an argument, 1st field should be the password (or
+    nil), 2nd the hostname (or nil) and 3rd port (or nil) - if no
+    argument is provided connection attempt will be made to localhost
+    port 6600 with no password
+  - returns a table with string keys: {volume}, {state}, {Artist},
+    {Title}, {Album}, {Genre} and optionally {Name} and {file}
+
+vicious.widgets.volume
+  - provides volume levels and state of requested ALSA mixers
+  - takes the ALSA mixer control as an argument, i.e. "Master",
+    optionally append the card ID or other options, i.e. "PCM -c 0"
+  - returns 1st value as the volume level and 2nd as the mute state of
+    the requested channel
+
+vicious.widgets.weather
+  - provides weather information for a requested station
+  - takes the ICAO station code as an argument, i.e. "LDRI"
+  - returns a table with string keys: {city}, {wind}, {windmph},
+    {windkmh}, {sky}, {weather}, {tempf}, {tempc}, {humid}, {press}
+
+vicious.widgets.date
+  - provides access to os.date, with optional time formatting provided
+    as the format string - using regular date sequences
+  - takes optional time offset, in seconds, as an argument for example
+    to calculate time zone differences, otherwise current time is
+    formatted
+  - returns the output of os.date, formatted by provided sequences
+
+
+Custom widget types
+-------------------
+Use any of the existing widget types as a starting point for your
+own. Write a quick worker function that does the work and plug it
+in. How data will be formatted, will it be red or blue, should be
+defined in rc.lua (or somewhere else, outside the actual module).
+
+Before writing a widget type you should check if there is already one
+in the contrib directory of Vicious. The contrib directory contains
+extra widgets you can use. Some are for less common hardware, and
+other were contributed by Vicious users. The contrib directory also
+holds widget types that were obsoleted or rewritten. Contrib widgets
+will not be imported by init unless you explicitly enable it.
+
+Richard Kolkovich, a FreeBSD user, published his vicious-fbsd
+branch. If you are also a BSD user you can find his work here:
+
+  - http://git.sigil.org/vicious-fbsd/
+
+Some users would like to avoid writing new modules. For them Vicious
+kept the old Wicked functionality, possibility to register their own
+functions as widget types. By providing them as the second argument to
+vicious.register. Your function can accept "format" and "warg"
+arguments, just like workers.
+
+
+Power and Caching
+-----------------
+When a lot of widgets are in use they, and awesome, can generate a lot
+of wake-ups and also be very expensive for system resources. This is
+especially important when running on battery power. It was a big
+problem with awesome v2 and widgets that used shell scripts to gather
+data, and with widget libraries written in languages like Ruby.
+
+Lua is an extremely fast and efficient programming language, and
+Vicious takes advantage of that. But suspending Vicious widgets is one
+way to prevent them from draining your battery, despite that.
+
+Update intervals also play a big role, and you can save a lot of power
+with a smart approach. Don't use intervals like: 5, 10, 30, 60... to
+avoid harmonics. If you take the 60-second mark as an example, all of
+your widgets would be executed at that point. Instead think about
+using only prime numbers, in that case you will have only a few
+widgets executed at any given time interval. When choosing intervals
+also consider what a widget actually does. Some widget types read
+files that reside in memory, others call external utilities and some,
+like the mbox widget, read big files.
+
+Vicious can also cache values returned by widget types. Caching
+enables you to have multiple widgets using the same widget type. With
+caching its worker function gets executed only once - which is also
+great for saving power.
+
+  - Some widget types keep internal data and if you call one multiple
+    times without caching, the widget that executes it first would
+    modify stored values. This can lead to problems and give you
+    inconsistent data. Remember it for widget types like CPU and
+    Network usage, which compare the old set of data with the new one
+    to calculate current usage.
+
+  - Widget types that require a widget argument to be passed should be
+    handled carefully. If you are requesting information for different
+    devices then caching should not be used, because you could get
+    inconsistent data.
+
+
+Security
+--------
+At the moment only one widget type (Gmail) requires auth. information
+in order to get to the data. In the future there could be more, and
+you should give some thought to the issue of protecting your data. The
+Gmail widget type by default stores login information in the ~/.netrc
+file, and you are advised to make sure that file is only readable by
+the owner. Other than that we can not force all users to conform to
+one standard, one way of keeping it secure, like in some keyring.
+
+First let's clear why we simply don't encrypt the login information
+and store it in ciphertext. By exposing the algorithm anyone can
+reverse the encryption steps. Some claim even that's better than
+plaintext but it's just security trough obscurity.
+
+Here are some ideas actually worth your time. Users that have KDE (or
+parts of it) installed could store their login information into the
+Kwallet service and request it via DBus from the widget type. It can
+be done with tools like "dbus-send" and "qdbus". The Gnome keyring
+should support the same, so those with parts of Gnome installed could
+use that keyring.
+
+Users of GnuPG (and its agent) could consider encrypting the netrc
+file with their GPG key. Trough the GPG Passphrase Agent they could
+then decrypt the file transparently while their session is active.
+
+
+Usage examples
+--------------
+Start with a simple widget, like date. Then build your setup from
+there, one widget at a time. Also remember that besides creating and
+registering widgets you have to add them to a wibox (statusbar) in
+order to actually display them.
+
+Date widget
+  datewidget = widget({ type = "textbox" })
+  vicious.register(datewidget, vicious.widgets.date, "%b %d, %R")
+
+  - updated every 2 seconds (the default interval), uses standard
+    date sequences as the format string
+
+Memory widget
+  memwidget = widget({ type = "textbox" })
+  vicious.cache(vicious.widgets.mem)
+  vicious.register(memwidget, vicious.widgets.mem, "$1 ($2MB/$3MB)", 13)
+
+  - updated every 13 seconds, appends "MB" to 2nd and 3rd returned
+    values and enables caching of this widget type
+
+HDD temperature widget
+  hddtempwidget = widget({ type = "textbox" })
+  vicious.register(hddtempwidget, vicious.widgets.hddtemp, "${/dev/sda} °C", 19)
+
+  - updated every 19 seconds, requests the temperature level of the
+    {/dev/sda} key/disk and appends "°C" to the returned value, does
+    not provide the port argument so default port is used
+
+Mbox widget
+  mboxwidget = widget({ type = "textbox" })
+  vicious.register(mboxwidget, vicious.widgets.mbox, "$1", 5, "/home/user/mail/Inbox")
+
+  - updated every 5 seconds, provides full path to the mbox as an
+    argument
+
+Battery widget
+  batwidget = awful.widget.progressbar()
+  batwidget:set_width(8)
+  batwidget:set_height(10)
+  batwidget:set_vertical(true)
+  batwidget:set_background_color("#494B4F")
+  batwidget:set_border_color(nil)
+  batwidget:set_color("#AECF96")
+  batwidget:set_gradient_colors({ "#AECF96", "#88A175", "#FF5656" })
+  vicious.register(batwidget, vicious.widgets.bat, "$2", 61, "BAT0")
+
+  - updated every 61 seconds, requests the current battery charge
+    level and displays a progressbar, provides "BAT0" battery ID as an
+    argument
+
+CPU usage widget
+  cpuwidget = awful.widget.graph()
+  cpuwidget:set_width(50)
+  cpuwidget:set_background_color("#494B4F")
+  cpuwidget:set_color("#FF5656")
+  cpuwidget:set_gradient_colors({ "#FF5656", "#88A175", "#AECF96" })
+  vicious.register(cpuwidget, vicious.widgets.cpu, "$1", 3)
+
+  - updated every 3 seconds, feeds the graph with total usage
+    percentage of all CPUs/cores
+
+
+Format functions
+----------------
+You can use a function instead of a string as the format parameter.
+Then you are able to check the value returned by the widget type and
+change it or perform some action. You can change the color of the
+battery widget when it goes below a certain point, hide widgets when
+they return a certain value or maybe use string.format for padding.
+
+  - Do not confuse this with just coloring the widget, in those cases
+    standard pango markup can be inserted into the format string.
+
+The format function will get the widget as its first argument, table
+with the values otherwise inserted into the format string as its
+second argument, and will return the text/data to be used for the
+widget.
+
+Example
+  mpdwidget = widget({ type = "textbox" })
+  vicious.register(mpdwidget, vicious.widgets.mpd,
+    function (widget, args)