---Default rc.lua edited by Alex -- Standard awesome library local gears = require("gears") local awful = require("awful") awful.rules = require("awful.rules") require("awful.autofocus") -- Widget and layout library 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") -- {{{ Error handling -- Check if awesome encountered an error during startup and fell back to -- another config (This code will only ever execute for the fallback config) if awesome.startup_errors then naughty.notify({ preset = naughty.config.presets.critical, title = "Oops, there were errors during startup!", text = awesome.startup_errors }) end -- Handle runtime errors after startup do local in_error = false awesome.connect_signal("debug::error", function (err) -- Make sure we don't go into an endless error loop 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 -- }}} -- {{{ Variable definitions -- Themes define colours, icons, and wallpapers beautiful.init("/home/alex/.config/awesome/themes/sky/theme.lua") -- This is used later as the default terminal and editor to run. terminal = "urxvt" editor = os.getenv("EDITOR") or "nano" editor_cmd = terminal .. " -e " .. editor gui_editor = "geany" browser = "google-chrome" fileman = "thunar /home/alex/" --cli_fileman = terminal .. " -e ranger " --music = terminal .. " -e ncmpcpp " --chat = terminal .. " -e weechat-curses " tasks = terminal .. " -e htop " -- 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" altkey = "Mod1" -- key = awful.key exec = awful.util.spawn execs = awful.util.spawn_with_shell -- Table of layouts to cover with awful.layout.inc, order matters. local 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 } -- }}} -- {{{ Wallpaper if beautiful.wallpaper then for s = 1, screen.count() do gears.wallpaper.maximized(beautiful.wallpaper, s, true) end end -- }}} -- {{{ Tags -- Define a tag table which hold all screen tags. tags = {} for s = 1, screen.count() do -- Each screen has its own tag table. --Symbol Tags tags[s] = awful.tag({ "⌘", "♐", "⌥", "⌤","⚡" }, s, { layouts[1], layouts[2], layouts[2], layouts[2], layouts[1] }) end -- }}} -- {{{ Menu -- Create a laucher widget and a main menu --myawesomemenu = { -- { "manual", terminal .. " -e man awesome" }, -- { "edit config", editor_cmd .. " " .. awesome.conffile }, -- { "restart", awesome.restart }, -- { "quit", awesome.quit } --} -- Shutdown menu exitmenu = { { "Shutdown" , "systemctl poweroff" }, { "Reboot" , "systemctl reboot"}, { "Restart" , awesome.restart }, { "Quit" , awesome.quit } } --File Manager Menu --Games Menu mygames = { { "Steam" , "steam" }, { "Minecraft" , "minecraft" }, { "FTL" , "ftl" }, { "Dwarf Fortress" , "dwarffortress" }, { "Dwarf Therapist" , "dwarftherapist" } } --Apps Menu myapps = { { "Geany" , gui_editor }, { "GIMP" , "gimp" }, { "gSharkDown" , "gsharkdown" }, { "Handbrake" , "ghb" }, { "Leafpad" , "leafpad" }, { "Mumble" , "mumble" }, { "vlc", "vlc" }, { "Xarchiver", "xarchiver" } } --Settings Menu mysystem = { { "Appearance" , "lxappearance" }, { "nVidia Settings" , "sudo nvidia-settings" }, { "Task Manager" , tasks } } -- Combine the menus mymainmenu = awful.menu({ items = { { "Chrome", browser }, { "File Manager", fileman }, { "Terminal", terminal }, { " ", nil, nil}, -- separator { "Apps" , myapps }, { "Games" , mygames }, { "Settings" , mysystem }, { " ", nil, nil}, -- separator { "Exit", exitmenu, beautiful.awesome_icon } } }) mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu }) -- Menubar configuration menubar.utils.terminal = terminal -- Set the terminal for applications that require it -- }}} -- {{{ Wibox --- Setting up all the widgets --- -- Clock & Calendar mytextclockicon = wibox.widget.imagebox() mytextclockicon:set_image(beautiful.widget_clock) mytextclock = awful.widget.textclock() local calendar = nil local offset = 0 function remove_calendar() if calendar ~= nil then naughty.destroy(calendar) calendar = nil offset = 0 end end function add_calendar(inc_offset) local save_offset = offset remove_calendar() offset = save_offset + inc_offset local datespec = os.date("*t") datespec = datespec.year * 12 + datespec.month - 1 + offset datespec = (datespec % 12 + 1) .. " " .. math.floor(datespec / 12) local cal = awful.util.pread("cal -m " .. datespec) cal = string.gsub(cal, "^%s*(.-)%s*$", "%1") calendar = naughty.notify({ text = string.format('%s', font, cal), position = "top_right", fg = beautiful.fg_urgent, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, -- width = 135, -- height = 110, }) end mytextclock:connect_signal('mouse::enter', function () add_calendar(0) end) mytextclock:connect_signal('mouse::leave', function () remove_calendar() end) mytextclock:buttons(awful.util.table.join( awful.button({ }, 1, function() add_calendar(1) end), awful.button({ }, 3, function() add_calendar(-1) end), awful.button({ 'Shift' }, 1, function() add_calendar(12) end), awful.button({ 'Shift' }, 3, function() add_calendar(-12) end))) --- Kernel Info sysicon = wibox.widget.imagebox() sysicon:set_image(beautiful.widget_sys) syswidget = wibox.widget.textbox() vicious.register(syswidget, vicious.widgets.os, "$2") --syswidget:buttons(awful.util.table.join( -- awful.button({ }, 1, function () exec(terminale) end), -- awful.button({ }, 3, function () exec(root_terminal) end))) local function dispmemo() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen( "cat ~/.memo" ) infos = f:read("*all") f:close() showmemo = naughty.notify( { text = infos, font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "bottom_right", -- margin = 4, -- height = 33, -- width = 120, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end syswidget:connect_signal('mouse::enter', function () dispmemo(path) end) syswidget:connect_signal('mouse::leave', function () naughty.destroy(showmemo) end) --Uptime uptimeicon = wibox.widget.imagebox() uptimeicon:set_image(beautiful.widget_uptime) uptimewidget = wibox.widget.textbox() vicious.register( uptimewidget, vicious.widgets.uptime, "$2.$3'") uptimeicon:buttons(awful.util.table.join(awful.button({ }, 1, function () exec(htop) end))) --System Temperature tempicon = wibox.widget.imagebox() tempicon:set_image(beautiful.widget_temp) tempwidget = wibox.widget.textbox() vicious.register(tempwidget, vicious.widgets.thermal, "$1°C", 9, { "coretemp.0", "core"} ) local function disptemp() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen("sudo hddtemp /dev/sdc && sensors | grep Core && sensors | grep temp1") infos = f:read("*all") f:close() showtempinfo = naughty.notify( { text = infos, -- title = "Temperatures", font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "bottom_right", margin = 8, height = 88, width = 460, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end uptimewidget:connect_signal('mouse::enter', function () disptemp(path) end) uptimewidget:connect_signal('mouse::leave', function () naughty.destroy(showtempinfo) end) ---CPU cpuicon = wibox.widget.imagebox() cpuicon:set_image(beautiful.widget_cpu) cpuwidget = wibox.widget.textbox() vicious.register( cpuwidget, vicious.widgets.cpu, "$1", 3) --cpuicon:buttons(awful.util.table.join(awful.button({ }, 1, function () exec(saidar) end))) --RAM memicon = wibox.widget.imagebox() memicon:set_image(beautiful.widget_mem) memwidget = wibox.widget.textbox() vicious.register(memwidget, vicious.widgets.mem, "$2", 3) --memicon:buttons(awful.util.table.join(awful.button({ }, 1, function () exec(tasks) end))) local function dispmem() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen("free -m | grep total && free -m | grep Mem") infos = f:read("*all") f:close() showmeminfo = naughty.notify( { text = infos, font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "top_right", -- margin = 10, -- height = 61, -- width = 540, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end memwidget:connect_signal('mouse::enter', function () dispmem(path) end) memwidget:connect_signal('mouse::leave', function () naughty.destroy(showmeminfo) end) --Hard Drives fsicon = wibox.widget.imagebox() fsicon:set_image(beautiful.widget_fs) -- vicious.cache(vicious.widgets.fs) fswidget = wibox.widget.textbox() vicious.register(fswidget, vicious.widgets.fs, "${/ used_p}", 10) local function dispdisk() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen("dfc -d | grep /dev/sdb") infos = f:read("*all") f:close() showdiskinfo = naughty.notify( { text = infos, font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "top_right", margin = 8, height = 90, width = 698, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end fswidget:connect_signal('mouse::enter', function () dispdisk(path) end) fswidget:connect_signal('mouse::leave', function () naughty.destroy(showdiskinfo) end) -- Volume volicon = wibox.widget.imagebox() volicon:set_image(beautiful.widget_vol) --volicon:buttons(awful.util.table.join(awful.button({ }, 1, function () exec(mixer) end))) volumewidget = wibox.widget.textbox() vicious.register( volumewidget, vicious.widgets.volume, "$1", 1, "Master" ) volumewidget:buttons(awful.util.table.join( awful.button({ }, 1, function () exec( "amixer -q sset Master toggle", false ) end), awful.button({ }, 4, function () exec( "amixer -q sset Master 1dB+", false ) end), awful.button({ }, 5, function () exec( "amixer -q sset Master 1dB-", false ) end))) -- MPD --useMpd = true --mpdicon = wibox.widget.imagebox() --mpdicon:set_image(beautiful.widget_mpd) --mpdwidget = wibox.widget.textbox() --vicious.register(mpdwidget, vicious.widgets.mpd, --function(widget, args) --string = "" .. args["{Title}"] .. " - " .. args["{Artist}"] .. "" -- play --if (args["{state}"] == "Play") then ---mpdwidget.visible = true --return string -- pause --elseif (args["{state}"] == "Pause") then --mpdwidget.visible = true --return "mpd paused" -- stop --elseif (args["{state}"] == "Stop") then --mpdwidget.visible = true --return "mpd stopped" -- not running --else --mpdwidget.visible = true --return "mpd off" --end --end, 1) --mpdwidget:buttons(awful.util.table.join( -- awful.button({ }, 1, function () exec( "mpc next", false ) end), -- awful.button({ }, 3, function () exec( "mpc prev", false ) end))) --local function dispmusic() -- local f, infos -- local capi = { -- mouse = mouse, -- screen = screen -- } -- f = io.popen( "mpc status -f 'Title: %title% Artist: %artist% Album: %album% '" ) -- infos = f:read("*all") -- f:close() -- showmusic = naughty.notify( { -- text = infos, -- font = font, -- fg = beautiful.fg_normal, -- bg = beautiful.bg_normal, -- timeout = 0, -- hover_timeout = 0.5, -- position = "top_left", -- margin = 4, -- height = 33, -- width = 120, -- border_color = beautiful.border_tooltip, -- border_width = 1, -- opacity = 0.94, -- screen = capi.mouse.screen }) --end --mpdwidget:connect_signal('mouse::enter', function () dispmusic(path) end) --mpdwidget:connect_signal('mouse::leave', function () naughty.destroy(showmusic) end) --Network netdownicon = wibox.widget.imagebox() netdownicon:set_image(beautiful.widget_netdown) netupicon = wibox.widget.imagebox() netupicon:set_image(beautiful.widget_netup) wifidowninfo = wibox.widget.textbox() vicious.register(wifidowninfo, vicious.widgets.net, "${enp7s0 down_kb}", 1) wifiupinfo = wibox.widget.textbox() vicious.register(wifiupinfo, vicious.widgets.net, "${enp7s0 up_kb}", 1) local function dispip() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen( "sh ~/.scripts/ip" ) infos = f:read("*all") f:close() showip = naughty.notify( { text = infos, font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "bottom_right", margin = 5, -- height = 33, -- width = 120, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end wifidowninfo:connect_signal('mouse::enter', function () dispip(path) end) wifidowninfo:connect_signal('mouse::leave', function () naughty.destroy(showip) end) local function dispdns() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen("cat /etc/resolv.conf") infos = f:read("*all") f:close() showdns = naughty.notify( { text = infos, font = font, fg = beautiful.fg_red, bg = beautiful.fg_black, timeout = 0, hover_timeout = 0.5, position = "bottom_right", margin = 5, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end wifiupinfo:connect_signal('mouse::enter', function () dispdns(path) end) wifiupinfo:connect_signal('mouse::leave', function () naughty.destroy(showdns) end) --- -- Pacman Updates pacicon = wibox.widget.imagebox() pacicon:set_image(beautiful.widget_pac) pacwidget = wibox.widget.textbox() vicious.register(pacwidget, vicious.widgets.pkg, "$1", 60, "Arch") local function updates() local f, infos local capi = { mouse = mouse, screen = screen } f = io.popen("sudo pacman -Qu") infos = f:read("*all") if infos == "" then infos = "No updates" end f:close() showpac = naughty.notify ( { text = infos, font = font, fg = beautiful.fg_normal, bg = beautiful.bg_normal, timeout = 0, hover_timeout = 0.5, position = "bottom_right", -- run = function () exec(terminal .. " -e sudo pacman -Su") end, border_color = beautiful.border_tooltip, border_width = 1, -- opacity = 0.94, screen = capi.mouse.screen }) end pacicon:connect_signal('mouse::enter', function () updates(path) end) pacicon:connect_signal('mouse::leave', function () naughty.destroy(showpac) end) --click to update --pacicon:buttons(awful.util.table.join(awful.button({ }, 1, function () exec(update) end))) -- Spacers rbracket = wibox.widget.textbox() rbracket:set_text(']') lbracket = wibox.widget.textbox() lbracket:set_text('[') line = wibox.widget.textbox() line:set_text('|') space = wibox.widget.textbox() space:set_text(' ') space2 = wibox.widget.textbox() space2:set_text(' ') -- Create a wibox for each screen and add it -- Bars -- --Set Bars 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) ) ---Tasklist 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() -- Create an imagebox widget which will contains an icon indicating which layout we're using. -- 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) -- Wibox -- Top bar -- Create the wibox mywibox[s] = awful.wibox({ position = "top", screen = s }) -- Widgets that are aligned to the left local left_layout = wibox.layout.fixed.horizontal() left_layout:add(mylauncher) left_layout:add(mytaglist[s]) left_layout:add(mypromptbox[s]) -- Widgets that are aligned to the right local right_layout = wibox.layout.fixed.horizontal() right_layout:add(netdownicon) right_layout:add(wifidowninfo) right_layout:add(space2) right_layout:add(wifiupinfo) right_layout:add(netupicon) right_layout:add(space) --right_layout:add(mailicon) --right_layout:add(mailcount) right_layout:add(space2) right_layout:add(pacicon) right_layout:add(pacwidget) right_layout:add(space2) right_layout:add(memicon) right_layout:add(memwidget) right_layout:add(space2) right_layout:add(cpuicon) right_layout:add(cpuwidget) right_layout:add(space2) right_layout:add(volicon) right_layout:add(volumewidget) right_layout:add(space2) right_layout:add(tempicon) right_layout:add(tempwidget) right_layout:add(space2) right_layout:add(uptimeicon) right_layout:add(uptimewidget) right_layout:add(space) right_layout:add(fsicon) right_layout:add(fswidget) right_layout:add(space2) right_layout:add(syswidget) right_layout:add(space) right_layout:add(mytextclockicon) right_layout:add(mytextclock) right_layout:add(space) -- if s == 1 then right_layout:add(wibox.widget.systray()) end -- right_layout:add(mylayoutbox[s]) -- 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) ---Bottom Bar mybottomwibox[s] = awful.wibox({ position = "bottom", screen = s, border_width = 0, height = 20 }) -- mybottomwibox[s].visible = false -- Widgets that are aligned to the left bottom_left_layout = wibox.layout.fixed.horizontal() bottom_left_layout:add(space) -- Widgets that are aligned to the right bottom_right_layout = wibox.layout.fixed.horizontal() bottom_right_layout:add(space) if s == 1 then bottom_right_layout:add(wibox.widget.systray()) end 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( awful.key({ modkey, }, "Left", awful.tag.viewprev ), awful.key({ modkey, }, "Right", awful.tag.viewnext ), awful.key({ modkey, }, "Escape", awful.tag.history.restore), 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, }, "w", function () mymainmenu:show() 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), -- 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), 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" }, "h", function () awful.tag.incnmaster( 1) end), awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), awful.key({ modkey, "Control" }, "l", 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), -- 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), -- Menubar awful.key({ modkey }, "p", function() menubar.show() 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) ) -- 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 -- 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, 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)) 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 } }, { rule = { class = "MPlayer" }, properties = { floating = true } }, { rule = { class = "pinentry" }, properties = { floating = true } }, { rule = { class = "gimp" }, properties = { floating = true } }, { rule = { class = "mumble" }, properties = { floating = true } }, -- Set Firefox to always map on tags number 2 of screen 1. -- { rule = { class = "Firefox" }, -- properties = { tag = tags[1][2] } }, } -- }}} -- {{{ Signals -- Signal function to execute when a new client appears. client.connect_signal("manage", function (c, startup) -- Enable sloppy focus c:connect_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) if not startup then -- Set the windows at the slave, -- i.e. put it at the end of others instead of setting it master. -- awful.client.setslave(c) -- Put windows in a smart way, only if they does not set an initial position. if 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 end local titlebars_enabled = false if titlebars_enabled and (c.type == "normal" or c.type == "dialog") then -- Widgets that are aligned to the left local left_layout = wibox.layout.fixed.horizontal() left_layout:add(awful.titlebar.widget.iconwidget(c)) -- 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 title = awful.titlebar.widget.titlewidget(c) title: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) )) -- Now bring it all together local layout = wibox.layout.align.horizontal() layout:set_left(left_layout) layout:set_right(right_layout) layout:set_middle(title) awful.titlebar(c):set_widget(layout) end 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) -- }}}