X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/06ea697f531e56eaa12620eb4f9f6ed7c3e392e7..ac23353125e9b9812ae33243e15a0e40883547bc:/.config/awesome/rc.lua diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index ea63c33..5e1b06a 100644 --- a/.config/awesome/rc.lua +++ b/.config/awesome/rc.lua @@ -1,3 +1,4 @@ +-- {{{ Imports -- Standard awesome library local gears = require("gears") local awful = require("awful") @@ -10,6 +11,7 @@ local beautiful = require("beautiful") local naughty = require("naughty") local menubar = require("menubar") local hotkeys_popup = require("awful.hotkeys_popup").widget +-- }}} -- {{{ Error handling -- Check if awesome encountered an error during startup and fell back to @@ -63,7 +65,7 @@ awful.layout.layouts = { -- awful.layout.suit.spiral, -- awful.layout.suit.spiral.dwindle, awful.layout.suit.max, - awful.layout.suit.max.fullscreen, + -- awful.layout.suit.max.fullscreen, -- awful.layout.suit.magnifier, -- awful.layout.suit.corner.nw, -- awful.layout.suit.corner.ne, @@ -91,6 +93,33 @@ local function client_menu_toggle_fn() end end end + +local function sorted_pairs(t, f) + local a = {} + for n in pairs(t) do table.insert(a, n) end + table.sort(a, f) + local i = 0 -- iterator variable + local iter = function () -- iterator function + i = i + 1 + if a[i] == nil then return nil + else return a[i], t[a[i]] + end + end + return iter +end + +local function print_table(tbl, indent) + if not indent then indent = 0 end + for k, v in pairs(tbl) do + formatting = string.rep(" ", indent) .. k .. ": " + if type(v) == "table" then + print(formatting) + print_table(v, indent+1) + else + print(formatting .. tostring(v)) + end + end +end -- }}} -- {{{ Menu @@ -110,17 +139,15 @@ mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesom mylauncher = awful.widget.launcher({ image = beautiful.awesome_icon, menu = mymainmenu }) +-- }}} --- Menubar configuration +-- {{{ Menubar configuration menubar.utils.terminal = terminal -- Set the terminal for applications that require it -- }}} --- Keyboard map indicator and switcher -mykeyboardlayout = awful.widget.keyboardlayout() - -- {{{ Wibox -- Create a textclock widget -mytextclock = wibox.widget.textclock() +mytextclock = wibox.widget.textclock("%a %d %b %H:%M:%S", 1) -- Create a wibox for each screen and add it mywibox = {} @@ -169,6 +196,42 @@ mytasklist.buttons = awful.util.table.join( awful.button({ }, 5, function () awful.client.focus.byidx(-1) end)) +-- }}} + +-- {{{ Tags +tags = {} +tags.config = {} +tags.config["main"] = { + t1 = { layout = layout_default, selected = true }, + t2 = { layout = layout_default }, + t3 = { layout = layout_tiled }, + t4 = { layout = layout_tiled }, + t5 = { layout = layout_tiled }, + t6 = { layout = layout_floating }, + t7 = { layout = layout_maximised }, + t8 = { layout = layout_maximised }, + t9 = { layout = layout_maximised }, +} +tags.config["aux"] = { + t1 = { layout = layout_default, selected = true }, + t2 = { layout = layout_default }, + t3 = { layout = layout_tiled }, + t4 = { layout = layout_floating }, + t5 = { layout = layout_floating }, + t6 = { layout = layout_floating }, + t7 = { layout = layout_floating }, + t8 = { layout = layout_floating }, + t9 = { layout = layout_maximised }, +} + +screentags = {} +screentags[1] = tags.config["main"] +if screen.count() == 2 then -- aux screen is on the right + screentags[2] = tags.config["aux"] +elseif screen.count() == 3 then -- main screen is still #1 in the middle + screentags[2] = tags.config["aux"] + screentags[3] = tags.config["aux"] +end awful.screen.connect_for_each_screen(function(s) -- Wallpaper @@ -181,12 +244,14 @@ awful.screen.connect_for_each_screen(function(s) --DISABLED-- gears.wallpaper.maximized(wallpaper, s, true) --DISABLED--end - -- Each screen has its own tag table. - tags = awful.tag.new({ "1", "2", "3", "4", "5", "6", "7", "8", "9" }, s, layout_default) - tags[7].layout = layout_maximised - tags[8].layout = layout_maximised - tags[9].layout = layout_maximised - tags[1].selected = true + if not tags[s.index] then + tags[s.index] = {} + end + for n,p in sorted_pairs(screentags[s.index]) do + p["screen"] = s + n = string.sub(n, 2) -- remove leading 't' needed for syntax in table + table.insert(tags[s.index], awful.tag.add(n, p)) + end -- Create a promptbox for each screen mypromptbox[s] = awful.widget.prompt() @@ -212,7 +277,7 @@ awful.screen.connect_for_each_screen(function(s) layout = wibox.layout.align.horizontal, { -- Left widgets layout = wibox.layout.fixed.horizontal, - mylauncher, + -- mylauncher, mytaglist[s], mypromptbox[s], }, @@ -247,13 +312,13 @@ globalkeys = awful.util.table.join( awful.key({ modkey, }, "Escape", awful.tag.history.restore, {description = "go back", group = "tag"}), - awful.key({ modkey, }, "j", + awful.key({ modkey, }, "k", function () awful.client.focus.byidx( 1) end, {description = "focus next by index", group = "client"} ), - awful.key({ modkey, }, "k", + awful.key({ modkey, }, "j", function () awful.client.focus.byidx(-1) end, @@ -263,13 +328,13 @@ globalkeys = awful.util.table.join( {description = "show main menu", group = "awesome"}), -- 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, {description = "swap with next client by index", group = "client"}), - awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end, + awful.key({ modkey, "Shift" }, "j", 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, + awful.key({ modkey, "Control" }, "k", 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, + awful.key({ modkey, "Control" }, "j", 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"}), @@ -422,12 +487,49 @@ clientbuttons = awful.util.table.join( awful.button({ modkey }, 1, awful.mouse.client.move), awful.button({ modkey }, 3, awful.mouse.client.resize)) +-- misc apps +globalkeys = awful.util.table.join(globalkeys, +awful.key({ cmdkey }, "n", function () awful.spawn("firefox") end), +awful.key({ cmdkey }, "m", function () awful.spawn("chromium") end), +awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e python") end), +awful.key({ cmdkey }, "c", function () awful.spawn("icedove") end), +awful.key({ cmdkey }, "r", function () mypromptbox[mouse.screen]:run() end), +awful.key({ cmdkey }, "g", function () awful.spawn("gscan2pdf") end), +awful.key({ cmdkey }, "v", function () awful.spawn("virt-manager") end), +awful.key({ cmdkey }, "l", function () awful.spawn("libreoffice") end), +awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -title irc -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host screen -dr irc") end), +awful.key({ cmdkey }, "x", function () awful.spawn.with_shell("/sbin/start-stop-daemon --start --background --exec /usr/bin/xscreensaver -- -no-capture-stderr; sleep 2; xscreensaver-command -lock") end), +awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end), + +-- function keys +awful.key(nil, "XF86ScreenSaver", function () awful.spawn("xset dpms force off") end), +awful.key(nil, "XF86AudioMute", function () awful.spawn("pactl set-sink-mute 0 toggle") end), +awful.key(nil, "XF86AudioLowerVolume", function () awful.spawn("pactl set-sink-volume 0 -2%") end), +awful.key(nil, "XF86AudioRaiseVolume", function () awful.spawn("pactl set-sink-volume 0 +2%") end), +awful.key(nil, "XF86AudioMicMute", function () awful.spawn("pactl set-source-mute 1 toggle") end), +awful.key(nil, "XF86MonBrightnessDown", function () awful.spawn("xbacklight -dec 5%") end), +awful.key(nil, "XF86MonBrightnessUp", function () awful.spawn("xbacklight -inc 5%") end), +awful.key(nil, "XF86Display", function () awful.spawn("") end), +awful.key(nil, "XF86WLAN", function () awful.spawn("") end), +awful.key(nil, "XF86Tools", function () awful.spawn("") end), +awful.key(nil, "XF86Search", function () awful.spawn("") end), +awful.key(nil, "XF86LaunchA", function () awful.spawn("") end), +awful.key(nil, "XF86Explorer", function () awful.spawn("") end) +) + -- Set keys root.keys(globalkeys) -- }}} -- {{{ Rules -- Rules to apply to new clients (through the "manage" signal). + +local function move_to_tag(s, t) + return function(c) + c:move_to_tag(tags[s][t]) + end +end + awful.rules.rules = { -- All clients will match this rule. { rule = { }, @@ -437,44 +539,62 @@ awful.rules.rules = { raise = true, keys = clientkeys, buttons = clientbuttons, - placement = awful.placement.no_overlap+awful.placement.no_offscreen + placement = awful.placement.no_overlap+awful.placement.no_offscreen, + -- https://github.com/awesomeWM/awesome/issues/1091#issuecomment-246933520 + screen = function (c) return awesome.startup and c.screen or awful.screen.focused() end, } }, - -- Floating clients. - { rule_any = { - instance = { - "DTA", -- Firefox addon DownThemAll. - "copyq", -- Includes session name in class. - }, - class = { - "Arandr", - "Gpick", - "Kruler", - "MessageWin", -- kalarm. - "Sxiv", - "Wpa_gui", - "pinentry", - "veromix", - "xtightvncviewer"}, - - name = { - "Event Tester", -- xev. - }, - role = { - "AlarmWindow", -- Thunderbird's calendar. - "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 = true } - }, - - -- Set Firefox to always map on the tag named "2" on screen 1. - -- { rule = { class = "Firefox" }, - -- properties = { screen = 1, tag = "2" } }, + --DISABLED-- { rule_any = {type = { "normal", "dialog" } + --DISABLED-- }, properties = { titlebars_enabled = true } + --DISABLED-- }, + + { rule = { type = "dialog" }, + properties = { placement = awful.placement.centered }}, + + { rule = { class = "URxvt" }, + properties = { + floating = false, + size_hints_honor = false + } }, + { rule = { class = "URxvt", instance = "irc" }, + properties = { + switch_to_tag = true + }, + callback = move_to_tag(screen.count(), screen.count() == 1 and 2 or 1) + }, + { rule = { class = "Firefox" }, + properties = { + floating = false, + }, + callback = move_to_tag(screen.count() == 1 and 1 or 2, 9) + }, + { rule = { class = "Icedove" }, + properties = { + floating = false, + }, + callback = move_to_tag(screen.count() == 1 and 1 or 2, 8) + }, + { rule = { class = "chromium" }, + properties = { + floating = false, + }, + callback = move_to_tag(screen.count() == 1 and 1 or 2, 9) + }, + { rule = { class = "Gscan2pdf" }, + properties = { + screen = 1, + tag = "5" + }, + callback = move_to_tag(1, 5) + }, + { rule = { name = "gscan2pdf .*" }, + properties = { + floating = false, + }, + callback = move_to_tag(1, 5) + }, } -- }}} @@ -545,6 +665,15 @@ 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) + +-- https://www.mail-archive.com/awesome@naquadah.org/msg08285.html +client.disconnect_signal("request::activate", awful.ewmh.activate) +client.connect_signal("request::activate", function(c, context, hints) + if c.class == "Firefox" and context == "ewmh" then + return + end + return awful.ewmh.activate(c, context, hints) +end) -- }}} -- vim:ft=lua:sw=4:sts=4:ts=4:et