-- If LuaRocks is installed, make sure that packages installed through it are -- found (e.g. lgi). If LuaRocks is not installed, do nothing. pcall(require, "luarocks.loader") local gears = require("gears") local awful = require("awful") local wibox = require("wibox") local beautiful = require("beautiful") require("awful.autofocus") local main = require("main") local bindings = require("bindings") beautiful.init(require("theme")) RC = {} RC.vars = main.user_vars() RC.layouts = main.layouts() RC.tags = main.taglist() awful.spawn.with_shell("picom -b") -- Table of layouts to cover with awful.layout.inc, order matters. awful.layout.layouts = RC.layouts -- Keyboard map indicator and switcher -- mykeyboardlayout = awful.widget.keyboardlayout() -- {{{ Wibar -- Create a textclock widget mytextclock = wibox.widget.textclock() -- Create a wibox for each screen and add it local taglist_buttons = gears.table.join( awful.button({}, 1, function(t) t:view_only() end), awful.button({ RC.vars.modkey }, 1, function(t) if client.focus then client.focus:move_to_tag(t) end end), awful.button({}, 3, awful.tag.viewtoggle), awful.button({ RC.vars.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) ) local function set_wallpaper(s) gears.wallpaper.maximized(RC.vars.wallpaper, s, true) end -- Re-set wallpaper when a screen's geometry changes (e.g. different resolution) screen.connect_signal("property::geometry", set_wallpaper) awful.screen.connect_for_each_screen(function(s) -- Wallpaper set_wallpaper(s) -- Create a promptbox for each screen s.mypromptbox = awful.widget.prompt() -- Create an imagebox widget which will contain an icon indicating which layout we're using. -- We need one layoutbox per screen. 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 a taglist widget s.mytaglist = awful.widget.taglist({ screen = s, filter = awful.widget.taglist.filter.all, buttons = taglist_buttons, }) -- Create a tasklist widget s.mytasklist = awful.widget.tasklist({ screen = s, filter = awful.widget.tasklist.filter.currenttags, buttons = tasklist_buttons, }) -- Create the wibox s.mywibox = awful.wibar({ position = "top", screen = s }) -- Add widgets to the wibox s.mywibox:setup({ layout = wibox.layout.align.horizontal, { -- Left widgets layout = wibox.layout.fixed.horizontal, s.mytaglist, s.mypromptbox, }, s.mytasklist, -- Middle widget { -- Right widgets layout = wibox.layout.fixed.horizontal, wibox.widget.systray(), mytextclock, s.mylayoutbox, }, }) end) -- }}} -- Set keys root.buttons(bindings.global_buttons()) root.keys(bindings.global_keys()) awful.rules.rules = main.rules(bindings.client_keys(), bindings.client_buttons())