Implement window presets in hammerspoon

This commit is contained in:
Lukas Cech 2025-02-04 09:48:25 +01:00
parent 25e93ab45c
commit 71a1a67f16
2 changed files with 84 additions and 0 deletions

View File

@ -0,0 +1,70 @@
return (function()
spoon = {
name = "C3C Workspace";
version = "0.0.1";
author = "Arnie";
license = "MIT";
}
-- DELL S2722DGM: 0F6BDB5B-840D-40BE-AAC9-B467A78E057A
-- DELL S2721DGF: D3142823-261D-46EF-B9C2-5181C7FE2CA5
-- AV Receiver: B5A65BB6-E73E-4C3D-977C-33C86798AA5A
local appScreenMap = {
Slack = {
desktop = 1,
screen = "0F6BDB5B-840D-40BE-AAC9-B467A78E057A",
fullscreen = true,
},
}
local fullscreen = function(win)
local screen = win:screen()
local cell = hs.grid.get(win, screen)
cell.x = 0
cell.y = 0
cell.w = 24
cell.h = 24
hs.grid.set(win, cell, screen)
end
function spoon:restoreAppsToScreens()
local screens = {}
for _, screen in ipairs(hs.screen.allScreens()) do
screens[screen:getUUID()] = screen
end
for appName, def in pairs(appScreenMap) do
local scr = screens[def.screen]
if scr ~= nil then
local app = hs.application.get(appName)
if app then
local wf = hs.window.filter.new(appName)
if wf then
-- TODO: Really bad performance
for _, win in pairs(wf:getWindows()) do
win:moveToScreen(scr)
if def.fullscreen then
fullscreen(win)
end
end
end
end
end
end
end
-- https://github.com/Hammerspoon/hammerspoon/blob/master/SPOONS.md#hotkeys
function spoon:bindHotKeys(mapping)
local spec = {
restoreAppsToScreens = hs.fnutils.partial(self.restoreAppsToScreens, self)
}
hs.spoons.bindHotkeysToSpec(spec, mapping)
return self
end
return spoon
end)()

View File

@ -40,11 +40,25 @@ in
font-size = 14
'';
};
"${homedir}/.hammerspoon/hmSpoons/C3CWorkspace.spoon" = {
source = ./hammerspoon/C3CWorkspace.spoon;
recursive = true;
};
"${homedir}/.hammerspoon/init.lua" = {
text = ''
${builtins.readFile ./hammerspoon/window-tiling.lua}
${builtins.readFile ./hammerspoon/window-move.lua}
package.path = package.path .. ";" .. hs.configdir .. "/hmSpoons/?.spoon/init.lua"
hs.loadSpoon("C3CWorkspace")
spoon.C3CWorkspace:bindHotKeys({
restoreAppsToScreens = {{"ctrl", "alt", "cmd"}, "F12"}
})
'';
};
};