From e21969de85e4f3a666414827a45aa9810df59c53 Mon Sep 17 00:00:00 2001 From: Toma Adrian-Ionut Date: Sat, 24 Sep 2022 16:15:13 +0300 Subject: [PATCH] update --- rc.lua.template | 1161 +++++++++++++++++++++++++++-------------------- 1 file changed, 661 insertions(+), 500 deletions(-) diff --git a/rc.lua.template b/rc.lua.template index 737c4d8..25acba1 100644 --- a/rc.lua.template +++ b/rc.lua.template @@ -42,7 +42,9 @@ do local in_error = false awesome.connect_signal("debug::error", function(err) - if in_error then return end + if in_error then + return + end in_error = true @@ -63,9 +65,7 @@ end -- This function will run once every time Awesome is started local function run_once(cmd_arr) for _, cmd in ipairs(cmd_arr) do - awful.spawn.with_shell(string.format( - "pgrep -u $USER -fx '%s' > /dev/null || (%s)", - cmd, cmd)) + awful.spawn.with_shell(string.format("pgrep -u $USER -fx '%s' > /dev/null || (%s)", cmd, cmd)) end end @@ -85,17 +85,16 @@ awful.spawn.with_shell( -- {{{ Variable definitions -local themes = { - "blackburn", -- 1 - "copland", -- 2 - "dremora", -- 3 - "holo", -- 4 - "multicolor", -- 5 - "powerarrow", -- 6 - "powerarrow-dark", -- 7 DEFAULT - "rainbow", -- 8 - "steamburn", -- 9 - "vertex" -- 10 +local themes = {"blackburn", -- 1 +"copland", -- 2 +"dremora", -- 3 +"holo", -- 4 +"multicolor", -- 5 +"powerarrow", -- 6 +"powerarrow-dark", -- 7 DEFAULT +"rainbow", -- 8 +"steamburn", -- 9 +"vertex" -- 10 } local chosen_theme = themes[7] @@ -110,32 +109,29 @@ local browser = "librewolf" -- Bluetooth os.execute("rfkill block bluetooth") -BLUESTATUS = false +local BLUESTATUS = false -- IBus for keyboard layout switch -- os.execute("ibus-daemon -d") awful.util.terminal = terminal awful.util.tagnames = {"1", "2"} -awful.layout.layouts = { - 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.floating - -- awful.layout.suit.max, - -- awful.layout.suit.max.fullscreen, - -- awful.layout.suit.magnifier, - -- awful.layout.suit.corner.nw, - -- awful.layout.suit.corner.ne, - -- awful.layout.suit.corner.sw, - -- awful.layout.suit.corner.se, - -- lain.layout.cascade, - -- lain.layout.cascade.tile, - -- lain.layout.centerwork, - -- lain.layout.centerwork.horizontal, - -- lain.layout.termfair, - -- lain.layout.termfair.center +awful.layout.layouts = {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.floating +-- awful.layout.suit.max, +-- awful.layout.suit.max.fullscreen, +-- awful.layout.suit.magnifier, +-- awful.layout.suit.corner.nw, +-- awful.layout.suit.corner.ne, +-- awful.layout.suit.corner.sw, +-- awful.layout.suit.corner.se, +-- lain.layout.cascade, +-- lain.layout.cascade.tile, +-- lain.layout.centerwork, +-- lain.layout.centerwork.horizontal, +-- lain.layout.termfair, +-- lain.layout.termfair.center } lain.layout.termfair.nmaster = 3 @@ -148,57 +144,61 @@ lain.layout.cascade.tile.extra_padding = 5 lain.layout.cascade.tile.nmaster = 5 lain.layout.cascade.tile.ncol = 2 -awful.util.taglist_buttons = mytable.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)) +awful.util.taglist_buttons = mytable.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)) -awful.util.tasklist_buttons = mytable.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)) +awful.util.tasklist_buttons = mytable.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)) -beautiful.init(string.format("%s/.config/awesome/themes/%s/theme.lua", - os.getenv("HOME"), chosen_theme)) +beautiful.init(string.format("%s/.config/awesome/themes/%s/theme.lua", os.getenv("HOME"), chosen_theme)) -- }}} -- {{{ Menu -- Create a launcher widget and a main menu -local myawesomemenu = { - { - "Hotkeys", - function() hotkeys_popup.show_help(nil, awful.screen.focused()) end - }, {"Manual", string.format("%s -e man awesome", terminal)}, { - "Edit config", - string.format("%s -e %s %s", terminal, editor, awesome.conffile) - }, {"Restart", awesome.restart}, {"Quit", function() awesome.quit() end} -} +local myawesomemenu = {{"Hotkeys", function() + hotkeys_popup.show_help(nil, awful.screen.focused()) +end}, {"Manual", string.format("%s -e man awesome", terminal)}, + {"Edit config", string.format("%s -e %s %s", terminal, editor, awesome.conffile)}, + {"Restart", awesome.restart}, {"Quit", function() + awesome.quit() +end}} awful.util.mymainmenu = freedesktop.menu.build { - before = { - {"Awesome", myawesomemenu, beautiful.awesome_icon} -- other triads can be put here + before = {{"Awesome", myawesomemenu, beautiful.awesome_icon} -- other triads can be put here }, - after = { - {"Open terminal", terminal} -- other triads can be put here + after = {{"Open terminal", terminal} -- other triads can be put here } } @@ -251,8 +251,9 @@ screen.connect_signal("arrange", function(s) end) -- Create a wibox for each screen and add it -awful.screen.connect_for_each_screen( - function(s) beautiful.at_screen_connect(s) end) +awful.screen.connect_for_each_screen(function(s) + beautiful.at_screen_connect(s) +end) -- }}} @@ -260,319 +261,425 @@ awful.screen.connect_for_each_screen( root.buttons(mytable.join(awful.button({}, 3, function() awful.util.mymainmenu:toggle() -end), awful.button({}, 4, awful.tag.viewnext), - awful.button({}, 5, awful.tag.viewprev))) +end), awful.button({}, 4, awful.tag.viewnext), awful.button({}, 5, awful.tag.viewprev))) -- }}} -- {{{ Key bindings globalkeys = mytable.join( -- Destroy all notifications - awful.key({"Control", "Shift"}, "Escape", - function() naughty.destroy_all_notifications() end, { - description = "destroy all notifications", - group = "hotkeys" - }), -- Take a screenshot - -- https://github.com/lcpz/dots/blob/master/bin/screenshot - awful.key({altkey}, "p", function() os.execute("screenshot.lnk") end, - {description = "take a screenshot", group = "hotkeys"}), -- xlock screen locker - awful.key({altkey, "Control", "Shift"}, "l", - function() os.execute("xlock") end, - {description = "lock screen", group = "hotkeys"}), -- Show help - awful.key({modkey}, "s", hotkeys_popup.show_help, - {description = "show help", group = "awesome"}), -- Tag browsing - awful.key({modkey, "Ctrl"}, "Left", awful.tag.viewprev, - {description = "view previous", group = "tag"}), - awful.key({modkey, "Ctrl"}, "Right", awful.tag.viewnext, - {description = "view next", group = "tag"}), - awful.key({modkey}, "Escape", awful.tag.history.restore, - {description = "go back", group = "tag"}), -- Non-empty tag browsing - -- awful.key({altkey}, "Left", function() - -- lain.util.tag_view_nonempty(-1) - -- end, { - -- description = "view previous nonempty", - -- group = "tag" - -- }), - -- awful.key({altkey}, "Right", function() - -- lain.util.tag_view_nonempty(1) - -- end, { - -- description = "view previous nonempty", - -- group = "tag" - -- }), - -- Default client focus - awful.key({altkey}, "j", - function() awful.client.focus.byidx(1) end, { - description = "focus next by index", - group = "client" - }), awful.key({altkey}, "k", function() awful.client.focus.byidx(-1) end, - {description = "focus previous by index", group = "client"}), -- By-direction client focus - awful.key({modkey}, "j", function() - awful.client.focus.global_bydirection("down") - if client.focus then client.focus:raise() end - end, {description = "focus down", group = "client"}), - awful.key({modkey}, "k", function() - awful.client.focus.global_bydirection("up") - if client.focus then client.focus:raise() end - end, {description = "focus up", group = "client"}), - awful.key({modkey}, "h", function() - awful.client.focus.global_bydirection("left") - if client.focus then client.focus:raise() end - end, {description = "focus left", group = "client"}), - awful.key({modkey}, "l", function() - awful.client.focus.global_bydirection("right") - if client.focus then client.focus:raise() end - end, {description = "focus right", group = "client"}), -- Menu - awful.key({modkey}, "w", function() awful.util.mymainmenu:show() end, - {description = "show main menu", group = "awesome"}), -- 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, - {description = "jump to urgent client", group = "client"}), - awful.key({modkey}, "Tab", function() - if cycle_prev then - awful.client.focus.history.previous() - else - awful.client.focus.byidx(-1) +awful.key({"Control", "Shift"}, "Escape", function() + naughty.destroy_all_notifications() +end, { + description = "destroy all notifications", + group = "hotkeys" +}), -- Take a screenshot +-- https://github.com/lcpz/dots/blob/master/bin/screenshot +awful.key({altkey}, "p", function() + os.execute("screenshot.lnk") +end, { + description = "take a screenshot", + group = "hotkeys" +}), -- xlock screen locker +awful.key({altkey, "Control", "Shift"}, "l", function() + os.execute("xlock") +end, { + description = "lock screen", + group = "hotkeys" +}), -- Show help +awful.key({modkey}, "s", hotkeys_popup.show_help, { + description = "show help", + group = "awesome" +}), -- Tag browsing +awful.key({modkey, "Ctrl"}, "Left", awful.tag.viewprev, { + description = "view previous", + group = "tag" +}), awful.key({modkey, "Ctrl"}, "Right", awful.tag.viewnext, { + description = "view next", + group = "tag" +}), awful.key({modkey}, "Escape", awful.tag.history.restore, { + description = "go back", + group = "tag" +}), -- Non-empty tag browsing +-- awful.key({altkey}, "Left", function() +-- lain.util.tag_view_nonempty(-1) +-- end, { +-- description = "view previous nonempty", +-- group = "tag" +-- }), +-- awful.key({altkey}, "Right", function() +-- lain.util.tag_view_nonempty(1) +-- end, { +-- description = "view previous nonempty", +-- group = "tag" +-- }), +-- Default client focus +awful.key({altkey}, "j", function() + awful.client.focus.byidx(1) +end, { + description = "focus next by index", + group = "client" +}), awful.key({altkey}, "k", function() + awful.client.focus.byidx(-1) +end, { + description = "focus previous by index", + group = "client" +}), -- By-direction client focus +awful.key({modkey}, "j", function() + awful.client.focus.global_bydirection("down") + if client.focus then + client.focus:raise() + end +end, { + description = "focus down", + group = "client" +}), awful.key({modkey}, "k", function() + awful.client.focus.global_bydirection("up") + if client.focus then + client.focus:raise() + end +end, { + description = "focus up", + group = "client" +}), awful.key({modkey}, "h", function() + awful.client.focus.global_bydirection("left") + if client.focus then + client.focus:raise() + end +end, { + description = "focus left", + group = "client" +}), awful.key({modkey}, "l", function() + awful.client.focus.global_bydirection("right") + if client.focus then + client.focus:raise() + end +end, { + description = "focus right", + group = "client" +}), -- Menu +awful.key({modkey}, "w", function() + awful.util.mymainmenu:show() +end, { + description = "show main menu", + group = "awesome" +}), -- 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, { + description = "jump to urgent client", + group = "client" +}), awful.key({modkey}, "Tab", function() + if cycle_prev then + awful.client.focus.history.previous() + else + awful.client.focus.byidx(-1) + end + if client.focus then + client.focus:raise() + end +end, { + description = "cycle with previous/go back", + group = "client" +}), -- Show/hide wibox +awful.key({modkey}, "b", function() + for s in screen do + s.mywibox.visible = not s.mywibox.visible + if s.mybottomwibox then + s.mybottomwibox.visible = not s.mybottomwibox.visible end - if client.focus then client.focus:raise() end - end, {description = "cycle with previous/go back", group = "client"}), -- Show/hide wibox - awful.key({modkey}, "b", function() - for s in screen do - s.mywibox.visible = not s.mywibox.visible - if s.mybottomwibox then - s.mybottomwibox.visible = not s.mybottomwibox.visible - end - end - end, {description = "toggle wibox", group = "awesome"}), - -- On-the-fly useless gaps change - -- awful.key({ altkey, "Control" }, "+", function() - -- lain.util.useless_gaps_resize(1) - -- end, { - -- description = "increment useless gaps", - -- group = "tag" - -- }), awful.key({ altkey, "Control" }, "-", function() - -- lain.util.useless_gaps_resize(-1) - -- end, { - -- description = "decrement useless gaps", - -- group = "tag" - -- }), - -- Dynamic tagging - awful.key({modkey, "Shift"}, "n", - function() lain.util.add_tag() end, - {description = "add new tag", group = "tag"}), - awful.key({modkey, "Shift"}, "r", - function() lain.util.rename_tag() end, - {description = "rename tag", group = "tag"}), - awful.key({modkey, "Shift"}, "Left", - function() lain.util.move_tag(-1) end, { - description = "move tag to the left", - group = "tag" - }), - awful.key({modkey, "Shift"}, "Right", - function() lain.util.move_tag(1) end, { - description = "move tag to the right", - group = "tag" - }), - awful.key({modkey, "Shift"}, "d", - function() lain.util.delete_tag() end, - {description = "delete tag", group = "tag"}), -- Standard program - awful.key({modkey}, "Return", - function() awful.spawn(terminal) end, { - description = "open a terminal", - group = "launcher" - }), awful.key({modkey, "Control"}, "r", awesome.restart, - {description = "reload awesome", group = "awesome"}), - awful.key({modkey, "Shift"}, "q", awesome.quit, - {description = "quit awesome", group = "awesome"}), - awful.key({modkey, altkey}, "l", - function() awful.tag.incmwfact(0.05) end, { - description = "increase master width factor", - group = "layout" - }), - awful.key({modkey, altkey}, "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"}), -- Dropdown application - awful.key({modkey}, "z", function() - awful.screen.focused().quake:toggle() - end, {description = "dropdown application", group = "launcher"}), -- Widgets popups - -- awful.key({ altkey }, "c", function() - -- if beautiful.cal then - -- beautiful.cal.show(7) - -- end - -- end, { - -- description = "show calendar", - -- group = "widgets" - -- }), awful.key({ altkey }, "h", function() - -- if beautiful.fs then - -- beautiful.fs.show(7) - -- end - -- end, { - -- description = "show filesystem", - -- group = "widgets" - -- }), awful.key({ altkey }, "w", function() - -- if beautiful.weather then - -- beautiful.weather.show(7) - -- end - -- end, { - -- description = "show weather", - -- group = "widgets" - -- }), - -- Screen brightness - awful.key({}, "#233", function() os.execute("light -A 10") end, - { - description = "Fn + f6 --- brightness +10%", - group = "hotkeys" - }), awful.key({}, "#232", function() os.execute("light -U 10") end, { - description = "Fn + f5 --- brightness -10%", - group = "hotkeys" - }), -- Max/Min Brightness - awful.key({altkey, "Control", "Shift"}, "0", - function() os.execute("light -S 0") end, - {description = "Min screen brightness", group = "hotkeys"}), - awful.key({altkey, "Control", "Shift"}, "9", function() - os.execute("light -S 100") - end, {description = "Max screen brightness", group = "hotkeys"}), - awful.key({altkey, "Control", "Shift"}, "m", function() - os.execute("light -S 50") - end, {description = "Mid screen brightness", group = "hotkeys"}), - -- Bluetooth toggle - awful.key({altkey, "Control", "Shift"}, "b", function() - os.execute("rfkill toggle bluetooth") - if BLUESTATUS == false then - naughty.notify({ - title = "Bluetooth", - text = "Bluetooth is ON", - }) - BLUESTATUS = true - else - naughty.notify({ - title = "Bluetooth", - text = "Bluetooth is OFF", - }) - BLUESTATUS = false - end - end, {description = "Bluetooth toggle ON/OFF", group = "hotkeys"}), - -- ALSA volume control - awful.key({}, "#123", function() - os.execute( - string.format("amixer -q set %s 5%%+", beautiful.volume.channel)) - beautiful.volume.update() - end, {description = "Fn + f3 --- volume up", group = "hotkeys"}), - awful.key({}, "#122", function() - os.execute( - string.format("amixer -q set %s 5%%-", beautiful.volume.channel)) - beautiful.volume.update() - end, {description = "Fn + f2 --- volume down", group = "hotkeys"}), - awful.key({}, "#121", function() - os.execute(string.format("amixer -q set %s toggle", beautiful.volume - .togglechannel or beautiful.volume.channel)) - beautiful.volume.update() - end, {description = "Fn + f1 --- toggle mute", group = "hotkeys"}), - awful.key({altkey, "Control"}, "9", function() - os.execute( - string.format("amixer -q set %s 100%%", beautiful.volume.channel)) - beautiful.volume.update() - end, {description = "volume 100%", group = "hotkeys"}), - awful.key({altkey, "Control"}, "0", function() - os.execute( - string.format("amixer -q set %s 0%%", beautiful.volume.channel)) - beautiful.volume.update() - end, {description = "volume 0%", group = "hotkeys"}), -- MPD control - -- awful.key({altkey, "Control"}, "Up", function() - -- os.execute("mpc toggle") - -- beautiful.mpd.update() - -- end, { - -- description = "mpc toggle", - -- group = "widgets" - -- }), awful.key({altkey, "Control"}, "Down", function() - -- os.execute("mpc stop") - -- beautiful.mpd.update() - -- end, { - -- description = "mpc stop", - -- group = "widgets" - -- }), awful.key({altkey, "Control"}, "Left", function() - -- os.execute("mpc prev") - -- beautiful.mpd.update() - -- end, { - -- description = "mpc prev", - -- group = "widgets" - -- }), awful.key({altkey, "Control"}, "Right", function() - -- os.execute("mpc next") - -- beautiful.mpd.update() - -- end, { - -- description = "mpc next", - -- group = "widgets" - -- }), awful.key({altkey}, "0", function() - -- local common = { - -- text = "MPD widget ", - -- position = "top_middle", - -- timeout = 2 - -- } - -- if beautiful.mpd.timer.started then - -- beautiful.mpd.timer:stop() - -- common.text = common.text .. lain.util.markup.bold("OFF") - -- else - -- beautiful.mpd.timer:start() - -- common.text = common.text .. lain.util.markup.bold("ON") - -- end - -- naughty.notify(common) - -- end, { - -- description = "mpc on/off", - -- group = "widgets" - -- }), - -- Copy primary to clipboard (terminals to gtk) - awful.key({modkey}, "c", - function() awful.spawn.with_shell("xsel | xsel -i -b") end, - {description = "copy terminal to gtk", group = "hotkeys"}), -- Copy clipboard to primary (gtk to terminals) - awful.key({modkey}, "v", function() - awful.spawn.with_shell("xsel -b | xsel") - end, {description = "copy gtk to terminal", group = "hotkeys"}), -- User programs - awful.key({modkey}, "d", function() awful.spawn(browser) end, - {description = "run browser", group = "launcher"}), -- Default - --[[ Menubar + end +end, { + description = "toggle wibox", + group = "awesome" +}), -- On-the-fly useless gaps change +-- awful.key({ altkey, "Control" }, "+", function() +-- lain.util.useless_gaps_resize(1) +-- end, { +-- description = "increment useless gaps", +-- group = "tag" +-- }), awful.key({ altkey, "Control" }, "-", function() +-- lain.util.useless_gaps_resize(-1) +-- end, { +-- description = "decrement useless gaps", +-- group = "tag" +-- }), +-- Dynamic tagging +awful.key({modkey, "Shift"}, "n", function() + lain.util.add_tag() +end, { + description = "add new tag", + group = "tag" +}), awful.key({modkey, "Shift"}, "r", function() + lain.util.rename_tag() +end, { + description = "rename tag", + group = "tag" +}), awful.key({modkey, "Shift"}, "Left", function() + lain.util.move_tag(-1) +end, { + description = "move tag to the left", + group = "tag" +}), awful.key({modkey, "Shift"}, "Right", function() + lain.util.move_tag(1) +end, { + description = "move tag to the right", + group = "tag" +}), awful.key({modkey, "Shift"}, "d", function() + lain.util.delete_tag() +end, { + description = "delete tag", + group = "tag" +}), -- Standard program +awful.key({modkey}, "Return", function() + awful.spawn(terminal) +end, { + description = "open a terminal", + group = "launcher" +}), awful.key({modkey, "Control"}, "r", awesome.restart, { + description = "reload awesome", + group = "awesome" +}), awful.key({modkey, "Shift"}, "q", awesome.quit, { + description = "quit awesome", + group = "awesome" +}), awful.key({modkey, altkey}, "l", function() + awful.tag.incmwfact(0.05) +end, { + description = "increase master width factor", + group = "layout" +}), awful.key({modkey, altkey}, "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" +}), -- Dropdown application +awful.key({modkey}, "z", function() + awful.screen.focused().quake:toggle() +end, { + description = "dropdown application", + group = "launcher" +}), -- Widgets popups +-- awful.key({ altkey }, "c", function() +-- if beautiful.cal then +-- beautiful.cal.show(7) +-- end +-- end, { +-- description = "show calendar", +-- group = "widgets" +-- }), awful.key({ altkey }, "h", function() +-- if beautiful.fs then +-- beautiful.fs.show(7) +-- end +-- end, { +-- description = "show filesystem", +-- group = "widgets" +-- }), awful.key({ altkey }, "w", function() +-- if beautiful.weather then +-- beautiful.weather.show(7) +-- end +-- end, { +-- description = "show weather", +-- group = "widgets" +-- }), +-- Screen brightness +awful.key({}, "#233", function() + os.execute("light -A 10") +end, { + description = "Fn + f6 --- brightness +10%", + group = "hotkeys" +}), awful.key({}, "#232", function() + os.execute("light -U 10") +end, { + description = "Fn + f5 --- brightness -10%", + group = "hotkeys" +}), -- Max/Min Brightness +awful.key({altkey, "Control", "Shift"}, "0", function() + os.execute("light -S 0") +end, { + description = "Min screen brightness", + group = "hotkeys" +}), awful.key({altkey, "Control", "Shift"}, "9", function() + os.execute("light -S 100") +end, { + description = "Max screen brightness", + group = "hotkeys" +}), awful.key({altkey, "Control", "Shift"}, "m", function() + os.execute("light -S 50") +end, { + description = "Mid screen brightness", + group = "hotkeys" +}), -- Bluetooth toggle +awful.key({altkey, "Control", "Shift"}, "b", function() + os.execute("rfkill toggle bluetooth") + if BLUESTATUS == false then + naughty.notify({ + title = "Bluetooth", + text = "Bluetooth is ON" + }) + BLUESTATUS = true + else + naughty.notify({ + title = "Bluetooth", + text = "Bluetooth is OFF" + }) + BLUESTATUS = false + end +end, { + description = "Bluetooth toggle ON/OFF", + group = "hotkeys" +}), -- ALSA volume control +awful.key({}, "#123", function() + os.execute(string.format("amixer -q set %s 5%%+", beautiful.volume.channel)) + beautiful.volume.update() +end, { + description = "Fn + f3 --- volume up", + group = "hotkeys" +}), awful.key({}, "#122", function() + os.execute(string.format("amixer -q set %s 5%%-", beautiful.volume.channel)) + beautiful.volume.update() +end, { + description = "Fn + f2 --- volume down", + group = "hotkeys" +}), awful.key({}, "#121", function() + os.execute(string.format("amixer -q set %s toggle", beautiful.volume.togglechannel or beautiful.volume.channel)) + beautiful.volume.update() +end, { + description = "Fn + f1 --- toggle mute", + group = "hotkeys" +}), awful.key({altkey, "Control"}, "9", function() + os.execute(string.format("amixer -q set %s 100%%", beautiful.volume.channel)) + beautiful.volume.update() +end, { + description = "volume 100%", + group = "hotkeys" +}), awful.key({altkey, "Control"}, "0", function() + os.execute(string.format("amixer -q set %s 0%%", beautiful.volume.channel)) + beautiful.volume.update() +end, { + description = "volume 0%", + group = "hotkeys" +}), -- MPD control +-- awful.key({altkey, "Control"}, "Up", function() +-- os.execute("mpc toggle") +-- beautiful.mpd.update() +-- end, { +-- description = "mpc toggle", +-- group = "widgets" +-- }), awful.key({altkey, "Control"}, "Down", function() +-- os.execute("mpc stop") +-- beautiful.mpd.update() +-- end, { +-- description = "mpc stop", +-- group = "widgets" +-- }), awful.key({altkey, "Control"}, "Left", function() +-- os.execute("mpc prev") +-- beautiful.mpd.update() +-- end, { +-- description = "mpc prev", +-- group = "widgets" +-- }), awful.key({altkey, "Control"}, "Right", function() +-- os.execute("mpc next") +-- beautiful.mpd.update() +-- end, { +-- description = "mpc next", +-- group = "widgets" +-- }), awful.key({altkey}, "0", function() +-- local common = { +-- text = "MPD widget ", +-- position = "top_middle", +-- timeout = 2 +-- } +-- if beautiful.mpd.timer.started then +-- beautiful.mpd.timer:stop() +-- common.text = common.text .. lain.util.markup.bold("OFF") +-- else +-- beautiful.mpd.timer:start() +-- common.text = common.text .. lain.util.markup.bold("ON") +-- end +-- naughty.notify(common) +-- end, { +-- description = "mpc on/off", +-- group = "widgets" +-- }), +-- Copy primary to clipboard (terminals to gtk) +awful.key({modkey}, "c", function() + awful.spawn.with_shell("xsel | xsel -i -b") +end, { + description = "copy terminal to gtk", + group = "hotkeys" +}), -- Copy clipboard to primary (gtk to terminals) +awful.key({modkey}, "v", function() + awful.spawn.with_shell("xsel -b | xsel") +end, { + description = "copy gtk to terminal", + group = "hotkeys" +}), -- User programs +awful.key({modkey}, "d", function() + awful.spawn(browser) +end, { + description = "run browser", + group = "launcher" +}), -- Default +--[[ Menubar awful.key({ modkey }, "p", function() menubar.show() end, {description = "show the menubar", group = "launcher"}), --]] --[[ dmenu @@ -582,67 +689,90 @@ globalkeys = mytable.join( -- Destroy all notifications end, {description = "show dmenu", group = "launcher"}), --]] -- alternatively use rofi, a dmenu-like application with more features - -- check https://github.com/DaveDavenport/rofi for more details - --[[ rofi +-- check https://github.com/DaveDavenport/rofi for more details +--[[ rofi awful.key({ modkey }, "x", function () os.execute(string.format("rofi -show %s -theme %s", 'run', 'dmenu')) end, {description = "show rofi", group = "launcher"}), --]] -- Prompt - awful.key({modkey}, "r", - function() awful.util.spawn("dmenu_run -fn 'JetBrainsMono Nerd Font Bold 12'") end, - {description = "run dmenu", group = "launcher"}), - awful.key({modkey}, "x", 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"}) -- ]] +awful.key({modkey}, "r", function() + awful.util.spawn("dmenu_run -fn 'JetBrainsMono Nerd Font Bold 12'") +end, { + description = "run dmenu", + group = "launcher" +}), awful.key({modkey}, "x", 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" +}) -- ]] ) -clientkeys = mytable.join(awful.key({altkey, "Shift"}, "m", - lain.util.magnify_client, { +clientkeys = mytable.join(awful.key({altkey, "Shift"}, "m", lain.util.magnify_client, { description = "magnify client", group = "client" }), awful.key({modkey}, "f", function(c) c.fullscreen = not c.fullscreen c:raise() -end, {description = "toggle fullscreen", group = "client"}), - awful.key({modkey}, "q", function(c) c:kill() end, - {description = "close", group = "client"}), - awful.key({modkey, "Control"}, "space", - awful.client.floating.toggle, { +end, { + description = "toggle fullscreen", + group = "client" +}), awful.key({modkey}, "q", function(c) + c:kill() +end, { + description = "close", + group = "client" +}), 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, { +}), 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) +}), 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}, "m", function(c) +end, { + description = "minimize", + 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) +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) +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"})) +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. @@ -652,37 +782,60 @@ for i = 1, 9 do 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() + 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 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 + 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() + 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 + if tag then + client.focus:toggle_tag(tag) + end end - end, {description = "toggle focused client on tag #" .. i, group = "tag"})) + end, { + description = "toggle focused client on tag #" .. i, + group = "tag" + })) end clientbuttons = mytable.join(awful.button({}, 1, function(c) - c:emit_signal("request::activate", "mouse_click", {raise = true}) + 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}) + 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}) + c:emit_signal("request::activate", "mouse_click", { + raise = true + }) awful.mouse.client.resize(c) end)) @@ -695,61 +848,60 @@ root.keys(globalkeys) -- 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, - callback = awful.client.setslave, - focus = awful.client.focus.filter, - raise = true, - keys = clientkeys, - buttons = clientbuttons, - screen = awful.screen.preferred, - placement = awful.placement.no_overlap + - awful.placement.no_offscreen, - size_hints_honor = false - } - }, -- 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", "xtightvncviewer" - }, +{ + rule = {}, + properties = { + border_width = beautiful.border_width, + border_color = beautiful.border_normal, + callback = awful.client.setslave, + focus = awful.client.focus.filter, + raise = true, + keys = clientkeys, + buttons = clientbuttons, + screen = awful.screen.preferred, + placement = awful.placement.no_overlap + awful.placement.no_offscreen, + size_hints_honor = false + } +}, -- 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", "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. - } + -- 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. }, - properties = {floating = true} - }, -- Add titlebars to normal clients and dialogs - { - rule_any = {type = {"normal", "dialog"}}, - properties = {titlebars_enabled = false} - } -- Set Firefox to always map on the tag named "2" on screen 1. - -- { - -- rule = { - -- class = "Firefox" - -- }, - -- properties = { - -- screen = 1, - -- tag = "2" - -- } - -- } + role = {"AlarmWindow", -- Thunderbird's calendar. + "ConfigManager", -- Thunderbird's about:config. + "pop-up" -- e.g. Google Chrome's (detached) Developer Tools. + } + }, + properties = { + floating = true + } +}, -- Add titlebars to normal clients and dialogs +{ + rule_any = { + type = {"normal", "dialog"} + }, + properties = { + titlebars_enabled = false + } +} -- Set Firefox to always map on the tag named "2" on screen 1. +-- { +-- rule = { +-- class = "Firefox" +-- }, +-- properties = { +-- screen = 1, +-- tag = "2" +-- } +-- } } -- }}} @@ -762,8 +914,7 @@ client.connect_signal("manage", function(c) -- i.e. put it at the end of others instead of setting it master. -- 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 + 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 @@ -780,14 +931,20 @@ client.connect_signal("request::titlebars", function(c) -- Default -- buttons for the titlebar local buttons = mytable.join(awful.button({}, 1, function() - c:emit_signal("request::activate", "titlebar", {raise = true}) + 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}) + c:emit_signal("request::activate", "titlebar", { + raise = true + }) awful.mouse.client.resize(c) end)) - awful.titlebar(c, {size = 16}):setup{ + awful.titlebar(c, { + size = 16 + }):setup{ { -- Left awful.titlebar.widget.iconwidget(c), buttons = buttons, @@ -818,18 +975,22 @@ end) -- c:emit_signal("request::activate", "mouse_enter", {raise = vi_focus}) -- 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) +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) -- }}} -- Run garbage collector regularly to prevent memory leaks gears.timer { - timeout = 30, - autostart = true, - callback = function() collectgarbage() end + timeout = 30, + autostart = true, + callback = function() + collectgarbage() + end } -- Mute volume on startup