-- {{{ Imports
+
-- Standard awesome library
local gears = require("gears")
local awful = require("awful")
-- Other libraries
local lain = require("lain")
local ccwidgets = require("cryptocoin_widgets")
-local fxwidgets = require("forex_widgets")
+--local fxwidgets = require("forex_widgets")
local clocksarray = require("clocksarray")
local dbg = require("debugfunc")
local th = require("taghelpers")
-- Create a textclock widget
clocksarray = clocksarray.get_clocksarray("%a %d %b %H:%M:%S %Z", {
- ["NZ"] = "Pacific/Auckland",
+-- ["NZ"] = "Pacific/Auckland",
["DE"] = "Europe/Berlin"
}, make_spacer())
make_spacer(" "),
ccwidgets.btc_widget,
make_spacer(),
- ccwidgets.eth_widget,
- make_spacer(),
- fxwidgets.ecb_widget,
- make_spacer(),
+ --ccwidgets.eth_widget,
+ --make_spacer(),
+ --fxwidgets.ecb_widget,
+ --make_spacer(),
lain_bat.widget,
make_spacer(),
}, right_widgets)
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
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
default_tags[1].selected = true
default_tags = gears.table.join(default_tags, {
+ {
+ name = "vrt",
+ init = true,
+ exclusive = true,
+ layout = layouts.maximised,
+ selected = false,
+ exec_once = { "remmina" },
+ instance = { "Remmina" },
+ targets = {
+ "gern/DP-?[12]-1",
+ "gauting/eDP-?1",
+ "toni/eDP-?1",
+ "krafftwerk/DP-?1-1-5",
+ "krafftwerk/DisplayPort-2",
+ "cafe/eDP-?1"
+ },
+ },
{
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" },
+ selected = false,
+ 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", "gauting/eDP1", "lehel/DisplayPort-2" },
+ 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", "gauting/eDP1", "lehel/DisplayPort-2" },
+ 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",
exclusive = true,
layout = layouts.default,
exec_once = { "thunderbird" },
- class = { "Thunderbird" },
- targets = { "catalyst/HDMI1", "mtvic/eDP1", "gauting/eDP1", "lehel/DisplayPort-1" },
+ 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",
layout = layouts.default,
exec_once = { "chromium" },
class = { "Chromium" },
- targets = { "catalyst/HDMI1", "mtvic/eDP1", "gauting/eDP1", "lehel/DisplayPort-1" },
+ 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",
layout = layouts.default,
exec_once = { "firefox" },
class = { "Firefox" },
- targets = { "catalyst/HDMI1", "mtvic/eDP1", "gauting/eDP1", "lehel/DisplayPort-1" },
+ 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"
+ },
},
})
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"}),
),
-- 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",
awful.key({ modkey, }, "d", th.delete_tag,
{description = "delete the current tag", group = "tag"}),
awful.key({ modkey, "Shift", }, "a", function()
- th.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()
- th.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,
awful.key({ modkey, "Control", "Shift", "Mod1" }, "a", th.collect_orphan_clients_to_tag,
{description = "collect all orphaned clients", group = "client"}),
+ awful.key({ modkey }, "t", toggle_tag_by_name("vrt", true),
+ {description = "view tag 'vrt'", group = "tag"}),
+ awful.key({ modkey, "Control" }, "t", toggle_tag_by_name("vrt"),
+ {description = "toggle tag 'vrt'", group = "tag"}),
awful.key({ modkey }, "y", toggle_tag_by_name("irc", true),
{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"),
{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, }, "t", function (c) c.ontop = not c.ontop end,
- {description = "toggle keep on top", 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",
function (c)
-- The client currently has the input focus, so it cannot be
-- 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, "Shift" }, "r", function () awful.spawn("remmina") 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("virt-viewer") 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")
+ run_output_notify("sh -c '. ~/.xsession.d/10-xautolock; echo \"Locking…\"; sleep 1; xautolock -locknow'", "Enabling xautolock")
end),
-awful.key({ cmdkey, "Shift" }, "x", function () awful.spawn("xscreensaver-command -exit") end),
+awful.key({ cmdkey, "Shift" }, "x", function () run_output_notify("pkill -e xautolock", "Disabling xautolock") 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, "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({ cmdkey }, "Left", function () awful.spawn("xmms2 prev") end),
-awful.key({ cmdkey }, "Right", function () awful.spawn("xmms2 next") end),
-awful.key({ cmdkey }, "space", function () awful.spawn("xmms2 toggle") end),
-awful.key({ cmdkey }, "\\", function () run_output_notify("xmms2 list") 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)
+function run_output_notify(cmd, title)
awful.spawn.easy_async(cmd, function(stdout, stderr, reason, exit_code)
- naughty.notify({
- preset = naughty.config.presets.low,
- title = "XMMS2 playlist",
- text = stdout})
+ if #stdout > 1 then
+ naughty.notify({
+ preset = naughty.config.presets.low,
+ title = title,
+ text = stdout})
+ end
end)
end
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 = { },
buttons = clientbuttons,
screen = awful.screen.preferred,
placement = awful.placement.no_overlap+awful.placement.no_offscreen,
- --floating = false
+ floating = false,
+ maximized = false,
},
},
{ rule = { type = "dialog" },
{ 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_any = { class = { "org.remmina.Remmina",
+ "Virt-viewer",
+ "Virt-manager"
+ },
+ },
+ callback = move_to_tag_by_name(nil, "vrt"),
+ },
{ 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"
}},
},
{ rule_any = { instance = {
"tridactyl-edit",
- "libreoffice",
- "pdfshuffler"
+ "pdfshuffler",
+ "vlc",
+ "pavucontrol"
}},
properties = { floating = true,
maximized = false,
placement = awful.placement.centered,
},
},
--- { rule_any = { class = {
--- "Gscan2pdf",
--- "Gimp",
--- },
--- instance = {
--- "libreoffice",
--- }
--- },
--- properties = { new_tag = {
--- layout = layouts.maximised,
--- volatile = true,
--- },
--- switchtotag = true,
--- focus = true,
--- },
--- },
+ { rule_any = { class = {
+ "Gimp",
+ "Inkscape",
+ "Pitivi",
+ "Audacity",
+ },
+ instance = {
+ "libreoffice",
+ }
+ },
+ except_any = { type = { "dialog" } },
+ properties = { new_tag = {
+ layout = layouts.maximised,
+ volatile = 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
-- 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
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)