Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- 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")
- -- Standard awesome library
- local gears = require("gears")
- local awful = require("awful")
- require("awful.autofocus")
- -- Widget and layout library
- local wibox = require("wibox")
- -- Theme handling library
- local beautiful = require("beautiful")
- -- Notification library
- local menubar = require("menubar")
- local hotkeys_popup = require("awful.hotkeys_popup")
- -- Enable hotkeys help widget for VIM and other apps
- -- when client with a matching name is opened:
- require("awful.hotkeys_popup.keys")
- -- {{{ Variable definitions
- beautiful.init("/home/triss/.config/awesome/theme.lua")
- terminal = "kitty"
- editor = "nvim"
- web = "firefox"
- editor_cmd = terminal .. " -e " .. editor
- modkey = "Mod4"
- -- Table of layouts to cover with awful.layout.inc, order matters.
- awful.layout.layouts = {
- awful.layout.suit.tile.left,
- awful.layout.suit.tile,
- awful.layout.suit.spiral,
- }
- -- }}}
- -- {{{ Menu
- -- Create a launcher widget and a main menu
- myawesomemenu = {
- { "hotkeys", function() hotkeys_popup.show_help(nil, awful.screen.focused()) end },
- { "manual", terminal .. " -e man awesome" },
- { "edit config", editor_cmd .. " " .. awesome.conffile },
- { "restart", awesome.restart },
- { "quit", function() awesome.quit() end },
- }
- mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
- { "open terminal", terminal }
- }
- })
- mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon,
- menu = mymainmenu })
- -- Menubar configuration
- menubar.utils.terminal = terminal -- Set the terminal for applications that require it
- -- }}}
- -- 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({ 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))
- local function set_wallpaper(s)
- -- Wallpaper
- if beautiful.wallpaper then
- local wallpaper = beautiful.wallpaper
- -- If wallpaper is a function, call it with the screen
- if type(wallpaper) == "function" then
- wallpaper = wallpaper(s)
- end
- gears.wallpaper.maximized(wallpaper, s, true)
- end
- 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)
- -- Each screen has its own tag table.
- awful.tag({ " ", " ", " ", " ", " " }, s, awful.layout.layouts[1])
- -- Create a promptbox for each screen
- s.mypromptbox = awful.widget.prompt()
- local pill1 = function(cr,w,h)
- gears.shape.rounded_rect(cr,w,h,16)
- end
- local pill2 = function(cr,w,h)
- gears.shape.rounded_rect(cr,w,h,16)
- end
- -- Taglist
- s.mytaglist = awful.widget.taglist {
- screen = s,
- filter = awful.widget.taglist.filter.all,
- style = {
- shape = pill2,
- shape_border_width = 1,
- shape_border_color = beautiful.border_soft,
- left = -12,
- right = 100,
- },
- layout = {
- spacing = 4,
- layout = wibox.layout.fixed.horizontal,
- },
- widget_template = {
- {
- {
- {
- id = 'text_role',
- widget = wibox.widget.textbox,
- },
- layout = wibox.layout.fixed.horizontal,
- },
- left = 12,
- right = 9,
- widget = wibox.container.margin
- },
- id = 'background_role',
- widget = wibox.container.background,
- -- Add support for hover colors and an index label
- },
- buttons = taglist_buttons,
- }
- -- Create a tasklist widget
- s.mytasklist = awful.widget.tasklist {
- screen = s,
- filter = awful.widget.tasklist.filter.currenttags,
- buttons = tasklist_buttons,
- style = {
- shape_border_width = 3,
- shape_border_color = beautiful.border_soft,
- shape = pill1,
- font = "Fira Sans 11.5",
- },
- layout = {
- layout = wibox.layout.flex.horizontal,
- spacing = 10,
- },
- widget_template = {
- widget = wibox.container.background,
- id = 'background_role',
- {
- widget = wibox.container.margin,
- left = 10,
- right = 20,
- {
- layout = wibox.layout.fixed.horizontal,
- {
- widget = wibox.container.margin,
- margins = 4,
- {
- id = 'icon_role',
- widget = wibox.widget.imagebox,
- },
- },
- {
- widget = wibox.widget.textbox,
- id = 'text_role',
- },
- }
- }
- }
- }
- tasklist_enc = wibox.widget {
- widget = wibox.container.background,
- shape = pill1,
- shape_border_width = 2,
- shape_border_color = beautiful.border_soft,
- bg = beautiful.tasklist_bg_normal,
- {
- widget = wibox.container.margin,
- top = 1,
- bottom = 1,
- {
- layout = wibox.layout.flex.horizontal,
- s.mytaglist
- },
- },
- }
- clock_enc = wibox.widget {
- widget = wibox.container.background,
- shape = pill1,
- shape_border_width = 2,
- shape_border_color = beautiful.border_soft,
- bg = beautiful.tasklist_bg_normal,
- {
- widget = wibox.container.margin,
- left = 8,
- right = 8,
- {
- layout = wibox.layout.flex.horizontal,
- mytextclock
- }
- }
- }
- tray_enc = wibox.widget {
- widget = awful.widget.only_on_screen,
- screen = primary,
- {
- widget = wibox.container.background,
- shape = pill1,
- shape_border_width = 2,
- shape_border_color = beautiful.border_soft,
- bg = beautiful.tasklist_bg_normal,
- screen = 1,
- {
- widget = wibox.container.margin,
- top = 6,
- bottom = 6,
- left = 8,
- right = 8,
- {
- layout = wibox.layout.flex.horizontal,
- wibox.widget.systray()
- }
- }
- }
- }
- s_l = wibox.widget {
- widget = wibox.container.margin,
- left = 16,
- right = 16,
- {
- widget = wibox.widget.separator,
- shape = gears.shape.rounded_bar,
- forced_width = 4,
- color = beautiful.bg_soft,
- border_color = beautiful.border_softer,
- border_width = 1,
- }
- }
- s_ep = wibox.widget {
- widget = awful.widget.only_on_screen,
- screen = primary,
- {
- widget = wibox.container.margin,
- left = 6,
- right = 6,
- }
- }
- local wibox_shape = function(cr,w,h)
- gears.shape.partially_rounded_rect(cr,w,h,false,false,true,true,24)
- end
- -- Create the wibox
- s.mywibox = awful.wibar{
- position = "top",
- screen = s,
- border_width = 2,
- border_color = beautiful.border_normal,
- height = 54,
- --width = "97%",
- --shape = wibox_shape,
- }
- -- Add widgets to the wibox
- s.mywibox:setup {
- widget = wibox.container.margin,
- left = 12,
- right = 12,
- top = 2,
- bottom = 2,
- {
- layout = wibox.layout.align.horizontal,
- { -- Left widgets
- layout = wibox.layout.fixed.horizontal,
- tasklist_enc,
- s.mypromptbox,
- s_l,
- },
- s.mytasklist, -- Middle widget
- { -- Right widgets
- layout = wibox.layout.fixed.horizontal,
- s_l,
- tray_enc,
- s_ep,
- clock_enc,
- },
- },
- }
- end)
- -- }}}
- -- {{{ Mouse bindings
- -- }}}
- -- {{{ Key bindings
- globalkeys = gears.table.join(
- awful.key({ modkey, }, "Left", awful.tag.viewprev,
- {description = "view previous", group = "tag"}),
- awful.key({ modkey, }, "Right", awful.tag.viewnext,
- {description = "view next", group = "tag"}),
- awful.key({ modkey, }, "Escape", awful.tag.history.restore,
- {description = "go back", group = "tag"}),
- awful.key({ modkey, }, "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"}
- ),
- -- Layout manipulation
- 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, "Control" }, "j", 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),
- 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.spawn(terminal) end),
- awful.key({ modkey, }, "w", function () awful.spawn(web) end),
- awful.key({ modkey, }, "e", function () awful.spawn("kitty --class='files' lfrun") end),
- awful.key({ modkey, }, "m", function () awful.spawn("kitty --class='music' ncmpcpp") end),
- -- Maim
- awful.key({ "Control" }, "Print", function () awful.spawn.with_shell("Skrypty/maim/Slop.sh") end),
- awful.key({ modkey }, "Print", function () awful.spawn.with_shell("Skrypty/maim/Curw.sh") end),
- -- Xoris
- awful.key({ modkey }, "c", function () awful.spawn.with_shell("Skrypty/xoris.sh") end),
- -- Volume
- --awful.key({}, "XF86AudioLowerVolume", function () awful.spawn.with_shell("Skrypty/audio/lower.sh") end),
- --awful.key({}, "XF86AudioRaiseVolume", function () awful.spawn.with_shell("Skrypty/audio/raise.sh") end),
- awful.key({}, "XF86AudioMute", function () awful.spawn.with_shell("Skrypty/audio/mute.sh") end),
- awful.key({ "Shift" }, "XF86AudioLowerVolume", function () awful.spawn.with_shell("mpc volume -2") end),
- awful.key({ "Shift" }, "XF86AudioRaiseVolume", function () awful.spawn.with_shell("mpc volume +2") end),
- -- Media Keys
- awful.key({}, "XF86AudioPlay", function()
- awful.spawn.with_shell("mpc toggle") end),
- awful.key({}, "XF86AudioNext", function()
- awful.spawn.with_shell("mpc next") end),
- awful.key({}, "XF86AudioPrev", function()
- awful.spawn.with_shell("mpc prev") end),
- awful.key({ modkey, "Control" }, "r", awesome.restart),
- awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end,
- {description = "increase master width factor", group = "layout"}),
- awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end,
- {description = "decrease master width factor", group = "layout"}),
- awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1, nil, true) end,
- {description = "increase the number of master clients", group = "layout"}),
- awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1, nil, true) end,
- {description = "decrease the number of master clients", group = "layout"}),
- awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1, nil, true) end,
- {description = "increase the number of columns", group = "layout"}),
- awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1, nil, true) end,
- {description = "decrease the number of columns", group = "layout"}),
- awful.key({ modkey, }, "space", function () awful.layout.inc( 1) end,
- {description = "select next", group = "layout"}),
- awful.key({ modkey, "Shift" }, "space", function () awful.layout.inc(-1) end,
- {description = "select previous", group = "layout"}),
- awful.key({ modkey, "Control" }, "n",
- function ()
- local c = awful.client.restore()
- -- Focus restored client
- if c then
- c:emit_signal(
- "request::activate", "key.unminimize", {raise = true}
- )
- end
- end,
- {description = "restore minimized", group = "client"}),
- -- Prompt
- awful.key({ modkey }, "r", function () awful.screen.focused().mypromptbox:run() end,
- {description = "run prompt", group = "launcher"}),
- -- Menubar
- awful.key({ modkey }, "p", function() menubar.show() end,
- {description = "show the menubar", group = "launcher"})
- )
- 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, }, "x", function (c) c:kill() end),
- awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ,
- {description = "toggle floating", group = "client"}),
- awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end,
- {description = "move to master", group = "client"}),
- awful.key({ modkey, }, "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, }, "n",
- function (c)
- -- The client currently has the input focus, so it cannot be
- -- minimized, since minimized clients can't have the focus.
- c.minimized = true
- end ,
- {description = "minimize", group = "client"}),
- awful.key({ modkey, }, "b",
- function (c)
- c.maximized = not c.maximized
- c:raise()
- end ,
- {description = "(un)maximize", group = "client"}),
- awful.key({ modkey, "Control" }, "b",
- function (c)
- c.maximized_vertical = not c.maximized_vertical
- c:raise()
- end ,
- {description = "(un)maximize vertically", group = "client"}),
- awful.key({ modkey, "Shift" }, "b",
- function (c)
- c.maximized_horizontal = not c.maximized_horizontal
- c:raise()
- end ,
- {description = "(un)maximize horizontally", group = "client"})
- )
- -- Bind all key numbers to tags.
- -- Be careful: we use keycodes to make it work on any keyboard layout.
- -- This should map on the top row of your keyboard, usually 1 to 9.
- for i = 1, 9 do
- globalkeys = gears.table.join(globalkeys,
- -- View tag only.
- awful.key({ modkey }, "#" .. i + 9,
- 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"}),
- -- Toggle tag display.
- 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"}),
- -- Move client to 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"}),
- -- Toggle tag on focused client.
- 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
- -- Rules to apply to new clients (through the "manage" signal).
- 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,
- raise = true,
- keys = clientkeys,
- buttons = clientbuttons,
- screen = awful.screen.preferred,
- placement = awful.placement.no_overlap+awful.placement.no_offscreen
- }
- },
- -- Floating clients.
- { rule_any = {
- instance = {
- "DTA", -- Firefox addon DownThemAll.
- "copyq", -- Includes session name in class.
- "pinentry",
- },
- class = {
- "Arandr",
- "Blueman-manager",
- "Gpick",
- "Kruler",
- "MessageWin", -- kalarm.
- "Sxiv",
- "Tor Browser", -- Needs a fixed window size to avoid fingerprinting by screen size.
- "Wpa_gui",
- "veromix",
- "tuimoji",
- "mixer",
- "Nirogen",
- "xtightvncviewer"},
- -- Note that the name property shown in xprop might be set slightly after creation of the client
- -- and the name shown there might not match defined rules here.
- name = {
- "Event Tester", -- xev.
- },
- role = {
- "AlarmWindow", -- Thunderbird's calendar.
- "ConfigManager", -- Thunderbird's about:config.
- "pop-up", -- e.g. Google Chrome's (detached) Developer Tools.
- }
- }, properties = { floating = true }},
- { rule = { class = "Firefox" }, properties = { tag = " " } },
- { rule = { class = "discord" }, properties = { screen = 2, tag = " " } },
- { rule = { class = "kitty" }, properties = { tag = " " } },
- { rule = { class = "files" }, properties = { tag = " " } },
- { rule = { class = "music" }, properties = { tag = " " } },
- -- Set Firefox to always map on the tag named "2" on screen 1.
- -- { rule = { class = "Firefox" },
- -- properties = { screen = 1, tag = "2" } },
- }
- -- }}}
- -- Rounded windows
- local client_shape = function(cr,w,h)
- gears.shape.rounded_rect(cr,w,h,48)
- end
- -- {{{ Signals
- -- Signal function to execute when a new client appears.
- client.connect_signal("manage", function (c)
- -- Set the windows at the slave,
- -- i.e. put it at the end of others instead of setting it master.
- -- if not awesome.startup then awful.client.setslave(c) end
- c.shape = client_shape
- if awesome.startup
- and not c.size_hints.user_position
- and not c.size_hints.program_position then
- -- Prevent clients from being unreachable after screen count changes.
- awful.placement.no_offscreen(c)
- end
- end)
- -- Enable sloppy focus, so that focus follows mouse.
- client.connect_signal("mouse::enter", function(c)
- c:emit_signal("request::activate", "mouse_enter", {raise = false})
- end)
- function fs_adj(c)
- if c.fullscreen or c.maximized then
- c.shape = gears.shape.rectangle
- c.border_width = 0
- else
- c.shape = client_shape
- c.border_width = beautiful.border_width
- end
- end
- client.connect_signal("property::fullscreen", fs_adj)
- client.connect_signal("property::maximized", fs_adj)
- --client.connect_signal("focus", fs_adj)
- --client.connect_signal("unfocus", fs_adj)
- 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)
- -- }}}
- awful.spawn.with_shell(".config/awesome/autorun.sh")
Advertisement
Add Comment
Please, Sign In to add comment