summaryrefslogtreecommitdiff
path: root/rc.lua
diff options
context:
space:
mode:
authorAdrian C. (anrxc) <anrxc@sysphere.org>2024-05-27 17:08:20 +0200
committerAdrian C. (anrxc) <anrxc@sysphere.org>2024-05-27 17:08:23 +0200
commit6a5354e09fcf0a89e2d48bd80ecd494fc52c7b48 (patch)
tree165d9d04cd667fc602296e144769a7b44aa13041 /rc.lua
parent51f463b71d29ec2cb25bb2eb7c10396aabdee324 (diff)
downloadawesome-configs-6a5354e09fcf0a89e2d48bd80ecd494fc52c7b48.tar.xz
rc.lua: port to awesomev4
Old awesomewm v3 configuration moved to branch awesomev3.
Diffstat (limited to 'rc.lua')
-rw-r--r--rc.lua981
1 files changed, 511 insertions, 470 deletions
diff --git a/rc.lua b/rc.lua
index c2347ca..1601c2e 100644
--- a/rc.lua
+++ b/rc.lua
@@ -1,6 +1,6 @@
-- {{{ License
--
--- Awesome configuration, using awesome 3.4.14 on Arch GNU/Linux
+-- Awesome configuration, using awesome 4.3-7 on Debian GNU/Linux
-- * Adrian C. <anrxc@sysphere.org>
-- Screenshot: http://sysphere.org/gallery/snapshots
@@ -11,556 +11,597 @@
-- {{{ Libraries
-require("awful")
-require("awful.rules")
+pcall(require, "luarocks.loader")
+-- Standard awesome library
+local gears = require("gears")
+local awful = require("awful")
require("awful.autofocus")
--- User libraries
-vicious = require("vicious")
-scratch = require("scratch")
+-- Widget and layout libraries
+local wibox = require("wibox")
+local vicious = require("vicious")
+-- Theme handling library
+local beautiful = require("beautiful")
+-- Notification library
+--local naughty = require("naughty")
+--local menubar = require("menubar")
-- }}}
-
-- {{{ Variable definitions
-local altkey = "Mod1"
-local modkey = "Mod4"
-
-local home = os.getenv("HOME")
-local exec = awful.util.spawn
-local sexec = awful.util.spawn_with_shell
-local scount = screen.count()
+terminal = "/usr/bin/urxvt"
+editor = "emacs"
+editor_cmd = terminal .. " -e emacs -nw"
+modkey = "Mod4"
+altkey = "Mod1"
+exec = awful.spawn
+scount = screen.count()
-- Beautiful theme
-beautiful.init(home .. "/.config/awesome/zenburn.lua")
+beautiful.init(gears.filesystem.get_themes_dir() .. "zenburn/theme.lua")
-- Window management layouts
-layouts = {
- awful.layout.suit.tile, -- 1
- awful.layout.suit.tile.bottom, -- 2
- awful.layout.suit.fair, -- 3
- awful.layout.suit.max, -- 4
- awful.layout.suit.magnifier, -- 5
- awful.layout.suit.floating -- 6
+awful.layout.layouts = {
+ awful.layout.suit.floating, -- 1
+ awful.layout.suit.tile, -- 2
+ awful.layout.suit.tile.left, -- 3
+ awful.layout.suit.tile.bottom, -- 4
+ awful.layout.suit.tile.top, -- 5
+ awful.layout.suit.fair, -- 6
+ awful.layout.suit.fair.horizontal, -- 7
+ awful.layout.suit.spiral, -- 8
+ awful.layout.suit.spiral.dwindle, -- 9
+ awful.layout.suit.max, -- 10
+ awful.layout.suit.max.fullscreen, -- 11
+ awful.layout.suit.magnifier, -- 12
+ awful.layout.suit.corner.nw, -- 13
+ -- awful.layout.suit.corner.ne,
+ -- awful.layout.suit.corner.sw,
+ -- awful.layout.suit.corner.se,
}
-- }}}
-
--- {{{ Tags
-tags = {
- names = { "term", "emacs", "web", "mail", "im", 6, 7, "rss", "media" },
- layout = { layouts[2], layouts[1], layouts[1], layouts[4], layouts[1],
- layouts[6], layouts[6], layouts[5], layouts[6]
-}}
-
-for s = 1, scount do
- tags[s] = awful.tag(tags.names, s, tags.layout)
- for i, t in ipairs(tags[s]) do
- awful.tag.setproperty(t, "mwfact", i==5 and 0.13 or 0.5)
- awful.tag.setproperty(t, "hide", (i==6 or i==7) and true)
- end
-end
+-- {{{ Menu
+--menubar.utils.terminal = terminal
-- }}}
--- {{{ Wibox
---
--- {{{ Widgets configuration
+-- {{{ Wibar
--
-- {{{ Reusable separator
-separator = widget({ type = "imagebox" })
-separator.image = image(beautiful.widget_sep)
--- }}}
-
--- {{{ CPU usage and temperature
-cpuicon = widget({ type = "imagebox" })
-cpuicon.image = image(beautiful.widget_cpu)
--- Initialize widgets
-cpugraph = awful.widget.graph()
-tzswidget = widget({ type = "textbox" })
--- Graph properties
-cpugraph:set_width(40):set_height(14)
-cpugraph:set_background_color(beautiful.fg_off_widget)
-cpugraph:set_gradient_angle(0):set_gradient_colors({
- beautiful.fg_end_widget, beautiful.fg_center_widget, beautiful.fg_widget
-}) -- Register widgets
-vicious.register(cpugraph, vicious.widgets.cpu, "$1")
-vicious.register(tzswidget, vicious.widgets.thermal, " $1C", 19, "thermal_zone0")
--- }}}
-
--- {{{ Battery state
-baticon = widget({ type = "imagebox" })
-baticon.image = image(beautiful.widget_bat)
--- Initialize widget
-batwidget = widget({ type = "textbox" })
--- Register widget
-vicious.register(batwidget, vicious.widgets.bat, "$1$2%", 61, "BAT0")
--- }}}
-
--- {{{ Memory usage
-memicon = widget({ type = "imagebox" })
-memicon.image = image(beautiful.widget_mem)
--- Initialize widget
-membar = awful.widget.progressbar()
--- Pogressbar properties
-membar:set_vertical(true):set_ticks(true)
-membar:set_height(12):set_width(8):set_ticks_size(2)
-membar:set_background_color(beautiful.fg_off_widget)
-membar:set_gradient_colors({ beautiful.fg_widget,
- beautiful.fg_center_widget, beautiful.fg_end_widget
-}) -- Register widget
-vicious.register(membar, vicious.widgets.mem, "$1", 13)
--- }}}
-
--- {{{ File system usage
-fsicon = widget({ type = "imagebox" })
-fsicon.image = image(beautiful.widget_fs)
--- Initialize widgets
-fs = {
- b = awful.widget.progressbar(), r = awful.widget.progressbar(),
- h = awful.widget.progressbar(), s = awful.widget.progressbar()
-}
--- Progressbar properties
-for _, w in pairs(fs) do
- w:set_vertical(true):set_ticks(true)
- w:set_height(14):set_width(5):set_ticks_size(2)
- w:set_border_color(beautiful.border_widget)
- w:set_background_color(beautiful.fg_off_widget)
- w:set_gradient_colors({ beautiful.fg_widget,
- beautiful.fg_center_widget, beautiful.fg_end_widget
- }) -- Register buttons
- w.widget:buttons(awful.util.table.join(
- awful.button({ }, 1, function () exec("rox", false) end)
- ))
-end -- Enable caching
-vicious.cache(vicious.widgets.fs)
--- Register widgets
-vicious.register(fs.b, vicious.widgets.fs, "${/boot used_p}", 599)
-vicious.register(fs.r, vicious.widgets.fs, "${/ used_p}", 599)
-vicious.register(fs.h, vicious.widgets.fs, "${/home used_p}", 599)
-vicious.register(fs.s, vicious.widgets.fs, "${/mnt/storage used_p}", 599)
+myseparator = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/separator.png", false)
-- }}}
--- {{{ Network usage
-dnicon = widget({ type = "imagebox" })
-upicon = widget({ type = "imagebox" })
-dnicon.image = image(beautiful.widget_net)
-upicon.image = image(beautiful.widget_netup)
+-- {{{ CPU temperature
+mycpuicon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/cpu.png", false)
-- Initialize widget
-netwidget = widget({ type = "textbox" })
+mycpuwidget = wibox.widget.textbox()
-- Register widget
-vicious.register(netwidget, vicious.widgets.net, '<span color="'
- .. beautiful.fg_netdn_widget ..'">${eth0 down_kb}</span> <span color="'
- .. beautiful.fg_netup_widget ..'">${eth0 up_kb}</span>', 3)
+vicious.register(mycpuwidget, vicious.widgets.thermal, "$1C", 19, "thermal_zone0")
-- }}}
--- {{{ Mail subject
-mailicon = widget({ type = "imagebox" })
-mailicon.image = image(beautiful.widget_mail)
+-- {{{ Battery state
+mybaticon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/bat.png", false)
-- Initialize widget
-mailwidget = widget({ type = "textbox" })
+mybatwidget = wibox.widget.textbox()
-- Register widget
-vicious.register(mailwidget, vicious.widgets.mbox, "$1", 181, {home .. "/mail/Inbox", 15})
--- Register buttons
-mailwidget:buttons(awful.util.table.join(
- awful.button({ }, 1, function () exec("urxvt -T Alpine -e alpine.exp") end)
-))
+vicious.register(mybatwidget, vicious.widgets.bat, "$1$2%", 61, "BAT0")
-- }}}
--- {{{ Org-mode agenda
-orgicon = widget({ type = "imagebox" })
-orgicon.image = image(beautiful.widget_org)
--- Initialize widget
-orgwidget = widget({ type = "textbox" })
--- Configure widget
-local orgmode = {
- files = { home.."/.org/computers.org",
- home.."/.org/index.org", home.."/.org/personal.org",
- },
- color = {
- past = '<span color="'..beautiful.fg_urgent..'">',
- today = '<span color="'..beautiful.fg_normal..'">',
- soon = '<span color="'..beautiful.fg_widget..'">',
- future = '<span color="'..beautiful.fg_netup_widget..'">'
-}} -- Register widget
-vicious.register(orgwidget, vicious.widgets.org,
- orgmode.color.past..'$1</span>-'..orgmode.color.today .. '$2</span>-' ..
- orgmode.color.soon..'$3</span>-'..orgmode.color.future.. '$4</span>', 601,
- orgmode.files
-) -- Register buttons
-orgwidget:buttons(awful.util.table.join(
- awful.button({ }, 1, function () exec("emacsclient --eval '(org-agenda-list)'") end),
- awful.button({ }, 3, function () exec("emacsclient --eval '(make-remember-frame)'") end)
-))
--- }}}
-
--- {{{ Volume level
-volicon = widget({ type = "imagebox" })
-volicon.image = image(beautiful.widget_vol)
+-- {{{ Date and time
+mydateicon = wibox.widget.imagebox("/home/anrxc/.config/awesome/icons/time.png", false)
-- Initialize widgets
-volbar = awful.widget.progressbar()
-volwidget = widget({ type = "textbox" })
--- Progressbar properties
-volbar:set_vertical(true):set_ticks(true)
-volbar:set_height(12):set_width(8):set_ticks_size(2)
-volbar:set_background_color(beautiful.fg_off_widget)
-volbar:set_gradient_colors({ beautiful.fg_widget,
- beautiful.fg_center_widget, beautiful.fg_end_widget
-}) -- Enable caching
-vicious.cache(vicious.widgets.volume)
+mydatewidget = wibox.widget.textbox()
+mydatestwidget = wibox.widget.textbox()
-- Register widgets
-vicious.register(volbar, vicious.widgets.volume, "$1", 2, "PCM")
-vicious.register(volwidget, vicious.widgets.volume, " $1%", 2, "PCM")
--- Register buttons
-volbar.widget:buttons(awful.util.table.join(
- awful.button({ }, 1, function () exec("kmix") end),
- awful.button({ }, 4, function () exec("amixer -q set PCM 1dB+", false) end),
- awful.button({ }, 5, function () exec("amixer -q set PCM 1dB-", false) end)
-)) -- Register assigned buttons
-volwidget:buttons(volbar.widget:buttons())
+vicious.register(mydatewidget, vicious.widgets.date, "%R", 61) -- Amsterdam
+vicious.register(mydatestwidget, vicious.widgets.date, "%R", 61, -21600) -- New York
-- }}}
--- {{{ Date and time
-dateicon = widget({ type = "imagebox" })
-dateicon.image = image(beautiful.widget_date)
--- Initialize widget
-datewidget = widget({ type = "textbox" })
--- Register widget
-vicious.register(datewidget, vicious.widgets.date, "%R", 61)
--- Register buttons
-datewidget:buttons(awful.util.table.join(
- awful.button({ }, 1, function () exec("pylendar.py") end)
-))
--- }}}
-
--- {{{ System tray
-systray = widget({ type = "systray" })
--- }}}
--- }}}
-- {{{ Wibox initialisation
-wibox = {}
-promptbox = {}
-layoutbox = {}
-taglist = {}
-taglist.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
-))
+local taglist_buttons = gears.table.join(
+ awful.button({ }, 1, function(t) t:view_only() end),
+ awful.button({ modkey }, 1, function(t)
+ if client.focus then
+ client.focus:move_to_tag(t)
+ end
+ end),
+ awful.button({ }, 3, awful.tag.viewtoggle),
+ awful.button({ modkey }, 3, function(t)
+ if client.focus then
+ client.focus:toggle_tag(t)
+ end
+ end),
+ awful.button({ }, 4, function(t) awful.tag.viewnext(t.screen) end),
+ awful.button({ }, 5, function(t) awful.tag.viewprev(t.screen) end)
+ )
+
+local tasklist_buttons = gears.table.join(
+ awful.button({ }, 1, function (c)
+ if c == client.focus then
+ c.minimized = true
+ else
+ c:emit_signal(
+ "request::activate",
+ "tasklist",
+ {raise = true}
+ )
+ end
+ end),
+ awful.button({ }, 3, function()
+ awful.menu.client_list({ theme = { width = 250 } })
+ end),
+ awful.button({ }, 4, function ()
+ awful.client.focus.byidx(1)
+ end),
+ awful.button({ }, 5, function ()
+ awful.client.focus.byidx(-1)
+ end))
+-- Wallpaper signal handler
+local function set_wallpaper(s)
+ if beautiful.wallpaper then
+ local wallpaper = beautiful.wallpaper
+ if type(wallpaper) == "function" then
+ wallpaper = wallpaper(s)
+ end
+ gears.wallpaper.maximized(wallpaper, s, true)
+ end
+end
+screen.connect_signal("property::geometry", set_wallpaper)
+
+awful.screen.connect_for_each_screen(function(s)
+ set_wallpaper(s)
+
+ -- Tags
+ local names = { "term", "emacs", "web", "mail", "im", "6", "7", "ssh", "media" }
+ local ly = awful.layout.suit
+ local llayouts = { ly.tile, ly.tile, ly.tile, ly.magnifier, ly.tile, ly.floating, ly.floating, ly.fair, ly.floating }
+ awful.tag(names, s, llayouts)
-for s = 1, scount do
-- Create a promptbox
- promptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright })
+ s.mypromptbox = awful.widget.prompt()
+
-- Create a layoutbox
- layoutbox[s] = awful.widget.layoutbox(s)
- layoutbox[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)
+ s.mylayoutbox = awful.widget.layoutbox(s)
+ s.mylayoutbox:buttons(gears.table.join(
+ awful.button({ }, 1, function () awful.layout.inc( 1) end),
+ awful.button({ }, 3, function () awful.layout.inc(-1) end),
+ awful.button({ }, 4, function () awful.layout.inc( 1) end),
+ awful.button({ }, 5, function () awful.layout.inc(-1) end)
))
-- Create the taglist
- taglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, taglist.buttons)
+ s.mytaglist = awful.widget.taglist {
+ screen = s,
+ filter = awful.widget.taglist.filter.all,
+ buttons = taglist_buttons
+ }
+
+ -- Create the tasklist
+ s.mytasklist = awful.widget.tasklist {
+ screen = s,
+ filter = awful.widget.tasklist.filter.currenttags,
+ buttons = tasklist_buttons
+ }
+
-- Create the wibox
- wibox[s] = awful.wibox({ screen = s,
- fg = beautiful.fg_normal, height = 12,
- bg = beautiful.bg_normal, position = "top",
- border_color = beautiful.border_focus,
- border_width = beautiful.border_width
- })
+ -- * theme font "Terminus 8" or "ProFont 8" for this widget bar height
+ s.mywibox = awful.wibar({ position = "top", screen = s, height = 12 })
+
-- Add widgets to the wibox
- wibox[s].widgets = {
- { taglist[s], layoutbox[s], separator, promptbox[s],
- ["layout"] = awful.widget.layout.horizontal.leftright
+ s.mywibox:setup {
+ layout = wibox.layout.align.horizontal,
+ { -- Left widgets
+ layout = wibox.layout.fixed.horizontal,
+ s.mytaglist,
+ s.mylayoutbox,
+ myseparator,
+ s.mypromptbox,
+ },
+ s.mytasklist, -- Middle widget
+ { -- Right widgets
+ layout = wibox.layout.fixed.horizontal,
+ myseparator,
+ mycpuicon,
+ mycpuwidget,
+ myseparator,
+ mybaticon,
+ mybatwidget,
+ myseparator,
+ mydateicon,
+ mydatestwidget,
+ myseparator,
+ mydateicon,
+ mydatewidget,
+ myseparator,
+ s == scount and wibox.widget.systray() or nil,
},
- s == 1 and systray or nil,
- separator, datewidget, dateicon,
- separator, volwidget, volbar.widget, volicon,
- separator, orgwidget, orgicon,
- separator, mailwidget, mailicon,
- separator, upicon, netwidget, dnicon,
- separator, fs.s.widget, fs.h.widget, fs.r.widget, fs.b.widget, fsicon,
- separator, membar.widget, memicon,
- separator, batwidget, baticon,
- separator, tzswidget, cpugraph.widget, cpuicon,
- separator, ["layout"] = awful.widget.layout.horizontal.rightleft
}
-end
+end)
-- }}}
-- }}}
-
-- {{{ Mouse bindings
-root.buttons(awful.util.table.join(
+root.buttons(gears.table.join(
awful.button({ }, 4, awful.tag.viewnext),
awful.button({ }, 5, awful.tag.viewprev)
))
-
--- Client bindings
-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)
-)
-- }}}
-
-- {{{ Key bindings
---
--- {{{ Global keys
-globalkeys = awful.util.table.join(
- -- {{{ Applications
- awful.key({ modkey }, "e", function () exec("emacsclient -n -c") end),
- awful.key({ modkey }, "r", function () exec("rox", false) end),
- awful.key({ modkey }, "w", function () exec("firefox") end),
- awful.key({ altkey }, "F1", function () exec("urxvt") end),
- awful.key({ altkey }, "#49", function () scratch.drop("urxvt", "bottom", nil, nil, 0.30) end),
- awful.key({ modkey }, "a", function () exec("urxvt -T Alpine -e alpine.exp") end),
- awful.key({ modkey }, "g", function () sexec("GTK2_RC_FILES=~/.gtkrc-gajim gajim") end),
- awful.key({ modkey }, "q", function () exec("emacsclient --eval '(make-remember-frame)'") end),
- awful.key({ altkey }, "#51", function () if boosk then osk(nil, mouse.screen)
- else boosk, osk = pcall(require, "osk") end
- end),
- -- }}}
-
- -- {{{ Multimedia keys
- --awful.key({}, "#160", function () exec("kscreenlocker --forcelock") end),
- --awful.key({}, "#121", function () exec("pvol.py -m") end),
- awful.key({}, "#122", function () exec("pvol.py -p -c -2") end),
- awful.key({}, "#123", function () exec("pvol.py -p -c 2") end),
- awful.key({}, "#232", function () exec("plight.py -s") end),
- awful.key({}, "#233", function () exec("plight.py -s") end),
- --awful.key({}, "#150", function () exec("sudo /usr/bin/pm-suspend") end),
- awful.key({}, "#213", function () exec("sudo /usr/bin/pm-hibernate") end),
- --awful.key({}, "#235", function () exec("xset dpms force off") end),
- awful.key({}, "#235", function () exec("pypres.py") end),
- awful.key({}, "#244", function () sexec("acpitool -b | xmessage -timeout 10 -file -") end),
- -- }}}
-
- -- {{{ Prompt menus
- awful.key({ altkey }, "F2", function ()
- awful.prompt.run({ prompt = "Run: " }, promptbox[mouse.screen].widget,
- function (...) promptbox[mouse.screen].text = exec(unpack(arg), false) end,
- awful.completion.shell, awful.util.getdir("cache") .. "/history")
- end),
- awful.key({ altkey }, "F3", function ()
- awful.prompt.run({ prompt = "Dictionary: " }, promptbox[mouse.screen].widget,
- function (words)
- sexec("crodict "..words.." | ".."xmessage -timeout 10 -file -")
- end)
- end),
- awful.key({ altkey }, "F4", function ()
- awful.prompt.run({ prompt = "Web: " }, promptbox[mouse.screen].widget,
- function (command)
- sexec("firefox 'http://yubnub.org/parser/parse?command="..command.."'")
- awful.tag.viewonly(tags[scount][3])
- end)
- end),
- awful.key({ altkey }, "F5", function ()
- awful.prompt.run({ prompt = "Lua: " }, promptbox[mouse.screen].widget,
- awful.util.eval, nil, awful.util.getdir("cache") .. "/history_eval")
- end),
- -- }}}
-
- -- {{{ Awesome controls
- awful.key({ modkey }, "b", function ()
- wibox[mouse.screen].visible = not wibox[mouse.screen].visible
- end),
- awful.key({ modkey, "Shift" }, "q", awesome.quit),
- awful.key({ modkey, "Shift" }, "r", function ()
- promptbox[mouse.screen].text = awful.util.escape(awful.util.restart())
- end),
- -- }}}
-
- -- {{{ Tag browsing
- awful.key({ altkey }, "n", awful.tag.viewnext),
- awful.key({ altkey }, "p", awful.tag.viewprev),
- awful.key({ altkey }, "Tab", awful.tag.history.restore),
- -- }}}
-
- -- {{{ Layout manipulation
- 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" }, "l", function () awful.client.incwfact(-0.05) end),
- awful.key({ modkey, "Shift" }, "h", function () awful.client.incwfact( 0.05) end),
- awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(layouts, -1) end),
- awful.key({ modkey }, "space", function () awful.layout.inc(layouts, 1) end),
- -- }}}
-
- -- {{{ Focus controls
- awful.key({ modkey }, "p", function () awful.screen.focus_relative(1) end),
- awful.key({ modkey }, "s", function () scratch.pad.toggle() end),
- awful.key({ modkey }, "u", awful.client.urgent.jumpto),
- 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 }, "Tab", function ()
- awful.client.focus.history.previous()
- if client.focus then client.focus:raise() end
- end),
- awful.key({ altkey }, "Escape", function ()
- awful.menu.menu_keys.down = { "Down", "Alt_L" }
- local cmenu = awful.menu.clients({width=230}, { keygrabber=true, coords={x=525, y=330} })
- end),
- awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx(1) end),
- awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx(-1) end)
- -- }}}
+globalkeys = gears.table.join(
+ -- Tag browsing
+ awful.key({ altkey, }, "p", awful.tag.viewprev,
+ {description = "view previous", group = "tag"}),
+ awful.key({ altkey, }, "n", awful.tag.viewnext,
+ {description = "view next", group = "tag"}),
+ awful.key({ altkey, }, "Tab", awful.tag.history.restore,
+ {description = "go back", group = "tag"}),
+
+ -- Focus controls
+ awful.key({ modkey, }, "j",
+ function ()
+ awful.client.focus.byidx( 1)
+ end,
+ {description = "focus next by index", group = "client"}
+ ),
+ awful.key({ modkey, }, "k",
+ function ()
+ awful.client.focus.byidx(-1)
+ end,
+ {description = "focus previous by index", group = "client"}
+ ),
+ awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end,
+ {description = "swap with next client by index", group = "client"}),
+ awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end,
+ {description = "swap with previous client by index", group = "client"}),
+ awful.key({ modkey }, "p", function () awful.screen.focus_relative( 1) end,
+ {description = "focus the next screen", group = "screen"}),
+ awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end,
+ {description = "focus the previous screen", group = "screen"}),
+ awful.key({ modkey, }, "u", 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"}),
+
+ -- Multimedia keys
+ awful.key({}, "#151", function () awful.spawn("xdg-screensaver lock") end,
+ {description = "lock the screen", group = "launcher"}),
+ awful.key({}, "#198", function () awful.spawn("amixer set Capture toggle") end,
+ {description = "mute the microphone", group = "launcher"}),
+
+ -- Applications
+ awful.key({ altkey, }, "F1", function () awful.spawn(terminal) end,
+ {description = "open a terminal", group = "launcher"}),
+ awful.key({ modkey, }, "w", function () awful.spawn("firefox") end,
+ {description = "open a browser", group = "launcher"}),
+ awful.key({ modkey, }, "n", function () awful.spawn("urxvt -T Terminal1 -e terminal1-expect-script") end,
+ {description = "open ssh terminal1", group = "launcher"}),
+ awful.key({ modkey, }, "v", function () awful.spawn("urxvt -T Terminal2 -e ssh terminal2") end,
+ {description = "open ssh terminal2", group = "launcher"}),
+ awful.key({ modkey, }, "a", function () awful.spawn("urxvt -T Alpine -e alpine") end,
+ {description = "open e-mail client", group = "launcher"}),
+ awful.key({ modkey, }, "e", function () awful.spawn("emacs") end,
+ {description = "open emacs", group = "launcher"}),
+
+ -- Awesome controls
+ awful.key({ modkey, "Shift" }, "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()
+ if c then
+ c:emit_signal(
+ "request::activate", "key.unminimize", {raise = true}
+ )
+ end
+ end,
+ {description = "restore minimized", group = "client"}),
+
+ -- Prompt menus
+ awful.key({ altkey }, "F2", function () awful.screen.focused().mypromptbox:run() end,
+ {description = "run prompt", group = "launcher"}),
+
+ awful.key({ altkey }, "F5",
+ function ()
+ awful.prompt.run {
+ prompt = "Run Lua code: ",
+ 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, "Control" }, "j", function() menubar.show() end,
+ -- {description = "show the menubar", group = "launcher"})
)
--- }}}
-- {{{ Client manipulation
-clientkeys = awful.util.table.join(
- awful.key({ modkey }, "c", function (c) c:kill() end),
- awful.key({ modkey }, "d", function (c) scratch.pad.set(c, 0.60, 0.60, true) end),
- awful.key({ modkey }, "f", function (c) c.fullscreen = not c.fullscreen end),
- awful.key({ modkey }, "m", function (c)
- c.maximized_horizontal = not c.maximized_horizontal
- c.maximized_vertical = not c.maximized_vertical
- end),
- awful.key({ modkey }, "o", awful.client.movetoscreen),
- awful.key({ modkey }, "Next", function () awful.client.moveresize( 20, 20, -40, -40) end),
- awful.key({ modkey }, "Prior", function () awful.client.moveresize(-20, -20, 40, 40) end),
- awful.key({ modkey }, "Down", function () awful.client.moveresize( 0, 20, 0, 0) end),
- awful.key({ modkey }, "Up", function () awful.client.moveresize( 0, -20, 0, 0) end),
- awful.key({ modkey }, "Left", function () awful.client.moveresize(-20, 0, 0, 0) end),
- awful.key({ modkey }, "Right", function () awful.client.moveresize( 20, 0, 0, 0) end),
- awful.key({ modkey, "Control"},"r", function (c) c:redraw() end),
- awful.key({ modkey, "Shift" }, "0", function (c) c.sticky = not c.sticky end),
- awful.key({ modkey, "Shift" }, "m", function (c) c:swap(awful.client.getmaster()) end),
- awful.key({ modkey, "Shift" }, "c", function (c) exec("kill -CONT " .. c.pid) end),
- awful.key({ modkey, "Shift" }, "s", function (c) exec("kill -STOP " .. c.pid) end),
- awful.key({ modkey, "Shift" }, "t", function (c)
- if c.titlebar then awful.titlebar.remove(c)
- else awful.titlebar.add(c, { modkey = modkey }) end
- end),
- awful.key({ modkey, "Shift" }, "f", function (c) if awful.client.floating.get(c)
- then awful.client.floating.delete(c); awful.titlebar.remove(c)
- else awful.client.floating.set(c, true); awful.titlebar.add(c) end
- end)
+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, }, "c", function (c) c:kill() end,
+ {description = "kill client", group = "client"}),
+ awful.key({ modkey, "Shift" }, "f", awful.client.floating.toggle ,
+ {description = "toggle floating", group = "client"}),
+ awful.key({ modkey, "Shift" }, "m", function (c) c:swap(awful.client.getmaster()) end,
+ {description = "move to master", group = "client"}),
+ awful.key({ modkey, "Control" }, "r", function (c) c:redraw() end,
+ {description = "redraw client", group = "client"}),
+ awful.key({ modkey, }, "o", function (c) c:move_to_screen() end,
+ {description = "move to screen", group = "client"}),
+ awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end,
+ {description = "toggle keep on top", group = "client"}),
+
+ awful.key({ modkey, }, "Next", function (c) awful.client.moveresize( 20, 20, -40, -40) end,
+ {description = "resize client PgUP", group = "client"}),
+ awful.key({ modkey, }, "Prior", function (c) awful.client.moveresize(-20, -20, 40, 40) end,
+ {description = "resize client PgDN", group = "client"}),
+ awful.key({ modkey, }, "Down", function (c) awful.client.moveresize(0, 20, 0, 0) end,
+ {description = "move client down", group = "client"}),
+ awful.key({ modkey, }, "Up", function (c) awful.client.moveresize(0, -20, 0, 0) end,
+ {description = "move client up", group = "client"}),
+ awful.key({ modkey, }, "Left", function (c) awful.client.moveresize(-20, 0, 0, 0) end,
+ {description = "move client left", group = "client"}),
+ awful.key({ modkey, }, "Right", function (c) awful.client.moveresize(20, 0, 0, 0) end,
+ {description = "move client right", group = "client"}),
+
+ awful.key({ modkey, "Shift" }, "t", function (c) awful.titlebar.toggle(c) end,
+ {description = "remove client titlebar", group = "client"}),
+
+ awful.key({ modkey, }, "m",
+ function (c)
+ c.maximized = not c.maximized
+ 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"})
)
-- }}}
--- {{{ Keyboard digits
-local keynumber = 0
-for s = 1, scount do
- keynumber = math.min(9, math.max(#tags[s], keynumber));
-end
--- }}}
-
-- {{{ Tag controls
-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))
+for i = 1, 9 do
+ globalkeys = gears.table.join(globalkeys,
+ awful.key({ modkey }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ tag:view_only()
+ end
+ end,
+ {description = "view tag #"..i, group = "tag"}),
+ awful.key({ modkey, "Control" }, "#" .. i + 9,
+ function ()
+ local screen = awful.screen.focused()
+ local tag = screen.tags[i]
+ if tag then
+ awful.tag.viewtoggle(tag)
+ end
+ end,
+ {description = "toggle tag #" .. i, group = "tag"}),
+ awful.key({ modkey, "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[i]
+ if tag then
+ client.focus:move_to_tag(tag)
+ end
+ end
+ end,
+ {description = "move focused client to tag #"..i, group = "tag"}),
+ awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9,
+ function ()
+ if client.focus then
+ local tag = client.focus.screen.tags[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)
+ c:emit_signal("request::activate", "mouse_click", {raise = true})
+ end),
+ awful.button({ modkey }, 1, function (c)
+ c:emit_signal("request::activate", "mouse_click", {raise = true})
+ awful.mouse.client.move(c)
+ end),
+ awful.button({ modkey }, 3, function (c)
+ c:emit_signal("request::activate", "mouse_click", {raise = true})
+ awful.mouse.client.resize(c)
+ end)
+)
-- Set keys
root.keys(globalkeys)
-- }}}
-
-- {{{ Rules
awful.rules.rules = {
- { rule = { }, properties = {
- focus = true, size_hints_honor = false,
- keys = clientkeys, buttons = clientbuttons,
- border_width = beautiful.border_width,
- border_color = beautiful.border_normal }
+ { rule = { },
+ properties = { border_width = beautiful.border_width,
+ border_color = beautiful.border_normal,
+ focus = awful.client.focus.filter,
+ size_hints_honor = false,
+ raise = true,
+ keys = clientkeys,
+ buttons = clientbuttons,
+ screen = awful.screen.preferred,
+ placement = awful.placement.no_overlap+awful.placement.no_offscreen
+ }
+ },
+
+ { rule = { name = "Alpine" },
+ properties = { screen = 1, tag = "4" } },
+ { rule = { class = "Emacs" },
+ properties = { screen = scount, tag = "2" } },
+ { rule = { class = "Firefox" },
+ properties = { screen = scount, tag = "3" } },
+ { rule = { class = "Slack" },
+ properties = { screen = scount, tag = "5" } },
+
+ { rule_any = {
+ instance = {
+ "xmessage",
+ "pinentry",
+ "plugin-container",
+ },
+
+ class = {
+ "Places", -- firefox downloads, history...
+ "Pinentry.*",
+ "Nautilus",
+ "feh",
+ "ROX-Filer",
+ "Xmessage",
+ },
+
+ name = {
+ "Library", -- firefox downloads, history...
+ "Event Tester", -- xev
+ },
+
+ role = {
+ "AlarmWindow", -- Thunderbird calendar
+ "ConfigManager", -- Thunderbird about:config
+ "pop-up", -- Browser developer tools
+ }
+ }, properties = { floating = true, titlebars_enabled = true }},
+
+ { rule_any = {type = { "normal", "dialog" }
+ }, properties = { titlebars_enabled = true }
},
- { rule = { class = "Firefox", instance = "Navigator" },
- properties = { tag = tags[scount][3] } },
- { rule = { class = "Emacs", instance = "emacs" },
- properties = { tag = tags[1][2] } },
- { rule = { class = "Emacs", instance = "_Remember_" },
- properties = { floating = true }, callback = awful.titlebar.add },
- { rule = { class = "Xmessage", instance = "xmessage" },
- properties = { floating = true }, callback = awful.titlebar.add },
- { rule = { instance = "plugin-container" },
- properties = { floating = true }, callback = awful.titlebar.add },
- { rule = { class = "Akregator" }, properties = { tag = tags[scount][8]}},
- { rule = { name = "Alpine" }, properties = { tag = tags[1][4]} },
- { rule = { class = "Gajim" }, properties = { tag = tags[1][5]} },
- { rule = { class = "Ark" }, properties = { floating = true } },
- { rule = { class = "Geeqie" }, properties = { floating = true } },
- { rule = { class = "ROX-Filer" }, properties = { floating = true } },
- { rule = { class = "Pinentry.*" }, properties = { floating = true } },
}
-- }}}
-
-- {{{ Signals
---
--- {{{ Manage signal handler
-client.add_signal("manage", function (c, startup)
- -- Add titlebar to floaters, but remove those from rule callback
- if awful.client.floating.get(c)
- or awful.layout.get(c.screen) == awful.layout.suit.floating then
- if c.titlebar then awful.titlebar.remove(c)
- else awful.titlebar.add(c, {modkey = modkey}) end
+client.connect_signal("manage", function (c)
+ if not awesome.startup then awful.client.setslave(c) end
+
+ if awesome.startup
+ and 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
- -- 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)
-
- -- Client placement
- if not startup then
- awful.client.setslave(c)
+ if not awful.client.floating.get(c) then
+ awful.titlebar.hide(c)
+ end
- if not c.size_hints.program_position
- and not c.size_hints.user_position then
- awful.placement.no_overlap(c)
- awful.placement.no_offscreen(c)
- end
+ if awful.layout.get(c.screen) == awful.layout.suit.floating then
+ awful.titlebar.show(c)
end
end)
--- }}}
--- {{{ Focus signal handlers
-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)
+-- New client signal handlers
+client.connect_signal("request::titlebars", function(c)
+ local buttons = gears.table.join(
+ awful.button({ }, 1, function()
+ c:emit_signal("request::activate", "titlebar", {raise = true})
+ awful.mouse.client.move(c)
+ end),
+ awful.button({ }, 3, function()
+ c:emit_signal("request::activate", "titlebar", {raise = true})
+ awful.mouse.client.resize(c)
+ end)
+ )
+
+ -- Theme font "Terminus 8" or "ProFont 8" for this titlebar height
+ awful.titlebar(c, { size = 16}) : setup {
+ { -- Left
+ awful.titlebar.widget.iconwidget(c),
+ buttons = buttons,
+ layout = wibox.layout.fixed.horizontal
+ },
+ { -- Middle
+ { -- Title
+ align = "center",
+ widget = awful.titlebar.widget.titlewidget(c)
+ },
+ buttons = buttons,
+ layout = wibox.layout.flex.horizontal
+ },
+ { -- Right
+ awful.titlebar.widget.floatingbutton (c),
+ awful.titlebar.widget.maximizedbutton(c),
+ awful.titlebar.widget.stickybutton (c),
+ awful.titlebar.widget.ontopbutton (c),
+ awful.titlebar.widget.closebutton (c),
+ layout = wibox.layout.fixed.horizontal()
+ },
+ layout = wibox.layout.align.horizontal
+ }
+end)
+
+-- Enable sloppy focus
+client.connect_signal("mouse::enter", function(c)
+ c:emit_signal("request::activate", "mouse_enter", {raise = false})
+end)
+
+client.connect_signal("focus", function(c) c.border_color = beautiful.border_focus end)
+client.connect_signal("unfocus", function(c) c.border_color = beautiful.border_normal end)
-- }}}
--- {{{ Arrange signal handler
-for s = 1, scount do screen[s]:add_signal("arrange", function ()
- local clients = awful.client.visible(s)
- local layout = awful.layout.getname(awful.layout.get(s))
- for _, c in pairs(clients) do -- Floaters are always on top
- if awful.client.floating.get(c) or layout == "floating"
- then if not c.fullscreen then c.above = true end
- else c.above = false end
- end
- end)
+-- {{{ Screen padding
+-- * when a laptop is right in front of the monitor and its
+-- LCD is obstructing the view of the bottom of the screen
+-- on the external monitor
+if scount == 2 then
+ awful.screen.padding(screen[1], { bottom = 235 })
end
-- }}}
+
+
+-- {{{ Autostart
+awful.spawn("/usr/bin/xinput set-prop 9 334 0 1 0") -- touchpad single finger scrolling
+awful.spawn("/home/anrxc/bin/autostart-keychain-agent.sh") -- launch the ssh-agent
+awful.spawn("/home/anrxc/bin/autostart-xmodmap-xdefaults.sh") -- xrdb merge defaults and keymap
-- }}}