You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
4.4 KiB
Lua
109 lines
4.4 KiB
Lua
local vimouse = require 'vimouse'
|
|
local app = require 'hs.application'
|
|
local eventtap = require 'hs.eventtap'
|
|
local hotkey = require 'hs.hotkey'
|
|
local layout = require 'hs.layout'
|
|
local win = require 'hs.window'
|
|
|
|
local hyper = { 'cmd', 'alt', 'shift', 'ctrl' }
|
|
local laptopMonitor = "Built-in Retina Display"
|
|
local mainMonitor = "TODO TODO"
|
|
|
|
-- Define position values that don't exist by default in hs.layout.*
|
|
local positions = {
|
|
rightTop = { x=0.5, y=0, w=0.5, h=0.5 },
|
|
rightBottom = { x=0.5, y=0.5, w=0.5, h=0.5 }
|
|
}
|
|
|
|
local layoutDouble = {
|
|
{"Reminders", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Calendar", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Firefox", nil, mainMonitor, layout.left50, nil, nil},
|
|
{"ForkLift", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Spotify", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"iTerm", nil, mainMonitor, layout.right50, nil, nil},
|
|
{"Messages", nil, mainMonitor, positions.rightTop, nil, nil},
|
|
{"Signal", nil, mainMonitor, positions.rightBottom, nil, nil},
|
|
{"Telegram", nil, mainMonitor, positions.rightTop, nil, nil},
|
|
{"Microsoft Teams", nil, mainMonitor, positions.rightBottom, nil, nil},
|
|
}
|
|
|
|
local layoutSingle = {
|
|
{"Reminders", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Calendar", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Firefox", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"ForkLift", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Spotify", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"iTerm", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Messages", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Signal", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Telegram", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
{"Microsoft Teams", nil, laptopMonitor, layout.maximized, nil, nil},
|
|
}
|
|
|
|
local appNames = {
|
|
"Reminders",
|
|
"Calendar",
|
|
"Firefox",
|
|
"ForkLift",
|
|
"Spotify",
|
|
"iTerm",
|
|
"Messages",
|
|
"Signal",
|
|
"Telegram",
|
|
"Microsoft Teams",
|
|
}
|
|
|
|
local function launchApps()
|
|
for i, appName in ipairs(appNames) do
|
|
app.launchOrFocus(appName)
|
|
end
|
|
end
|
|
|
|
local function moveMouse()
|
|
local pt = hs.geometry.rectMidPoint(win.focusedWindow():frame())
|
|
hs.mouse.absolutePosition(pt)
|
|
end
|
|
|
|
-- Window management
|
|
--------------------
|
|
|
|
win.animationDuration = 0
|
|
|
|
-- Move and click mouse via keyboard
|
|
vimouse(hyper, 'm')
|
|
|
|
-- Window Navigation
|
|
-- hotkey D is set in Dash itself
|
|
hotkey.bind(hyper, 'a', function() app.launchOrFocus('iTerm') end)
|
|
hotkey.bind(hyper, 's', function() app.launchOrFocus('Firefox') end)
|
|
hotkey.bind(hyper, 'f', function() app.launchOrFocus('ForkLift') end)
|
|
hotkey.bind(hyper, 'g', function() launchApps() end)
|
|
hotkey.bind(hyper, 'n', function() layout.apply(layoutSingle) end)
|
|
hotkey.bind(hyper, 'p', function() layout.apply(layoutDouble) end)
|
|
|
|
-- Moving window around / navigating windows
|
|
hotkey.bind(hyper, 'z', function() win.focusedWindow():toggleFullScreen(); moveMouse() end)
|
|
hotkey.bind(hyper, '[', function() win.focusedWindow():moveOneScreenNorth(); moveMouse() end)
|
|
hotkey.bind(hyper, ']', function() win.focusedWindow():moveOneScreenSouth(); moveMouse() end)
|
|
hotkey.bind(hyper, 'h', function() win.focusedWindow():focusWindowWest(); moveMouse() end)
|
|
hotkey.bind(hyper, 'j', function() win.focusedWindow():focusWindowSouth(); moveMouse() end)
|
|
hotkey.bind(hyper, 'k', function() win.focusedWindow():focusWindowNorth(); moveMouse() end)
|
|
hotkey.bind(hyper, 'l', function() win.focusedWindow():focusWindowEast(); moveMouse() end)
|
|
|
|
-- map hyper + number to the corresponding fn-key, since the touchbar
|
|
-- kinda sucks, and karabiner-elements is breaking fn-function to show keys
|
|
hotkey.bind(hyper, '1', function() eventtap.keyStroke({}, 'F1') end)
|
|
hotkey.bind(hyper, '2', function() eventtap.keyStroke({}, 'F2') end)
|
|
hotkey.bind(hyper, '3', function() eventtap.keyStroke({}, 'F3') end)
|
|
hotkey.bind(hyper, '4', function() eventtap.keyStroke({}, 'F4') end)
|
|
hotkey.bind(hyper, '5', function() eventtap.keyStroke({}, 'F5') end)
|
|
hotkey.bind(hyper, '6', function() eventtap.keyStroke({}, 'F6') end)
|
|
hotkey.bind(hyper, '7', function() eventtap.keyStroke({}, 'F7') end)
|
|
hotkey.bind(hyper, '8', function() eventtap.keyStroke({}, 'F8') end)
|
|
hotkey.bind(hyper, '9', function() eventtap.keyStroke({}, 'F9') end)
|
|
hotkey.bind(hyper, '0', function() eventtap.keyStroke({}, 'F10') end)
|
|
hotkey.bind(hyper, '-', function() eventtap.keyStroke({}, 'F11') end)
|
|
hotkey.bind(hyper, '=', function() eventtap.keyStroke({}, 'F12') end)
|
|
|