env/config/hammerspoon/init.lua

248 lines
7.0 KiB
Lua
Raw Normal View History

2021-10-28 20:48:20 -07:00
wf=hs.window.filter
browser = "Brave Browser"
2022-06-09 16:46:50 -07:00
-- browser = "Chromium"
2021-10-28 20:48:20 -07:00
2022-04-06 15:12:46 -07:00
-- Open new / focus existing Finder window in current desktop space
2022-06-09 16:46:50 -07:00
hs.hotkey.bind({"cmd", "ctrl"}, "X", function()
2022-04-06 15:12:46 -07:00
local app = "Finder"
wf_app = wf.new(false):setAppFilter(app, {currentSpace=true})
local wins = wf_app:getWindows()
local count = 0
for _ in pairs(wins) do count = count + 1 end
if (count > 0)
then
wf_app:getWindows()[1]:focus()
else
hs.osascript.applescript(string.format([[
tell application "System Events" to tell process "%s"
click menu item "New Finder Window" of menu "File" of menu bar 1
set frontmost to true
end tell
]], app))
end
end)
2021-10-28 20:48:20 -07:00
-- Open new / focus existing terminal window in current desktop space
2022-06-09 16:46:50 -07:00
-- hs.hotkey.bind({"cmd", "ctrl"}, "T", function()
-- wf_kitty = wf.new(false):setAppFilter("kitty", {currentSpace=true, visible=true})
-- local wins = wf_kitty:getWindows()
-- local count = 0
-- for _ in pairs(wins) do count = count + 1 end
--
-- if (count > 0)
-- then
-- wf_kitty:getWindows()[1]:focus()
-- else
-- hs.osascript.applescript([[
-- tell application "System Events" to tell process "kitty"
-- click menu item "New OS Window" of menu "Shell" of menu bar 1
-- end tell
-- ]])
-- end
-- end)
2021-10-28 20:48:20 -07:00
hs.hotkey.bind({"cmd", "ctrl"}, "T", function()
2022-03-03 23:39:50 -08:00
wf_iterm2 = wf.new(false):setAppFilter("iTerm2", {currentSpace=true, visible=true})
2021-10-28 20:48:20 -07:00
local wins = wf_iterm2:getWindows()
local count = 0
for _ in pairs(wins) do count = count + 1 end
2022-03-03 23:39:50 -08:00
2021-10-28 20:48:20 -07:00
if (count > 0)
then
wf_iterm2:getWindows()[1]:focus()
else
hs.osascript.applescript([[
tell application "iTerm"
create window with default profile
activate
end tell
]])
end
2021-09-30 20:11:31 -07:00
end)
2021-11-01 14:09:31 -07:00
-- Open new / focus existing browser window in current desktop space
2021-11-01 14:09:31 -07:00
hs.hotkey.bind({"cmd", "ctrl"}, "W", function()
2022-03-03 23:39:50 -08:00
wf_browser = wf.new(false):setAppFilter(browser, {currentSpace=true, visible=true})
2021-11-01 14:09:31 -07:00
local wins = wf_browser:getWindows()
local count = 0
for _ in pairs(wins) do count = count + 1 end
if (count > 0)
then
wf_browser:getWindows()[1]:focus()
else
hs.osascript.applescript(string.format([[
tell application "%s"
make new window
activate
end tell
]], browser))
end
end)
2022-03-03 23:39:50 -08:00
-- CHROMIUM-BASED BROWSERS ONLY: Open new tab to right of current browser
hs.hotkey.bind({"cmd", "option"}, "T", function()
local focusedAppName = hs.window.focusedWindow():application():title()
if focusedAppName == browser
then
hs.osascript.applescript(string.format([[
tell application "System Events" to tell process "%s"
click menu item "New Tab to the Right" of menu "Tab" of menu bar 1
end tell
]], focusedAppName))
else
hs.notify.new({title=string.format("%s not focused.", browser)}):send()
end
end)
2021-10-28 20:48:20 -07:00
-- Open new / focus existing vscode window in current desktop space
2022-03-03 23:39:50 -08:00
hs.hotkey.bind({"cmd", "ctrl"}, "V", function()
local app = "Code"
2022-03-03 23:39:50 -08:00
wf_app = wf.new(false):setAppFilter(app, {currentSpace=true, visible=true})
local wins = wf_app:getWindows()
local count = 0
for _ in pairs(wins) do count = count + 1 end
if (count > 0)
then
wf_app:getWindows()[1]:focus()
else
hs.osascript.applescript(string.format([[
tell application "System Events" to tell process "%s"
click menu item "New Window" of menu "File" of menu bar 1
set frontmost to true
end tell
]], app))
end
end)
2022-03-03 23:39:50 -08:00
-- Open new / focus existing g/n/mac/vim(r) window in current desktop space
2022-03-03 23:39:50 -08:00
hs.hotkey.bind({"cmd", "ctrl"}, "E", function()
2022-06-09 16:46:50 -07:00
local app = "VimR"
2022-03-03 23:39:50 -08:00
wf_app = wf.new(false):setAppFilter(app, {currentSpace=true, visible=true})
local wins = wf_app:getWindows()
local count = 0
for _ in pairs(wins) do count = count + 1 end
if (count > 0)
then
wf_app:getWindows()[1]:focus()
else
hs.osascript.applescript(string.format([[
tell application "System Events" to tell process "%s"
2022-03-03 23:39:50 -08:00
click menu item "New Window" of menu "File" of menu bar 1
set frontmost to true
end tell
]], app))
end
end)
2022-04-06 15:12:46 -07:00
-- APP-AGNOSTIC GLOBAL OPEN/FOCUS BINDINGS
hs.hotkey.bind({"cmd", "ctrl"}, "O", function() hs.application.open("Obsidian") end)
hs.hotkey.bind({"cmd", "ctrl"}, "C", function() hs.application.open("Numi") end)
2022-06-09 16:46:50 -07:00
hs.hotkey.bind({"cmd", "ctrl"}, "S", function() hs.application.open("Signal") end)
2021-10-28 20:48:20 -07:00
-- Clear clipboard
2021-10-28 20:48:20 -07:00
hs.hotkey.bind({"cmd", "shift", "ctrl"}, "C", function()
hs.pasteboard.setContents("")
2022-03-03 23:39:50 -08:00
hs.notify.new({title="Cleared clipboard."}):send()
2021-10-28 20:48:20 -07:00
end)
2021-11-01 14:09:31 -07:00
2022-06-09 16:46:50 -07:00
-------------------
-- A R C H I V E --
-------------------
-- Desktop Action Hotkeys (MOVED TO SYSTEM SETTINGS)
-- -- Show Desktop (like windows or KDE)
--
-- hs.hotkey.bind({"alt"}, "d", function()
-- hs.eventtap.keyStroke({"fn"}, "f11")
-- end)
--
-- -- Switch Desktops (like windows or KDE)
--
-- hs.hotkey.bind({"ctrl", "alt"}, "left", function()
-- hs.eventtap.keyStroke({"ctrl"}, "left")
-- end)
--
-- hs.hotkey.bind({"ctrl", "alt"}, "right", function()
-- hs.eventtap.keyStroke({"ctrl"}, "right")
-- end)
--
--
-- -- Expose Windows (Mission Control)
--
-- hs.hotkey.bind({"alt"}, "tab", function()
-- hs.application.open("Mission Control"):activate()
-- end)
-- Move windows between displays
-- hs.hotkey.bind({"ctrl", "shift"}, "right", function()
-- hs.window.focusedWindow():moveToScreen(hs.screen:next())
-- end)
--
-- hs.hotkey.bind({"ctrl", "shift"}, "left", function()
-- hs.window.focusedWindow():moveToScreen(hs.screen:previous())
-- end)
-- The ShiftIt Alternative (MOVED TO RECTANGLE)
-- units = {
-- right50 = { x = 0.50, y = 0.00, w = 0.50, h = 1.00 },
-- right50 = { x = 0.50, y = 0.00, w = 0.50, h = 1.00 },
-- left50 = { x = 0.00, y = 0.00, w = 0.50, h = 1.00 },
-- left50 = { x = 0.00, y = 0.00, w = 0.50, h = 1.00 },
-- top50 = { x = 0.00, y = 0.00, w = 1.00, h = 0.50 },
-- bot50 = { x = 0.00, y = 0.50, w = 1.00, h = 0.50 },
-- upright50 = { x = 0.50, y = 0.00, w = 0.50, h = 0.50 },
-- botright50 = { x = 0.50, y = 0.50, w = 0.50, h = 0.50 },
-- upleft50 = { x = 0.00, y = 0.00, w = 0.50, h = 0.50 },
-- botleft50 = { x = 0.00, y = 0.50, w = 0.50, h = 0.50 },
-- maximum = { x = 0.00, y = 0.00, w = 1.00, h = 1.00 }
-- }
--
-- mash = { 'shift', 'ctrl', 'cmd' }
-- hs.hotkey.bind(mash, 'l', function() hs.window.focusedWindow():move(units.right50, nil, true) end)
-- hs.hotkey.bind(mash, 'h', function() hs.window.focusedWindow():move(units.left50, nil, true) end)
-- hs.hotkey.bind(mash, 'k', function() hs.window.focusedWindow():move(units.top50, nil, true) end)
-- hs.hotkey.bind(mash, 'j', function() hs.window.focusedWindow():move(units.bot50, nil, true) end)
-- hs.hotkey.bind(mash, ']', function() hs.window.focusedWindow():move(units.upright50, nil, true) end)
-- hs.hotkey.bind(mash, '[', function() hs.window.focusedWindow():move(units.upleft50, nil, true) end)
-- hs.hotkey.bind(mash, ';', function() hs.window.focusedWindow():move(units.botleft50, nil, true) end)
-- hs.hotkey.bind(mash, "'", function() hs.window.focusedWindow():move(units.botright50, nil, true) end)
-- hs.hotkey.bind(mash, 'm', function() hs.window.focusedWindow():move(units.maximum, nil, true) end)