From 71a1a67f164e88ec61a500d8164a156a2734b93a Mon Sep 17 00:00:00 2001 From: Lukas Cech Date: Tue, 4 Feb 2025 09:48:25 +0100 Subject: [PATCH] Implement window presets in hammerspoon --- .../hammerspoon/C3CWorkspace.spoon/init.lua | 70 +++++++++++++++++++ home-manager/lcech-mac-veracode.nix | 14 ++++ 2 files changed, 84 insertions(+) create mode 100644 home-manager/hammerspoon/C3CWorkspace.spoon/init.lua diff --git a/home-manager/hammerspoon/C3CWorkspace.spoon/init.lua b/home-manager/hammerspoon/C3CWorkspace.spoon/init.lua new file mode 100644 index 0000000..bac846d --- /dev/null +++ b/home-manager/hammerspoon/C3CWorkspace.spoon/init.lua @@ -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)() diff --git a/home-manager/lcech-mac-veracode.nix b/home-manager/lcech-mac-veracode.nix index f61407f..11a558f 100644 --- a/home-manager/lcech-mac-veracode.nix +++ b/home-manager/lcech-mac-veracode.nix @@ -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"} + }) ''; }; };