summaryrefslogtreecommitdiffstats
path: root/.config/awesome
diff options
context:
space:
mode:
authorFlorian Pritz <f-p@gmx.at>2009-02-24 19:07:36 +0100
committerFlorian Pritz <f-p@gmx.at>2009-02-24 19:07:36 +0100
commit710bac948e5f471f1b8960f746aa19c8c1d29734 (patch)
tree630647803952e0289eb02f403b3359806413e94c /.config/awesome
parent26575ccfd7936a56592aa96f8308d333fb0644ff (diff)
downloaddotfiles-710bac948e5f471f1b8960f746aa19c8c1d29734.tar.gz
dotfiles-710bac948e5f471f1b8960f746aa19c8c1d29734.tar.xz
added more files
Diffstat (limited to '.config/awesome')
-rw-r--r--.config/awesome/rc.lua504
1 files changed, 504 insertions, 0 deletions
diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
new file mode 100644
index 0000000..508a17f
--- /dev/null
+++ b/.config/awesome/rc.lua
@@ -0,0 +1,504 @@
+-- awesome 3 configuration file
+
+-- Include awesome library, with lots of useful function!
+require("awful")
+require("tabulous")
+require("beautiful")
+require("wicked")
+
+-- {{{ Variable definitions
+-- This is a file path to a theme file which will defines colors.
+theme_path = "/home/flo/.themes/awesome/default"
+
+-- This is used later as the default terminal to run.
+terminal = "urxvtc"
+
+-- 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"
+
+statusbar_color = "#456BC9"
+
+
+-- Table of layouts to cover with awful.layout.inc, order matters.
+layouts =
+{
+ "tile",
+ "tileleft",
+ "tilebottom",
+ "tiletop",
+ "fairh",
+ "fairv",
+ "magnifier",
+ "max",
+ "spiral",
+ "dwindle",
+ "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,
+ ["pinentry"] = true,
+ ["pinentry-gtk-2"] = true,
+ ["gimp"] = true,
+ ["gajim.py"] = true,
+ -- by instance
+ ["mocp"] = true,
+ ["gxmessage"] = 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 },
+ ["Thunderbird"] = { screen = 1, tag = 3 },
+ -- ["mocp"] = { screen = 2, tag = 4 },
+}
+
+-- Define if we want to use titlebar on all applications.
+use_titlebar = false
+-- }}}
+
+-- {{{ Initialization
+-- Initialize theme (colors).
+beautiful.init(theme_path)
+
+-- Register theme in awful.
+-- This allows to not pass plenty of arguments to each function
+-- to inform it about colors we want it to draw.
+#awful.beautiful.register(beautiful)
+
+-- Uncomment this to activate autotabbing
+-- tabulous.autotab_start()
+-- }}}
+
+-- {{{ Tags
+-- Define tags table.
+tags = {}
+for s = 1, screen.count() do
+ -- Each screen has its own tag table.
+ tags[s] = {}
+ -- Create 9 tags per screen.
+ names = {'misc', 'dev', 'mail', 'ssh', 'code', 'hw'}
+ for tagnumber = 1, 6 do
+ tags[s][tagnumber] = tag({ name = names[tagnumber], layout = layouts[1] })
+ -- Add tags to screen one by one
+ tags[s][tagnumber].screen = s
+ end
+ -- I'm sure you want to see at least one tag.
+ tags[s][1].selected = true
+end
+-- }}}
+
+-- {{{ Statusbar
+-- Create a taglist widget
+mytaglist = widget({ type = "taglist", name = "mytaglist" })
+mytaglist:mouse_add(mouse({}, 1, function (object, tag) awful.tag.viewonly(tag) end))
+mytaglist:mouse_add(mouse({ modkey }, 1, function (object, tag) awful.client.movetotag(tag) end))
+mytaglist:mouse_add(mouse({}, 3, function (object, tag) tag.selected = not tag.selected end))
+mytaglist:mouse_add(mouse({ modkey }, 3, function (object, tag) awful.client.toggletag(tag) end))
+mytaglist:mouse_add(mouse({ }, 4, awful.tag.viewnext))
+mytaglist:mouse_add(mouse({ }, 5, awful.tag.viewprev))
+mytaglist.label = awful.widget.taglist.label.all
+
+-- Create a tasklist widget
+--mytasklist = widget({ type = "tasklist", name = "mytasklist" })
+--mytasklist:mouse_add(mouse({ }, 1, function (object, c) client.focus = c; c:raise() end))
+--mytasklist:mouse_add(mouse({ }, 4, function () awful.client.focusbyidx(1) end))
+--mytasklist:mouse_add(mouse({ }, 5, function () awful.client.focusbyidx(-1) end))
+--mytasklist.label = awful.widget.tasklist.label.currenttags
+
+-- sysstatus
+mysysstatus = widget ({ type = "textbox", name = "mytextbox", align="left"})
+-- default text
+mysysstatus.text = "<bg image=\"/usr/share/awesome/icons/awesome16.png\" resize=\"true\"/>"
+
+-- network status
+netwidget = widget({
+ type = 'textbox',
+ name = 'netwidget',
+ align = 'right'
+})
+
+wicked.register(netwidget, wicked.widgets.net,
+ ' | <span color="' .. statusbar_color .. '">Net</span>: ${eth0 down}/${eth0 up} | <span color="' .. statusbar_color .. '">Total:</span> ${eth0 rx}/ ${eth0 tx}',
+nil, nil, 0)
+
+-- FS usage
+fswidget = widget({
+ type = 'textbox',
+ name = 'fswidget',
+ align = 'right'
+})
+
+wicked.register(fswidget, wicked.widgets.fs,
+ ' <span color="' .. statusbar_color .. '">FS:</span> /: ${/ usep}% /data: ${/mnt/data usep}% /home: ${/home usep}%', 20)
+
+-- Create a textbox widget
+mytextbox = widget({ type = "textbox", name = "mytextbox", align="right" })
+-- Set the default text in textbox
+mytextbox.text = "<b><small> awesome " .. AWESOME_VERSION .. " </small></b>"
+mypromptbox = widget({ type = "textbox", name = "mypromptbox", align = "left" })
+
+-- Create a launcher widget
+--mylauncher.awful.widget.launcher({ name = "mylauncher",
+-- image = "/usr/share/awesome/icons/awesome16.png",
+-- command = terminal .. "-e man awesome" })
+
+-- Create a systray
+mysystray = widget({ type = "systray", name = "mysystray", align = "right" })
+
+-- Create an iconbox widget which will contains an icon indicating which layout we're using.
+-- We need one layoutbox per screen.
+mylayoutbox = {}
+for s = 1, screen.count() do
+ mylayoutbox[s] = widget({ type = "textbox", name = "mylayoutbox", align = "right" })
+ mylayoutbox[s]:mouse_add(mouse({ }, 1, function () awful.layout.inc(layouts, 1) end))
+ mylayoutbox[s]:mouse_add(mouse({ }, 3, function () awful.layout.inc(layouts, -1) end))
+ mylayoutbox[s]:mouse_add(mouse({ }, 4, function () awful.layout.inc(layouts, 1) end))
+ mylayoutbox[s]:mouse_add(mouse({ }, 5, function () awful.layout.inc(layouts, -1) end))
+ mylayoutbox[s].text = "<bg image=\"/usr/share/awesome/icons/layouts/tilew.png\" resize=\"true\"/>"
+end
+
+-- Create a statusbar for each screen and add it
+mystatusbar = {}
+mystatusbar_bot = {}
+for s = 1, screen.count() do
+ mystatusbar[s] = statusbar({ position = "top", name = "mystatusbar" .. s,
+ fg = beautiful.fg_normal, bg = beautiful.bg_normal })
+ mystatusbar_bot[s] = statusbar({ position = "bottom", name = "mystatusbar_bot" .. s,
+ fg = beautiful.fg_normal, bg = beautiful.bg_normal, height="12" })
+ -- Add widgets to the statusbar - order matters
+ mystatusbar[s]:widgets({
+ mytaglist,
+ mypromptbox,
+-- mysysstatus,
+-- fswidget,
+-- netwidget,
+ mytextbox,
+ mylayoutbox[s],
+ s == 1 and mysystray or nil
+ })
+
+ mystatusbar_bot[s]:widgets({
+ mysysstatus,
+ fswidget,
+ netwidget
+ })
+ mystatusbar[s].screen = s
+ mystatusbar_bot[s].screen = s
+end
+-- }}}
+
+-- {{{ Mouse bindings
+awesome.mouse_add(mouse({ }, 3, function () awful.spawn(terminal) end))
+awesome.mouse_add(mouse({ }, 4, awful.tag.viewnext))
+awesome.mouse_add(mouse({ }, 5, awful.tag.viewprev))
+-- }}}
+
+-- {{{ Key bindings
+
+-- 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 ()
+ local sel = client.focus
+ if sel then
+ if tags[sel.screen][i] then
+ awful.client.movetotag(tags[sel.screen][i])
+ end
+ end
+ end):add()
+ keybinding({ modkey, "Control", "Shift" }, i,
+ function ()
+ local sel = client.focus
+ if sel then
+ if tags[sel.screen][i] then
+ awful.client.toggletag(tags[sel.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()
+
+-- Standard program
+keybinding({ modkey }, "Return", function () awful.spawn(terminal) end):add()
+
+keybinding({ modkey, "Control" }, "r", awesome.restart):add()
+keybinding({ modkey, "Shift" }, "q", awesome.quit):add()
+
+-- Client manipulation
+keybinding({ modkey }, "m", awful.client.maximize):add()
+keybinding({ modkey, "Shift" }, "c", function () client.focus:kill() end):add()
+keybinding({ modkey }, "j", function () awful.client.focusbyidx(1); client.focus:raise() end):add()
+keybinding({ modkey }, "k", function () awful.client.focusbyidx(-1); client.focus:raise() end):add()
+keybinding({ modkey, "Shift" }, "j", function () awful.client.swap(1) end):add()
+keybinding({ modkey, "Shift" }, "k", function () awful.client.swap(-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 () client.focus:swap(awful.client.master()) 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 () client.focus:redraw() 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()
+
+-- Prompt
+keybinding({ modkey }, "F1", function ()
+ awful.prompt.run({ prompt = "Run: " }, mypromptbox, awful.spawn, awful.completion.bash,
+os.getenv("HOME") .. "/.cache/awesome/history") end):add()
+keybinding({ modkey }, "F4", function ()
+ awful.prompt.run({ prompt = "Run Lua code: " }, mypromptbox, awful.eval, awful.prompt.bash,
+os.getenv("HOME") .. "/.cache/awesome/history_eval") end):add()
+keybinding({ modkey, "Ctrl" }, "i", function ()
+ if mypromptbox.text then
+ mypromptbox.text = nil
+ else
+ mypromptbox.text = nil
+ if client.focus.class then
+ mypromptbox.text = "Class: " .. client.focus.class .. " "
+ end
+ if client.focus.instance then
+ mypromptbox.text = mypromptbox.text .. "Instance: ".. client.focus.instance .. " "
+ end
+ if client.focus.role then
+ mypromptbox.text = mypromptbox.text .. "Role: ".. client.focus.role
+ end
+ end
+ end):add()
+
+--- Tabulous, tab manipulation
+keybinding({ modkey, "Control" }, "y", function ()
+ local tabbedview = tabulous.tabindex_get()
+ local nextclient = awful.client.next(1)
+
+ if not tabbedview then
+ tabbedview = tabulous.tabindex_get(nextclient)
+
+ if not tabbedview then
+ tabbedview = tabulous.tab_create()
+ tabulous.tab(tabbedview, nextclient)
+ else
+ tabulous.tab(tabbedview, client.focus)
+ end
+ else
+ tabulous.tab(tabbedview, nextclient)
+ end
+end):add()
+
+keybinding({ modkey, "Shift" }, "y", tabulous.untab):add()
+
+keybinding({ modkey }, "y", function ()
+ local tabbedview = tabulous.tabindex_get()
+
+ if tabbedview then
+ local n = tabulous.next(tabbedview)
+ tabulous.display(tabbedview, n)
+ end
+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()
+keybinding({ modkey, 'Shift' }, "t", function ()
+ local tabbedview = tabulous.tabindex_get()
+ local clients = awful.client.getmarked()
+
+ if not tabbedview then
+ tabbedview = tabulous.tab_create(clients[1])
+ table.remove(clients, 1)
+ end
+
+ for k,c in pairs(clients) do
+ tabulous.tab(tabbedview, c)
+ end
+
+end):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
+-- }}}
+
+-- {{{ Hooks
+-- Hook function to execute when focusing a client.
+function hook_focus(c)
+ if not awful.client.ismarked(c) then
+ c.border_color = beautiful.border_focus
+ end
+end
+
+-- Hook function to execute when unfocusing a client.
+function hook_unfocus(c)
+ if not awful.client.ismarked(c) then
+ c.border_color = beautiful.border_normal
+ end
+end
+
+-- Hook function to execute when marking a client
+function hook_marked(c)
+ c.border_color = beautiful.border_marked
+end
+
+-- Hook function to execute when unmarking a client
+function hook_unmarked(c)
+ c.border_color = beautiful.border_focus
+end
+
+-- Hook function to execute when the mouse is over a client.
+function hook_mouseover(c)
+ -- Sloppy focus, but disabled for magnifier layout
+ if awful.layout.get(c.screen) ~= "magnifier" then
+ client.focus = c
+ end
+end
+
+-- Hook function to execute when a new client appears.
+function hook_manage(c)
+ -- Set floating placement to be smart!
+ c.floating_placement = "smart"
+ if use_titlebar then
+ -- Add a titlebar
+ awful.titlebar.add(c, { modkey = modkey })
+ end
+ -- Add mouse bindings
+ c:mouse_add(mouse({ }, 1, function (c) client.focus = c; c:raise() end))
+ c:mouse_add(mouse({ modkey }, 1, function (c) c:mouse_move() end))
+ c:mouse_add(mouse({ modkey }, 3, function (c) c:mouse_resize() end))
+ -- 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
+ client.focus = c
+
+ -- Check if the application should be floating.
+ local cls = c.class
+ local inst = c.instance
+ if floatapps[cls] then
+ c.floating = floatapps[cls]
+ elseif floatapps[inst] then
+ c.floating = 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
+
+ -- 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
+ c.honorsizehints = true
+end
+
+-- Hook function to execute when arranging the screen
+-- (tag switch, new client, etc)
+function hook_arrange(screen)
+ local layout = awful.layout.get(screen)
+ if layout then
+ mylayoutbox[screen].text =
+ "<bg image=\"/usr/share/awesome/icons/layouts/" .. awful.layout.get(screen) .. "w.png\" resize=\"true\"/>"
+ else
+ mylayoutbox[screen].text = "No layout."
+ end
+
+ -- If no window has focus, give focus to the latest in history
+ if not client.focus then
+ local c = awful.client.focus.history.get(screen, 0)
+ if c then client.focus = c end
+ end
+
+ -- Uncomment if you want mouse warping
+ --[[
+ local sel = client.focus
+ if sel then
+ local c_c = sel:coords()
+ local m_c = mouse.coords()
+
+ if m_c.x < c_c.x or m_c.x >= c_c.x + c_c.width or
+ m_c.y < c_c.y or m_c.y >= c_c.y + c_c.height then
+ if table.maxn(m_c.buttons) == 0 then
+ mouse.coords({ x = c_c.x + 5, y = c_c.y + 5})
+ end
+ end
+ end
+ ]]
+end
+
+-- Hook called every second
+function hook_timer ()
+ -- For unix time_t lovers
+ --mytextbox.text = " " .. os.time() .. " time_t "
+ -- Otherwise use:
+ mytextbox.text = " " .. os.date("%H:%M:%S %F") .. " "
+end
+
+-- Set up some hooks
+awful.hooks.focus.register(hook_focus)
+awful.hooks.unfocus.register(hook_unfocus)
+awful.hooks.marked.register(hook_marked)
+awful.hooks.unmarked.register(hook_unmarked)
+awful.hooks.manage.register(hook_manage)
+awful.hooks.mouseover.register(hook_mouseover)
+awful.hooks.arrange.register(hook_arrange)
+awful.hooks.timer.register(1, hook_timer)
+-- }}}