X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/d9bfce8495cd8107e2346942073f04f2d79f5862..65e5714729a219ee3d22d370b1a84585865d0b78:/.config/awesome/rc.lua?ds=sidebyside diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua index 892f9fc..ece85b8 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 @@ -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,18 +139,19 @@ 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("%a %d %b %H:%M:%S", 1) +-- Keyboard map indicator and switcher +mykeyboardlayout = awful.widget.keyboardlayout() + -- Create a wibox for each screen and add it mywibox = {} mypromptbox = {} @@ -169,6 +199,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 +247,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 +280,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], }, @@ -422,6 +490,20 @@ 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), + -- Set keys root.keys(globalkeys) -- }}} @@ -473,9 +555,16 @@ awful.rules.rules = { }, 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" } }, + { rule = { class = "URxvt" }, + properties = { floating = false } }, + { rule = { class = "URxvt", instance = "irc" }, + properties = { tag = tags[screen.count()][screen.count() == 1 and 2 or 1] } }, + { rule = { class = "Firefox", instance = "Navigator" }, + properties = { tag = tags[screen.count() == 3 and 2 or screen.count()][9] } }, + { rule = { class = "Icedove", instance = "Mail" }, + properties = { tag = tags[screen.count() == 3 and 2 or screen.count()][8] } }, + { rule = { class = "chromium" }, + properties = { tag = tags[screen.count() == 3 and 2 or screen.count()][9] } } } -- }}}