X-Git-Url: https://git.madduck.net/etc/awesome.git/blobdiff_plain/887c37778210facea0c4c45a032dc00f06eaf78d..588b725c75b6a158f01d01421e2e0a8ec9a6590b:/.config/awesome/rc.lua

diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua
index 3c7cdf3..c72fd62 100644
--- a/.config/awesome/rc.lua
+++ b/.config/awesome/rc.lua
@@ -1,4 +1,5 @@
 -- {{{ Imports
+
 -- Standard awesome library
 local gears = require("gears")
 local awful = require("awful")
@@ -24,6 +25,7 @@ local has_fdo, freedesktop = pcall(require, "freedesktop")
 -- Other libraries
 local lain = require("lain")
 local ccwidgets = require("cryptocoin_widgets")
+--local fxwidgets = require("forex_widgets")
 local clocksarray = require("clocksarray")
 local dbg = require("debugfunc")
 local th = require("taghelpers")
@@ -77,7 +79,9 @@ cmdkey = "Mod3"
 -- Table of layouts to cover with awful.layout.inc, order matters.
 local layouts = {
     default = awful.layout.suit.fair,
+    default_horiz = awful.layout.suit.fair.horizontal,
     tiled = awful.layout.suit.tile,
+    tiled_horiz = awful.layout.suit.tile.top,
     floating = awful.layout.suit.floating,
     maximised = awful.layout.suit.max
 }
@@ -86,6 +90,8 @@ awful.layout.layouts = {
     layouts.tiled,
     layouts.maximised,
     layouts.floating,
+    layouts.default_horiz,
+    layouts.tiled_horiz,
 }
 -- }}}
 
@@ -115,11 +121,18 @@ local function set_wallpaper(s)
     end
 end
 
-local function centre_mouse_on_area(a)
-    mouse.coords({
-        x = a.x + a.width/2,
-        y = a.y + a.height/2,
-    }, true)
+local function move_mouse_to_area(a)
+    local coords = mouse.coords()
+    if (coords.x < a.x or
+        coords.x > (a.x+a.width) or
+        coords.y < a.y or
+        coords.y > (a.y+a.height)) then
+
+        mouse.coords({
+            x = a.x + a.width/2,
+            y = a.y + a.height/2,
+        }, true)
+    end
 end
 
 -- }}}
@@ -166,8 +179,11 @@ menubar.utils.terminal = terminal -- Set the terminal for applications that requ
 --    forced_width = 4,
 --    widget = wibox.widget.separator
 --}
-local spacer = wibox.widget.textbox()
-spacer:set_text(" │ ")
+local function make_spacer(text)
+    local spacer = wibox.widget.textbox()
+    spacer:set_text(text or " │ ")
+    return spacer
+end
 
 -- Keyboard map indicator and switcher
 mykeyboardlayout = awful.widget.keyboardlayout()
@@ -184,9 +200,9 @@ local lain_bat = lain.widget.bat({
 
 -- Create a textclock widget
 clocksarray = clocksarray.get_clocksarray("%a %d %b %H:%M:%S %Z", {
-        ["NZ"] = "Pacific/Auckland",
+--        ["NZ"] = "Pacific/Auckland",
         ["DE"] = "Europe/Berlin"
-    }, spacer)
+    }, make_spacer())
 
 -- Create a wibox for each screen and add it
 local taglist_buttons = gears.table.join(
@@ -279,34 +295,33 @@ awful.screen.connect_for_each_screen(function(s)
 
     -- Add widgets to the wibox
     local right_widgets = gears.table.join(clocksarray, {
-        spacer,
-        --spacing = 4,
-        --spacing_widget = spacer,
+        make_spacer(" "),
+        wibox.widget.systray(),
         s.mylayoutbox,
         layout = wibox.layout.fixed.horizontal,
     })
 
-    if s == screen.primary then
+--    if s == screen.primary then
         right_widgets = gears.table.join({
-            wibox.widget.systray(),
-            spacer,
+            make_spacer(" "),
             ccwidgets.btc_widget,
-            spacer,
-            ccwidgets.eth_widget,
-            spacer,
+            make_spacer(),
+            --ccwidgets.eth_widget,
+            --make_spacer(),
+            --fxwidgets.ecb_widget,
+            --make_spacer(),
             lain_bat.widget,
-            spacer,
+            make_spacer(),
         }, right_widgets)
-    end
+--    end
 
     s.mywibox:setup {
         layout = wibox.layout.align.horizontal,
         { -- Left widgets
-            spacing = 4,
-            spacing_widget = spacer,
             layout = wibox.layout.fixed.horizontal,
             --s.namebox,
             s.mytaglist,
+            make_spacer(" "),
             s.mypromptbox,
         },
         s.mytasklist, -- Middle widget
@@ -315,9 +330,10 @@ awful.screen.connect_for_each_screen(function(s)
 end) -- }}}
 
 -- {{{ autorandr integration
-local function find_screen_by_name(name)
+local function find_screen_by_pattern(pattern)
     for s in screen do
-        if s.name == name then
+        print(s.name .. " :: " .. pattern)
+        if s.name:match(pattern) then
             return s
         end
     end
@@ -336,7 +352,7 @@ local function get_target_screen_for_tag(tag)
     if tag.targets then
         if type(tag.targets) == "table" then
             for _,target in ipairs(tag.targets) do
-                local s = find_screen_by_name(target)
+                local s = find_screen_by_pattern(target:gsub('%-', '%%-'))
                 if s then
                     print("  → screen " .. s.name)
                     return s
@@ -373,7 +389,7 @@ tag.connect_signal("request::screen", function(t)
     end
     naughty.notify({
         title = "Screen removed",
-        text = "Salvaged tab " .. t.name .. " onto screen " .. t.screen.name,
+        text = "Salvaged tab " .. t.name,
     })
 end)
 
@@ -402,10 +418,11 @@ end
 
 local function initialise_to_autorandr_profile()
     local profile
+    profile = nil
 
     local function process_line(line)
         if profile then return end
-        local match = string.match(line, "^([^%s]+) %(detected%)$")
+        local match = string.match(line, "^([^%s]+) %(detected%)")
         if match then
             profile = match
         end
@@ -426,7 +443,7 @@ local function initialise_to_autorandr_profile()
     end
 
     awful.spawn.with_line_callback('autorandr', {
-        stderr = process_line,
+        stdout = process_line,
         output_done = output_done,
         exit = handle_exit
     })
@@ -460,23 +477,35 @@ default_tags = gears.table.join(default_tags, {
     name        = "irc",
     init        = true,
     exclusive   = true,
-    master_width_factor = 0.33,
     layout      = layouts.tiled,
     selected    = true,
-    exec_once   = { terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host tmux new -As irc irssi" },
+    exec_once   = { terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh --family=all -- irc-host tmux new -As irc irssi" },
     instance    = { "irc" },
-    targets     = { "catalyst/eDP1", "mtvic/eDP1" },
+    targets     = {
+                    "gern/DP-?[12]-1",
+                    "gauting/eDP-?1",
+                    "toni/eDP-?1",
+                    "krafftwerk/DP-?1-1-5",
+                    "krafftwerk/DisplayPort-2",
+                    "cafe/eDP-?1"
+                },
   },
   {
-    name        = "[m]",
+    name        = "[]",
     init        = true,
     exclusive   = true,
-    master_width_factor = 0.67,
+    master_count = 0,
+    column_count = 4,
     layout      = layouts.tiled,
-    selected    = true,
-    exec_once   = { "revolt" },
-    instance    = { "Revolt" },
-    targets     = { "catalyst/eDP1", "mtvic/eDP1" },
+    selected    = false,
+    targets     = {
+                    "gern/DP-?[12]-1",
+                    "gauting/eDP-?1",
+                    "toni/eDP-?1",
+                    "krafftwerk/DP-?1-1-5",
+                    "krafftwerk/DisplayPort-2",
+                    "cafe/eDP-?1"
+                },
   },
   {
     name        = "dflt",
@@ -492,8 +521,15 @@ default_tags = gears.table.join(default_tags, {
     exclusive   = true,
     layout      = layouts.default,
     exec_once   = { "thunderbird" },
-    class       = { "Thunderbird" },
-    targets     = { "catalyst/HDMI1", "mtvic/eDP1" },
+    class       = { "thunderbird" },
+    targets     = {
+                    "gern/DP-?[12]-1",
+                    "gauting/eDP-?1",
+                    "toni/eDP-?1",
+                    "krafftwerk/DP-?1-1-6",
+                    "krafftwerk/DisplayPort-0",
+                    "cafe/eDP-?1"
+                },
   },
   {
     name        = "chr",
@@ -502,7 +538,15 @@ default_tags = gears.table.join(default_tags, {
     layout      = layouts.default,
     exec_once   = { "chromium" },
     class       = { "Chromium" },
-    targets     = { "catalyst/HDMI1", "mtvic/eDP1" },
+    targets     = {
+                    "gern/DP-?[12]-1",
+                    "gauting/eDP-?1",
+                    "toni/DP-?2-2",
+                    "krafftwerk/DP-?1-1-6",
+                    "krafftwerk/DisplayPort-0",
+                    "present/HDMI.*",
+                    "cafe/eDP-?1"
+                },
   },
   {
     name        = "ffx",
@@ -511,7 +555,15 @@ default_tags = gears.table.join(default_tags, {
     layout      = layouts.default,
     exec_once   = { "firefox" },
     class       = { "Firefox" },
-    targets     = { "catalyst/HDMI1", "mtvic/eDP1" },
+    targets     = {
+                    "gern/DP-?[12]-1",
+                    "gauting/eDP-?1",
+                    "toni/DP-?2-2",
+                    "krafftwerk/DP-?1-1-6",
+                    "krafftwerk/DisplayPort-0",
+                    "present/HDMI.*",
+                    "cafe/eDP-?1"
+                },
   },
 })
 
@@ -590,6 +642,14 @@ local function toggle_tag_by_name(tagname, exclusive)
     end
 end
 
+local function move_tags_to_screen_relative(direction)
+    local s = awful.screen.focused()
+    for _,tag in ipairs(s.selected_tags) do
+        print("index: " .. s.index .. " count: " .. screen:count())
+        tag.screen = screen[(s.index + screen:count() + direction) % screen.count()]
+    end
+end
+
 globalkeys = gears.table.join(
     awful.key({ modkey,           }, "s",      hotkeys_popup.show_help,
               {description="show help", group="awesome"}),
@@ -614,14 +674,18 @@ globalkeys = gears.table.join(
     ),
 
     -- Layout manipulation
-    awful.key({ modkey, "Shift"   }, "k", 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"   }, "j", 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" }, "k", function () awful.screen.focus_relative( 1) end,
               {description = "focus the next screen", group = "screen"}),
     awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative(-1) end,
               {description = "focus the previous screen", group = "screen"}),
+    awful.key({ modkey, "Shift", "Control" }, "k", function () move_tags_to_screen_relative( 1) end,
+              {description = "move tags to the next screen", group = "screen"}),
+    awful.key({ modkey, "Shift", "Control" }, "j", function () move_tags_to_screen_relative(-1) end,
+              {description = "move tags to the previous screen", group = "screen"}),
     awful.key({ modkey, "Shift"   }, "Return", awful.client.urgent.jumpto,
               {description = "jump to urgent client", group = "client"}),
     awful.key({ modkey,           }, "Tab",
@@ -688,6 +752,7 @@ globalkeys = gears.table.join(
                     bg_cursor    = '#ff0000',
                     textbox      = widget,
                     history_path = awful.util.get_cache_dir() .. "/history",
+                    completion_callback = awful.completion.shell,
                     hooks = {
                         -- Replace the 'normal' Return with a custom one
                         {{         }, 'Return', function(command)
@@ -746,11 +811,11 @@ globalkeys = gears.table.join(
     awful.key({ modkey,           }, "d", th.delete_tag,
               {description = "delete the current tag", group = "tag"}),
     awful.key({ modkey, "Shift",           }, "a", function()
-        move_to_new_tag(nil,nil,true,true,true)
+        th.move_to_new_tag(nil, nil, { layout = layouts.maximised },true,true,true)
     end,
               {description = "add a volatile tag with the focused client", group = "tag"}),
     awful.key({ modkey, "Shift", "Control" }, "a", function()
-        move_to_new_tag(nil,nil,false,true,true)
+        th.move_to_new_tag(nil, nil, { layout = layouts.maximised },false,true,true)
     end,
               {description = "add a permanent tag with the focused client", group = "tag"}),
     awful.key({ modkey, "Mod1"   }, "a", th.copy_tag,
@@ -764,10 +829,10 @@ globalkeys = gears.table.join(
               {description = "view tag 'irc'", group = "tag"}),
     awful.key({ modkey, "Control" }, "y", toggle_tag_by_name("irc"),
               {description = "toggle tag 'irc'", group = "tag"}),
-    awful.key({ modkey }, "u", toggle_tag_by_name("[m]", true),
-              {description = "view tag '[m]'", group = "tag"}),
-    awful.key({ modkey, "Control" }, "u", toggle_tag_by_name("[m]"),
-              {description = "toggle tag '[m]'", group = "tag"}),
+    awful.key({ modkey }, "u", toggle_tag_by_name("[]", true),
+              {description = "view tag '[]'", group = "tag"}),
+    awful.key({ modkey, "Control" }, "u", toggle_tag_by_name("[]"),
+              {description = "toggle tag '[]'", group = "tag"}),
     awful.key({ modkey }, "i", toggle_tag_by_name("cal", true),
               {description = "view tag 'cal'", group = "tag"}),
     awful.key({ modkey, "Control" }, "i", toggle_tag_by_name("cal"),
@@ -795,6 +860,8 @@ clientkeys = gears.table.join(
               {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,           }, "z",      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",
@@ -870,41 +937,73 @@ clientbuttons = gears.table.join(
 -- 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 --enable-remote-extensions") end),
-awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e python") end),
-awful.key({ cmdkey }, "c", function () awful.spawn("thunderbird") end),
+awful.key({ cmdkey }, "c", function () awful.spawn("chromium --enable-remote-extensions") end),
+awful.key({ cmdkey }, "y", function () awful.spawn(terminal .. " -e ipython3") end),
+awful.key({ cmdkey }, "m", function () awful.spawn(terminal .. " -name mutt -e mutt") end),
+awful.key({ cmdkey }, "t", function () awful.spawn("thunderbird") end),
 awful.key({ cmdkey }, "g", function () awful.spawn("gscan2pdf") end),
-awful.key({ cmdkey }, "v", function () awful.spawn("virt-manager") end),
+awful.key({ cmdkey, "Shift" }, "v", function () awful.spawn("virt-manager") end),
 awful.key({ cmdkey }, "l", function () awful.spawn("libreoffice") end),
-awful.key({ cmdkey }, "f", function () awful.spawn("thunar") end),
-awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh -4 -- irc-host tmux new -As irc irssi") end),
+awful.key({ cmdkey }, "v", function () awful.spawn("remmina") end),
+awful.key({ cmdkey }, "p", function () awful.spawn("pavucontrol") end),
+awful.key({ cmdkey }, "i", function () awful.spawn(terminal .. " -name irc -e env MOSH_TITLE_NOPREFIX=true mosh --family=all -- irc-host tmux new -As irc irssi") end),
 awful.key({ cmdkey }, "x", function ()
-    awful.spawn("/usr/bin/xscreensaver -no-capture-stderr")
-    os.execute("sleep 5")
-    awful.spawn("xscreensaver-command -lock")
+    awful.spawn("xautolock -enable")
+    awful.spawn("xautolock -locknow")
 end),
-awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end),
+awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xautolock -disable") end),
+
+awful.key({ cmdkey }, "BackSpace", function () awful.spawn("pkill -USR1 offlineimap") 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({ cmdkey }, "End", 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({ cmdkey }, "Next", 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({ cmdkey }, "Prior", 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({ cmdkey }, "Home", 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, "XF86AudioMute", function () awful.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle") end),
+awful.key({ cmdkey }, "End", function () awful.spawn("pactl set-sink-mute @DEFAULT_SINK@ toggle") end),
+awful.key(nil, "XF86AudioLowerVolume", function () awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ -2%") end),
+awful.key({ cmdkey }, "Next", function () awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ -2%") end),
+awful.key(nil, "XF86AudioRaiseVolume", function () awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ +2%") end),
+awful.key({ cmdkey }, "Prior", function () awful.spawn("pactl set-sink-volume @DEFAULT_SINK@ +2%") end),
+awful.key(nil, "XF86AudioMicMute", function () awful.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle") end),
+awful.key({ cmdkey }, "Home", function () awful.spawn("pactl set-source-mute @DEFAULT_SOURCE@ toggle") end),
+awful.key({ cmdkey }, "Insert", function () awful.spawn("pa_cycle_default source") end),
+awful.key({ cmdkey }, "Delete", function () awful.spawn("pa_cycle_default sink") end),
+awful.key(nil, "XF86MonBrightnessDown", function () awful.spawn("light -U 10") end),
+awful.key(nil, "XF86MonBrightnessUp", function () awful.spawn("light -A 10") end),
+awful.key(nil, "XF86Display", function () awful.spawn("autorandr --change --force"); initialise_to_autorandr_profile() end),
+awful.key(nil, "XF86AudioStop", function () awful.spawn("autorandr --change --force"); initialise_to_autorandr_profile() 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)
+awful.key(nil, "XF86Explorer", function () awful.spawn("") end),
+awful.key(nil, "XF86Calculator", function () awful.spawn(terminal .. " -e ipython3 --profile=calc") end),
+awful.key(nil, "XF86Favorites", function () awful.spawn("systemctl suspend") end),
+
+awful.key({ cmdkey }, "Multi_key", function () run_output_notify("flameshot gui", "Output") end),
+awful.key({ cmdkey, "Shift" }, "Multi_key", function () run_output_notify("flameshot full --delay 2000 --clipboard", "Output") end),
+
+awful.key({ cmdkey }, "Up", function () awful.spawn("pap prev") end),
+awful.key({ cmdkey }, "Left", function () awful.spawn("pap seek -10") end),
+awful.key({ cmdkey, "Shift" }, "Left", function () awful.spawn("pap seek -60") end),
+awful.key({ cmdkey }, "Down", function () awful.spawn("pap next") end),
+awful.key({ cmdkey }, "Right", function () awful.spawn("pap seek +10") end),
+awful.key({ cmdkey, "Shift" }, "Right", function () awful.spawn("pap seek +60") end),
+awful.key({ cmdkey }, "space", function () awful.spawn("pap pause") end),
+awful.key({ cmdkey }, "\\", function () run_output_notify("pap info", "Track info") end),
+awful.key({ cmdkey }, "]", function () run_output_notify("pap list", "Playlist") end)
 )
 
+function run_output_notify(cmd, title)
+    awful.spawn.easy_async(cmd, function(stdout, stderr, reason, exit_code)
+        if #stdout > 1 then
+            naughty.notify({
+                preset = naughty.config.presets.low,
+                title = title,
+                text = stdout})
+            end
+        end)
+end
+
 -- Set keys
 root.keys(globalkeys)
 -- }}}
@@ -939,6 +1038,17 @@ local function move_to_tag_by_name(s, tagname)
     end
 end
 
+local function move_to_tag_or_create_volatile(s, tagname)
+    return function(c)
+        local t = awful.tag.find_by_name(s, tagname)
+        if t then
+            c:move_to_tag(t)
+        else
+            th.move_to_new_tag(c, tagname, {}, true, true, true)
+        end
+    end
+end
+
 awful.rules.rules = {
     -- All clients will match this rule.
     { rule = { },
@@ -950,7 +1060,8 @@ awful.rules.rules = {
                      buttons = clientbuttons,
                      screen = awful.screen.preferred,
                      placement = awful.placement.no_overlap+awful.placement.no_offscreen,
-                     --floating = false
+                     floating = false,
+                     maximized = false,
                  },
     },
     { rule = { type = "dialog" },
@@ -966,48 +1077,99 @@ awful.rules.rules = {
     { rule = { class = "URxvt" },
       properties = { size_hints_honor = false, }
     },
-    { rule = { instance =  "irc" },
+    { rule = { instance = "irc" },
       callback = move_to_tag_by_name(nil, "irc"),
     },
-    { rule = { class = "Revolt" },
-      callback = move_to_tag_by_name(nil, "[m]"),
+    { rule = { class = "scrcpy" },
+      callback = move_to_tag_by_name(nil, "[]"),
     },
-    { rule = { class = "Firefox" },
+    { rule_any = { class = { "Firefox", "firefox" } },
       callback = move_to_tag_by_name(nil, "ffx"),
     },
     { rule = { class = "Chromium" },
       callback = move_to_tag_by_name(nil, "chr"),
     },
-    { rule = { class = "Thunderbird" },
+    { rule_any = { class = { "thunderbird", "Thunderbird" } },
       callback = move_to_tag_by_name(nil, "cal"),
     },
+    { rule = { instance = "mutt" },
+      properties = {
+          new_tag = {
+              name = "mutt",
+              layout = awful.layout.suit.fair.horizontal,
+              volatile = true
+          },
+          switchtotag = true,
+      },
+    },
+    { rule_any = { class = { "zoom" } },
+      callback = move_to_tag_or_create_volatile(nil, "Zoom"),
+    },
+    { rule_any = { class = { "Ssvnc.tcl" },
+                   class = { "Ssvnc" },
+                   name = { "SSL/SSH VNC Viewer.-" },
+                 },
+      callback = move_to_tag_or_create_volatile(nil, "SSVNC"),
+    },
     { rule_any = { class = {
-        "MuPDF",
-        "Wicd-client.py",
+        "Gxmessage",
+        "Pinentry"
     }},
       properties = { floating = true,
+                     maximized = false,
                      focus = true,
-                     placement = function(c)
-                         float_client_in_the_middle_with_margins(c, 50, 25)
-                     end,
+                     placement = awful.placement.centered,
+                   },
+    },
+    { rule_any = { instance = {
+        "tridactyl-edit",
+        "pdfshuffler",
+        "vlc",
+        "pavucontrol"
+    }},
+      properties = { floating = true,
+                     maximized = false,
+                     focus = true,
+                     placement = awful.placement.centered,
                    },
     },
     { rule_any = { class = {
-                        "Gscan2pdf",
                         "Gimp",
+                        "Inkscape",
+                        "Pitivi",
+                        "Audacity",
+                        "org.remmina.Remmina",
                     },
                     instance = {
                         "libreoffice",
                     }
                 },
+      except_any = { type = { "dialog" } },
       properties = { new_tag = {
                         layout = layouts.maximised,
                         volatile = true,
                     },
-                     switchtotag = true,
+                     --switchtotag = true,
                      focus = true,
                    },
-    },
+               },
+    { rule_any = { class = {
+                        "Gscan2pdf",
+                    },
+                },
+      except_any = { type = { "dialog" } },
+      properties = { new_tag = {
+                        layout = layouts.default,
+                        volatile = true,
+                    },
+                    floating = true,
+                    maximized = false,
+                    focus = true,
+                    placement = awful.placement.centered,
+                    switchtotag = true,
+                    focus = true,
+                   },
+               },
 --XX--    { rule = { class = "Gscan2pdf" },
 --XX--               properties = {
 --XX--                   switchtotag = true
@@ -1044,6 +1206,12 @@ 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
+    --if not awesome.startup then
+    --    local t = awful.screen.focused().selected_tag
+    --    if t.name == "xmutt" then
+    --        awful.client.setslave(c)
+    --    end
+    --end
 
     if awesome.startup and
       not c.size_hints.user_position
@@ -1104,6 +1272,8 @@ client.connect_signal("mouse::enter", function(c)
         and awful.client.focus.filter(c) then
         client.focus = c
     end
+--17 18:03 < psychon> madduck: yes. In the default config at the very end there is code that actives a client on mouse::enter. Just add if c.class == "whatever virt-viewer uses" then return end to that, or 
+--                    something like this
 end)
 
 client.connect_signal("focus", function(c)
@@ -1131,10 +1301,10 @@ client.connect_signal("request::activate", function(c, context, hints)
     }, context) then
         gears.timer.delayed_call(function()
             -- we need a delayed call so that we execute *after layout changes
-            centre_mouse_on_area(client.focus)
+            if hints.raise and c == client.focus and client.focus:isvisible() then
+                move_mouse_to_area(client.focus)
+            end
         end)
-    else
-        dbg.dump(c, context, hints)
     end
 end)