]> git.madduck.net Git - etc/awesome.git/blobdiff - .config/awesome/rc.lua

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

rewrite special client rules
[etc/awesome.git] / .config / awesome / rc.lua
index d262bf7ddd16ffafb5090d8fb961b80d3ded9724..22808522b9046555844ebb2054ff1a6fb3c5bd31 100644 (file)
@@ -65,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,
@@ -94,6 +94,20 @@ local function client_menu_toggle_fn()
     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
@@ -135,9 +149,6 @@ menubar.utils.terminal = terminal -- Set the terminal for applications that requ
 -- 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 = {}
@@ -188,6 +199,39 @@ mytasklist.buttons = awful.util.table.join(
 -- }}}
 
 -- {{{ 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
@@ -200,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()
@@ -441,6 +487,36 @@ 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)
 -- }}}
@@ -457,7 +533,8 @@ 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,
+                     screen = awful.screen.focused() -- TODO: this is a hack, possibly related to https://github.com/awesomeWM/awesome/issues/1052
      }
     },
 
@@ -488,13 +565,20 @@ awful.rules.rules = {
       }, 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" } },
+    --DISABLED-- { rule_any = {type = { "normal", "dialog" }
+    --DISABLED--  }, properties = { titlebars_enabled = true }
+    --DISABLED-- },
+
+    { rule = { class = "URxvt", instance = "irc" },
+      properties = { screen = screen.count(), tag = screen.count() == 1 and "2" or "1" } },
+    { rule = { class = "Firefox", instance = "Navigator" },
+      properties = { screen = screen.count() == 3 and "2" or "3", tag = "9" } },
+    { rule = { class = "Icedove", instance = "Mail" },
+      properties = { screen = screen.count() == 3 and "2" or "3", tag = "8" } },
+    { rule = { class = "chromium" },
+      properties = { screen = screen.count() == 3 and "2" or "3", tag = "9" } },
+    { rule = { class = "Gscan2pdf", instance = "gscan2pdf" },
+      properties = { screen = 1, tag = "7" } },
 }
 -- }}}