Personally, I wish Rectangle had the option of storing configuration in a simple dot file in my home dir but I understand that would prevent syncing through icloud, which is a feature I imagine a lot of folks like. Barring that, I wish rectangle could export/import the configuration in a more editor friendly way so I could make these configuration changes much faster and more easily ensure consistency across settings.
Another thing is the way Magnet moves and resizes windows seems to create less visual 'flashing' than Rectangle's method, for instance Rectangle will resize, then move, then resize again when maximizing a window, which can create a really pronounced 'flashing' effect. That's not to say Magnet has no 'flashing' ever, there's certain situations where it does and to my understanding it seems necessary due to the limited nature of moving and resizing windows on macOS (I guess you have to do one then the other and can't both move and resize simultaneously?), but to me Magnet's methods often look visually better.
Rectangle is great though, I've switched to it from Magnet and these are just some minor gripes.
The main thing missing for me is being able to use mouse buttons to move windows: I have a Kensington Expert Mouse and I use buttons 3 and 4 for some actions.
Actually, the built-in keyboard shortcuts for moving spaces with Mission Control have the same problem, so I have configured Hammerspoon to turn the mouse clicks into key presses. I suppose I could do the same thing with Rectangle, tho it's annoying to have to rely on multiple apps.
Before Yabai I was using Amethyst, but like your experience with Yabai, I felt like it would suddenly stop working and needed to be restarted. Maybe your experience would be flipped.
Switching to asahilinux was a *far* better solution. Not really sure what the use of macOS for me is when asahi exists now.
Asahilinux >> MacOS
It's wonderful to use the M2 with incredible battery life and performance without having to have a subpar OS.
[1] https://github.com/kasper/phoenix
[2] https://github.com/nik3daz/spin2win
That said, it seems there are no perfect solutions. At work where I can't really be futzing around with window management config I basically just use Raycast + hotkeys and try to keep everything inside maximized application windows. This means using Arc browser (tabbed), iTerm (tabbed), VS Code (with native tabs), etc mapped to cmd+1, cmd+2, cmd+3...Not much "tiling" going on but at least everything is pretty keyboard friendly.
It’s fewer bells and whistles out of the box, but it works well.
Hello, AeroSpace author speaking :)
I'd be happy if you could try AeroSpace (it's and i3-like window manager for macOS) and report me back if it loses track of windows.
https://github.com/nikitabobko/AeroSpace
The architecture of AeroSpace is that on every user input that may change window configuration (new window created, window moved, window resized, new app launched, etc), AeroSpace runs the same idempotent operation (I call it "refresh session") that tries to detect new window, checks all invariants, re-layouts windows, etc.
The "refresh session" performs all the mentioned steps regardless of the user input nature (it doesn't matter whether the window is moved, or a new app is launched)
I believe that this architecture may lose windows only if the macOS API returns invalid data.
I have been using AeroSpace for quite a while myself and I'm happy with it
I've been using i3 for over a decade now and hate using any computer that doesn't have it, been trying to find a suitable substitute for my work mac for ages. Amethyst, rectangle, magnet, yabai, each had its own problems. The virtual workspace idea is genius and solves some of the biggest issues with those alternatives. This is by far the closest thing to i3 on mac I've seen. Thank you so much for making this.
My suggestion: open up a way to take donations to the project, and/or sell a packaged version on the mac app store. I'd be happy to pay good money for this.
-- window management
hs.loadSpoon("MiroWindowsManager")
-- set to 0.x for animation, 0 for none
hs.window.animationDuration = 0.3
spoon.MiroWindowsManager:bindHotkeys({
up = { hyper, "k" },
down = { hyper, "j" },
left = { hyper, "h" },
right = { hyper, "l" },
fullscreen = { hyper, "f" },
nextscreen = { hyper, "n" }
})```
hs.window.animationDuration = 0.2 spoon.MiroWindowsManager:bindHotkeys({ up = {hyper, "up"}, right = {hyper, "right"}, down = {hyper, "down"}, left = {hyper, "left"}, fullscreen = {hyper, "f"} })
```
Works well enough for years.
for window arrangement the hs.grid component is plenty for me. see an example: https://www.youtube.com/watch?v=nRJ0477KFp8
If I ever have to go back, it'll be one of the first things I install again.
https://github.com/peterklijn/hammerspoon-shiftit
My config file:
https://gist.github.com/pazimzadeh/b1c70f5f205d0b63264e7c021...
It does not make sense to me to use a "normal" tilling wm that automatically messes up windows' dimensions without asking me
I just need the windows to be automatically put side by side:
It takes a little while to get used it, but Yabai is now an app I can't live without.
1: launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
# Reload yabai ctrl + shift + alt -r : launchctl kickstart -k "gui/${UID}/homebrew.mxcl.yabai"
Fleshing my concept out on a whim (since I am surprised I can't find another reference to this idea online!) with the help of ChatGPT (yes, it can do this now!), it looks like this equation would capture this concept:
U(r)=Umax ⋅e^(−k(100−r)^n)
where the total perceived Utility of a product/service/trusted person, given r=reliability percent (out of 100), is the maximum Utility times e to the (-k(100-r)^n), where k and n are tweakable based on the given product/service/person but which I want to assign values of 0.03 and 1.5 to, respectively, after plotting it.
Useful concept, that's exactly it.
Yabai used to be pretty solid and usable, but I think with the author not using a Mac for his daily and with all the updates to the OS that he has to keep track of (and how some windowing Mac api are still blackboxed or not reliant to build logic atop of) it's only a matter of time before it gets into a poorer state.
This is what I used for years. Sadly I'm back in Windows land these days due to work.
https://github.com/imawizard/MiguruWM
The wiki also contains a list of other window managers for Windows one might want to check out.