Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)
Paste
Pasted as Lua by mdm ( 17 years ago )
-- Standard awesome library
require("awful")
-- Theme handling library
require("beautiful")
-- Notification library
require("naughty")
require("tabulous")
-- Widgets library
require("wicked")
theme_path = "/home/mdm/.config/awesome/themes/dyned"
-- Actually load theme
beautiful.init(theme_path)
-- This is used later as the default terminal and editor to run.
terminal = "urxvt"
editor = os.getenv("EDITOR") or "vim"
editor_cmd = terminal .. " -e " .. editor
-- Default modkey
modkey = "Mod4"
-- 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.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)
-- xterm -name mocp -e mocp
floatapps =
{
-- by class
["gimp"] = false,
["MPlayer"] = 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 = 1 },
["Iceweasel"] = { screen = 1, tag = 1 },
["Pidgin"] = { screen = 1, tag = 2 },
["gajim.py"] = { screen = 1, tag = 2 },
["gvim"] = { screen = 1, tag = 3 },
["Geany"] = { screen = 1, tag = 3 },
["urxvt"] = { screen = 1, tag = 4 },
["gimp"] = { screen = 1, tag = 5 },
["gimp-remote"] = { screen = 1, tag = 5 },
["digikam"] = { screen = 1, tag = 5 },
["soffice"] = { screen = 1, tag = 6 },
["FBReader"] = { screen = 1, tag = 6 },
["Skype"] = { screen = 1, tag = 7 },
["pcmanfm"] = { screen = 1, tag = 7 }
}
-- Define if we want to use titlebar on all applications.
use_titlebar = false
tagnames = {"1:web", "2:im", "3:dev", "4:term", "Q:gimp", "W:ofs", "E:nil"}
taglayouts = {
awful.layout.suit.max, --web
awful.layout.suit.tile, --im
awful.layout.suit.max, --dev
awful.layout.suit.fair.horizontal, --term
awful.layout.suit.tile, --gimp
awful.layout.suit.max, --office
awful.layout.suit.tile --nil
}
tagmwfacts = {
0.5, --web
0.189, --im
0.5, --dev
0.5, --term
0.5, --gimp
0.5, --office
0.5 --nil
}
tags = {}
for s = 1, screen.count() do
tags[s] = {}
for tagnumber = 1, 7 do
tags[s][tagnumber] = tag({ name = tagnames[tagnumber]})
tags[s][tagnumber].screen = s
awful.layout.set(taglayouts[tagnumber], tags[s][tagnumber])
awful.tag.setmwfact(tagmwfacts[tagnumber], tags[s][tagnumber])
end
tags[s][1].selected = true
end
-- {{{ Wibox
-- Create a laucher widget and a main menu
awmenu = {
{ "manual", terminal .. " -e man awesome" },
{ "edit config", editor_cmd .. " " .. awful.util.getdir("config") .. "/rc.lua" },
{ "restart", awesome.restart },
{ "quit", awesome.quit }
}
sysmenu = {
{ "Halt", "sudo halt" },
{ "Reboot", "sudo reboot" }
}
officemenu = {
{ "OOo Office", "ooffice" },
{ "OOo Base", "oobase" },
{ "OOo Writer", "oowriter" },
{ "OOo Calc", "oocalc" },
{ "OOo Draw", "oodraw" },
{ "OOo Impress", "ooimpress" },
{ "OOo Math", "oomath" },
{ "OOo Printer Administration", "ooffice-printeradmin" }
}
mymainmenu = awful.menu.new({ items = {
{ "Firefox", "firefox" },
{ "Gajim", "gajim" },
{ "Pidgin", "pidgin" },
{ "GVIM", "gvim" },
{ "Geany", "geany" },
{ "URxvt", "urxvt" },
{ "Xterm", "xterm" },
{ "ALSA mixer", terminal .. " -e alsamixer" },
{ "DigiKam", "digikam" },
{ "The GIMP", "gimp" },
{ "FBReader", "FBReader" },
{ "Office", officemenu },
{ "PCmanFM", "pcmanfm" },
{ "Skype", "skype" },
{ "GQView", "gqview" },
{ "Xcalc", "xcalc" },
{ "OpenTTD", "openttd" },
{ "Awesome", awmenu },
{ "System", sysmenu }
} })
-- Create a systray
mysystray = widget({ type = "systray", align = "right" })
-- Create a wibox for each screen and add it
bar = {}
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) }
mytasklist = {}
mytasklist.buttons = { button({ }, 1, function (c)
if not c:isvisible() then
awful.tag.viewonly(c:tags()[1])
end
client.focus = c
c:raise()
end),
button({ }, 3, function () if instance then instance:hide() end instance = 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", align = "left", fg = "beautiful.fg_focus" })
-- 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)
--RAM usage widget
memwidget = widget({
type = 'textbox',
name = 'memwidget',
align = "right"
})
wicked.register(memwidget, wicked.widgets.mem, 'M:<span color="#cccccc">$1%</span>')
--CPU usage widget
cpuwidget = widget({
type = 'textbox',
name = 'cpuwidget',
align = "right"
})
wicked.register(cpuwidget, wicked.widgets.cpu, 'C:<span color="#cccccc">$1%</span>')
-- Date widget
datewidget = widget({ type = 'textbox', name = 'datewidget', align = 'right'})
wicked.register(datewidget, wicked.widgets.date,'<span color="#909090">%d.%m <span color="#cccccc">%H:%M</span> %a</span>')
-- Battery widget
batwidget = widget({ type = 'textbox', name = 'batwidget', align = 'right'})
-- function run_script()
-- local pc = io.popen('bat_prec')
-- local p = pc:read()
-- pc:close()
-- local sc = io.popen('bat_state')
-- local s = sc:read()
-- sc:close()
-- return {p,s}
-- end
function run_script()
local pc = io.popen('batt')
local p = pc:read()
pc:close()
return {p}
end
wicked.register(batwidget, run_script, "$1\%</span>", 60)
-- Spacer widget
spacer = widget({ type = "textbox", name = "spacer"})
spacer.text = (" ")
rspacer = widget({ type = "textbox", name = "rspacer",align = "right" })
rspacer.text = (" ")
-- Create the wibox
mywibox[s] = wibox({ position = "bottom", height = 12, fg = beautiful.fg_normal, bg = beautiful.bg_normal })
-- Add widgets to the wibox - order matters
mywibox[s].widgets = { mytaglist[s],
mylayoutbox[s],
mypromptbox[s],
spacer,
mytasklist[s],
cpuwidget,
rspacer,
memwidget,
rspacer,
batwidget,
rspacer,
datewidget,
rspacer,
mysystray
}
mywibox[s].screen = s
end
-- }}}
-- {{{ Mouse bindings
root.buttons({
button({ }, 3, function () mymainmenu:toggle() end),
button({ }, 4, awful.tag.viewnext),
button({ }, 5, awful.tag.viewprev)
})
-- }}}
-- {{{ Key bindings
globalkeys =
{
key({ modkey, }, "Left", awful.tag.viewprev ),
key({ modkey, }, "Right", awful.tag.viewnext ),
key({ modkey, }, "Escape", awful.tag.history.restore),
key({ modkey, }, "j",
function ()
awful.client.focus.byidx( 1)
if client.focus then client.focus:raise() end
end),
key({ modkey, }, "k",
function ()
awful.client.focus.byidx(-1)
if client.focus then client.focus:raise() end
end),
-- Layout manipulation
key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end),
key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end),
key({ modkey, "Control" }, "j", function () awful.screen.focus( 1) end),
key({ modkey, "Control" }, "k", function () awful.screen.focus(-1) end),
key({ modkey, }, "u", awful.client.urgent.jumpto),
key({ modkey, }, "Tab",
function ()
awful.client.focus.history.previous()
if client.focus then
client.focus:raise()
end
end),
-- Standard program
key({ "Mod1", "Control" }, "r", awesome.restart),
key({ "Mod1", "Control" }, "q", awesome.quit),
key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end),
key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end),
key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end),
key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end),
key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end),
key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end),
key({ modkey, }, "space", function () awful.layout.inc(layouts, 1) end),
key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
-- Prompt
key({ modkey }, "F1",
function ()
awful.prompt.run({ prompt = " Run: " },
mypromptbox[mouse.screen],
awful.util.spawn, awful.completion.bash,
awful.util.getdir("cache") .. "/history")
end),
key({ 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),
}
-- Client awful tagging: this is useful to tag some clients and then do stuff like move to tag on them
clientkeys =
{
key({ modkey, "Shift" }, "c", function (c) c:kill() end),
key({ modkey, "Control" }, "space", awful.client.floating.toggle ),
key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end),
key({ modkey, }, "o", awful.client.movetoscreen ),
key({ modkey, "Shift" }, "r", function (c) c:redraw() end),
key({ modkey }, "t", awful.client.togglemarked),
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
tagkeys = {"1","2","3","4","q","w","e","r"}
for i = 1, keynumber do
table.insert(globalkeys,
key({ modkey }, tagkeys[i],
function ()
local screen = mouse.screen
if tags[screen][i] then
awful.tag.viewonly(tags[screen][i])
end
end))
table.insert(globalkeys,
key({ modkey, "Control" }, tagkeys[i],
function ()
local screen = mouse.screen
if tags[screen][i] then
tags[screen][i].selected = not tags[screen][i].selected
end
end))
table.insert(globalkeys,
key({ modkey, "Shift" }, tagkeys[i],
function ()
if client.focus and tags[client.focus.screen][i] then
awful.client.movetotag(tags[client.focus.screen][i])
end
end))
table.insert(globalkeys,
key({ modkey, "Control", "Shift" }, tagkeys[i],
function ()
if client.focus and tags[client.focus.screen][i] then
awful.client.toggletag(tags[client.focus.screen][i])
end
end))
end
for i = 1, keynumber do
table.insert(globalkeys, key({ modkey, "Shift" }, "F" .. tagkeys[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({
button({ }, 1, function (c) client.focus = c; c:raise() end),
button({ modkey }, 1, awful.mouse.client.move),
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] then
awful.client.floating.set(c, floatapps[cls])
elseif floatapps[inst] 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
-- 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.
-- c.honorsizehints = false
-- (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)
Revise this Paste