mirror of
https://github.com/nmasur/dotfiles
synced 2024-12-25 19:24:53 +00:00
70 lines
2.3 KiB
Lua
70 lines
2.3 KiB
Lua
--- === Work Layout ===
|
|
-- Portions of this is adopted from:
|
|
-- https://github.com/anishathalye/dotfiles-local/tree/ffdadd313e58514eb622736b09b91a7d7eb7c6c9/hammerspoon
|
|
-- License is also available:
|
|
-- https://github.com/anishathalye/dotfiles-local/blob/ffdadd313e58514eb622736b09b91a7d7eb7c6c9/LICENSE.md
|
|
|
|
WORK_ONLY_MONITOR = "DELL U4021QW"
|
|
LAPTOP_MONITOR = "Built-in Retina Display"
|
|
|
|
-- Used to find out the name of the monitor in Hammerspoon
|
|
local function dump(o)
|
|
if type(o) == "table" then
|
|
local s = "{ "
|
|
for k, v in pairs(o) do
|
|
if type(k) ~= "number" then
|
|
k = '"' .. k .. '"'
|
|
end
|
|
s = s .. "[" .. k .. "] = " .. dump(v) .. ","
|
|
end
|
|
return s .. "} "
|
|
else
|
|
return tostring(o)
|
|
end
|
|
end
|
|
|
|
-- Turn on when looking for the monitor name
|
|
print(dump(hs.screen.allScreens()))
|
|
|
|
local function concat(...)
|
|
local res = {}
|
|
for _, tab in ipairs({ ... }) do
|
|
for _, elem in ipairs(tab) do
|
|
table.insert(res, elem)
|
|
end
|
|
end
|
|
return res
|
|
end
|
|
|
|
local function worklayout()
|
|
hs.hotkey.bind({ "alt", "ctrl", "cmd" }, "l", function()
|
|
local u = hs.geometry.unitrect
|
|
-- set the layout
|
|
local left = {
|
|
{ "kitty", nil, WORK_ONLY_MONITOR, u(0, 0, 1 / 2, 1), nil, nil, visible = true },
|
|
}
|
|
local right = {
|
|
{ "Slack", nil, WORK_ONLY_MONITOR, u(1 / 2, 0, 1 / 2, 1), nil, nil, visible = true },
|
|
{ "Mail", nil, WORK_ONLY_MONITOR, u(1 / 2, 0, 1 / 2, 1), nil, nil, visible = true },
|
|
{ "zoom.us", nil, WORK_ONLY_MONITOR, u(5 / 8, 1 / 4, 1 / 4, 1 / 2), nil, nil, visible = true },
|
|
}
|
|
local laptop = {
|
|
{ "Firefox", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true },
|
|
{ "Obsidian", nil, LAPTOP_MONITOR, u(0, 0, 1, 1), nil, nil, visible = true },
|
|
}
|
|
local layout = concat(left, right, laptop)
|
|
hs.layout.apply(layout)
|
|
end)
|
|
|
|
-- Reload Hammerspoon whenever layout changes
|
|
hs.screen.watcher.new(function()
|
|
-- Pause for 5 seconds to give time for layout to change
|
|
hs.timer.doAfter(5, function()
|
|
-- Perform the actual reload
|
|
hs.reload()
|
|
end)
|
|
end)
|
|
end
|
|
|
|
return worklayout
|