+globalkeys = gears.table.join(
+ awful.key({ modkey, }, "s", hotkeys_popup.show_help,
+ {description="show help", group="awesome"}),
+ awful.key({ modkey, }, "Left", awful.tag.viewprev,
+ {description = "view previous", group = "tag"}),
+ awful.key({ modkey, }, "Right", awful.tag.viewnext,
+ {description = "view next", group = "tag"}),
+ awful.key({ modkey, }, "Escape", awful.tag.history.restore,
+ {description = "go back", group = "tag"}),
+
+ awful.key({ modkey, }, "k",
+ function ()
+ awful.client.focus.byidx( 1)
+ end,
+ {description = "focus next by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "j",
+ function ()
+ awful.client.focus.byidx(-1)
+ end,
+ {description = "focus previous by index", group = "client"}
+ ),
+
+ -- Layout manipulation
+ awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( 1) end,
+ {description = "swap with next client by index", group = "client"}),
+ awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( -1) end,
+ {description = "swap with previous client by index", group = "client"}),
+ awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative( 1) end,
+ {description = "focus the next screen", group = "screen"}),
+ awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative(-1) end,
+ {description = "focus the previous screen", group = "screen"}),
+ awful.key({ modkey, "Shift" }, "Return", awful.client.urgent.jumpto,
+ {description = "jump to urgent client", group = "client"}),
+ awful.key({ modkey, }, "Tab",
+ function ()
+ awful.client.focus.history.previous()
+ if client.focus then
+ client.focus:raise()
+ end
+ end,
+ {description = "go back", group = "client"}),
+
+ -- Standard program
+ awful.key({ modkey, }, "Return", function () awful.spawn(terminal) end,
+ {description = "open a terminal", group = "launcher"}),
+ awful.key({ modkey, }, "r", function()
+ package.loaded.rc = nil
+ require("rc")
+ end,
+ {description = "reload rc.lua", group = "awesome"}),
+ awful.key({ modkey, "Control" }, "r", awesome.restart,
+ {description = "reload awesome", group = "awesome"}),
+ awful.key({ modkey, "Shift" }, "q", awesome.quit,
+ {description = "quit awesome", group = "awesome"}),
+
+ awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end,
+ {description = "increase master width factor", group = "layout"}),
+ awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end,
+ {description = "decrease master width factor", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,
+ {description = "increase the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,
+ {description = "decrease the number of master clients", group = "layout"}),
+ awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,
+ {description = "increase the number of columns", group = "layout"}),
+ awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,
+ {description = "decrease the number of columns", group = "layout"}),
+ awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
+ {description = "select next", group = "layout"}),
+ awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,
+ {description = "select previous", group = "layout"}),
+
+ awful.key({ modkey, "Control" }, "n",
+ function ()
+ local c = awful.client.restore()
+ -- Focus restored client
+ if c then
+ client.focus = c
+ c:raise()
+ end
+ end,
+ {description = "restore minimized", group = "client"}),
+
+ -- Prompt
+ awful.key({ cmdkey }, "r",
+ function ()
+ local widget = awful.screen.focused().mypromptbox.widget
+ local function spawn(command, args)
+ gears.debug.dump(args)
+ awful.spawn(command, args)
+ end
+
+ awful.prompt.run {
+ prompt = "Exec: ",
+ bg_cursor = '#ff0000',
+ textbox = widget,
+ history_path = awful.util.get_cache_dir() .. "/history",
+ hooks = {
+ -- Replace the 'normal' Return with a custom one
+ {{ }, 'Return', function(command)
+ spawn(command)
+ end},
+ -- Spawn method to spawn in the current tag
+ {{'Mod1' }, 'Return', function(command)
+ spawn(command,{
+ intrusive = true,
+ tag = mouse.screen.selected_tag
+ })
+ end},
+ -- Spawn in the current tag as floating and on top
+ {{'Shift' }, 'Return', function(command)
+ spawn(command,{
+ ontop = true,
+ floating = true,
+ tag = mouse.screen.selected_tag
+ })
+ end},
+ -- Spawn in a new tag
+ {{'Control'}, 'Return', function(command)
+ spawn(command,{
+ new_tag = true,
+ layout = layouts.default,
+ volatile = true,
+ })
+ end},
+ -- Cancel
+ {{ }, 'Escape', function(_) return end},
+ },
+ }
+ end,
+ {description = "run prompt", group = "launcher"}),
+
+ awful.key({ modkey }, "x",
+ function ()
+ awful.prompt.run {
+ prompt = "Eval: ",
+ bg_cursor = '#ff0000',
+ textbox = awful.screen.focused().mypromptbox.widget,
+ exe_callback = awful.util.eval,
+ history_path = awful.util.get_cache_dir() .. "/history_eval"
+ }
+ end,
+ {description = "lua execute prompt", group = "awesome"}),
+ -- Menubar
+ awful.key({ modkey }, "w", function() menubar.show() end,
+ {description = "show the menubar", group = "launcher"}),
+
+ -- Tag helpers
+ awful.key({ modkey, }, "a", function()
+ th.add_tag(nil, {layout=layouts.default} ,true)
+ end,
+ {description = "add a tag", group = "tag"}),
+ awful.key({ modkey, }, "d", th.delete_tag,
+ {description = "delete the current tag", group = "tag"}),
+ awful.key({ modkey, "Shift", }, "a", function()
+ th.move_to_new_tag(nil,nil,true,true,true)
+ end,
+ {description = "add a volatile tag with the focused client", group = "tag"}),
+ awful.key({ modkey, "Shift", "Control" }, "a", function()
+ th.move_to_new_tag(nil,nil,false,true,true)
+ end,
+ {description = "add a permanent tag with the focused client", group = "tag"}),
+ awful.key({ modkey, "Mod1" }, "a", th.copy_tag,
+ {description = "create a copy of the current tag", group = "tag"}),
+ awful.key({ modkey, "Control" }, "a", th.rename_tag,
+ {description = "rename the current tag", group = "tag"}),
+ awful.key({ modkey, "Control", "Shift", "Mod1" }, "a", th.collect_orphan_clients_to_tag,
+ {description = "collect all orphaned clients", group = "client"}),
+
+ awful.key({ modkey }, "y", toggle_tag_by_name("irc", true),
+ {description = "view tag 'irc'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "y", toggle_tag_by_name("irc"),
+ {description = "toggle tag 'irc'", group = "tag"}),
+ awful.key({ modkey }, "u", toggle_tag_by_name("[m]", true),
+ {description = "view tag '[m]'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "u", toggle_tag_by_name("[m]"),
+ {description = "toggle tag '[m]'", group = "tag"}),
+ awful.key({ modkey }, "i", toggle_tag_by_name("cal", true),
+ {description = "view tag 'cal'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "i", toggle_tag_by_name("cal"),
+ {description = "toggle tag 'cal'", group = "tag"}),
+ awful.key({ modkey }, "o", toggle_tag_by_name("chr", true),
+ {description = "view tag 'chr'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "o", toggle_tag_by_name("chr"),
+ {description = "toggle tag 'chr'", group = "tag"}),
+ awful.key({ modkey }, "p", toggle_tag_by_name("ffx", true),
+ {description = "view tag 'ff'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "p", toggle_tag_by_name("ffx"),
+ {description = "toggle tag 'ff'", group = "tag"}),
+{})
+
+clientkeys = gears.table.join(
+ awful.key({ modkey, }, "f",
+ function (c)
+ c.fullscreen = not c.fullscreen
+ c:raise()
+ end,
+ {description = "toggle fullscreen", group = "client"}),
+ awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end,
+ {description = "close", group = "client"}),
+ awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,
+ {description = "toggle floating", group = "client"}),
+ awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
+ {description = "move to master", group = "client"}),
+ awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
+ {description = "toggle keep on top", group = "client"}),
+ awful.key({ modkey, }, "n",
+ function (c)
+ -- The client currently has the input focus, so it cannot be
+ -- minimized, since minimized clients can't have the focus.
+ c.minimized = true
+ end ,
+ {description = "minimize", group = "client"}),
+ awful.key({ modkey, }, "m",
+ function (c)
+ c.maximized = not c.maximized
+ c.maximized_horizontal = false
+ c.maximized_vertical = false
+ c:raise()
+ end ,
+ {description = "(un)maximize", group = "client"}),
+ awful.key({ modkey, "Control" }, "m",
+ function (c)
+ c.maximized_vertical = not c.maximized_vertical
+ c:raise()
+ end ,
+ {description = "(un)maximize vertically", group = "client"}),
+ awful.key({ modkey, "Shift" }, "m",
+ function (c)
+ c.maximized_horizontal = not c.maximized_horizontal
+ c:raise()
+ end ,
+ {description = "(un)maximize horizontally", group = "client"})
+)
+
+-- Bind all key numbers to tags.
+-- Be careful: we use keycodes to make it work on any keyboard layout.
+-- This should map on the top row of your keyboard, usually 1 to 9.
+for i = 1, 9 do
+ globalkeys = gears.table.join(globalkeys,
+ -- View tag only.
+ awful.key({ modkey }, "#" .. i + 9, toggle_tag_by_name(tostring(i), true),
+ {description = "view tag #"..i, group = "tag"}),
+ -- Toggle tag display.
+ awful.key({ modkey, "Control" }, "#" .. i + 9, toggle_tag_by_name(tostring(i)),
+ {description = "toggle tag #" .. i, group = "tag"}),
+ -- Move client to tag.
+ awful.key({ modkey, "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = awful.tag.find_by_name(screen.primary, tostring(i))
+ if tag then
+ client.focus:move_to_tag(tag)
+ end
+ end
+ end,
+ {description = "move focused client to tag #"..i, group = "tag"}),
+ -- Toggle tag on focused client.
+ awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = awful.tag.find_by_name(screen.primary, tostring(i))
+ if tag then
+ client.focus:toggle_tag(tag)
+ end
+ end
+ end,
+ {description = "toggle focused client on tag #" .. i, group = "tag"})
+ )
+end
+
+clientbuttons = gears.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))
+
+-- misc apps
+globalkeys = awful.util.table.join(globalkeys,
+awful.key({ cmdkey }, "n", function () awful.spawn("firefox") end),
+awful.key({ cmdkey }, "m", function () awful.spawn("chromium --enable-remote-extensions") end),
+awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e python") end),
+awful.key({ cmdkey }, "c", function () awful.spawn("thunderbird") end),
+awful.key({ cmdkey }, "g", function () awful.spawn("gscan2pdf") end),
+awful.key({ cmdkey }, "v", function () awful.spawn("virt-manager") end),
+awful.key({ cmdkey }, "l", function () awful.spawn("libreoffice") end),
+awful.key({ cmdkey }, "f", function () awful.spawn("thunar") end),
+awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host tmux new -As irc irssi") end),
+awful.key({ cmdkey }, "x", function ()
+ awful.spawn("/usr/bin/xscreensaver -no-capture-stderr")
+ os.execute("sleep 5")
+ awful.spawn("xscreensaver-command -lock")
+end),
+awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end),
+
+-- function keys
+awful.key(nil, "XF86ScreenSaver", function () awful.spawn("xset dpms force off") end),
+awful.key(nil, "XF86AudioMute", function () awful.spawn("pactl set-sink-mute 0 toggle") end),
+awful.key({ cmdkey }, "End", function () awful.spawn("pactl set-sink-mute 0 toggle") end),
+awful.key(nil, "XF86AudioLowerVolume", function () awful.spawn("pactl set-sink-volume 0 -2%") end),
+awful.key({ cmdkey }, "Next", function () awful.spawn("pactl set-sink-volume 0 -2%") end),
+awful.key(nil, "XF86AudioRaiseVolume", function () awful.spawn("pactl set-sink-volume 0 +2%") end),
+awful.key({ cmdkey }, "Prior", function () awful.spawn("pactl set-sink-volume 0 +2%") end),
+awful.key(nil, "XF86AudioMicMute", function () awful.spawn("pactl set-source-mute 1 toggle") end),
+awful.key({ cmdkey }, "Home", function () awful.spawn("pactl set-source-mute 1 toggle") end),
+awful.key(nil, "XF86MonBrightnessDown", function () awful.spawn("xbacklight -dec 5%") end),
+awful.key(nil, "XF86MonBrightnessUp", function () awful.spawn("xbacklight -inc 5%") end),
+awful.key(nil, "XF86Display", function () awful.spawn("") end),
+awful.key(nil, "XF86WLAN", function () awful.spawn("") end),
+awful.key(nil, "XF86Tools", function () awful.spawn("") end),
+awful.key(nil, "XF86Search", function () awful.spawn("") end),
+awful.key(nil, "XF86LaunchA", function () awful.spawn("") end),
+awful.key(nil, "XF86Explorer", function () awful.spawn("") end)
+)
+
+-- Set keys
+root.keys(globalkeys)
+-- }}}
+
+-- {{{ Rules
+-- Rules to apply to new clients (through the "manage" signal).
+
+local function float_client_in_the_middle_with_margins(client, leftright, topbottom)
+ local wa = client.screen.workarea
+ if topbottom then
+ client.y = wa.y + topbottom
+ client.height = wa.height - 2*topbottom
+ else
+ client.y = wa.y + (wa.height - client.height)/2
+ end
+ if leftright then
+ client.x = wa.x + leftright
+ client.width = wa.width - 2*leftright
+ else
+ client.x = wa.x + (wa.width - client.width)/2
+ end
+end
+
+local function move_to_tag_by_name(s, tagname)
+ return function(c)
+ local t = awful.tag.find_by_name(s, tagname)
+ if not t then
+ error("No tag by the name of " .. tagname)
+ return
+ end
+ c:move_to_tag(t)
+ end