Last active
February 25, 2016 15:31
-
-
Save korenyoni/4bac80e2a7b5503a9656 to your computer and use it in GitHub Desktop.
Awesome config using awesome-copycats multicolor theme. Resizeable tiling windows using alt+ctrl+h/j/k/l. Centred terminal spawn in floating mode. Customized tab names. Alt+ctrl+n/p for next/previous tag browsing.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--[[ | |
Multicolor Awesome WM config 2.0 | |
github.com/copycat-killer | |
--]] | |
-- {{{ Required libraries | |
local gears = require("gears") | |
local awful = require("awful") | |
awful.rules = require("awful.rules") | |
require("awful.autofocus") | |
local wibox = require("wibox") | |
local beautiful = require("beautiful") | |
local naughty = require("naughty") | |
local drop = require("scratchdrop") | |
local lain = require("lain") | |
-- }}} | |
-- {{{ Error handling | |
if awesome.startup_errors then | |
naughty.notify({ preset = naughty.config.presets.critical, | |
title = "Oops, there were errors during startup!", | |
text = awesome.startup_errors }) | |
end | |
do | |
local in_error = false | |
awesome.connect_signal("debug::error", function (err) | |
if in_error then return end | |
in_error = true | |
naughty.notify({ preset = naughty.config.presets.critical, | |
title = "Oops, an error happened!", | |
text = err }) | |
in_error = false | |
end) | |
end | |
-- }}} | |
-- {{{ Autostart applications | |
function run_once(cmd) | |
findme = cmd | |
firstspace = cmd:find(" ") | |
if firstspace then | |
findme = cmd:sub(0, firstspace-1) | |
end | |
awful.util.spawn_with_shell("pgrep -u $USER -x " .. findme .. " > /dev/null || (" .. cmd .. ")") | |
end | |
run_once("urxvtd") | |
run_once("unclutter -root") | |
-- }}} | |
-- {{{ Variable definitions | |
-- beautiful init | |
beautiful.init(os.getenv("HOME") .. "/.config/awesome/themes/multicolor/theme.lua") | |
-- common | |
modkey = "Mod4" | |
altkey = "Mod1" | |
terminal = "gnome-terminal" or "xterm" | |
editor = os.getenv("EDITOR") or "nano" or "vi" | |
editor_cmd = terminal .. " -e " .. editor | |
-- user defined | |
browser = "google-chrome" | |
browser2 = "firefox" | |
gui_editor = "gvim" | |
graphics = "gimp" | |
mail = terminal .. " -e mutt " | |
local layouts = { | |
awful.layout.suit.floating, | |
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.spiral, | |
awful.layout.suit.spiral.dwindle, | |
awful.layout.suit.max, | |
} | |
-- }}} | |
-- {{{ Tags | |
tags = { | |
names = { "web", "term", "prog", "IDE" , "media", "IRC", "other" }, | |
layout = { layouts[1], layouts[3], layouts[4], layouts[1], layouts[1], layouts[7], layouts[1] } | |
} | |
for s = 1, screen.count() do | |
-- Each screen has its own tag table. | |
tags[s] = awful.tag(tags.names, s, tags.layout) | |
end | |
-- }}} | |
--{{{ Wallpaper | |
for s = 1, screen.count() do | |
gears.wallpaper.maximized("/home/yon/Downloads/wallpapers/scandinavia.jpg", s, true) | |
end | |
--}}} | |
-- {{{ Freedesktop Menu | |
mymainmenu = awful.menu.new({ items = require("menugen").build_menu(), | |
theme = { height = 16, width = 130 }}) | |
-- }}} | |
-- {{{ Wibox | |
markup = lain.util.markup | |
-- Textclock | |
clockicon = wibox.widget.imagebox(beautiful.widget_clock) | |
--mytextclock = awful.widget.textclock(markup("#7788af", "%A %d %B ") .. markup("#343639", ">") .. markup("#de5e1e", " %H:%M ")) | |
mytextclock = lain.widgets.abase({ | |
timeout = 60, | |
cmd = "date +'%A %d %B %R'", | |
settings = function() | |
local t_output = "" | |
local o_it = string.gmatch(output, "%S+") | |
for i=1,3 do t_output = t_output .. " " .. o_it(i) end | |
widget:set_markup(markup("#7788af", t_output) .. markup("#343639", " > ") .. markup("#de5e1e", o_it(1)) .. " ") | |
end | |
}) | |
-- Calendar | |
lain.widgets.calendar:attach(mytextclock, { font_size = 10 }) | |
-- Weather | |
weathericon = wibox.widget.imagebox(beautiful.widget_weather) | |
myweather = lain.widgets.weather({ | |
APPID = "yallahabibi", | |
city_id = 6092122, -- placeholder | |
settings = function() | |
descr = weather_now["weather"][1]["description"]:lower() | |
units = math.floor(weather_now["main"]["temp"]) | |
widget:set_markup(markup("#eca4c4", descr .. " @ " .. units .. "°C ")) | |
end | |
}) | |
-- / fs | |
fsicon = wibox.widget.imagebox(beautiful.widget_fs) | |
fswidget = lain.widgets.fs({ | |
settings = function() | |
widget:set_markup(markup("#80d9d8", fs_now.used .. "% ")) | |
end | |
}) | |
--[[ Mail IMAP check | |
-- commented because it needs to be set before use | |
mailicon = wibox.widget.imagebox() | |
mailicon:buttons(awful.util.table.join(awful.button({ }, 1, function () awful.util.spawn(mail) end))) | |
mailwidget = lain.widgets.imap({ | |
timeout = 180, | |
server = "server", | |
mail = "mail", | |
password = "keyring get mail", | |
settings = function() | |
if mailcount > 0 then | |
mailicon:set_image(beautiful.widget_mail) | |
widget:set_markup(markup("#cccccc", mailcount .. " ")) | |
else | |
widget:set_text("") | |
mailicon:set_image(nil) | |
end | |
end | |
}) | |
]] | |
-- CPU | |
cpuicon = wibox.widget.imagebox() | |
cpuicon:set_image(beautiful.widget_cpu) | |
cpuwidget = lain.widgets.cpu({ | |
settings = function() | |
widget:set_markup(markup("#e33a6e", cpu_now.usage .. "% ")) | |
end | |
}) | |
-- Coretemp | |
tempicon = wibox.widget.imagebox(beautiful.widget_temp) | |
tempwidget = lain.widgets.temp({ | |
settings = function() | |
widget:set_markup(markup("#f1af5f", coretemp_now .. "°C ")) | |
end | |
}) | |
-- Battery | |
baticon = wibox.widget.imagebox(beautiful.widget_batt) | |
batwidget = lain.widgets.bat({ | |
battery = "BAT1", | |
settings = function() | |
if bat_now.perc == "N/A" then | |
perc = "AC " | |
else | |
perc = bat_now.perc .. "% " | |
end | |
widget:set_text(perc) | |
end | |
}) | |
-- ALSA volume | |
volicon = wibox.widget.imagebox(beautiful.widget_vol) | |
volumewidget = lain.widgets.alsa({ | |
settings = function() | |
if volume_now.status == "off" then | |
volume_now.level = volume_now.level .. "M" | |
end | |
widget:set_markup(markup("#7493d2", volume_now.level .. "% ")) | |
end | |
}) | |
-- Net | |
netdownicon = wibox.widget.imagebox(beautiful.widget_netdown) | |
--netdownicon.align = "middle" | |
netdowninfo = wibox.widget.textbox() | |
netupicon = wibox.widget.imagebox(beautiful.widget_netup) | |
--netupicon.align = "middle" | |
netupinfo = lain.widgets.net({ | |
settings = function() | |
if iface ~= "network off" and | |
string.match(myweather._layout.text, "N/A") | |
then | |
myweather.update() | |
end | |
widget:set_markup(markup("#e54c62", net_now.sent .. " ")) | |
netdowninfo:set_markup(markup("#87af5f", net_now.received .. " ")) | |
end | |
}) | |
-- MEM | |
memicon = wibox.widget.imagebox(beautiful.widget_mem) | |
memwidget = lain.widgets.mem({ | |
settings = function() | |
widget:set_markup(markup("#e0da37", mem_now.used .. "M ")) | |
end | |
}) | |
-- MPD | |
mpdicon = wibox.widget.imagebox() | |
mpdwidget = lain.widgets.mpd({ | |
settings = function() | |
mpd_notification_preset = { | |
text = string.format("%s [%s] - %s\n%s", mpd_now.artist, | |
mpd_now.album, mpd_now.date, mpd_now.title) | |
} | |
if mpd_now.state == "play" then | |
artist = mpd_now.artist .. " > " | |
title = mpd_now.title .. " " | |
mpdicon:set_image(beautiful.widget_note_on) | |
elseif mpd_now.state == "pause" then | |
artist = "mpd " | |
title = "paused " | |
else | |
artist = "" | |
title = "" | |
mpdicon:set_image(nil) | |
end | |
widget:set_markup(markup("#e54c62", artist) .. markup("#b2b2b2", title)) | |
end | |
}) | |
-- Spacer | |
spacer = wibox.widget.textbox(" ") | |
-- }}} | |
-- {{{ Layout | |
-- Create a wibox for each screen and add it | |
mywibox = {} | |
mybottomwibox = {} | |
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, awful.tag.viewtoggle), | |
awful.button({ modkey }, 3, awful.client.toggletag), | |
awful.button({ }, 4, function(t) awful.tag.viewnext(awful.tag.getscreen(t)) end), | |
awful.button({ }, 5, function(t) awful.tag.viewprev(awful.tag.getscreen(t)) end) | |
) | |
mytasklist = {} | |
mytasklist.buttons = awful.util.table.join( | |
awful.button({ }, 1, function (c) | |
if c == client.focus then | |
c.minimized = true | |
else | |
-- Without this, the following | |
-- :isvisible() makes no sense | |
c.minimized = false | |
if not c:isvisible() then | |
awful.tag.viewonly(c:tags()[1]) | |
end | |
-- This will also un-minimize | |
-- the client, if needed | |
client.focus = c | |
c:raise() | |
end | |
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() | |
-- 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.filter.all, mytaglist.buttons) | |
-- Create a tasklist widget | |
mytasklist[s] = awful.widget.tasklist(s, awful.widget.tasklist.filter.currenttags, mytasklist.buttons) | |
-- Create the upper wibox | |
mywibox[s] = awful.wibox({ position = "top", screen = s, height = 20 }) | |
--border_width = 0, height = 20 }) | |
-- Widgets that are aligned to the upper left | |
local left_layout = wibox.layout.fixed.horizontal() | |
left_layout:add(mytaglist[s]) | |
left_layout:add(mypromptbox[s]) | |
left_layout:add(mpdicon) | |
left_layout:add(mpdwidget) | |
-- Widgets that are aligned to the upper right | |
local right_layout = wibox.layout.fixed.horizontal() | |
if s == 1 then right_layout:add(wibox.widget.systray()) end | |
--right_layout:add(mailicon) | |
--right_layout:add(mailwidget) | |
right_layout:add(netdownicon) | |
right_layout:add(netdowninfo) | |
right_layout:add(netupicon) | |
right_layout:add(netupinfo) | |
right_layout:add(volicon) | |
right_layout:add(volumewidget) | |
right_layout:add(memicon) | |
right_layout:add(memwidget) | |
right_layout:add(cpuicon) | |
right_layout:add(cpuwidget) | |
right_layout:add(fsicon) | |
right_layout:add(fswidget) | |
right_layout:add(weathericon) | |
right_layout:add(myweather) | |
right_layout:add(tempicon) | |
right_layout:add(tempwidget) | |
right_layout:add(baticon) | |
right_layout:add(batwidget) | |
right_layout:add(clockicon) | |
right_layout:add(mytextclock) | |
-- Now bring it all together (with the tasklist in the middle) | |
local layout = wibox.layout.align.horizontal() | |
layout:set_left(left_layout) | |
--layout:set_middle(mytasklist[s]) | |
layout:set_right(right_layout) | |
mywibox[s]:set_widget(layout) | |
-- Create the bottom wibox | |
mybottomwibox[s] = awful.wibox({ position = "bottom", screen = s, border_width = 0, height = 20 }) | |
--mybottomwibox[s].visible = false | |
-- Widgets that are aligned to the bottom left | |
bottom_left_layout = wibox.layout.fixed.horizontal() | |
-- Widgets that are aligned to the bottom right | |
bottom_right_layout = wibox.layout.fixed.horizontal() | |
bottom_right_layout:add(mylayoutbox[s]) | |
-- Now bring it all together (with the tasklist in the middle) | |
bottom_layout = wibox.layout.align.horizontal() | |
bottom_layout:set_left(bottom_left_layout) | |
bottom_layout:set_middle(mytasklist[s]) | |
bottom_layout:set_right(bottom_right_layout) | |
mybottomwibox[s]:set_widget(bottom_layout) | |
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( | |
-- Take a screenshot | |
-- https://github.com/copycat-killer/dots/blob/master/bin/screenshot | |
awful.key({ altkey }, "p", function() os.execute("screenshot") end), | |
awful.key({ altkey }, "d", function() awful.util.spawn("dmenu_run") end), | |
-- Tag browsing | |
awful.key({ altkey, "Control" }, "p", awful.tag.viewprev ), | |
awful.key({ altkey, "Control" }, "n", awful.tag.viewnext ), | |
awful.key({ altkey, "Control" }, "Escape", awful.tag.history.restore), | |
-- Non-empty tag browsing | |
awful.key({ altkey }, "Left", function () lain.util.tag_view_nonempty(-1) end), | |
awful.key({ altkey }, "Right", function () lain.util.tag_view_nonempty(1) end), | |
-- Default client focus | |
awful.key({ altkey }, "k", | |
function () | |
awful.client.focus.byidx( 1) | |
if client.focus then client.focus:raise() end | |
end), | |
awful.key({ altkey }, "j", | |
function () | |
awful.client.focus.byidx(-1) | |
if client.focus then client.focus:raise() end | |
end), | |
-- By direction client focus | |
awful.key({ modkey }, "j", | |
function() | |
awful.client.focus.bydirection("down") | |
if client.focus then client.focus:raise() end | |
end), | |
awful.key({ modkey }, "k", | |
function() | |
awful.client.focus.bydirection("up") | |
if client.focus then client.focus:raise() end | |
end), | |
awful.key({ modkey }, "h", | |
function() | |
awful.client.focus.bydirection("left") | |
if client.focus then client.focus:raise() end | |
end), | |
awful.key({ modkey }, "l", | |
function() | |
awful.client.focus.bydirection("right") | |
if client.focus then client.focus:raise() end | |
end), | |
-- Show Menu | |
awful.key({ modkey }, "w", | |
function () | |
mymainmenu:show({ keygrabber = true }) | |
end), | |
-- Show/Hide Wibox | |
awful.key({ modkey }, "b", function () | |
mywibox[mouse.screen].visible = not mywibox[mouse.screen].visible | |
mybottomwibox[mouse.screen].visible = not mybottomwibox[mouse.screen].visible | |
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({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), | |
awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), | |
awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), | |
awful.key({ modkey, "Control" }, "h", 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), | |
awful.key({ modkey, "Control" }, "n", awful.client.restore), | |
awful.key({ altkey, "Control" }, "h", function () awful.client.incwfact(0.01) end), | |
awful.key({ altkey, "Control" }, "l", function () awful.client.incwfact(-0.01) end), | |
awful.key({ altkey, "Control" }, "j", function () awful.tag.incmwfact( 0.05) end), | |
awful.key({ altkey, "Control" }, "k", function () awful.tag.incmwfact(-0.05) 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), | |
-- Dropdown terminal | |
awful.key({ modkey, }, "z", function () drop(terminal) end), | |
-- Widgets popups | |
awful.key({ altkey, }, "c", function () lain.widgets.calendar:show(7) end), | |
awful.key({ altkey, }, "h", function () fswidget.show(7) end), | |
awful.key({ altkey, }, "w", function () myweather.show(7) end), | |
-- Dmenu | |
-- ALSA volume control | |
awful.key({ altkey }, "Up", | |
function () | |
os.execute(string.format("amixer set %s 1%%+", volumewidget.channel)) | |
volumewidget.update() | |
end), | |
awful.key({ altkey }, "Down", | |
function () | |
os.execute(string.format("amixer set %s 1%%-", volumewidget.channel)) | |
volumewidget.update() | |
end), | |
awful.key({ altkey }, "m", | |
function () | |
os.execute(string.format("amixer set %s toggle", volumewidget.channel)) | |
volumewidget.update() | |
end), | |
awful.key({ altkey, "Control" }, "m", | |
function () | |
os.execute(string.format("amixer set %s 100%%", volumewidget.channel)) | |
volumewidget.update() | |
end), | |
-- MPD control | |
awful.key({ altkey, "Control" }, "Up", | |
function () | |
awful.util.spawn_with_shell("mpc toggle || ncmpc toggle || pms toggle") | |
mpdwidget.update() | |
end), | |
awful.key({ altkey, "Control" }, "Down", | |
function () | |
awful.util.spawn_with_shell("mpc stop || ncmpc stop || pms stop") | |
mpdwidget.update() | |
end), | |
awful.key({ altkey, "Control" }, "Left", | |
function () | |
awful.util.spawn_with_shell("mpc prev || ncmpc prev || pms prev") | |
mpdwidget.update() | |
end), | |
awful.key({ altkey, "Control" }, "Right", | |
function () | |
awful.util.spawn_with_shell("mpc next || ncmpc next || pms next") | |
mpdwidget.update() | |
end), | |
-- Brightness | |
awful.key({ }, "XF86MonBrightnessDown", function () | |
awful.util.spawn("xbacklight -dec 15") end), | |
awful.key({ }, "XF86MonBrightnessUp", function () | |
awful.util.spawn("xbacklight -inc 15") end), | |
-- Copy to clipboard | |
awful.key({ modkey }, "c", function () os.execute("xsel -p -o | xsel -i -b") end), | |
-- User programs | |
awful.key({ modkey }, "q", function () awful.util.spawn(browser) end), | |
awful.key({ modkey }, "i", function () awful.util.spawn(browser2) end), | |
awful.key({ modkey }, "s", function () awful.util.spawn(gui_editor) end), | |
awful.key({ modkey }, "g", function () awful.util.spawn(graphics) end), | |
-- Prompt | |
awful.key({ modkey }, "r", 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) | |
) | |
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, "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, }, "t", function (c) c.ontop = not c.ontop end), | |
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), | |
awful.key({ modkey, }, "m", | |
function (c) | |
c.maximized_horizontal = not c.maximized_horizontal | |
c.maximized_vertical = not c.maximized_vertical | |
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, 9 do | |
globalkeys = awful.util.table.join(globalkeys, | |
-- View tag only. | |
awful.key({ modkey }, "#" .. i + 9, | |
function () | |
local screen = mouse.screen | |
local tag = awful.tag.gettags(screen)[i] | |
if tag then | |
awful.tag.viewonly(tag) | |
end | |
end), | |
-- Toggle tag. | |
awful.key({ modkey, "Control" }, "#" .. i + 9, | |
function () | |
local screen = mouse.screen | |
local tag = awful.tag.gettags(screen)[i] | |
if tag then | |
awful.tag.viewtoggle(tag) | |
end | |
end), | |
-- Move client to tag. | |
awful.key({ modkey, "Shift" }, "#" .. i + 9, | |
function () | |
if client.focus then | |
local tag = awful.tag.gettags(client.focus.screen)[i] | |
if tag then | |
awful.client.movetotag(tag) | |
end | |
end | |
end), | |
-- Toggle tag. | |
awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, | |
function () | |
if client.focus then | |
local tag = awful.tag.gettags(client.focus.screen)[i] | |
if tag then | |
awful.client.toggletag(tag) | |
end | |
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 = awful.client.focus.filter, | |
keys = clientkeys, | |
buttons = clientbuttons, | |
size_hints_honor = false } }, | |
{ rule = { class = "URxvt" }, | |
properties = { opacity = 0.99 } }, | |
{ rule = { class = "MPlayer" }, | |
properties = { floating = true } }, | |
{ rule = { class = "Dwb" }, | |
properties = { tag = tags[1][1] } }, | |
{ rule = { class = "Iron" }, | |
properties = { tag = tags[1][1] } }, | |
{ rule = { instance = "plugin-container" }, | |
properties = { tag = tags[1][1] } }, | |
{ rule = { class = "Gimp" }, | |
properties = { tag = tags[1][4] } }, | |
{ rule = { class = "Gimp", role = "gimp-image-window" }, | |
properties = { maximized_horizontal = true, | |
maximized_vertical = true } }, | |
} | |
-- }}} | |
-- {{{ Signals | |
-- signal function to execute when a new client appears. | |
local sloppyfocus_last = {c=nil} | |
client.connect_signal("manage", function (c, startup) | |
awful.placement.centered(c, nil) | |
-- Enable sloppy focus | |
client.connect_signal("mouse::enter", function(c) | |
if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier | |
and awful.client.focus.filter(c) then | |
-- Skip focusing the client if the mouse wasn't moved. | |
if c ~= sloppyfocus_last.c then | |
client.focus = c | |
sloppyfocus_last.c = c | |
end | |
end | |
end) | |
local titlebars_enabled = false | |
if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then | |
-- buttons for the titlebar | |
local buttons = awful.util.table.join( | |
awful.button({ }, 1, function() | |
client.focus = c | |
c:raise() | |
awful.mouse.client.move(c) | |
end), | |
awful.button({ }, 3, function() | |
client.focus = c | |
c:raise() | |
awful.mouse.client.resize(c) | |
end) | |
) | |
-- widgets that are aligned to the right | |
local right_layout = wibox.layout.fixed.horizontal() | |
right_layout:add(awful.titlebar.widget.floatingbutton(c)) | |
right_layout:add(awful.titlebar.widget.maximizedbutton(c)) | |
right_layout:add(awful.titlebar.widget.stickybutton(c)) | |
right_layout:add(awful.titlebar.widget.ontopbutton(c)) | |
right_layout:add(awful.titlebar.widget.closebutton(c)) | |
-- the title goes in the middle | |
local middle_layout = wibox.layout.flex.horizontal() | |
local title = awful.titlebar.widget.titlewidget(c) | |
title:set_align("center") | |
middle_layout:add(title) | |
middle_layout:buttons(buttons) | |
-- now bring it all together | |
local layout = wibox.layout.align.horizontal() | |
layout:set_right(right_layout) | |
layout:set_middle(middle_layout) | |
awful.titlebar(c,{size=16}):set_widget(layout) | |
end | |
end) | |
-- No border for maximized clients | |
client.connect_signal("focus", | |
function(c) | |
if c.maximized_horizontal == true and c.maximized_vertical == true then | |
c.border_color = beautiful.border_normal | |
else | |
c.border_color = beautiful.border_focus | |
end | |
end) | |
client.connect_signal("unfocus", | |
function(c) | |
c.border_color = beautiful.border_normal | |
end) | |
-- }}} | |
-- {{{ Arrange signal handler | |
for s = 1, screen.count() do screen[s]:connect_signal("arrange", function () | |
local clients = awful.client.visible(s) | |
local layout = awful.layout.getname(awful.layout.get(s)) | |
if #clients > 0 then -- Fine grained borders and floaters control | |
for _, c in pairs(clients) do -- Floaters always have borders | |
-- No borders with only one humanly visible client | |
if layout == "max" then | |
c.border_width = 0 | |
elseif awful.client.floating.get(c) or layout == "floating" then | |
c.border_width = beautiful.border_width | |
elseif #clients == 1 then | |
clients[1].border_width = 0 | |
if layout ~= "max" then | |
awful.client.moveresize(0, 0, 2, 0, clients[1]) | |
end | |
else | |
c.border_width = beautiful.border_width | |
end | |
end | |
end | |
end) | |
end | |
-- }}} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment