Hammerspoon configuration
This commit is contained in:
parent
aae71a0a4e
commit
8fac914586
|
@ -3,6 +3,12 @@
|
||||||
!README.md
|
!README.md
|
||||||
!.gitignore
|
!.gitignore
|
||||||
|
|
||||||
|
!.bash_color
|
||||||
|
!.bash_profile
|
||||||
|
|
||||||
|
!.hammerspoon/*
|
||||||
|
.hammerspoon/.DS_STORE
|
||||||
|
|
||||||
!.vimrc
|
!.vimrc
|
||||||
!.gvimrc
|
!.gvimrc
|
||||||
!.vim/*
|
!.vim/*
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,161 @@
|
||||||
|
-- global helpers
|
||||||
|
-- key modifiers
|
||||||
|
cmd = "⌘"
|
||||||
|
ctrl = "⌃"
|
||||||
|
alt = "⌥"
|
||||||
|
shift = "⇧"
|
||||||
|
|
||||||
|
-- utility functions
|
||||||
|
function alert(msg)
|
||||||
|
hs.alert.show(msg)
|
||||||
|
end
|
||||||
|
|
||||||
|
function notify(title, subtext)
|
||||||
|
hs.notify.new({title=title, informativeText=subtext}):send()
|
||||||
|
end
|
||||||
|
|
||||||
|
-- automatic configuration reloading
|
||||||
|
function reloadConfig(files)
|
||||||
|
local doReload = false
|
||||||
|
for _, file in pairs(files) do
|
||||||
|
if file:sub(-4) == ".lua" then
|
||||||
|
doReload = true
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if doReload then
|
||||||
|
hs.reload()
|
||||||
|
notify("Hammerspoon", "Configuration reloaded")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
hs.pathwatcher.new(os.getenv("HOME") .. "/.hammerspoon/", reloadConfig):start()
|
||||||
|
|
||||||
|
-- caffeinate menubar
|
||||||
|
local caffeine = hs.menubar.new()
|
||||||
|
function setCaffeineDisplay(state)
|
||||||
|
if state then
|
||||||
|
caffeine:setIcon("caffeine-on.pdf")
|
||||||
|
else
|
||||||
|
caffeine:setIcon("caffeine-off.pdf")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function caffeineClicked()
|
||||||
|
setCaffeineDisplay(hs.caffeinate.toggle("displayIdle"))
|
||||||
|
end
|
||||||
|
|
||||||
|
if caffeine then
|
||||||
|
caffeine:setClickCallback(caffeineClicked)
|
||||||
|
setCaffeineDisplay(hs.caffeinate.get("displayIdle"))
|
||||||
|
end
|
||||||
|
|
||||||
|
-- pause everything on mute
|
||||||
|
local muted = false
|
||||||
|
local state = ""
|
||||||
|
local volume = 0
|
||||||
|
hs.hotkey.bind({}, "F9", function()
|
||||||
|
muted = not muted
|
||||||
|
if muted then
|
||||||
|
state = "'" .. hs.itunes.getPlaybackState() .. "'"
|
||||||
|
volume = hs.audiodevice.current().volume
|
||||||
|
hs.audiodevice.current().device:setVolume(0)
|
||||||
|
alert("Muted")
|
||||||
|
if state == hs.itunes.state_playing then
|
||||||
|
alert("iTunes paused")
|
||||||
|
hs.itunes.pause()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
hs.audiodevice.current().device:setVolume(volume)
|
||||||
|
alert("Unmuted")
|
||||||
|
if state == hs.itunes.state_playing then
|
||||||
|
alert("iTunes played")
|
||||||
|
hs.itunes.play()
|
||||||
|
state = ""
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- layout all configured applications
|
||||||
|
local display = {
|
||||||
|
cinema = "LED Cinema Display",
|
||||||
|
dell = "DELL SE2416H"
|
||||||
|
}
|
||||||
|
local layout = {
|
||||||
|
{"Chrome", nil, display.dell, hs.layout.maximized, nil, nil},
|
||||||
|
{"Textual 5 Trial", nil, display.dell, hs.geometry.rect(0, 0, 2/3, 1), nil, nil},
|
||||||
|
{"Hexchat", nil, display.dell, hs.geometry.rect(0, 0, 2/3, 1), nil, nil},
|
||||||
|
{"Discord", nil, display.dell, hs.layout.right50, nil, nil},
|
||||||
|
{"Sublime Text", nil, display.cinema, hs.layout.right50, nil, nil},
|
||||||
|
{"IntelliJ IDEA-EAP", nil, display.cinema, hs.layout.maximized, nil, nil}
|
||||||
|
}
|
||||||
|
|
||||||
|
hs.hotkey.bind({"cmd", "alt"}, "L", function()
|
||||||
|
hs.layout.apply(layout)
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- window movement
|
||||||
|
-- center
|
||||||
|
hs.hotkey.bind({"cmd", "alt"}, "C", function()
|
||||||
|
hs.window.focusedWindow():centerOnScreen()
|
||||||
|
end)
|
||||||
|
-- full
|
||||||
|
hs.hotkey.bind({"cmd", "alt"}, "F", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0, 1, 1))
|
||||||
|
end)
|
||||||
|
-- left half
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "shift"}, "Left", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0, 0.5, 1))
|
||||||
|
end)
|
||||||
|
-- right half
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "shift"}, "Right", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0.5, 0, 0.5, 1))
|
||||||
|
end)
|
||||||
|
-- left 2/3
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl", "shift"}, "Left", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0, 2/3, 1))
|
||||||
|
end)
|
||||||
|
-- right 2/3
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl", "shift"}, "Right", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(1/3, 0, 2/3, 1))
|
||||||
|
end)
|
||||||
|
-- top half
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "shift"}, "Up", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0, 1, 0.5))
|
||||||
|
end)
|
||||||
|
-- bottom half
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "shift"}, "Down", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0.5, 1, 0.5))
|
||||||
|
end)
|
||||||
|
-- top left
|
||||||
|
hs.hotkey.bind({"cmd", "ctrl"}, "Left", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0, 0.5, 0.5))
|
||||||
|
end)
|
||||||
|
-- bottom left
|
||||||
|
hs.hotkey.bind({"cmd", "ctrl", "shift"}, "Left", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0, 0.5, 0.5, 0.5))
|
||||||
|
end)
|
||||||
|
-- top right
|
||||||
|
hs.hotkey.bind({"cmd", "ctrl"}, "Right", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0.5, 0, 0.5, 0.5))
|
||||||
|
end)
|
||||||
|
-- bottom right
|
||||||
|
hs.hotkey.bind({"cmd", "ctrl", "shift"}, "Right", function()
|
||||||
|
hs.window.focusedWindow():moveToUnit(hs.geometry.rect(0.5, 0.5, 0.5, 0.5))
|
||||||
|
end)
|
||||||
|
-- 1 screen left
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Left", function()
|
||||||
|
hs.window.focusedWindow():moveOneScreenWest(false, true)
|
||||||
|
end)
|
||||||
|
-- 1 screen right
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Right", function()
|
||||||
|
hs.window.focusedWindow():moveOneScreenEast(false, true)
|
||||||
|
end)
|
||||||
|
-- 1 screen up
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Up", function()
|
||||||
|
hs.window.focusedWindow():moveOneScreenNorth(false, true)
|
||||||
|
end)
|
||||||
|
-- 1 screen down
|
||||||
|
hs.hotkey.bind({"cmd", "alt", "ctrl"}, "Down", function()
|
||||||
|
hs.window.focusedWindow():moveOneScreenSouth(false, true)
|
||||||
|
end)
|
Loading…
Reference in New Issue