dots/.config/awesome/misc/keys.lua

302 lines
8.3 KiB
Lua

local awful = require "awful"
local gtimer = require "gears.timer"
local naughty = require "naughty"
local cfg = require "misc.cfg"
local qbind = require "quarrel.bind"
local insightful = require "ui.insightful"
local archaic = require "ui.archaic"
local fresnel = require "ui.fresnel"
local flashy = require "ui.flashy"
local qvars = require "quarrel.vars"
local recording = { false, "" }
client.connect_signal("request::default_mousebindings", function()
awful.mouse.append_client_mousebindings {
qbind:new {
triggers = qvars.btns.left,
press = function (c)
c:activate {
context = "mouse_click"
}
end,
group = "client",
desc = "raise client"
},
qbind:new {
mods = qvars.mods.M,
triggers = qvars.btns.left,
press = function (c)
c:activate {
context = "mouse_click",
action = "mouse_move"
}
end,
group = "client",
desc = "move client"
},
qbind:new {
mods = qvars.mods.M,
triggers = qvars.btns.right,
press = function (c)
c:activate {
context = "mouse_click",
action = "mouse_resize"
}
end,
group = "client",
desc = "resize client"
}
}
end)
client.connect_signal("request::default_keybindings", function()
awful.keyboard.append_client_keybindings {
qbind:new {
mods = qvars.mods.MC,
triggers = "q",
press = function(c)
c:kill()
end,
group = "client",
desc = "close"
},
qbind:new {
mods = qvars.mods.M,
triggers = "m",
press = function(c)
c.maximized = not c.maximized
end,
group = "client",
desc = "(un)maximize"
},
qbind:new {
mods = qvars.mods.M,
triggers = "n",
press = function(c)
gtimer.delayed_call(function()
c.minimized = true
end)
end,
group = "client",
desc = "minimize"
},
qbind:new {
mods = qvars.mods.M,
triggers = "f",
press = function(c)
c.fullscreen = not c.fullscreen
end,
group = "client",
desc = "toggle fullscreen"
}
}
end)
awful.keyboard.append_global_keybindings {
qbind:new {
mods = qvars.mods.MC,
triggers = "r",
press = awesome.restart,
group = "awesome",
desc = "restart awesome"
},
qbind:new {
mods = qvars.mods.M,
triggers = "F1",
press = function()
insightful:toggle()
end,
group = "awesome",
desc = "toggle insightful"
},
qbind:new {
mods = qvars.mods.MC,
triggers = "a",
press = function()
if flashy._widget.visible then
flashy:hide()
else
flashy:show()
end
end,
group = "awesome",
desc = "toggle flashy"
},
qbind:new {
mods = qvars.mods.M,
triggers = "space",
press = function()
fresnel:show()
end,
group = "awesome",
desc = "toggle fresnel"
},
qbind:new {
mods = {},
triggers = "XF86AudioMute",
press = function()
awful.spawn("wpctl set-mute @DEFAULT_SINK@ toggle")
end,
group = "audio",
desc = "mute"
},
qbind:new {
mods = {},
triggers = {
{ "XF86AudioRaiseVolume", true },
{ "XF86AudioLowerVolume", false }
},
press = function(up)
if up then
awful.spawn("wpctl set-volume @DEFAULT_SINK@ 5%+")
else
awful.spawn("wpctl set-volume @DEFAULT_SINK@ 5%-")
end
end,
group = "audio",
desc = "increase/decrease volume"
},
qbind:new {
mods = {},
triggers = {
{ "XF86AudioNext", true },
{ "XF86AudioPrev", false }
},
press = function(next)
if next then
archaic.playerctl:next()
else
archaic.playerctl:previous()
end
end,
group = "audio",
desc = "previous/next song"
},
qbind:new {
mods = {},
triggers = "XF86AudioPlay",
press = function()
archaic.playerctl:play_pause()
end,
group = "audio",
desc = "(un)pause song"
},
qbind:new {
mods = {},
triggers = {
{ "XF86MonBrightnessUp", true },
{ "XF86MonBrightnessDown", false }
},
press = function(up)
if up then
awful.spawn("brightnessctl set +51")
else
awful.spawn("brightnessctl set 51-")
end
end,
group = "brightness",
desc = "increase/decrease brightness"
},
qbind:new {
mods = qvars.mods.M,
triggers = "Return",
press = function()
awful.spawn(cfg.terminal)
end,
group = "launcher",
desc = "launch terminal"
},
qbind:new {
mods = {},
triggers = "Print",
press = function()
local date = os.date("%Y%m%d_%H%M%S")
local path = os.getenv("HOME") .. "/Pictures/" .. date .. ".png"
-- Can't use naughty.notification cause it gets in the screenshot
-- Also can't use easy_async_with_shell cause it's buggy
awful.spawn.with_shell("maim --hidecursor " .. path .. " && xclip -selection clipboard -t image/png " .. path .. [[ && notify-send -a "Maim" "Screenshot taken" "Saved at ]] .. path .. [["]])
end,
group = "screenshot",
desc = "take fullscreen screenshot"
},
qbind:new {
mods = qvars.mods.S,
triggers = "Print",
press = function()
local date = os.date("%Y%m%d_%H%M%S")
local path = os.getenv("HOME") .. "/Pictures/" .. date .. ".png"
awful.spawn.with_shell("maim --hidecursor -s " .. path .. " && xclip -selection clipboard -t image/png " .. path .. [[ && notify-send -a "Maim" "Screenshot taken" "Saved at ]] .. path .. [["]])
end,
group = "screenshot",
desc = "take region screenshot"
},
qbind:new {
mods = qvars.mods.M,
triggers = "Print",
press = function()
if recording[1] then
awful.spawn("giph --stop")
naughty.notification {
app_name = "Giph",
title = "Recording stopped",
message = "Saved at " .. recording[2]
}
recording[1] = false
recording[2] = ""
else
recording[1] = true
recording[2] = os.getenv("HOME") .. "/Videos/" .. os.date("%Y%m%d_%H%M%S") .. ".mp4"
awful.spawn("giph --format mp4 --framerate 30 " .. recording[2])
naughty.notification {
app_name = "Giph",
title = "Recording started"
}
end
end,
group = "video",
desc = "toggle recording"
},
qbind:new {
mods = qvars.mods.M,
triggers = "k",
press = function()
awful.spawn("xkblayout-state set +1")
end,
group = "keyboard",
desc = "next keyboard layout"
},
qbind:new {
mods = qvars.mods.MS,
triggers = "k",
press = function()
awful.spawn("xkblayout-state set -1")
end,
group = "keyboard",
desc = "previous keyboard layout"
},
qbind:new {
mods = qvars.mods.M,
triggers = "Up",
press = awful.tag.viewprev,
group = "tag",
desc = "switch to previous"
},
qbind:new {
mods = qvars.mods.M,
triggers = "Down",
press = awful.tag.viewnext,
group = "tag",
desc = "switch to next"
}
}