Byron Clark avatar Byron Clark committed 7d02cad

Remove unused applications.

Comments (0)

Files changed (112)

Add a comment to this file

awesome/icons/battery.png

Removed
Old image
Add a comment to this file

awesome/icons/cpu.png

Removed
Old image
Add a comment to this file

awesome/icons/mem.png

Removed
Old image
Add a comment to this file

awesome/icons/volume-control.png

Removed
Old 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

awesome/rc.lua

--- 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

Removed
Old image
Add a comment to this file

awesome/theme/background_white.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/dwindle.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/dwindlew.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fairh.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fairhw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fairv.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fairvw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/floating.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/floatingw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fullscreen.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/fullscreenw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/magnifier.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/magnifierw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/max.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/maxw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/spiral.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/spiralw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tile.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tilebottom.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tilebottomw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tileleft.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tileleftw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tiletop.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tiletopw.png

Removed
Old image
Add a comment to this file

awesome/theme/layouts/tilew.png

Removed
Old image
Add a comment to this file

awesome/theme/submenu.png

Removed
Old image
Add a comment to this file

awesome/theme/taglist/squarefw.png

Removed
Old image
Add a comment to this file

awesome/theme/taglist/squarew.png

Removed
Old image
Add a comment to this file

awesome/theme/tasklist/floating.png

Removed
Old image
Add a comment to this file

awesome/theme/tasklist/floatingw.png

Removed
Old 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

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/close_normal.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/floating_focus_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/floating_focus_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/floating_normal_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/floating_normal_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/maximized_focus_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/maximized_focus_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/maximized_normal_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/maximized_normal_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/ontop_focus_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/ontop_focus_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/ontop_normal_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/ontop_normal_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/sticky_focus_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/sticky_focus_inactive.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/sticky_normal_active.png

Removed
Old image
Add a comment to this file

awesome/theme/titlebar/sticky_normal_inactive.png

Removed
Old 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)
-      if   args["{state}"] == "Stop" then return ""
-      else return '<span color="white">MPD:</span> '..
-             args["{Artist}"]..' - '.. args["{Title}"]
-      end
-    end)
-
-  - hides the mpd widget when no song is playing, updated every 2
-    seconds (the default interval)
-
-Example
-  uptimewidget = widget({ type = "textbox" })
-  vicious.register(uptimewidget, vicious.widgets.uptime,
-    function (widget, args)
-      return string.format("Uptime: %2dd %02d:%02d ", args[1], args[2], args[3])
-    end, 61)
-
-  - uses string.format for padding uptime values to a minimum amount
-    of digits, updated every 61 seconds
-
-When it comes to padding it is also useful to mention how a widget can
-be configured to have a fixed width. You can set a fixed width on your
-textbox widgets by changing their .width field (by default width is
-automatically adapted to text width).
-
-Example
-  uptimewidget = widget({ type = "textbox" })
-  uptimewidget.width, uptimewidget.align = 50, "right"
-  vicious.register(uptimewidget, vicious.widgets.uptime, "$1 $2:$3", 61)
-
-  - forces a fixed width of 50px to the uptime widget, and aligns its
-    text to the right
-
-
-Other
------
-Read "awesome" manual pages:
-
-  - awesome(1)  awesomerc(5)
-
-Awesome widgets explained:
-
-  - http://awesome.naquadah.org/wiki/Widgets_in_awesome
-
-Example "awesome" configuration:
-
-  - http://git.sysphere.org/awesome-configs/
-
-
-Authors
--------
-Wicked written by:
-  - Lucas de Vries           <lucas glacicle.com>
-
-Vicious written by:
-  - Adrian C. (anrxc)        <anrxc sysphere.org>
-
-Vicious contributors:
-  - Michael Unterkalmsteiner <miciu gmx.de>
-  - Martin Striz             <striz raynet.cz>
-  - Benedikt Sauer           <filmor gmail.com>
-  - Greg D.                  <jabbas jabbas.pl>
-  - Henning Glawe            <glaweh debian.org>
-  - Rémy C.                  <shikamaru mandriva.org>
-  - Hiltjo Posthuma          <hiltjo codemadness.org>
-  - Hagen Schink             <troja84 googlemail.com>

awesome/vicious/TODO

-#-*- mode: org -*-
-#+TYP_TODO: TODO MAYBE CANCEL WAITING NEXT NOTE DONE
-#+STARTUP: showall
-#+STARTUP: hidestars
-
-
-* Vicious
-** TODO Document contrib widgets in contrib/README
-** TODO Consider multigraph, graph stacking, support
-** TODO Consider including this code in format helper
-   - return format and format:gsub("${[^}]+}", "")
-   - Note: We should then also replace just $1/$2...
-** TODO Complete the hddtemp fix
-   - In certain setups regexp does not match all devices
-     - The regexp catches the first device name, but last stats
-     - Shortening the match introduced new problems IIRC
-** TODO Expand raid to grab data for all available devices
-** TODO Add fan speed to thermal.lua
-** TODO Fix contrib/sensors for Ian
-   - > it does work and provides the lm_sensors
-     > information but only for one cpu core.
-** TODO Return values of type number in NET and FS
-   - Note: tonumber() strips decimal points
-** MAYBE Simplify scrolling using negative margins + fixed width
-** TODO Try to simplify truncating with a fixed width
-** NOTE Changelog header
----------------------------------------------------
-Full changelog is available online:
-    http://git.sysphere.org/vicious/log/?showmsg=1
----------------------------------------------------
-
-
-* Git
-** DONE Git hook post-update not executed on git push
-** DONE Git post-update hook does not leave info/refs with correct permissions
-** DONE Git persmission are incorrect since 1.6.5, does not honor umask
-** TODO Git smart http transport with cgit

awesome/vicious/contrib/batacpi.lua

----------------------------------------------------
--- Licensed under the GNU General Public License v2
---  * (c) 2010, Adrian C. <anrxc@sysphere.org>
----------------------------------------------------
-
--- {{{ Grab environment
-local tonumber = tonumber
-local io = { popen = io.popen }
-local setmetatable = setmetatable
-local table = { insert = table.insert }
-local string = { match = string.match }
--- }}}
-
-
--- Batacpi: provides state, charge, and remaining time for all batteries using acpitool
-module("vicious.contrib.batacpi")
-
-
--- {{{ Battery widget type
-local function worker(format)
-    local battery_info  = {}
-    local battery_state = {
-        ["full"] = "↯",
-        ["unknown"] = "⌁",
-        ["charged"] = "↯",
-        ["charging"] = "+",
-        ["discharging"] = "-"
-    }
-
-    -- Get data from acpitool
-    local f = io.popen("acpitool -b")
-
-    for line in f:lines() do
-        -- Check if the battery is present
-        if string.match(line, "^[%s]+Battery.*") then
-            -- Store state and charge information
-            table.insert(battery_info, (battery_state[string.match(line, "([%a]*),") or "unknown"]))
-            table.insert(battery_info, (tonumber(string.match(line, "([%d]?[%d]?[%d])%.")) or 0))
-            -- Store remaining time information
-            table.insert(battery_info, (string.match(line, "%%,%s(.*)") or "N/A"))
-        else
-            return {battery_state["unknown"], 0, "N/A"}
-        end
-    end
-    f:close()
-
-    return battery_info
-end
--- }}}
-
-setmetatable(_M, { __call = function(_, ...) return worker(...) end })

awesome/vicious/contrib/batpmu.lua

----------------------------------------------------
--- Licensed under the GNU General Public License v2
---  * (c) 2010, Adrian C. <anrxc@sysphere.org>
----------------------------------------------------
-
--- {{{ Grab environment
-local tonumber = tonumber
-local io = { open = io.open }
-local setmetatable = setmetatable
-local math = {
-    min = math.min,
-    floor = math.floor
-}
-local string = {
-    find = string.find,
-    match = string.match,
-    format = string.format
-}
--- }}}
-
-
--- Batpmu: provides state, charge and remaining time for a requested battery using PMU
-module("vicious.contrib.batpmu")
-
-
--- {{{ Battery widget type
-local function worker(format, batid)
-    local battery_state = {
-        ["full"] = "↯",
-        ["unknown"] = "⌁",
-        ["00000013"] = "+",
-        ["00000011"] = "-"
-    }
-
-    -- Get /proc/pmu/battery* state
-    local f = io.open("/proc/pmu/" .. batid)
-    -- Handler for incompetent users
-    if not f then return {battery_state["unknown"], 0, "N/A"} end
-    local statefile = f:read("*all")
-    f:close()
-
-    -- Get /proc/pmu/info data
-    local f = io.open("/proc/pmu/info")
-    local infofile = f:read("*all")
-    f:close()
-
-    -- Check if the battery is present
-    if infofile == nil or string.find(infofile, "Battery count[%s]+:[%s]0") then
-        return {battery_state["unknown"], 0, "N/A"}
-    end
-
-
-    -- Get capacity and charge information
-    local capacity = string.match(statefile, "max_charge[%s]+:[%s]([%d]+).*")
-    local remaining = string.match(statefile, "charge[%s]+:[%s]([%d]+).*")
-
-    -- Calculate percentage
-    local percent = math.min(math.floor(remaining / capacity * 100), 100)
-
-
-    -- Get timer information
-    local timer = string.match(statefile, "time rem%.[%s]+:[%s]([%d]+).*")
-    if timer == "0" then return {battery_state["full"], percent, "N/A"} end
-
-    -- Get state information
-    local state = string.match(statefile, "flags[%s]+:[%s]([%d]+).*")
-    local state = battery_state[state] or battery_state["unknown"]
-