Merge branch 'master' into testing

This commit is contained in:
crater2150 2010-10-18 22:57:56 +02:00
commit bb8f537e14
35 changed files with 709 additions and 3056 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
wp
wallpaper

6
.gitmodules vendored Normal file
View file

@ -0,0 +1,6 @@
[submodule "obvious"]
path = obvious
url = git://git.mercenariesguild.net/obvious.git
[submodule "vicious"]
path = vicious
url = http://git.sysphere.org/vicious

50
aweswt.lua Normal file
View file

@ -0,0 +1,50 @@
-- aweswt.lua
local io=io
local table=table
local pairs=pairs
local awful=awful
local client=client
local string=string
local USE_T=true
module("aweswt")
function get_out (a)
local f=io.popen (a)
t={}
for line in f:lines() do
table.insert(t, line )
end
return t
end
function get_input (a)
s1='echo -e "'..a..'"|dmenu -i'
return get_out(s1)
end
function switch()
local clients = client.get()
if table.getn(clients) == 0 then
return
end
local m1=""
local t2={}
local tmp
for i, c in pairs(clients) do
if USE_T then do
tmp=i..':'..string.sub(c['name'], 1, 20)
end
else do
tmp=i..':'..c['instance']..'.'..c['class']
end
end
m1=m1..tmp..'\n'
t2[tmp]=c
end
local t6=t2[get_input(m1)[1]]
if t6 then
local ctags = t6:tags()
awful.tag.viewonly(ctags[1])
client.focus = t6
t6:raise()
end
end

View file

@ -1,469 +0,0 @@
-- Standard awesome library
require("awful")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
-- Load Debian menu entries
require("debian.menu")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
-- The default is a dark theme
theme_path = "/home/jack/.config/awesome/theme.lua"
-- Uncommment this for a lighter theme
-- theme_path = "/usr/share/awesome/themes/sky/theme.lua"
-- Actually load theme
beautiful.init(theme_path)
-- This is used later as the default terminal and editor to run.
terminal = "x-terminal-emulator"
editor = os.getenv("EDITOR") or "editor"
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 = "Mod1"
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.magnifier,
awful.layout.suit.floating
}
-- Table of clients that should be set floating. The index may be either
-- the application class or instance. The instance is useful when running
-- a console app in a terminal like (Music on Console)
-- x-terminal-emulator -name mocp -e mocp
floatapps =
{
-- by class
["MPlayer"] = true,
["pinentry"] = true,
["gimp"] = true,
-- by instance
["mocp"] = true
}
-- Applications to be moved to a pre-defined tag by class or instance.
-- Use the screen and tags indices.
apptags =
{
-- ["Firefox"] = { screen = 1, tag = 2 },
-- ["mocp"] = { screen = 2, tag = 4 },
}
-- Define if we want to use titlebar on all applications.
use_titlebar = false
-- }}}
-- {{{ Tags
-- Define tags table.
tags = {}
tags.setup = {
{ name = "terms" },
{ name = "web" },
{ name = "music" },
{ name = "dls" },
{ name = "files" },
{ name = "images" },
{ name = "videos" },
{ name = "exps" },
{ name = "other" },
{ name = "nil" }
}
for s = 1, screen.count() do
tags[s] = {}
for i, t in ipairs(tags.setup) do
tags[s][i] = tag({ name = t.name })
tags[s][i].screen = s
awful.layout.set(layouts[1], tags[s][i])
end
tags[s][1].selected = true
end
--local tags = {}
-- tags.setup = {
-- { name = "term", layout = layouts[3] },
-- { name = "emacs", layout = layouts[1] },
-- { name = "web", layout = layouts[1] },
--{ name = "mail", layout = layouts[5] },
--{ name = "im", layout = layouts[1], mwfact = 0.13 },
-- { name = "6", layout = layouts[7], hide = true },
-- { name = "7", layout = layouts[7], hide = true },
-- { name = "rss", layout = layouts[6] },
-- { name = "media", layout = layouts[7] }
-- }
-- for s = 1, screen.count() do
-- tags[s] = {}
-- for i, t in ipairs(tags.setup) do
-- tags[s][i] = tag({ name = t.name })
-- tags[s][i].screen = s
-- awful.tag.setproperty(tags[s][i], "layout", t.layout)
-- awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
-- awful.tag.setproperty(tags[s][i], "hide", t.hide)
-- end
-- tags[s][1].selected = true
-- end
-- }}}
-- {{{ Wibox
-- Create a textbox widget
mytextbox = widget({ type = "textbox", align = "right" })
-- Set the default text in textbox
mytextbox.text = " loading... "
-- Create a laucher widget and a main menu
myawesomemenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}
mymainmenu = awful.menu.new({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
{ "open terminal", terminal },
{ "Debian", debian.menu.Debian_menu.Debian }
}
})
mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon),
menu = mymainmenu })
-- Create a systray
mysystray = widget({ type = "systray", align = "right" })
-- 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, function (tag) tag.selected = not tag.selected end),
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 not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
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({ align = "left" })
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = widget({ type = "imagebox", align = "right" })
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] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = { mylauncher,
mytaglist[s],
--mylayoutbox[s],
--mytasklist[s],
mypromptbox[s],
mytextbox,
s == 1 and mysystray or nil }
mywibox[s].screen = s
end
-- }}}
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
))
-- }}}
-- {{{ Key bindings
globalkeys = awful.util.table.join(
awful.key({ modkey, }, "comma", awful.tag.viewprev ),
awful.key({ modkey, }, "period", awful.tag.viewnext ),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
awful.key({ modkey, }, "t",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "n",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, }, "w", function () mymainmenu:show(true) end),
-- Layout manipulation
awful.key({ modkey, "Shift" }, "t", function () awful.client.swap.byidx( 1) end),
awful.key({ modkey, "Shift" }, "n", function () awful.client.swap.byidx( -1) end),
awful.key({ modkey, "Control" }, "t", function () awful.screen.focus( 1) end),
awful.key({ modkey, "Control" }, "n", function () awful.screen.focus(-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, }, "s", 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" }, "s", function () awful.tag.incnmaster(-1) end),
awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
awful.key({ modkey, "Control" }, "s", 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),
-- Prompt
awful.key({ modkey }, "apostrophe", 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)
)
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
clientkeys = awful.util.table.join(
awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end),
awful.key({ modkey, }, "semicolon", 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 }, "w", awful.client.togglemarked),
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
for i = 1, keynumber do
globalkeys = awful.util.table.join(globalkeys,
awful.key({ modkey }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
tags[screen][i].selected = not tags[screen][i].selected
end
end),
awful.key({ modkey, "Shift" }, i,
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,
function ()
if client.focus and tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end),
awful.key({ modkey, "Shift" }, "F" .. i,
function ()
local screen = mouse.screen
if tags[screen][i] then
for k, c in pairs(awful.client.getmarked()) do
awful.client.movetotag(tags[screen][i], c)
end
end
end))
end
-- Set keys
root.keys(globalkeys)
-- }}}
-- {{{ Hooks
-- Hook function to execute when focusing a client.
awful.hooks.focus.register(function (c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_focus
end
end)
-- Hook function to execute when unfocusing a client.
awful.hooks.unfocus.register(function (c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_normal
end
end)
-- Hook function to execute when marking a client
awful.hooks.marked.register(function (c)
c.border_color = beautiful.border_marked
end)
-- Hook function to execute when unmarking a client.
awful.hooks.unmarked.register(function (c)
c.border_color = beautiful.border_focus
end)
-- Hook function to execute when the mouse enters a client.
awful.hooks.mouse_enter.register(function (c)
-- Sloppy focus, but disabled for magnifier layout
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)
-- Hook function to execute when a new client appears.
awful.hooks.manage.register(function (c, startup)
-- If we are not managing this application at startup,
-- move it to the screen where the mouse is.
-- We only do it for filtered windows (i.e. no dock, etc).
if not startup and awful.client.focus.filter(c) then
c.screen = mouse.screen
end
if use_titlebar then
-- Add a titlebar
awful.titlebar.add(c, { modkey = modkey })
end
-- Add mouse bindings
c:buttons(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)
))
-- New client may not receive focus
-- if they're not focusable, so set border anyway.
c.border_width = beautiful.border_width
c.border_color = beautiful.border_normal
-- Check if the application should be floating.
local cls = c.class
local inst = c.instance
if floatapps[cls] ~= nil then
awful.client.floating.set(c, floatapps[cls])
elseif floatapps[inst] ~= nil then
awful.client.floating.set(c, floatapps[inst])
end
-- Check application->screen/tag mappings.
local target
if apptags[cls] then
target = apptags[cls]
elseif apptags[inst] then
target = apptags[inst]
end
if target then
c.screen = target.screen
awful.client.movetotag(tags[target.screen][target.tag], c)
end
c.size_hints_honor = false
-- Do this after tag mapping, so you don't see it on the wrong tag for a split second.
client.focus = c
-- Set key bindings
c:keys(clientkeys)
-- Set the windows at the slave,
-- i.e. put it at the end of others instead of setting it master.
-- awful.client.setslave(c)
-- Honor size hints: if you want to drop the gaps between windows, set this to false.
-- c.size_hints_honor = false
end)
-- Hook function to execute when arranging the screen.
-- (tag switch, new client, etc)
awful.hooks.arrange.register(function (screen)
local layout = awful.layout.getname(awful.layout.get(screen))
if layout and beautiful["layout_" ..layout] then
mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
else
mylayoutbox[screen].image = nil
end
-- Give focus to the latest client in history if no window has focus
-- or if the current window is a desktop or a dock one.
if not client.focus then
local c = awful.client.focus.history.get(screen, 0)
if c then client.focus = c end
end
end)
-- Hook called every minute
awful.hooks.timer.register(10, function ()
awful.util.spawn("awst")
end)
-- }}}

177
bindings.lua Normal file
View file

@ -0,0 +1,177 @@
-- {{{ 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({ }, "XF86Word", awful.tag.viewprev ),
awful.key({ }, "XF86WebCam", awful.tag.viewnext ),
awful.key({ }, "XF86Away", 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),
awful.key({ modkey, }, "w", function () mymainmenu:show(true) 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),
awful.key({ "Mod1", }, "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, }, "f", function () awful.util.spawn("firefox") end),
-- awful.key({ modkey, }, "t", function () awful.util.spawn("thunderbird") end),
-- awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
-- awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
-- awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
awful.key({ modkey, }, "f", function () awful.util.spawn("firefox") end),
awful.key({ modkey, }, "t", function () awful.util.spawn("claws-mail") end),
awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
awful.key({ modkey }, "XF86Mail", function () awful.util.spawn("urslock") end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
awful.key({ }, "Menu", aweswt.switch),
--tabletpc keys
awful.key({ hyper }, "6", function () awful.util.spawn("/usr/local/bin/rotate") end),
--awful.key({ modkey }, "x", function () awful.util.spawn("cellwriter --show-window") end),
awful.key({ modkey }, "x", function () teardrop("cellwriter","top","center", 0.99, 0.4)end ),
awful.key({ modkey, "Control" }, "Delete", function () awful.util.spawn("xlock") end),
-- Audio control
awful.key({ }, "Print", function () teardrop("urxvtc -e alsamixer","top","center", 0.99, 0.4)end ),
awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Front 2dB-")end ),
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Front 2dB+")end ),
awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Front toggle") end),
awful.key({ modkey , "Shift" }, "m", function () awful.util.spawn("mpdmenu -a") end),
awful.key({ modkey , "Control" }, "m", function () awful.util.spawn("mpdmenu -t") end),
awful.key({ modkey }, "m", function () awful.util.spawn("mpc toggle") end),
awful.key({ modkey }, "n", function () awful.util.spawn("mpc next") end),
awful.key({ modkey , "Shift"}, "n", function () awful.util.spawn("mpc prev") end),
awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end),
awful.key({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end),
awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end),
awful.key({ }, "XF86AudioStop", function () awful.util.spawn("mpdmenu -a") end),
awful.key({ modkey , "Control" }, "n", function () awful.util.spawn("mpdmenu -j") end),
-- Prompt
awful.key({ modkey }, "r", function () obvious.popup_run_prompt.run_prompt() end),
awful.key({ }, "Scroll_Lock", function () awful.util.spawn("wli") end),
awful.key({ }, "F12", function () teardrop("urxvtc -e screen -l","center","center", 0.99, 0.7)end ),
--{{{Default
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, 0) end)
--}}}
)
clientkeys = awful.util.table.join(
awful.key({ modkey, "Shift" }, "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", function (c) c.ontop = not c.ontop end),
awful.key({ modkey, }, "a", function (c) c.sticky = not c.sticky end),
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized end)
)
-- Compute the maximum number of digit we need, limited to 9
keynumber = 0
for s = 1, screen.count() do
keynumber = math.min(22, 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.
-- FKeys: 67-78
for i = 1, keynumber do
if i < 10 then
k = "#" .. i + 9
elseif i == 10 then
k = "#19"
elseif i > 10 then
k = "F" .. i - 10
end
globalkeys = awful.util.table.join(globalkeys,
awful.key({ modkey }, k,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end),
awful.key({ modkey, "Control" }, k,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewtoggle(tags[screen][i])
end
end),
awful.key({ modkey, "Shift" }, k,
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" }, k,
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)
-- }}}

437
gitrc.lua
View file

@ -1,437 +0,0 @@
--###
-- Standard awesome library
require("awful")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
-- Dynamic tagging with shifty
require("lib/shifty")
-- Wicked
require("wicked")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers
-- Just link your theme to ~/.awesome_theme
theme_path = os.getenv("HOME") .. "/.config/awesome/theme.lua"
-- Actually load theme
beautiful.init(theme_path)
-- Default applications
terminal = "terminal"
-- Editor to use
editor = "terminal -e vim"
-- this is the default level when adding a todo note
todo_level = "high"
-- Default modkey. l
-- 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 = "Mod1"
-- Table of layouts to cover with awful.layout.inc, order matters.
layouts =
{
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair,
awful.layout.suit.fair.horizontal,
awful.layout.suit.max,
awful.layout.suit.max.fullscreen,
awful.layout.suit.floating
}
-- Table of clients that should be set floating. The index may be either
-- the application class or instance. The instance is useful when running
-- a console app in a terminal like (Music on Console)
-- xterm -name mocp -e mocp
floatapps =
{
-- by class
["MPlayer"] = true,
["Xmessage"] = true,
["Wireshark"] = true,
["XBoard"] = true,
["feh"] = true,
["nitrogen"] = true,
["Wicd-client.py"] = true,
["gimp"] = true,
["XCalc"] = true,
["display"] = true,
["Preferences"] = true,
["XClipboard"] = true,
["Imagemagick"] = true,
["Snes9X"] = true,
["Add-ons"] = true,
["Wine desktop"] = true
}
-- Define if we want to use titlebar on all applications.
use_titlebar = false
-- }}}
--{{{ Shifty
shifty.config.defaults = {
layout = "tilebottom",
}
shifty.config.tags = {
["1:terms"] = { init = true, },
["2:web"] = { init = true, nopopup = true },
["3:music"] = { init =false, nopopup = true, position = 3, spawn = "ario" },
["4:dls"] = { init =false, nopopup =false, position = 4, spawn = "dtella && linuxdcpp" },
["5:files"] = { init =false, nopopup =false, position = 5 },
["6:images"] = { init =false, nopopup =false, position = 6, layout = "float" },
["7:videos"] = { init =false, nopopup =false, position = 7, layout = "float" },
["8:exps"] = { init =false, nopopup =false, position = 8, layout = "float" },
["9:work"] = { init =false, nopopup =false, position = 9 },
}
shifty.config.apps = {
{ match = { "VLC.*" }, float = true },
{ match = { "" }, honorsizehints= false,
buttons = {
button({ }, 1, function (c) client.focus = c; c:raise() end),
button({ modkey }, 1, function (c) awful.mouse.client.move() end),
button({ modkey }, 3, awful.mouse.client.resize ), }, },
}
-- tag defaults
shifty.config.defaults = {
layout = "tilebottom",
ncol = 1,
floatBars = true,
}
shifty.config.layouts = layouts
shifty.config.guess_position = true
shifty.config.remember_index = true
shifty.init()
-- }}}
-- {{{ Widgets
-- Create a systray
mysystray = widget({ type = "systray", align = "right" })
-- Create a wibox for each screen and add it
mywibox = {}
mypromptbox = {}
mylayoutbox = {}
mytaglist = {}
mytaglist.buttons = { button({ }, 1, awful.tag.viewonly),
button({ modkey }, 1, awful.client.movetotag),
button({ }, 3, function (tag) tag.selected = not tag.selected end),
button({ modkey }, 3, awful.client.toggletag),
button({ }, 4, awful.tag.viewnext),
button({ }, 5, awful.tag.viewprev) }
shifty.taglist = mytaglist
mytasklist = {}
mytasklist.buttons = { button({ }, 1, function (c) client.focus = c; c:raise() end),
button({ }, 3, function () awful.menu.clients({ width=250 }) end),
button({ }, 4, function () awful.client.focus.byidx(1) end),
button({ }, 5, function () awful.client.focus.byidx(-1) end) }
for s = 1, screen.count() do
-- Create a promptbox for each screen
mypromptbox[s] = widget({ type = "textbox" })
-- Create a datebox widget
datebox = widget({ type = "textbox", align = "right" })
-- Create an imagebox widget which will contains an icon indicating which layout we're using.
-- We need one layoutbox per screen.
mylayoutbox[s] = widget({ type = "imagebox" })
mylayoutbox[s]:buttons({ button({ }, 1, function () awful.layout.inc(layouts, 1) end),
button({ }, 3, function () awful.layout.inc(layouts, -1) end),
button({ }, 4, function () awful.layout.inc(layouts, 1) end),
button({ }, 5, function () awful.layout.inc(layouts, -1) end) })
-- Create a taglist widget
mytaglist[s] = awful.widget.taglist.new(s, awful.widget.taglist.label.all, mytaglist.buttons)
-- Create a tasklist widget
mytasklist[s] = awful.widget.tasklist.new(function(c)
return awful.widget.tasklist.label.currenttags(c, s)
end, mytasklist.buttons)
--}}}
--{{{ Wibox
mywibox[s] = wibox({ position = "top", fg = beautiful.fg_normal, bg = beautiful.bg_normal })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = {
mylayoutbox[s],
mytaglist[s],
mypromptbox[s],
mysystray,
datebox,
}
mywibox[s].screen = s
end
--}}}
--{{{ Functions
--{{{ Add a todo note
function addtodo (todo)
infobox.text = "| <b><u>todo:</u></b> " .. "<span color='#FF00FF'>" .. awful.util.spawn("todo --add --priority high " .. "'" .. todo .. "'") .. "</span>"
end
--}}}
--{{{ Show todos
function show_todo()
local todo = awful.util.pread("todo --mono")
todo = naughty.notify({
text = string.format(os.date("%a, %d %B %Y") .. "\n" .. todo),
timeout = 6,
width = 300,
})
end
--}}}
--}}}
--{{{ Keybindings
-- {{{ 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(
-- Bindings for shifty
awful.key({ modkey, }, "comma", awful.tag.viewprev ),
awful.key({ modkey, "Shift" }, "comma", shifty.shift_prev ),
awful.key({ modkey, "Shift" }, "period", shifty.shift_next ),
awful.key({ modkey, }, "period", awful.tag.viewnext ),
awful.key({ modkey, }, "Escape", awful.tag.history.restore),
awful.key({ modkey }, "t", function() shifty.add({ rel_index = 1 }) end),
awful.key({ modkey, "Control" }, "t", function() shifty.add({ rel_index = 1, nopopup = true }) end),
awful.key({ modkey }, "r", shifty.rename),
awful.key({ modkey }, "w", shifty.delete),
awful.key({ modkey, "Shift" }, "o", function() shifty.set(awful.tag.selected(mouse.screen), { screen = awful.util.cycle(screen.count() , mouse.screen + 1) }) end),
awful.key({ modkey, }, "y", function() list = naughty.notify({
text = get_albumart(),
width = 400 }) end),
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( 1) end),
awful.key({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end),
awful.key({ modkey, "Shift" }, "u", awful.client.urgent.jumpto),
awful.key({ modkey, }, "Tab",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
awful.key({ modkey, "Shift" }, "Tab",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
-- Standard program
awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end),
awful.key({ modkey, "Shift" }, "Return", function () awful.util.spawn(editor) end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
-- display playlist
awful.key({ modkey, }, "p", function() list = naughty.notify({
text = get_playlist(),
width = 400 }) end),
-- Display the todo list
awful.key({ modkey, }, "d", function () show_todo() end),
-- Paste content of the xbuffer
awful.key({ modkey, "Control" }, "p", function ()
awful.prompt.run({ prompt = "<b>Paste to:</b> "},
mypromptbox[mouse.screen],
function (s) paste(s) end,
awful.completion.shell) end),
-- Lock the screen
awful.key({ modkey }, "t", function() shifty.add({ rel_index = 1 }) end),
awful.key({ modkey, "Control" }, "t", function() shifty.add({ rel_index = 1, nopopup = true }) end),
awful.key({ modkey }, "r", shifty.rename),
awful.key({ modkey }, "w", shifty.del),
awful.key({ modkey, "Control" }, "o", function () shifty.set(awful.tag.selected(mouse.screen), { screen = awful.util.cycle(mouse.screen + 1, screen.count()) }) 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),
-- Prompt
-- add a todo
awful.key({ modkey, "Shift" }, "d",
function ()
awful.prompt.run({ prompt = " Add Todo Note: " },
mypromptbox[mouse.screen],
addtodo(t), t,
awful.util.getdir("cache") .. "/todos")
end),
awful.key({ modkey }, "F2",
function ()
awful.prompt.run({ fg_cursor = 'orange', bg_cursor = beautiful.bg_normal,
ul_cursor = "single", prompt = " Run: " },
mypromptbox[mouse.screen],
awful.util.spawn, awful.completion.shell,
awful.util.getdir("cache") .. "/history")
end),
awful.key({ modkey }, "F4",
function ()
awful.prompt.run({ prompt = " Run Lua code: " },
mypromptbox[mouse.screen],
awful.util.eval, nil,
awful.util.getdir("cache") .. "/history_eval")
end)
)
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
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, }, "semicolon", 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", awful.client.togglemarked),
awful.key({ modkey,}, "m",
function (c)
c.maximized_horizontal = not c.maximized_horizontal
c.maximized_vertical = not c.maximized_vertical
end)
)
for i=1,9 do
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey }, i,
function ()
local t = awful.tag.viewonly(shifty.getpos(i))
end))
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Control" }, i,
function ()
local t = shifty.getpos(i)
t.selected = not t.selected
end))
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Control", "Shift" }, i,
function ()
if client.focus then
awful.client.toggletag(shifty.getpos(i))
end
end))
-- move clients to other tags
globalkeys = awful.util.table.join(globalkeys, awful.key({ modkey, "Shift" }, i,
function ()
if client.focus then
local t = shifty.getpos(i)
awful.client.movetotag(t)
awful.tag.viewonly(t)
end
end))
end
-- Set keys
root.keys(globalkeys)
shifty.config.globalkeys = globalkeys
shifty.config.clientkeys = clientkeys
--}}}
--}}}
-- {{{ Hooks
-- Hook function to execute when focusing a client.
awful.hooks.focus.register(function (c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_focus
end
end)
-- Hook function to execute when unfocusing a client.
awful.hooks.unfocus.register(function (c)
if not awful.client.ismarked(c) then
c.border_color = beautiful.border_normal
end
end)
-- Hook function to execute when marking a client
awful.hooks.marked.register(function (c)
c.border_color = beautiful.border_marked
end)
-- Hook function to execute when unmarking a client.
awful.hooks.unmarked.register(function (c)
c.border_color = beautiful.border_focus
end)
-- Hook function to execute when the mouse enters a client.
awful.hooks.mouse_enter.register(function (c)
-- Sloppy focus, but disabled for magnifier layout
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier
and awful.client.focus.filter(c) then
client.focus = c
end
end)
-- Hook function to execute when arranging the screen.
-- (tag switch, new client, etc)
awful.hooks.arrange.register(function (screen)
local layout = awful.layout.getname(awful.layout.get(screen))
if layout and beautiful["layout_" ..layout] then
mylayoutbox[screen].image = image(beautiful["layout_" .. layout])
else
mylayoutbox[screen].image = nil
end
-- Give focus to the latest client in history if no window has focus
-- or if the current window is a desktop or a dock one.
if not client.focus then
local c = awful.client.focus.history.get(screen, 0)
if c then client.focus = c end
end
end)
-- Hook called every 15 seconds, displays info
function hook_date ()
-- writes status to .status
os.execute("echo $(mpc | grep -) $(gmail.py) $(acpi -b | sed -e 's/%.*/%/;s/.*, //') $(date +'%a %d %b') $(date +'%I:%M') > ~/.status")
-- read .status
io.input("/home/jack/.status")
datebox.text = io.read("*line")
end
-- Set timers for the hooks
awful.hooks.timer.register(15, hook_date)
-- run the hook so we don't have to wait
hook_date()
--}}}
-- startup commands
os.execute("xmodmap ~/.xmodmap &")
os.execute("xbindkeys &")
os.execute("nitrogen --restore &")
os.execute("xsetroot -cursor_name left_ptr &")
-- vim: foldmethod=marker:filetype=lua:expandtab:shiftwidth=2:tabstop=2:softtabstop=2:encoding=utf-8:textwidth=80

53
helpers.lua Normal file
View file

@ -0,0 +1,53 @@
--- Spawns cmd if no client can be found matching properties
-- If such a client can be found, pop to first tag where it is visible, and give it focus
-- @param cmd the command to execute
-- @param properties a table of properties to match against clients. Possible entries: any properties of the client object
function runraise(cmd, properties)
local clients = client.get()
local focused = awful.client.next(0)
local findex = 0
local matched_clients = {}
local n = 0
for i, c in pairs(clients) do
--make an array of matched clients
if awful.rules.match(properties, c) then
n = n + 1
matched_clients[n] = c
if c == focused then
findex = n
end
end
end
if n > 0 then
local c = matched_clients[1]
-- if the focused window matched switch focus to next in list
if 0 < findex and findex < n then
c = matched_clients[findex+1]
end
local ctags = c:tags()
if table.getn(ctags) == 0 then
-- ctags is empty, show client on current tag
local curtag = awful.tag.selected()
awful.client.movetotag(curtag, c)
else
-- Otherwise, pop to first tag client is visible on
awful.tag.viewonly(ctags[1])
end
-- And then focus the client
client.focus = c
c:raise()
return
end
awful.util.spawn(cmd)
end
-- Returns true if all pairs in table1 are present in table2
function match (table1, table2)
for k, v in pairs(table1) do
if table2[k] ~= v and not table2[k]:find(v) then
return false
end
end
return true
end

515
json.lua
View file

@ -1,515 +0,0 @@
--[[
JSON Encoder and Parser for Lua 5.1
Copyright © 2007 Shaun Brown (http://www.chipmunkav.com).
All Rights Reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
If you find this software useful please give www.chipmunkav.com a mention.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Usage:
-- Lua script:
local t = {
["name1"] = "value1",
["name2"] = {1, false, true, 23.54, "a \021 string"},
name3 = Json.Null()
}
local json = Json.Encode (t)
print (json)
--> {"name1":"value1","name3":null,"name2":[1,false,true,23.54,"a \u0015 string"]}
local t = Json.Decode(json)
print(t.name2[4])
--> 23.54
Notes:
1) Encodable Lua types: string, number, boolean, table, nil
2) Use Json.Null() to insert a null value into a Json object
3) All control chars are encoded to \uXXXX format eg "\021" encodes to "\u0015"
4) All Json \uXXXX chars are decoded to chars (0-255 byte range only)
5) Json single line // and /* */ block comments are discarded during decoding
6) Numerically indexed Lua arrays are encoded to Json Lists eg [1,2,3]
7) Lua dictionary tables are converted to Json objects eg {"one":1,"two":2}
8) Json nulls are decoded to Lua nil and treated by Lua in the normal way
--]]
local string = string
local math = math
local table = table
local error = error
local tonumber = tonumber
local tostring = tostring
local type = type
local setmetatable = setmetatable
local pairs = pairs
local ipairs = ipairs
local assert = assert
local Chipmunk = Chipmunk
module("Json")
local StringBuilder = {
buffer = {}
}
function StringBuilder:New()
local o = {}
setmetatable(o, self)
self.__index = self
o.buffer = {}
return o
end
function StringBuilder:Append(s)
self.buffer[#self.buffer+1] = s
end
function StringBuilder:ToString()
return table.concat(self.buffer)
end
local JsonWriter = {
backslashes = {
['\b'] = "\\b",
['\t'] = "\\t",
['\n'] = "\\n",
['\f'] = "\\f",
['\r'] = "\\r",
['"'] = "\\\"",
['\\'] = "\\\\",
['/'] = "\\/"
}
}
function JsonWriter:New()
local o = {}
o.writer = StringBuilder:New()
setmetatable(o, self)
self.__index = self
return o
end
function JsonWriter:Append(s)
self.writer:Append(s)
end
function JsonWriter:ToString()
return self.writer:ToString()
end
function JsonWriter:Write(o)
local t = type(o)
if t == "nil" then
self:WriteNil()
elseif t == "boolean" then
self:WriteString(o)
elseif t == "number" then
self:WriteString(o)
elseif t == "string" then
self:ParseString(o)
elseif t == "table" then
self:WriteTable(o)
elseif t == "function" then
self:WriteFunction(o)
elseif t == "thread" then
self:WriteError(o)
elseif t == "userdata" then
self:WriteError(o)
end
end
function JsonWriter:WriteNil()
self:Append("null")
end
function JsonWriter:WriteString(o)
self:Append(tostring(o))
end
function JsonWriter:ParseString(s)
self:Append('"')
self:Append(string.gsub(s, "[%z%c\\\"/]", function(n)
local c = self.backslashes[n]
if c then return c end
return string.format("\\u%.4X", string.byte(n))
end))
self:Append('"')
end
function JsonWriter:IsArray(t)
local count = 0
local isindex = function(k)
if type(k) == "number" and k > 0 then
if math.floor(k) == k then
return true
end
end
return false
end
for k,v in pairs(t) do
if not isindex(k) then
return false, '{', '}'
else
count = math.max(count, k)
end
end
return true, '[', ']', count
end
function JsonWriter:WriteTable(t)
local ba, st, et, n = self:IsArray(t)
self:Append(st)
if ba then
for i = 1, n do
self:Write(t[i])
if i < n then
self:Append(',')
end
end
else
local first = true;
for k, v in pairs(t) do
if not first then
self:Append(',')
end
first = false;
self:ParseString(k)
self:Append(':')
self:Write(v)
end
end
self:Append(et)
end
function JsonWriter:WriteError(o)
error(string.format(
"Encoding of %s unsupported",
tostring(o)))
end
function JsonWriter:WriteFunction(o)
if o == Null then
self:WriteNil()
else
self:WriteError(o)
end
end
local StringReader = {
s = "",
i = 0
}
function StringReader:New(s)
local o = {}
setmetatable(o, self)
self.__index = self
o.s = s or o.s
return o
end
function StringReader:Peek()
local i = self.i + 1
if i <= #self.s then
return string.sub(self.s, i, i)
end
return nil
end
function StringReader:Next()
self.i = self.i+1
if self.i <= #self.s then
return string.sub(self.s, self.i, self.i)
end
return nil
end
function StringReader:All()
return self.s
end
local JsonReader = {
escapes = {
['t'] = '\t',
['n'] = '\n',
['f'] = '\f',
['r'] = '\r',
['b'] = '\b',
}
}
function JsonReader:New(s)
local o = {}
o.reader = StringReader:New(s)
setmetatable(o, self)
self.__index = self
return o;
end
function JsonReader:Read()
self:SkipWhiteSpace()
local peek = self:Peek()
if peek == nil then
error(string.format(
"Nil string: '%s'",
self:All()))
elseif peek == '{' then
return self:ReadObject()
elseif peek == '[' then
return self:ReadArray()
elseif peek == '"' then
return self:ReadString()
elseif string.find(peek, "[%+%-%d]") then
return self:ReadNumber()
elseif peek == 't' then
return self:ReadTrue()
elseif peek == 'f' then
return self:ReadFalse()
elseif peek == 'n' then
return self:ReadNull()
elseif peek == '/' then
self:ReadComment()
return self:Read()
else
error(string.format(
"Invalid input: '%s'",
self:All()))
end
end
function JsonReader:ReadTrue()
self:TestReservedWord{'t','r','u','e'}
return true
end
function JsonReader:ReadFalse()
self:TestReservedWord{'f','a','l','s','e'}
return false
end
function JsonReader:ReadNull()
self:TestReservedWord{'n','u','l','l'}
return nil
end
function JsonReader:TestReservedWord(t)
for i, v in ipairs(t) do
if self:Next() ~= v then
error(string.format(
"Error reading '%s': %s",
table.concat(t),
self:All()))
end
end
end
function JsonReader:ReadNumber()
local result = self:Next()
local peek = self:Peek()
while peek ~= nil and string.find(
peek,
"[%+%-%d%.eE]") do
result = result .. self:Next()
peek = self:Peek()
end
result = tonumber(result)
if result == nil then
error(string.format(
"Invalid number: '%s'",
result))
else
return result
end
end
function JsonReader:ReadString()
local result = ""
assert(self:Next() == '"')
while self:Peek() ~= '"' do
local ch = self:Next()
if ch == '\\' then
ch = self:Next()
if self.escapes[ch] then
ch = self.escapes[ch]
end
end
result = result .. ch
end
assert(self:Next() == '"')
local fromunicode = function(m)
return string.char(tonumber(m, 16))
end
return string.gsub(
result,
"u%x%x(%x%x)",
fromunicode)
end
function JsonReader:ReadComment()
assert(self:Next() == '/')
local second = self:Next()
if second == '/' then
self:ReadSingleLineComment()
elseif second == '*' then
self:ReadBlockComment()
else
error(string.format(
"Invalid comment: %s",
self:All()))
end
end
function JsonReader:ReadBlockComment()
local done = false
while not done do
local ch = self:Next()
if ch == '*' and self:Peek() == '/' then
done = true
end
if not done and
ch == '/' and
self:Peek() == "*" then
error(string.format(
"Invalid comment: %s, '/*' illegal.",
self:All()))
end
end
self:Next()
end
function JsonReader:ReadSingleLineComment()
local ch = self:Next()
while ch ~= '\r' and ch ~= '\n' do
ch = self:Next()
end
end
function JsonReader:ReadArray()
local result = {}
assert(self:Next() == '[')
local done = false
if self:Peek() == ']' then
done = true;
end
while not done do
local item = self:Read()
result[#result+1] = item
self:SkipWhiteSpace()
if self:Peek() == ']' then
done = true
end
if not done then
local ch = self:Next()
if ch ~= ',' then
error(string.format(
"Invalid array: '%s' due to: '%s'",
self:All(), ch))
end
end
end
assert(']' == self:Next())
return result
end
function JsonReader:ReadObject()
local result = {}
assert(self:Next() == '{')
local done = false
if self:Peek() == '}' then
done = true
end
while not done do
local key = self:Read()
if type(key) ~= "string" then
error(string.format(
"Invalid non-string object key: %s",
key))
end
self:SkipWhiteSpace()
local ch = self:Next()
if ch ~= ':' then
error(string.format(
"Invalid object: '%s' due to: '%s'",
self:All(),
ch))
end
self:SkipWhiteSpace()
local val = self:Read()
result[key] = val
self:SkipWhiteSpace()
if self:Peek() == '}' then
done = true
end
if not done then
ch = self:Next()
if ch ~= ',' then
error(string.format(
"Invalid array: '%s' near: '%s'",
self:All(),
ch))
end
end
end
assert(self:Next() == "}")
return result
end
function JsonReader:SkipWhiteSpace()
local p = self:Peek()
while p ~= nil and string.find(p, "[%s/]") do
if p == '/' then
self:ReadComment()
else
self:Next()
end
p = self:Peek()
end
end
function JsonReader:Peek()
return self.reader:Peek()
end
function JsonReader:Next()
return self.reader:Next()
end
function JsonReader:All()
return self.reader:All()
end
function Encode(o)
local writer = JsonWriter:New()
writer:Write(o)
return writer:ToString()
end
function Decode(s)
local reader = JsonReader:New(s)
return reader:Read()
end
function Null()
return Null
end

48
keymaps/actions.lua Normal file
View file

@ -0,0 +1,48 @@
-- Client manipulation
modkey = "Mod4"
keybinding({ "Mod1" }, "Tab", function () awful.client.focus.byidx(1); if client.focus then client.focus:raise() end end):add()
--From Here default config
keybinding({ modkey, "Shift" }, "f", function () if client.focus then client.focus.fullscreen = not client.focus.fullscreen end end):add()
keybinding({ modkey, "Shift" }, "c", function () if client.focus then client.focus:kill() end end):add()
keybinding({ modkey }, "j", function () awful.client.focus.byidx(1); if client.focus then client.focus:raise() end end):add()
keybinding({ modkey }, "k", function () awful.client.focus.byidx(-1); if client.focus then client.focus:raise() end end):add()
keybinding({ modkey, "Shift" }, "j", function () awful.client.swap.byidx(1) end):add()
keybinding({ modkey, "Shift" }, "k", function () awful.client.swap.byidx(-1) end):add()
keybinding({ modkey, "Control" }, "j", function () awful.screen.focus(1) end):add()
keybinding({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end):add()
keybinding({ modkey, "Control" }, "space", awful.client.togglefloating):add()
keybinding({ modkey, "Control" }, "Return", function () if client.focus then client.focus:swap(awful.client.getmaster()) end end):add()
keybinding({ modkey }, "o", awful.client.movetoscreen):add()
keybinding({ modkey }, "Tab", awful.client.focus.history.previous):add()
keybinding({ modkey }, "u", awful.client.urgent.jumpto):add()
keybinding({ modkey, "Shift" }, "r", function () if client.focus then client.focus:redraw() end end):add()
-- Layout manipulation
keybinding({ modkey }, "l", function () awful.tag.incmwfact(0.05) end):add()
keybinding({ modkey }, "h", function () awful.tag.incmwfact(-0.05) end):add()
keybinding({ modkey, "Shift" }, "h", function () awful.tag.incnmaster(1) end):add()
keybinding({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end):add()
keybinding({ modkey, "Control" }, "h", function () awful.tag.incncol(1) end):add()
keybinding({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end):add()
keybinding({ modkey }, "space", function () awful.layout.inc(layouts, 1) end):add()
keybinding({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end):add()
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
keybinding({ modkey }, "t", awful.client.togglemarked):add()
for i = 1, keynumber do
keybinding({ modkey, "Shift" }, "F" .. i,
function ()
local screen = mouse.screen
if tags[screen][i] then
for k, c in pairs(awful.client.getmarked()) do
awful.client.movetotag(tags[screen][i], c)
end
end
end):add()
end

73
keymaps/spawn.lua Normal file
View file

@ -0,0 +1,73 @@
keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
keybinding({ modkey }, "f", function () awful.util.spawn("firefox") end):add()
keybinding({ }, "XF86AudioLowerVolume", function () awful.util.spawn("voldown 3") end):add()
keybinding({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("volup 3") end):add()
keybinding({ "Shift" }, "XF86AudioLowerVolume", function () awful.util.spawn("voldown 10") end):add()
keybinding({ "Shift" }, "XF86AudioRaiseVolume", function () awful.util.spawn("volup 10") end):add()
keybinding({ modkey }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end):add()
keybinding({ modkey }, "XF86WWW", function () awful.util.spawn(terminal .. " -e apselect") end):add()
keybinding({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end):add()
keybinding({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end):add()
keybinding({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end):add()
keybinding({ }, "XF86AudioStop", function () awful.util.spawn("mpc stop") end):add()
keybinding({ modkey }, "XF86AudioStop", function () awful.util.spawn("mpc clear") end):add()
keybinding({ modkey }, "XF86AudioPlay", function ()
awful.prompt.run({ prompt = "Play Band: " },
mypromptbox[mouse.screen], playband,
awful.completion.bash,
awful.util.getdir("cache") .. "/history")
end):add()
function playband(b)
return awful.util.spawn("playband " .. b)
end
keybinding({ modkey }, "Return", function () awful.util.spawn(terminal) end):add()
keybinding({ modkey }, "F1", function ()
awful.prompt.run({ prompt = "Run: " },
mypromptbox[mouse.screen], awful.util.spawn,
awful.completion.bash,
awful.util.getdir("cache") .. "/history")
end):add()
keybinding({ modkey }, "F4", function ()
awful.prompt.run({ prompt = "Run Lua code: " },
mypromptbox[mouse.screen],
awful.util.eval,
awful.prompt.bash,
awful.util.getdir("cache") .. "/history_eval")
end):add()
keybinding({ modkey, "Ctrl" }, "i", function ()
local s = mouse.screen
if mypromptbox[s].text then
mypromptbox[s].text = nil
elseif client.focus then
mypromptbox[s].text = nil
if client.focus.class then
mypromptbox[s].text = "Class: " .. client.focus.class .. " "
end
if client.focus.instance then
mypromptbox[s].text = mypromptbox[s].text .. "Instance: "
.. client.focus.instance .. " "
end
if client.focus.role then
mypromptbox[s].text = mypromptbox[s].text .. "Role: "
.. client.focus.role
end
end
end):add()
keybinding({}, "F12", function ()
tags[1][10].selected = not tags[1][10].selected;
end):add()

49
keymaps/wmbase.lua Normal file
View file

@ -0,0 +1,49 @@
-- Bind keyboard digits
-- 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
for i = 1, keynumber do
keybinding({ modkey }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end):add()
keybinding({ modkey, "Control" }, i,
function ()
local screen = mouse.screen
if tags[screen][i] then
tags[screen][i].selected = not tags[screen][i].selected
end
end):add()
keybinding({ modkey, "Shift" }, i,
function ()
if client.focus then
if tags[client.focus.screen][i] then
awful.client.movetotag(tags[client.focus.screen][i])
end
end
end):add()
keybinding({ modkey, "Control", "Shift" }, i,
function ()
if client.focus then
if tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end
end):add()
end
keybinding({ modkey }, "Left", awful.tag.viewprev):add()
keybinding({ modkey }, "Right", awful.tag.viewnext):add()
keybinding({ modkey }, "Escape", awful.tag.history.restore):add()
keybinding({ modkey, "Control" }, "r", function ()
mypromptbox[mouse.screen].text = awful.util.escape(awful.util.restart())
end):add()
keybinding({ modkey, "Shift" }, "q", awesome.quit):add()

371
rc.lua
View file

@ -1,380 +1,39 @@
terminal = "urxvtc -e screen"
editor_cmd = "urxvt -e vim"
modkey = "Mod4"
hyper = "Mod3"
-- Standard awesome library -- Standard awesome library
require("awful") require("awful")
require("awful.autofocus") require("awful.autofocus")
require("awful.rules") require("awful.rules")
-- Theme handling library
require("beautiful") require("beautiful")
-- Notification library
require("naughty") require("naughty")
require("teardrop") require("teardrop")
require("mpdprompt")
require("obvious.battery")
require("obvious.popup_run_prompt") require("obvious.popup_run_prompt")
require("vicious") require("vicious")
require("aweswt")
-- {{{ Variable definitions
-- Themes define colours, icons, and wallpapers -- Themes define colours, icons, and wallpapers
beautiful.init("/home/crater2150/.config/awesome/zenburn/theme.lua") beautiful.init("/home/crater2150/.config/awesome/zenburn/theme.lua")
-- This is used later as the default terminal and editor to run.
terminal = "sakura -e screen"
editor_cmd = "sakura -e vim"
-- 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. -- Table of layouts to cover with awful.layout.inc, order matters.
layouts = layouts =
{ {
awful.layout.suit.tile,
awful.layout.suit.tile.left,
awful.layout.suit.tile.bottom,
awful.layout.suit.tile.top,
awful.layout.suit.fair, awful.layout.suit.fair,
awful.layout.suit.fair.horizontal, awful.layout.suit.fair.horizontal,
awful.layout.suit.tile,
awful.layout.suit.tile.bottom,
awful.layout.suit.max, awful.layout.suit.max,
awful.layout.suit.max.fullscreen, awful.layout.suit.max.fullscreen,
awful.layout.suit.floating awful.layout.suit.floating
} }
-- }}}
-- {{{ Tags MY_PATH = os.getenv("HOME") .. "/.config/awesome/"
local tags = {} dofile (MY_PATH .. "helpers.lua")
tags.setup = { dofile (MY_PATH .. "tags.lua")
{ name = "1:⚙", layout = layouts[1] }, dofile (MY_PATH .. "wibox.lua")
{ name = "2:⌘", layout = layouts[7] }, dofile (MY_PATH .. "bindings.lua")
{ name = "3:☻", layout = layouts[2], mwfact = 0.20 }, dofile (MY_PATH .. "rules.lua")
{ name = "4:✉", layout = layouts[7] }, dofile (MY_PATH .. "signals.lua")
{ name = "5:☑", layout = layouts[7] },
{ name = "6:♫", layout = layouts[1] },
{ name = "7:☣", layout = layouts[1] },
{ name = "8:☕", layout = layouts[1] },
{ name = "9:⚂", layout = layouts[1] }
}
for s = 1, screen.count() do
tags[s] = {}
for i, t in ipairs(tags.setup) do
tags[s][i] = tag({ name = t.name })
tags[s][i].screen = s
awful.tag.setproperty(tags[s][i], "layout", t.layout)
awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
awful.tag.setproperty(tags[s][i], "hide", t.hide)
end
tags[s][1].selected = true
end
-- }}}
-- {{{ Reusable separators
spacer = widget({ type = "textbox", name = "spacer" })
spacer.text = " "
separator = widget({ type = "textbox", name = "separator", align = "center" })
separator.text = " )( "
-- }}}
-- {{{ Wibox
--popup run
-- Create a textclock widget
--clock = awful.widget.textclock({ align = "right" })
mysystray = widget({ type = "systray" })
clock = widget({ type = "textbox" })
vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60)
memwidget = widget({ type = "textbox" })
vicious.register(memwidget, vicious.widgets.mem, "⌸ $1% ($2MB / $3MB) ", 13)
--batwidget = obvious.battery();
batwidget = widget({ type = "textbox" })
vicious.register(batwidget, vicious.widgets.batat, "⌁ $1$2% - $3", 61)
cpuwidget = awful.widget.progressbar()
cpulabel = widget({ type = "textbox" })
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",41)
vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%")
wlanwidget = widget({ type = "textbox" })
vicious.register(wlanwidget, vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0")
-- Create a wibox for each screen and add it
leftwibox = {}
rightwibox = {}
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)
)
for s = 1, screen.count() do
-- 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 the wibox
leftwibox[s] = awful.wibox({ position = "left", screen = s })
rightwibox[s] = awful.wibox({ position = "right", screen = s })
-- Add widgets to the wibox - order matters
leftwibox[s].widgets = {
mytaglist[s],
mylayoutbox[s],
clock,
separator, spacer, batwidget,
spacer,
layout = awful.widget.layout.horizontal.rightleft
}
rightwibox[s].widgets = {
{
memwidget,
separator, spacer, batwidget,
separator, spacer, wlanwidget,
separator, spacer, cpulabel, cpuwidget,
spacer,
layout = awful.widget.layout.horizontal.leftright
},
separator, spacer, s == 1 and mysystray or nil,
layout = awful.widget.layout.horizontal.leftright
}
end
-- }}}
-- {{{ Mouse bindings
root.buttons(awful.util.table.join(
awful.button({ }, 3, function () mymainmenu:toggle() end),
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({ }, "XF86Word", awful.tag.viewprev ),
awful.key({ }, "XF86WebCam", awful.tag.viewnext ),
awful.key({ }, "XF86Away", 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),
awful.key({ modkey, }, "w", function () mymainmenu:show(true) 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),
awful.key({ "Mod1", }, "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, }, "f", function () awful.util.spawn("firefox") end),
awful.key({ modkey, }, "t", function () awful.util.spawn("thunderbird") end),
awful.key({ modkey, }, "p", function () awful.util.spawn("pidgin") end),
awful.key({ modkey, }, "s", function () awful.util.spawn("sunbird") end),
awful.key({ modkey, }, "g", function () awful.util.spawn("gmpc") end),
awful.key({ }, "XF86Mail", function () awful.util.spawn("xset dpms force off") end),
awful.key({ modkey }, "XF86Mail", function () awful.util.spawn("slock") end),
awful.key({ modkey, "Control" }, "r", awesome.restart),
awful.key({ modkey, "Shift" }, "q", awesome.quit),
-- Audio control
awful.key({ modkey }, "F9", function () teardrop("sakura -e alsamixer","top","center", 0.99, 0.4)end ),
awful.key({ modkey }, "F1", function () mpdprompt("top","center")end ),
awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Front 2dB-")end ),
awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Front 2dB+")end ),
awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer set Front toggle") end),
awful.key({ modkey , "Shift" }, "m", function () awful.util.spawn("mpdmenu -a") end),
awful.key({ modkey , "Control" }, "m", function () awful.util.spawn("mpdmenu -t") end),
awful.key({ modkey }, "m", function () awful.util.spawn("mpc toggle") end),
awful.key({ modkey }, "n", function () awful.util.spawn("mpc next") end),
awful.key({ modkey , "Shift"}, "n", function () awful.util.spawn("mpc prev") end),
awful.key({ }, "XF86AudioPlay", function () awful.util.spawn("mpc toggle") end),
awful.key({ }, "XF86AudioNext", function () awful.util.spawn("mpc next") end),
awful.key({ }, "XF86AudioPrev", function () awful.util.spawn("mpc prev") end),
awful.key({ }, "XF86AudioStop", function () awful.util.spawn("mpdmenu -a") end),
awful.key({ modkey , "Control" }, "n", function () awful.util.spawn("mpdmenu -j") end),
-- Prompt
awful.key({ modkey }, "r", function () obvious.popup_run_prompt.run_prompt() end),
awful.key({ }, "Scroll_Lock", function () awful.util.spawn("wli") end),
awful.key({ }, "F12", function () teardrop("sakura -e 'screen -l'","center","center", 0.99, 0.7)end ),
--{{{Default
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, 0) end)
--}}}
)
clientkeys = awful.util.table.join(
awful.key({ modkey, }, "F11", 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", function (c) c.ontop = not c.ontop end),
awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
awful.key({ modkey, }, "n", function (c) c.minimized = not c.minimized 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,
size_hints_honor = false,
keys = clientkeys,
buttons = clientbuttons } },
{ rule = { class = "MPlayer" },
properties = { floating = true,
size_hints_honor = 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] } },
{ rule = { class = "Pidgin" },
properties = { tag = tags[1][3] } },
{ rule = { role = "buddy_list" },
properties = { master = true } },
{ rule = { class = "Thunderbird" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Sunbird-bin" },
properties = { tag = tags[1][5] } },
}
-- }}}
-- {{{ 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)
-- }}}

63
rules.lua Normal file
View file

@ -0,0 +1,63 @@
-- {{{ Rules
awful.rules.rules = {
-- All clients will match this rule.
{ rule = { },
properties = { border_width = beautiful.border_width,
border_color = beautiful.border_normal,
focus = true,
size_hints_honor = false,
keys = clientkeys,
buttons = clientbuttons } },
{ rule = { class = "MPlayer" },
properties = { floating = true,
size_hints_honor = true } },
{ rule = { class = "Passprompt" },
properties = { floating = true,
ontop = true,
focus = true } },
{ rule = { class = "Teardrop" },
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],
floating = false } },
{ rule = { class = "Pidgin" },
properties = { tag = tags[1][3]} },
{ rule = { role = "buddy_list" },
properties = { master = true } },
{ rule = { role = "conversation" },
callback = awful.client.setslave},
{ rule = { class = "Irssi"},
properties = { tag = tags[1][3]} ,
callback = awful.client.setslave},
{ rule = { class = "Claws-mail" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Thunderbird" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Claws-mail" },
properties = { tag = tags[1][4] } },
{ rule = { class = "Sunbird-bin" },
properties = { tag = tags[1][5] } },
{ rule = { class = "Gmpc" },
properties = { tag = tags[1][6] } },
{ rule = { class = "Deluge" },
properties = { tag = tags[1][7] } },
{ rule = { class = "Xhtop" },
properties = { tag = tags[1][22] } },
--{ rule = { class = "OpenOffice.org 3.2" },
--properties = { floating = false } },
{ rule = { class = "Cellwriter" },
properties = { tag = tags[1][1],
ontop = true,
size_hints_honor = true,
float = true,
sticky = true,
fullscreen = true
} },
}
-- }}}

View file

@ -1,136 +0,0 @@
---------------------------------------------------------------
-- Basic scratchpad manager for the awesome window manager
---------------------------------------------------------------
-- Adrian C. <anrxc.sysphere.org>
-- Licensed under the WTFPL version 2
-- * http://sam.zoy.org/wtfpl/COPYING
---------------------------------------------------------------
-- To use this module add:
-- require("scratchpad")
-- to the top of your rc.lua, and call:
-- scratchpad.set(c, width, height, sticky, screen)
-- from a clientkeys binding, and:
-- scratchpad.toggle(screen)
-- from a globalkeys binding.
--
-- Parameters:
-- c - Client to scratch or un-scratch
-- width - Width in absolute pixels, or width percentage
-- when < 1 (0.50 (50% of the screen) by default)
-- height - Height in absolute pixels, or height percentage
-- when < 1 (0.50 (50% of the screen) by default)
-- sticky - Visible on all tags, false by default
-- screen - Screen (optional), mouse.screen by default
---------------------------------------------------------------
-- Grab environment
local awful = require("awful")
local capi = {
mouse = mouse,
client = client,
screen = screen
}
-- Scratchpad: Basic scratchpad manager for the awesome window manager
module("scratchpad")
local scratch = {}
-- Scratch the focused client, or un-scratch and tile it. If another
-- client is already scratched, replace it with the focused client.
function set(c, width, height, sticky, screen)
local width = width or 0.50
local height = height or 0.50
local sticky = sticky or false
local screen = screen or capi.mouse.screen
local function setscratch(c)
-- Scratchpad is floating
awful.client.floating.set(c, true)
-- Scratchpad geometry and placement
local screengeom = capi.screen[screen].workarea
if width < 1 then width = screengeom.width * width end
if height < 1 then height = screengeom.height * height end
c:geometry({ -- Client is always centered on screen
x = screengeom.x + (screengeom.width - width) / 2,
y = screengeom.y + (screengeom.height - height) / 2,
width = width, height = height
})
-- Scratchpad properties
c.ontop = true
c.above = true
c.skip_taskbar = true
if sticky then c.sticky = true end
if c.titlebar then awful.titlebar.remove(c) end
-- Scratchpad should not loose focus
c:raise()
capi.client.focus = c
end
-- Prepare a table for storing clients,
if not scratch["pad"] then scratch["pad"] = {}
-- add unmanage signal for scratchpad clients
capi.client.add_signal("unmanage", function (c)
local oc = scratch["pad"][screen]
if oc == c then
scratch["pad"][screen] = nil
end
end)
end
-- If the scratcphad is emtpy, store the client,
if not scratch["pad"][screen] then
scratch["pad"][screen] = c
-- then apply geometry and properties
setscratch(c)
else -- If a client is already scratched,
local oc = scratch["pad"][screen]
-- compare it with the focused client
if oc == c then
-- If it matches then unscratch and clear the table
awful.client.floating.toggle(oc); oc.sticky = false
oc.ontop = false; oc.above = false
scratch["pad"][screen] = nil
else -- If they don't match, unscratch and replace it
oc.hidden = false; oc.sticky = false
oc.ontop = false; oc.above = false
awful.client.floating.toggle(oc)
scratch["pad"][screen] = c
setscratch(c)
end
end
end
-- Move the scratchpad to the current workspace, focus and raise it
-- when it's hidden, or hide it when it's visible.
function toggle(screen)
local screen = screen or capi.mouse.screen
-- Check if we have a client on storage,
if scratch["pad"] and
scratch["pad"][screen] ~= nil
then -- and get it out, to play
local c = scratch["pad"][screen]
-- If it's visible on another tag hide it,
if c:isvisible() == false then c.hidden = true;
-- and move it to the current worskpace
awful.client.movetotag(awful.tag.selected(screen), c)
end
-- Focus and raise if it's hidden,
if c.hidden then
awful.placement.centered(c)
c.hidden = false
c:raise()
capi.client.focus = c
else -- hide it if it's not
c.hidden = true
end
end
end

31
signals.lua Normal file
View file

@ -0,0 +1,31 @@
-- {{{ 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)
-- }}}

40
tags.lua Normal file
View file

@ -0,0 +1,40 @@
-- {{{ Tags
tags={}
tags.setup = {
{ name = "1:⚙", layout = layouts[1] },
{ name = "2:⌘", layout = layouts[5] },
{ name = "3:☻", layout = layouts[3], mwfact = 0.20 },
{ name = "4:✉", layout = layouts[5] },
{ name = "5:☑", layout = layouts[1] },
{ name = "6:♫", layout = layouts[1] },
{ name = "7:☣", layout = layouts[1] },
{ name = "8:☕", layout = layouts[1] },
{ name = "9:⚂", layout = layouts[1] },
{ name = "0:☠", layout = layouts[1] },
{ name = "F1:☭", layout = layouts[1] },
{ name = "F2:♚", layout = layouts[1] },
{ name = "F3:♛", layout = layouts[1] },
{ name = "F4:♜", layout = layouts[1] },
{ name = "F5:♝", layout = layouts[1] },
{ name = "F6:♞", layout = layouts[1] },
{ name = "F7:♟", layout = layouts[1] },
{ name = "F8:⚖", layout = layouts[1] },
{ name = "F9:⚛", layout = layouts[1] },
{ name = "F10:⚡", layout = layouts[1] },
{ name = "F11:⚰", layout = layouts[1] },
{ name = "F12:⚙", layout = layouts[1] }
}
for s = 1, screen.count() do
tags[s] = {}
for i, t in ipairs(tags.setup) do
tags[s][i] = tag({ name = t.name })
tags[s][i].screen = s
awful.tag.setproperty(tags[s][i], "layout", t.layout)
awful.tag.setproperty(tags[s][i], "mwfact", t.mwfact)
awful.tag.setproperty(tags[s][i], "hide", t.hide)
end
tags[s][1].selected = true
end
-- }}}

142
theme.lua
View file

@ -1,142 +0,0 @@
-------------------------------
-- "Zenburn" awesome theme --
-- By Adrian C. (anrxc) --
-------------------------------
-- {{{ Main
theme = {}
confdir = awful.util.getdir("config")
theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" }
--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/zenburn/zenburn-background.png" }
-- }}}
-- {{{ Styles
theme.font = "fixed 6"
-- {{{ Colors
theme.fg_normal = "#DCDCCC"
theme.fg_focus = "#F0DFAF"
theme.fg_urgent = "#CC9393"
theme.bg_normal = "#3F3F3F"
theme.bg_focus = "#1E2320"
theme.bg_urgent = "#3F3F3F"
-- }}}
-- {{{ Borders
theme.border_width = "1"
theme.border_normal = "#3F3F3F"
theme.border_focus = "#6F6F6F"
theme.border_marked = "#CC9393"
-- }}}
-- {{{ Titlebars
theme.titlebar_bg_focus = "#5F5F5F"
theme.titlebar_bg_normal = "#3F3F3F"
-- theme.titlebar_[normal|focus]
-- }}}
-- {{{ Widgets
theme.fg_widget = "#AECF96"
theme.fg_center_widget = "#88A175"
theme.fg_end_widget = "#FF5656"
theme.fg_off_widget = "#494B4F"
theme.fg_netup_widget = "#7F9F7F"
theme.fg_netdn_widget = "#CC9393"
theme.bg_widget = "#3F3F3F"
theme.border_widget = "#3F3F3F"
-- }}}
-- {{{ Mouse finder
theme.mouse_finder_color = "#CC9393"
-- theme.mouse_finder_[timeout|animate_timeout|radius|factor]
-- }}}
-- {{{ Tooltips
-- theme.tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
-- }}}
-- {{{ Taglist and Tasklist
-- theme.[taglist|tasklist]_[bg|fg]_[focus|urgent]
-- }}}
-- {{{ Menu
-- theme.menu_[height|width]
-- theme.menu_[bg|fg]_[normal|focus]
-- theme.menu_[border_color|border_width]
-- }}}
-- }}}
-- {{{ Icons
--
-- {{{ Taglist icons
theme.taglist_squares_sel = confdir .. "/icons/taglist/squarefw.png"
theme.taglist_squares_unsel = confdir .. "/icons/taglist/squarew.png"
--theme.taglist_squares_resize = "false"
-- }}}
-- {{{ Misc icons
--theme.awesome_icon = confdir .. "/icons/awesome.png"
--theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png"
--theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png"
-- }}}
-- {{{ Layout icons
theme.layout_tile = confdir .. "/icons/layouts/tilew.png"
theme.layout_tileleft = confdir .. "/icons/layouts/tileleftw.png"
theme.layout_tilebottom = confdir .. "/icons/layouts/tilebottomw.png"
theme.layout_tiletop = confdir .. "/icons/layouts/tiletopw.png"
theme.layout_fairv = confdir .. "/icons/layouts/fairvw.png"
theme.layout_fairh = confdir .. "/icons/layouts/fairhw.png"
theme.layout_spiral = confdir .. "/icons/layouts/spiralw.png"
theme.layout_dwindle = confdir .. "/icons/layouts/dwindlew.png"
theme.layout_max = confdir .. "/icons/layouts/maxw.png"
theme.layout_fullscreen = confdir .. "/icons/layouts/fullscreenw.png"
theme.layout_magnifier = confdir .. "/icons/layouts/magnifierw.png"
theme.layout_floating = confdir .. "/icons/layouts/floatingw.png"
-- }}}
-- {{{ Widget icons
theme.widget_cpu = confdir .. "/icons/cpu.png"
theme.widget_bat = confdir .. "/icons/bat.png"
theme.widget_mem = confdir .. "/icons/mem.png"
theme.widget_fs = confdir .. "/icons/disk.png"
theme.widget_net = confdir .. "/icons/down.png"
theme.widget_netup = confdir .. "/icons/up.png"
theme.widget_mail = confdir .. "/icons/mail.png"
theme.widget_vol = confdir .. "/icons/vol.png"
theme.widget_org = confdir .. "/icons/cal.png"
theme.widget_date = confdir .. "/icons/time.png"
theme.widget_crypto = confdir .. "/icons/crypto.png"
-- }}}
-- {{{ Titlebar icons
theme.titlebar_close_button_focus = confdir .. "/icons/titlebar/close_focus.png"
theme.titlebar_close_button_normal = confdir .. "/icons/titlebar/close_normal.png"
theme.titlebar_ontop_button_focus_active = confdir .. "/icons/titlebar/ontop_focus_active.png"
theme.titlebar_ontop_button_normal_active = confdir .. "/icons/titlebar/ontop_normal_active.png"
theme.titlebar_ontop_button_focus_inactive = confdir .. "/icons/titlebar/ontop_focus_inactive.png"
theme.titlebar_ontop_button_normal_inactive = confdir .. "/icons/titlebar/ontop_normal_inactive.png"
theme.titlebar_sticky_button_focus_active = confdir .. "/icons/titlebar/sticky_focus_active.png"
theme.titlebar_sticky_button_normal_active = confdir .. "/icons/titlebar/sticky_normal_active.png"
theme.titlebar_sticky_button_focus_inactive = confdir .. "/icons/titlebar/sticky_focus_inactive.png"
theme.titlebar_sticky_button_normal_inactive = confdir .. "/icons/titlebar/sticky_normal_inactive.png"
theme.titlebar_floating_button_focus_active = confdir .. "/icons/titlebar/floating_focus_active.png"
theme.titlebar_floating_button_normal_active = confdir .. "/icons/titlebar/floating_normal_active.png"
theme.titlebar_floating_button_focus_inactive = confdir .. "/icons/titlebar/floating_focus_inactive.png"
theme.titlebar_floating_button_normal_inactive = confdir .. "/icons/titlebar/floating_normal_inactive.png"
theme.titlebar_maximized_button_focus_active = confdir .. "/icons/titlebar/maximized_focus_active.png"
theme.titlebar_maximized_button_normal_active = confdir .. "/icons/titlebar/maximized_normal_active.png"
theme.titlebar_maximized_button_focus_inactive = confdir .. "/icons/titlebar/maximized_focus_inactive.png"
theme.titlebar_maximized_button_normal_inactive = confdir .. "/icons/titlebar/maximized_normal_inactive.png"
-- }}}
-- }}}
return theme

View file

@ -1 +0,0 @@
/home/crater2150/gfx/wall/dragon.jpg

91
wibox.lua Normal file
View file

@ -0,0 +1,91 @@
-- {{{ Reusable separators
spacer = widget({ type = "textbox", name = "spacer" })
spacer.text = " "
separator = widget({ type = "textbox", name = "separator", align = "center" })
separator.text = " )( "
-- }}}
-- {{{ Wibox
--popup run
-- Create a textclock widget
--clock = awful.widget.textclock({ align = "right" })
mysystray = widget({ type = "systray" })
clock = widget({ type = "textbox" })
vicious.register(clock, vicious.widgets.date, "%b %d, %R", 60)
memwidget = widget({ type = "textbox" })
vicious.register(memwidget, vicious.widgets.mem, "⌸ $1% ($2MB / $3MB) ", 13)
--batwidget = obvious.battery();
batwidget = widget({ type = "textbox" })
vicious.register(batwidget, vicious.widgets.bat, "⌁ $1$2% - $3", 61)
cpuwidget = awful.widget.progressbar()
cpulabel = widget({ type = "textbox" })
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",41)
vicious.register(cpulabel, vicious.widgets.cpu, "CPU: $1%")
wlanwidget = widget({ type = "textbox" })
vicious.register(wlanwidget, vicious.widgets.wifi, "WLAN ${ssid} @ ${sign}, Q:${link}/70", 31, "wlan0")
-- Create a wibox for each screen and add it
leftwibox = {}
rightwibox = {}
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)
)
for s = 1, screen.count() do
-- 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 the wibox
leftwibox[s] = awful.wibox({ position = "left", screen = s })
rightwibox[s] = awful.wibox({ position = "right", screen = s })
-- Add widgets to the wibox - order matters
leftwibox[s].widgets = {
mytaglist[s],
mylayoutbox[s],
spacer,
layout = awful.widget.layout.horizontal.rightleft
}
rightwibox[s].widgets = {
{
clock,
separator, spacer, memwidget,
separator, spacer, batwidget,
separator, spacer, wlanwidget,
separator, spacer, cpulabel, cpuwidget,
spacer,
layout = awful.widget.layout.horizontal.leftright
},
separator, spacer, s == 1 and mysystray or nil,
layout = awful.widget.layout.horizontal.leftright
}
end
-- }}}

View file

@ -1,848 +0,0 @@
---------------------------------------------------------------------------
-- Wicked widgets for the awesome window manager
---------------------------------------------------------------------------
-- Lucas de Vries <lucas@glacicle.com>
-- Licensed under the WTFPL
-- Version: v1.0pre-awe3.0rc4
---------------------------------------------------------------------------
-- Require libs
require("awful")
---- {{{ Grab environment
local ipairs = ipairs
local pairs = pairs
local print = print
local type = type
local tonumber = tonumber
local tostring = tostring
local math = math
local table = table
local awful = awful
local os = os
local io = io
local string = string
-- Grab C API
local capi =
{
awesome = awesome,
screen = screen,
client = client,
mouse = mouse,
button = button,
titlebar = titlebar,
widget = widget,
hooks = hooks,
keygrabber = keygrabber
}
-- }}}
-- Wicked: Widgets for the awesome window manager
module("wicked")
---- {{{ Initialise variables
local registered = {}
local widget_cache = {}
-- Initialise function tables
widgets = {}
helper = {}
local nets = {}
local cpu_total = {}
local cpu_active = {}
local cpu_usage = {}
-- }}}
---- {{{ Helper functions
----{{{ Max width
function helper.max_width(str, width)
l = str:len()
if l > width then
r = math.floor(width/2)
a = str:sub(1,r)
b = str:sub(l-r, l)
str = a .. "..." .. b
end
return str
end
----}}}
----{{{ Force a fixed width on a string with spaces
function helper.fixed_width(str, width)
l = str:len()
n = width-l
if n >= 0 then
for i = 1, n do
str = str.." "
end
else
str = str:sub(0, l+n)
end
return str
end
----}}}
---- {{{ Format a string with args
function helper.format(format, args)
-- TODO: Find a more efficient way to do this
-- Format a string
for var,val in pairs(args) do
format = string.gsub(format, '$'..var, val)
end
-- Return formatted string
return format
end
-- }}}
---- {{{ Padd a number to a minimum amount of digits
function helper.padd(number, padding)
s = tostring(number)
if padding == nil then
return s
end
for i=1,padding do
if math.floor(number/math.pow(10,(i-1))) == 0 then
s = "0"..s
end
end
if number == 0 then
s = s:sub(2)
end
return s
end
-- }}}
---- {{{ Convert amount of bytes to string
function helper.bytes_to_string(bytes, sec, padding)
if bytes == nil or tonumber(bytes) == nil then
return ''
end
bytes = tonumber(bytes)
signs = {}
signs[1] = ' b'
signs[2] = 'KiB'
signs[3] = 'MiB'
signs[4] = 'GiB'
signs[5] = 'TiB'
sign = 1
while bytes/1024 > 1 and signs[sign+1] ~= nil do
bytes = bytes/1024
sign = sign+1
end
bytes = bytes*10
bytes = math.floor(bytes)/10
if padding then
bytes = helper.padd(bytes*10, padding+1)
bytes = bytes:sub(1, bytes:len()-1).."."..bytes:sub(bytes:len())
end
if sec then
return tostring(bytes)..signs[sign]..'ps'
else
return tostring(bytes)..signs[sign]
end
end
-- }}}
---- {{{ Split by whitespace
function helper.splitbywhitespace(str)
values = {}
start = 1
splitstart, splitend = string.find(str, ' ', start)
while splitstart do
m = string.sub(str, start, splitstart-1)
if m:gsub(' ','') ~= '' then
table.insert(values, m)
end
start = splitend+1
splitstart, splitend = string.find(str, ' ', start)
end
m = string.sub(str, start)
if m:gsub(' ','') ~= '' then
table.insert(values, m)
end
return values
end
-- }}}
--{{{ Escape a string
function helper.escape(text)
if text then
text = text:gsub("&", "&amp;")
text = text:gsub("<", "&lt;")
text = text:gsub(">", "&gt;")
text = text:gsub("'", "&apos;")
text = text:gsub("\"", "&quot;")
end
return text
end
-- }}}
-- }}}
---- {{{ Widget types
---- {{{ MPD widget type
function widgets.mpd()
---- Get data from mpc
local nowplaying_file = io.popen('mpc')
local nowplaying = nowplaying_file:read()
-- Close the command
nowplaying_file:close()
-- Check that it's not nil
if nowplaying == nil then
return {''}
end
-- Escape
nowplaying = helper.escape(nowplaying)
-- Return it
return {nowplaying}
end
widget_cache[widgets.mpd] = {}
-- }}}
---- {{{ MOCP widget type
function widgets.mocp(format, max_width)
local playing = ''
---- Get data from mocp
local info = io.popen('mocp -i')
local state = info:read()
state = state.gsub(state, 'State: ', '')
if (state == "PLAY") then
local file = info:read()
file = file.gsub(file, 'File: ', '')
local title = info:read()
title = title.gsub(title, 'Title: ', '')
local artist = info:read()
artist = artist.gsub(artist, 'Artist: ', '')
local songtitle = info:read()
songtitle = songtitle.gsub(songtitle, 'SongTitle: ', '')
local album = info:read()
album = album.gsub(album, 'Album: ', '')
-- Try artist - (song)title
if (artist:len() > 0) then
playing = artist .. ' - ' .. (songtitle ~= '' and songtitle or title)
-- Else try title or songtitle
elseif (artist:len() == 0 and (title:len() > 0 or songtitle:len() > 0)) then
playing = (title ~= '' and title or songtitle)
-- Else use the filename
else
file = string.reverse(file)
i = string.find(file, '/')
if (i ~= nil) then
file = string.sub(file, 0, i-1)
end
playing = string.reverse(file)
end
else
playing = state
end
-- Close file
info:close()
-- Apply maximum width
if (max_width ~= nil) then
playing = helper.max_width(playing, max_width)
end
playing = helper.escape(playing)
-- Return it
return {playing}
end
widget_cache[widgets.mocp] = {}
-- }}}
---- {{{ CPU widget type
function widgets.cpu(format, padding)
-- Calculate CPU usage for all available CPUs / cores and return the
-- usage
-- Perform a new measurement
---- Get /proc/stat
local cpu_lines = {}
local cpu_usage_file = io.open('/proc/stat')
for line in cpu_usage_file:lines() do
if string.sub(line, 1, 3) == 'cpu' then
table.insert(cpu_lines, helper.splitbywhitespace(line))
end
end
cpu_usage_file:close()
---- Ensure tables are initialized correctly
while #cpu_total < #cpu_lines do
table.insert(cpu_total, 0)
end
while #cpu_active < #cpu_lines do
table.insert(cpu_active, 0)
end
while #cpu_usage < #cpu_lines do
table.insert(cpu_usage, 0)
end
---- Setup tables
total_new = {}
active_new = {}
diff_total = {}
diff_active = {}
for i,v in ipairs(cpu_lines) do
---- Calculate totals
total_new[i] = 0
for j = 2, #v do
total_new[i] = total_new[i] + v[j]
end
active_new[i] = v[2] + v[3] + v[4]
---- Calculate percentage
diff_total[i] = total_new[i] - cpu_total[i]
diff_active[i] = active_new[i] - cpu_active[i]
cpu_usage[i] = math.floor(diff_active[i] / diff_total[i] * 100)
---- Store totals
cpu_total[i] = total_new[i]
cpu_active[i] = active_new[i]
end
if padding ~= nil then
for k,v in pairs(cpu_usage) do
if type(padding) == "table" then
p = padding[k]
else
p = padding
end
cpu_usage[k] = helper.padd(cpu_usage[k], p)
end
end
return cpu_usage
end
widget_cache[widgets.cpu] = {}
-- }}}
---- {{{ Memory widget type
function widgets.mem(format, padding)
-- Return MEM usage values
local f = io.open('/proc/meminfo')
---- Get data
for line in f:lines() do
line = helper.splitbywhitespace(line)
if line[1] == 'MemTotal:' then
mem_total = math.floor(line[2]/1024)
elseif line[1] == 'MemFree:' then
free = math.floor(line[2]/1024)
elseif line[1] == 'Buffers:' then
buffers = math.floor(line[2]/1024)
elseif line[1] == 'Cached:' then
cached = math.floor(line[2]/1024)
end
end
f:close()
---- Calculate percentage
mem_free=free+buffers+cached
mem_inuse=mem_total-mem_free
mem_usepercent = math.floor(mem_inuse/mem_total*100)
if padding then
if type(padding) == "table" then
mem_usepercent = helper.padd(mem_usepercent, padding[1])
mem_inuse = helper.padd(mem_inuse, padding[2])
mem_total = helper.padd(mem_total, padding[3])
mem_free = helper.padd(mem_free, padding[4])
else
mem_usepercent = helper.padd(mem_usepercent, padding)
mem_inuse = helper.padd(mem_inuse, padding)
mem_total = helper.padd(mem_total, padding)
mem_free = helper.padd(mem_free, padding)
end
end
return {mem_usepercent, mem_inuse, mem_total, mem_free}
end
widget_cache[widgets.mem] = {}
-- }}}
---- {{{ Swap widget type
function widgets.swap(format, padding)
-- Return SWAP usage values
local f = io.open('/proc/meminfo')
---- Get data
for line in f:lines() do
line = helper.splitbywhitespace(line)
if line[1] == 'SwapTotal:' then
swap_total = math.floor(line[2]/1024)
elseif line[1] == 'SwapFree:' then
free = math.floor(line[2]/1024)
elseif line[1] == 'SwapCached:' then
cached = math.floor(line[2]/1024)
end
end
f:close()
---- Calculate percentage
swap_free=free+cached
swap_inuse=swap_total-swap_free
swap_usepercent = math.floor(swap_inuse/swap_total*100)
if padding then
if type(padding) == "table" then
swap_usepercent = helper.padd(swap_usepercent, padding[1])
swap_inuse = helper.padd(swap_inuse, padding[2])
swap_total = helper.padd(swap_total, padding[3])
swap_free = helper.padd(swap_free, padding[4])
else
swap_usepercent = helper.padd(swap_usepercent, padding)
swap_inuse = helper.padd(swap_inuse, padding)
swap_total = helper.padd(swap_total, padding)
swap_free = helper.padd(swap_free, padding)
end
end
return {swap_usepercent, swap_inuse, swap_total, swap_free}
end
widget_cache[widgets.swap] = {}
-- }}}
---- {{{ Date widget type
function widgets.date(format)
-- Get format
if format == nil then
return os.date()
else
return os.date(format)
end
end
-- }}}
---- {{{ Filesystem widget type
function widgets.fs(format, padding)
local f = io.popen('df -hP')
local args = {}
for line in f:lines() do
vars = helper.splitbywhitespace(line)
if vars[1] ~= 'Filesystem' and #vars == 6 then
vars[5] = vars[5]:gsub('%%','')
if padding then
if type(padding) == "table" then
vars[2] = helper.padd(vars[2], padding[1])
vars[3] = helper.padd(vars[3], padding[2])
vars[4] = helper.padd(vars[4], padding[3])
vars[5] = helper.padd(vars[5], padding[4])
else
vars[2] = helper.padd(vars[2], padding)
vars[3] = helper.padd(vars[3], padding)
vars[4] = helper.padd(vars[4], padding)
vars[5] = helper.padd(vars[5], padding)
end
end
args['{'..vars[6]..' size}'] = vars[2]
args['{'..vars[6]..' used}'] = vars[3]
args['{'..vars[6]..' avail}'] = vars[4]
args['{'..vars[6]..' usep}'] = vars[5]
end
end
f:close()
return args
end
-- }}}
---- {{{ Net widget type
function widgets.net(format, padding)
local f = io.open('/proc/net/dev')
args = {}
for line in f:lines() do
line = helper.splitbywhitespace(line)
local p = line[1]:find(':')
if p ~= nil then
name = line[1]:sub(0,p-1)
line[1] = line[1]:sub(p+1)
if tonumber(line[1]) == nil then
line[1] = line[2]
line[9] = line[10]
end
if padding then
args['{'..name..' rx}'] = helper.bytes_to_string(line[1], nil, padding)
args['{'..name..' tx}'] = helper.bytes_to_string(line[9], nil, padding)
else
args['{'..name..' rx}'] = helper.bytes_to_string(line[1])
args['{'..name..' tx}'] = helper.bytes_to_string(line[9])
end
args['{'..name..' rx_b}'] = math.floor(line[1]*10)/10
args['{'..name..' tx_b}'] = math.floor(line[9]*10)/10
args['{'..name..' rx_kb}'] = math.floor(line[1]/1024*10)/10
args['{'..name..' tx_kb}'] = math.floor(line[9]/1024*10)/10
args['{'..name..' rx_mb}'] = math.floor(line[1]/1024/1024*10)/10
args['{'..name..' tx_mb}'] = math.floor(line[9]/1024/1024*10)/10
args['{'..name..' rx_gb}'] = math.floor(line[1]/1024/1024/1024*10)/10
args['{'..name..' tx_gb}'] = math.floor(line[9]/1024/1024/1024*10)/10
if nets[name] == nil then
nets[name] = {}
args['{'..name..' down}'] = 'n/a'
args['{'..name..' up}'] = 'n/a'
args['{'..name..' down_b}'] = 0
args['{'..name..' up_b}'] = 0
args['{'..name..' down_kb}'] = 0
args['{'..name..' up_kb}'] = 0
args['{'..name..' down_mb}'] = 0
args['{'..name..' up_mb}'] = 0
args['{'..name..' down_gb}'] = 0
args['{'..name..' up_gb}'] = 0
nets[name].time = os.time()
else
interval = os.time()-nets[name].time
nets[name].time = os.time()
down = (line[1]-nets[name][1])/interval
up = (line[9]-nets[name][2])/interval
if padding then
args['{'..name..' down}'] = helper.bytes_to_string(down, true, padding)
args['{'..name..' up}'] = helper.bytes_to_string(up, true, padding)
else
args['{'..name..' down}'] = helper.bytes_to_string(down, true)
args['{'..name..' up}'] = helper.bytes_to_string(up, true)
end
args['{'..name..' down_b}'] = math.floor(down*10)/10
args['{'..name..' up_b}'] = math.floor(up*10)/10
args['{'..name..' down_kb}'] = math.floor(down/1024*10)/10
args['{'..name..' up_kb}'] = math.floor(up/1024*10)/10
args['{'..name..' down_mb}'] = math.floor(down/1024/1024*10)/10
args['{'..name..' up_mb}'] = math.floor(up/1024/1024*10)/10
args['{'..name..' down_gb}'] = math.floor(down/1024/1024/1024*10)/10
args['{'..name..' up_gb}'] = math.floor(up/1024/1024/1024*10)/10
end
nets[name][1] = line[1]
nets[name][2] = line[9]
end
end
f:close()
return args
end
widget_cache[widgets.net] = {}
-- }}}
---- {{{ Uptime widget type
function widgets.uptime(format, padding)
--Get uptime from /proc/uptime
local f = io.open("/proc/uptime")
uptime_line = f:read()
f:close()
args = {}
--/proc/uptime has the format "<up time> <idle time>"
if uptime_line:find(" ") ~= nil then
pend = uptime_line:find(" ",0,true)
uptime_line_part = uptime_line:sub(0,pend-1)
total_uptime = math.floor( tonumber(uptime_line_part) )
uptime_days = math.floor( total_uptime / (3600 * 24) )
uptime_hours = math.floor( ( total_uptime % (3600 * 24) ) / 3600 )
uptime_minutes = math.floor( ( ( total_uptime % (3600 * 24) ) % 3600 ) / 60 )
uptime_seconds = math.floor( ( ( total_uptime % (3600 * 24) ) % 3600) % 60 )
if padding then
if type(padding) == "table" then
total_uptime = helper.padd(total_uptime , padding[1])
uptime_days = helper.padd(uptime_days , padding[2])
uptime_hours = helper.padd(uptime_hours , padding[3])
uptime_minutes = helper.padd(uptime_minutes , padding[4])
uptime_seconds = helper.padd(uptime_seconds , padding[5])
else
total_uptime = helper.padd(total_uptime , padding)
uptime_days = helper.padd(uptime_days , padding)
uptime_hours = helper.padd(uptime_hours , padding)
uptime_minutes = helper.padd(uptime_minutes , padding)
uptime_seconds = helper.padd(uptime_seconds , padding)
end
end
end
return {total_uptime, uptime_days, uptime_hours, uptime_minutes, uptime_seconds}
end
widget_cache[widgets.uptime] = {}
-- }}}
-- For backwards compatibility: custom function
widgets["function"] = function ()
return {}
end
-- }}}
---- {{{ Main functions
---- {{{ Register widget
function register(widget, wtype, format, timer, field, padd)
local reg = {}
local widget = widget
-- Set properties
reg.type = wtype
reg.format = format
reg.timer = timer
reg.field = field
reg.padd = padd
reg.widget = widget
-- Update function
reg.update = function ()
update(widget, reg)
end
-- Default to timer=1
if reg.timer == nil then
reg.timer = 1
end
-- Allow using a string widget type
if type(reg.type) == "string" then
reg.type = widgets[reg.type]
end
-- Register reg object
regregister(reg)
-- Return reg object for reuse
return reg
end
-- }}}
-- {{{ Register from reg object
function regregister(reg)
if not reg.running then
-- Put widget in table
if registered[reg.widget] == nil then
registered[reg.widget] = {}
table.insert(registered[reg.widget], reg)
else
already = false
for w, i in pairs(registered) do
if w == reg.widget then
for k,v in pairs(i) do
if v == reg then
already = true
break
end
end
if already then
break
end
end
end
if not already then
table.insert(registered[reg.widget], reg)
end
end
-- Start timer
if reg.timer > 0 then
awful.hooks.timer.register(reg.timer, reg.update)
end
-- Initial update
reg.update()
-- Set running
reg.running = true
end
end
-- }}}
-- {{{ Unregister widget
function unregister(widget, keep, reg)
if reg == nil then
for w, i in pairs(registered) do
if w == widget then
for k,v in pairs(i) do
reg = unregister(w, keep, v)
end
end
end
return reg
end
if not keep then
for w, i in pairs(registered) do
if w == widget then
for k,v in pairs(i) do
if v == reg then
table.remove(registered[w], k)
end
end
end
end
end
awful.hooks.timer.unregister(reg.update)
reg.running = false
return reg
end
-- }}}
-- {{{ Suspend wicked, halt all widget updates
function suspend()
for w, i in pairs(registered) do
for k,v in pairs(i) do
unregister(w, true, v)
end
end
end
-- }}}
-- {{{ Activate wicked, restart all widget updates
function activate(widget)
for w, i in pairs(registered) do
if widget == nil or w == widget then
for k,v in pairs(i) do
regregister(v)
end
end
end
end
-- }}}
-- {{{ Enable caching for a widget type
function enable_caching(widget)
if widget_cache[widget] == nil then
widget_cache[widget] = {}
end
end
-- }}}
---- {{{ Update widget
function update(widget, reg, disablecache)
-- Check if there are any equal widgets
if reg == nil then
for w, i in pairs(registered) do
if w == widget then
for k,v in pairs(i) do
update(w, v, disablecache)
end
end
end
return
end
local t = os.time()
local data = {}
-- Check if we have output chached for this widget,
-- newer than last widget update.
if widget_cache[reg.type] ~= nil then
local c = widget_cache[reg.type]
if c.time == nil or c.time <= t-reg.timer or disablecache then
c.time = t
c.data = reg.type(reg.format, reg.padd)
end
data = c.data
else
data = reg.type(reg.format, reg.padd)
end
if type(data) == "table" then
if type(reg.format) == "string" then
data = helper.format(reg.format, data)
elseif type(reg.format) == "function" then
data = reg.format(widget, data)
end
end
if reg.field == nil then
widget.text = data
elseif widget.plot_data_add ~= nil then
widget:plot_data_add(reg.field, tonumber(data))
elseif widget.bar_data_add ~= nil then
widget:bar_data_add(reg.field, tonumber(data))
end
return data
end
-- }}}
-- }}}
-- vim: set filetype=lua fdm=marker tabstop=4 shiftwidth=4 nu:

View file

@ -1,141 +0,0 @@
-------------------------------
-- "Zenburn" awesome theme --
-- By Adrian C. (anrxc) --
-------------------------------
-- {{{ Main
theme = {}
theme.confdir = awful.util.getdir("config")
theme.wallpaper_cmd = { "/usr/bin/nitrogen --restore" }
--theme.wallpaper_cmd = { "awsetbg /usr/share/awesome/themes/zenburn/zenburn-background.png" }
-- }}}
-- {{{ Styles
theme.font = "Profont 8"
-- {{{ Colors
theme.fg_normal = "#DCDCCC"
theme.fg_focus = "#F0DFAF"
theme.fg_urgent = "#CC9393"
theme.bg_normal = "#3F3F3F"
theme.bg_focus = "#1E2320"
theme.bg_urgent = "#ff0000"
-- }}}
-- {{{ Borders
theme.border_width = "1"
theme.border_normal = "#3F3F3F"
theme.border_focus = "#6F6F6F"
theme.border_marked = "#CC9393"
-- }}}
-- {{{ Titlebars
theme.titlebar_bg_focus = "#3F3F3F"
theme.titlebar_bg_normal = "#3F3F3F"
-- theme.titlebar_[normal|focus]
-- }}}
-- {{{ Widgets
theme.fg_widget = "#AECF96"
theme.fg_center_widget = "#88A175"
theme.fg_end_widget = "#FF5656"
theme.fg_off_widget = "#494B4F"
theme.fg_netup_widget = "#7F9F7F"
theme.fg_netdn_widget = "#CC9393"
theme.bg_widget = "#3F3F3F"
theme.border_widget = "#3F3F3F"
-- }}}
-- {{{ Mouse finder
theme.mouse_finder_color = "#CC9393"
-- theme.mouse_finder_[timeout|animate_timeout|radius|factor]
-- }}}
-- {{{ Tooltips
-- theme.tooltip_[font|opacity|fg_color|bg_color|border_width|border_color]
-- }}}
-- {{{ Taglist and Tasklist
-- theme.[taglist|tasklist]_[bg|fg]_[focus|urgent]
-- }}}
-- {{{ Menu
-- theme.menu_[bg|fg]_[normal|focus]
-- theme.menu_[height|width|border_color|border_width]
-- }}}
-- }}}
-- {{{ Icons
--
-- {{{ Taglist icons
theme.taglist_squares_sel = theme.confdir .. "/icons/taglist/squarefz.png"
theme.taglist_squares_unsel = theme.confdir .. "/icons/taglist/squareza.png"
--theme.taglist_squares_resize = "false"
-- }}}
-- {{{ Misc icons
--theme.awesome_icon = theme.confdir .. "/icons/awesome.png"
--theme.menu_submenu_icon = "/usr/share/awesome/themes/default/submenu.png"
--theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/floatingw.png"
-- }}}
-- {{{ Layout icons
theme.layout_tile = theme.confdir .. "/icons/layouts/tile.png"
theme.layout_tileleft = theme.confdir .. "/icons/layouts/tileleft.png"
theme.layout_tilebottom = theme.confdir .. "/icons/layouts/tilebottom.png"
theme.layout_tiletop = theme.confdir .. "/icons/layouts/tiletop.png"
theme.layout_fairv = theme.confdir .. "/icons/layouts/fairv.png"
theme.layout_fairh = theme.confdir .. "/icons/layouts/fairh.png"
theme.layout_spiral = theme.confdir .. "/icons/layouts/spiral.png"
theme.layout_dwindle = theme.confdir .. "/icons/layouts/dwindle.png"
theme.layout_max = theme.confdir .. "/icons/layouts/max.png"
theme.layout_fullscreen = theme.confdir .. "/icons/layouts/fullscreen.png"
theme.layout_magnifier = theme.confdir .. "/icons/layouts/magnifier.png"
theme.layout_floating = theme.confdir .. "/icons/layouts/floating.png"
-- }}}
-- {{{ Widget icons
theme.widget_cpu = theme.confdir .. "/icons/cpu.png"
theme.widget_bat = theme.confdir .. "/icons/bat.png"
theme.widget_mem = theme.confdir .. "/icons/mem.png"
theme.widget_fs = theme.confdir .. "/icons/disk.png"
theme.widget_net = theme.confdir .. "/icons/down.png"
theme.widget_netup = theme.confdir .. "/icons/up.png"
theme.widget_mail = theme.confdir .. "/icons/mail.png"
theme.widget_vol = theme.confdir .. "/icons/vol.png"
theme.widget_org = theme.confdir .. "/icons/cal.png"
theme.widget_date = theme.confdir .. "/icons/time.png"
theme.widget_crypto = theme.confdir .. "/icons/crypto.png"
-- }}}
-- {{{ Titlebar icons
theme.titlebar_close_button_focus = theme.confdir .. "/icons/titlebar/close_focus.png"
theme.titlebar_close_button_normal = theme.confdir .. "/icons/titlebar/close_normal.png"
theme.titlebar_ontop_button_focus_active = theme.confdir .. "/icons/titlebar/ontop_focus_active.png"
theme.titlebar_ontop_button_normal_active = theme.confdir .. "/icons/titlebar/ontop_normal_active.png"
theme.titlebar_ontop_button_focus_inactive = theme.confdir .. "/icons/titlebar/ontop_focus_inactive.png"
theme.titlebar_ontop_button_normal_inactive = theme.confdir .. "/icons/titlebar/ontop_normal_inactive.png"
theme.titlebar_sticky_button_focus_active = theme.confdir .. "/icons/titlebar/sticky_focus_active.png"
theme.titlebar_sticky_button_normal_active = theme.confdir .. "/icons/titlebar/sticky_normal_active.png"
theme.titlebar_sticky_button_focus_inactive = theme.confdir .. "/icons/titlebar/sticky_focus_inactive.png"
theme.titlebar_sticky_button_normal_inactive = theme.confdir .. "/icons/titlebar/sticky_normal_inactive.png"
theme.titlebar_floating_button_focus_active = theme.confdir .. "/icons/titlebar/floating_focus_active.png"
theme.titlebar_floating_button_normal_active = theme.confdir .. "/icons/titlebar/floating_normal_active.png"
theme.titlebar_floating_button_focus_inactive = theme.confdir .. "/icons/titlebar/floating_focus_inactive.png"
theme.titlebar_floating_button_normal_inactive = theme.confdir .. "/icons/titlebar/floating_normal_inactive.png"
theme.titlebar_maximized_button_focus_active = theme.confdir .. "/icons/titlebar/maximized_focus_active.png"
theme.titlebar_maximized_button_normal_active = theme.confdir .. "/icons/titlebar/maximized_normal_active.png"
theme.titlebar_maximized_button_focus_inactive = theme.confdir .. "/icons/titlebar/maximized_focus_inactive.png"
theme.titlebar_maximized_button_normal_inactive = theme.confdir .. "/icons/titlebar/maximized_normal_inactive.png"
-- }}}
-- }}}
return theme

View file

@ -8,19 +8,19 @@
-- {{{ Main -- {{{ Main
theme = {} theme = {}
theme.wallpaper_cmd = { "awsetbg -a /home/crater2150/.config/awesome/wallpaper" } theme.wallpaper_cmd = { "nitrogen --restore" }
-- }}} -- }}}
-- {{{ Styles -- {{{ Styles
theme.font = "sans 8" theme.font = "sans 8"
-- {{{ Colors -- {{{ Colors
theme.fg_normal = "#DCDCCC" theme.fg_normal = "#DCDCDC"
theme.fg_focus = "#F0DFAF" theme.fg_focus = "#F0DFAF"
theme.fg_urgent = "#CC9393" theme.fg_urgent = "#CC9393"
theme.bg_normal = "#3F3F3F" theme.bg_normal = "#121212"
theme.bg_focus = "#1E2320" theme.bg_focus = "#3F3F3F"
theme.bg_urgent = "#3F3F3F" theme.bg_urgent = "#DA4E4E"
-- }}} -- }}}
-- {{{ Borders -- {{{ Borders
@ -83,12 +83,12 @@ theme.tasklist_floating_icon = "/usr/share/awesome/themes/default/tasklist/float
-- }}} -- }}}
-- {{{ Layout -- {{{ Layout
theme.layout_tile = "/usr/share/awesome/themes/zenburn/layouts/tile.png" theme.layout_tiletop = "/usr/share/awesome/themes/zenburn/layouts/tile.png"
theme.layout_tileleft = "/usr/share/awesome/themes/zenburn/layouts/tileleft.png" theme.layout_tilebottom = "/usr/share/awesome/themes/zenburn/layouts/tileleft.png"
theme.layout_tilebottom = "/usr/share/awesome/themes/zenburn/layouts/tilebottom.png" theme.layout_tile = "/usr/share/awesome/themes/zenburn/layouts/tilebottom.png"
theme.layout_tiletop = "/usr/share/awesome/themes/zenburn/layouts/tiletop.png" theme.layout_tileleft = "/usr/share/awesome/themes/zenburn/layouts/tiletop.png"
theme.layout_fairv = "/usr/share/awesome/themes/zenburn/layouts/fairv.png" theme.layout_fairh = "/usr/share/awesome/themes/zenburn/layouts/fairv.png"
theme.layout_fairh = "/usr/share/awesome/themes/zenburn/layouts/fairh.png" theme.layout_fairv = "/usr/share/awesome/themes/zenburn/layouts/fairh.png"
theme.layout_spiral = "/usr/share/awesome/themes/zenburn/layouts/spiral.png" theme.layout_spiral = "/usr/share/awesome/themes/zenburn/layouts/spiral.png"
theme.layout_dwindle = "/usr/share/awesome/themes/zenburn/layouts/dwindle.png" theme.layout_dwindle = "/usr/share/awesome/themes/zenburn/layouts/dwindle.png"
theme.layout_max = "/usr/share/awesome/themes/zenburn/layouts/max.png" theme.layout_max = "/usr/share/awesome/themes/zenburn/layouts/max.png"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 339 B

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 337 B

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 333 B

After

Width:  |  Height:  |  Size: 333 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 B

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

After

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 329 B