A Tiling Desktop Environment
bitcannon.net
bitcannon.net
[EDIT: best explanation of why I've heard: it's because the macOS design philosophy is that Apple knows best what size a window is supposed to be, while Linux and BSD are aligned with user-centric custom settings]
My go to example to explain this is the “The many windows of John Siracusa” podcast from ATP a few years ago.
The relevant discussion starts at 1:33:00
Siracusa, who grew up as a (classic) Mac user, explains his tiling and overlapping habits to Arment and Liss, who grew up as Microsoft Windows users and later switched, and they gasp in utter horror, shock and awe.
For example Siracusa says he currently has a dozen terminal windows open, and also a couple browser windows, normal for him, in BBEdit he regularly hits 20-40; they ask him if he doesn’t know about tabs and he replies “Oh, I love tabs! Of course every Window has many tabs!”. How would he manage/organize hundreds of tabs in multiple applications with a snapping tiling manager? He can’t. It is fun from there. Like, he jokes after a work day (week) his desktop also has “sedimentary layers”.
I switch between i3 at home and windows at work and that’s one of the things I really miss
Another thing I miss is having a detached window permanently on top
Dragging the center divider doesn’t work in my use case (detached eclipse console window on one side) I have to resize both windows manually
to be clear: it works as expected with two browser windows, it’s the type of window eclipse creates when you detach a view that windows doesn’t seem to like
It's too bad that there isn't at least a hidden property in `defaults` to adjust the intensity of the snapping. Hammerspoon and Karabiner work well for the type of audience found on HN, but coding your own customizations can seem like a lot of work, and there are still some unnecessary limitations to what you can do.
I mapped my caps as HYPER (like most), but I really wish MacOS had a method to acquire a true native SUPER key. I'm currently using ctrl+shift+alt-arrows for resizing, ctrl+alt-arrows for movement, HYPER + arrows for selection --- but its just not as smooth as i3.
The more I use Linux w/ i3, the more I realize that MacOS is very much a cursor OS -- at least with window management. And in this respect, MacOS is way behind the competition.
I used to hate that fact, until I got a keyboard without numpad. The smaller distance between keyboard and mouse makes a huge difference.
I realized, that the mouse is actually faster in many situations. I still use Vim, Launchbar, Magnet and 'CMD Shift /' (Menubar search), but now I am far less annoyed when I do need to switch to the mouse.
Alternatively, I could use the mouse with my left hand. My friend actually did this when I suggested it as a joke, and apparently it didn't take long for him to get used to it. However, I generally don't like ambidextrous mice.
Alternatively, I could use a ten key less keyboard and get a separate wireless numpad.
There are others if you do a search for left-handed keyboards.
It took about a week or so to get comfortable with, and I haven't gone crazy with the gestures -- but its such a nice experience.
The funniest thing about MacOS window managers is that a lot of them can't do three windows stacked (not in the i3 sense) on the left side with one window on the right. This is what ultimately lead me to chunkwm. Prior to that I was using BetterTouchTool with zones.
Interestingly I don't use it that often on my laptop's screen, but for my 34" widescreen it's a must have.
Also, dragging something from the desktop and dropping on a floating window was a major breakthrough, which is kind of incompatible with a split screen model.
Personally, on small screens like the original Mac, I think the floating/overlapping WM worked perfectly. On a 30” however, it’s a bit silly.
And apps often felt way too big on it. The calculator was so comically stretched that they couldn’t bring themselves to ship it.
Full screen only is a simple yet overly contraining model.
Apple kind of invented the overlapping windows paradigm
They preceded the X Window System?The Macintosh was introduced in January 1984
i3 and Vim let me keep my hands off the mouse.
Too bad nothing exists like that on Windows. Snapping or splitting 2 windows side by side (the Windows 10 snap feature) isn't enough.
On the bright side most of the other features that you would use along side a tiling wm can be used in Windows, and it's very good.
- AHK to manage global hotkeys and remapping keys
- Keypirinha to launch apps / folder paths with fuzzy search
- DexPot to have multiple virtual desktops that supports moving windows across them (same key binds as i3)
I made a video about 6 months ago showing some of these tools in use at: https://nickjanetakis.com/blog/a-linux-dev-environment-on-wi...
Although I changed a couple of things since then, such as I use Vim instead of VSCode, but I still use the above tools every day. They are really solid.
Have you looked at MaxTo? https://maxto.net
It does not work in the exact same manner as i3wm does; it lets you decide on a set of regions that windows are maximized into (the regions can be a non-uniform grid). This lets you focus on one task at a time. It has great support for hotkeys. At the moment I believe MaxTo is the closest you'll get to i3 on Windows.
I much prefer i3's tiling strategy where it's not predefined, and instead it reacts to how you're using it on the fly. So if you had 2 windows split and you wanted a third window split, you just get that by default without having to define that triple column layout ahead of time.
The only feature that it doesn't have out-of-the-box is an "always on top" option for floating windows (but can be implemented by running a separate AHK script).
When I ran the stable version a few months ago it didn't even act like a tiled window manager. After you open it, all it did was tile a bunch of existing windows automatically, but then if you tried to resize them, it only resized the window that had mouse focus.
i3 would have resized all of the windows to fit so there's no gaps.
Overall it just felt very flaky and it had a lot of screen flickering when moving things around.
Windows 10 snapping keyboard keys are top tier. Not automated tiling, but save so much time. Also the GUI is beautiful on whatever screen you plug it into (including 4k). On Linux DE's right now? Mint or gnome will show options to scale up 200%, 300%, 400%(!) Even 200% is far to much.
Tiling WM+HDPI doesn't quite exist. Most use gtkrc, xresources, and the WM config to play with sizes. But that doesn't translate across different monitors. So it's a flawed system.
Let's assume HDPI+linux and tiling WM's were ironed out: In practice tiling WM's aren't as good because once you get into a terminal window, it's not as easy as it looks to copy from terminals <-> "gui" applications. It's possible, but the time spent ironing it out may not be worth the trade off for some. For instance I can't rely on copying from a vim inside of tmux, I do :!leafpad % to open a file and copy from that.
As for HDPI and tiling WM's, swaywm is an i3 for wayland that appears to support it: https://swaywm.org/
If you're okay with just HDPI and basic snapping: https://system76.com/pop or gnome 3.32 (that'd be ubuntu 19.04 or debian experimental at the moment I believe). Gnome 3.32 has fractional scaling. That'll scale by 125%, 150%, 175% (probably what you want)
Gnome's snapping isn't a smooth as Window 10's. Windows 10 is really good and half-sizing vertically. IMO: It'd be ideal if gnome 3 behaved the same as windows snap did by default. Extensions can help, but if you rely on them, they're limited and often behind of the latest gnome version (or two or three, or become abandoned entirely [1]), and don't wire-in to keybindings as well.
Until I read the parent article I hadn't realised why I have been so lazy about installing linux on my current laptop, which came with win 10. It's the desktop manager.
Winkey + left/right arrow key snaps the currently focused window at the corresponding half of the screen. Then the desktop icons appear on the other half and you can move around with the keys and press enter on one, and it snaps on the other half. Then press Winkey + up/down key and the focused window snaps to the upper/lower quarter of the screen and you can again choose another window to fill the remaining space. Winkey + Ctrl + left/right arrow changes desktops. With Winkey + tab you see a desktop overlay and can send windows to other desktops from their context menu.
And all without every having to touch the mouse. I had Xmonad on a previous laptop and it's just like that, except for all the arcane configuration files. It works out of the box.
I mean, it's still windows 10, right? I plug it back into my dock and it LBSODs (it's Light Blue now). Every other week I go into nerd warp spasm because of some inane stupidity, like, my machine keeps going to sleep if I leave it idle for a couple of minutes after I woke it up over bluetooth and that's not configurable. Or it randomly adds a new language to my language bar. Stuff like that. It's windows.
But the desktop manager is actually, very damn good.
What you're describing does exist, but as with most things GNU/Linux it's not user friendly in the slightest. What you need to do is to set your Xft DPI to a level that is comfortable for your HDPI monitor, then you need to 'upscale' your second non-HDPI by an equivalent amount. For example I have a 28" 4k monitor, and a 24" 1080p monitor, and I typically prefer a scaling factor of about 150%, so in my .Xresources I have 'Xft.dpi: 144' and I need to upscale the 1080p monitor with the following command:
xrandr --output DisplayPort-0 --auto --pos 0x0 --primary --output HDMI-A-0 --auto --pos 3840x540 --scale 1.5x1.5
Where HDMI-A-0 is the 1080p monitor. I've had a bug in the past where I would need to use the --panning option (e.g., --panning 2880x1620+3840+540) with the correct geometry to get everything working, but it seems to work fine now without that. If you do need to mess with the --panning option though may god help you.
Most terminals have a feature to copy selected text into clipboard automatically, even xterm. This doesn't have much to do with tiling WMs.
With vim , you may need to set clipboard. I personally use neovim so everything just worked out of the box.
I give other environments a go once in a while but this wins so far.
One point to make; I do personally not like large and/or external screens. I like small laptops and I move around a lot during the day.
It is surprisingly fast for it’s age with i3. Besides ML or iOS compiling (which I just do remotely) stuff I do all my dev on it.
Edit: also, if you hate this screen resolution, you or someone on the webs, can put in a much higher res screen in. There is so much you can replace in these things and the keyboard is such a pleasure compared to modern keyboards. Imho ofcourse.
It's tiling is like i3 except it uses manual layouts instead of dynamic. So when you create yet another xterm window it does not rearrange all the other tiles on your screen, it just creates a new tab in the current frame. If you want a new horizontal or vertical split, you create it explicitly. I open shells like browser tabs, so if the default was to somehow find screen space for each one, I'd be looking at hundreds of 2x2 sized xterms. Honestly if I could get i3 to behave like this I'd probably switch (and I've tried...I realize you can set a pane into tab mode, but I find it's still too easy to totally mess up your layout if you are not careful in i3. Anyone got tips?).
I also once used Awesome, and the constant reshuffling of the screen layout drove me crazy. Did not really care for the fixed layouts either.
The i3 model requires building a strong intuition for how to solve broken layouts, and it can be frustrating until you know how. But once you figure it out it's automatic. It's not for everyone, but a lot of people end up liking it a lot.
I actually prefer manual tiling WMs too. So I settled down on StumpWM. It's really good and easy to configure.
Started out with kde3, switched to gnome 2, and as those two evolved found myself longing for simpler and snappier solutions. Windows was evolving relatively slowly but even there you'd always lose one or two things every time you upgraded. On Linux this was much more radical. Not just the desktop but also the stuff under the hood.
Today I just prefer the minimal version of most things I use and do daily. i3 does the job for window management. Vim with as little plugins as possible for scripting and coding (as long as it's not Java or c++ with qt). Since eventually my favorite plugin will stop working as it's unmaintained, or the file manager will get an overhaul and look different and have all its keyboard shortcuts changed. The less stuff I depend on the better.
The author likes Gnome because of it's UI looking like Mac OS, and that's understandable. KDE did look different when I first switched from Macs. But at this point, the only things running in my dev machine is a whole lot of terminals and maybe 1-3 browser instances. So KDE is almost hidden at all tkmes.
This is on my primary desktop (with a 4k display). I recommend it to anyone who's in a rut with their workflow (learn about all the mods, i3-gaps, etc.) - it takes about a day to properly customize and get used to, time well spent.
So, on my macOS laptops, it is Amethyst all day https://github.com/ianyh/Amethyst. Love it.
But on my Linux desktops, I am stuck with Gnome and not gone for full VM replacement with XMonad, i3 or Awesome.
I don't want issues with disk mounting, clipboards, multiple monitors, etc just cause I want automated tiling and have to replace my whole desktop environment to achieve it.
I didn't go for a clean install with no desktop environment, though. I started off with a standard Ubuntu 18.10 install and then installed i3, so I can still start a session with either i3 or gnome. Highly recommend this setup - it makes everything pretty easy because you still have all of the default apps and settings from Ubuntu. The only real config weirdness I had to deal with was adding keybinds for volume/media keys, and the fact that the display brightness keys on my laptop aren't bound (I always run on 100%, so it doesn't bother me).
https://github.com/microsoft/PowerToys/issues?utf8=%E2%9C%93...
I have used it with HiDPI but only briefly, so that may still be imperfect.
I do agree I need to come up with a better way to maintain and distribute this, I'll look into LARBS.
The edition could still use some more love (e.g., I had to set up auto-mounting and HiDPI compatible configs myself), but it is remarkably cohesive and (relatively) easy to get going.
There is definitely room for improvement, but this is probably a good place to look or inspiration, and contributing to advance this work might be a good use of energy for those interested.
The author mentions compositors, but if you don't require fancy things like transparent windows or shadows, and you have a a well supported/behaved GPU and monitor, you can probably do without them if all you care about is tearfree video. Drivers like intel, ati, amdgpu and more recently modesetting have a TearFree option that does just that. For some systems switching to a DRI3/glamour setup is enough and as a last resort you can configure X11 and mesa to force vsync.
I’m considering taking another look at KDE with the tiling KWin extension, since KDE seems to be the center of mass for innovation in 90s style WIMP interfaces.
EDIT: I’ll add that the GTK software world seems to be driving towards hamburger-ization, which makes me wonder how much software of the future will integrate cleanly with XFCE. I’m not sure that the Mint and XFCE people have enough mass to keep fighting the good fight forever.
KDE is starting to seem like a pragmatic long-term bet.
EDIT: but the author has developed the simpler https://github.com/timbertson/slinger
It’s worked really well for my set-up (can make windows fullscreen, take up 1/2, 1/3, 1/4 of vertical or horizontal space of the screen).
As a guy who runs a company I can see a massive in benefit in a world with only tiling window managers, which is that it reduces support and accessibility issues when a window can never be completely hidden.
As such, what I want is basically i3 in a gnome window. That for me would be the best of both worlds. I can do all my fancy i3 stuff but still have a crisp, efficient UI to get settings/stuff done when it's about ease of use, not speed.
My personal experience is that I used a lot of tiling DE back when I had a laptop with 256M RAM.
Lately my last three laptops have had 8G and more of RAM so I don't see the point.
Mainly because I use vim+tmux as an IDE. So I'm already using keyboard shortcuts extensively to quickly navigate through vim, vim tabs and tmux.
A tiling DE would add a third layer on top, that I don't feel I need.
Sure I'm a Linux veteran who has been using keyboard shortcuts for 20 years but there are limits to how far I want to push this. And I feel that vim+tmux is my limit. My DE is vanilla Gnome Desktop on Fedora and I'm loving it. (obviously with animations disabled it feels as snappy as Sway or Awesome WM)
Edit: Just to expand; after hours of coding my brain can do vim+tmux keyboard shortcuts without thinking. The short breaks within that time where I switch to other windows would only disrupt my flow if I had to switch to a whole new set of shortcuts.
But if I was forced to use a DE I'd also go for Gnome - it's pretty polished and provides switchable workspaces a bit like i3. It's just not near as configurable as I'd like.
Just a matter of getting used to. It doesn't even take too much to get used to it.
* low power warnings from cbatticon and
* very basic colour management <https://gitlab.com/victor-engmark/tilde/blob/6a890f649dd4810....
Building a proper DE around a decent tiling WM (or separating out the quality-of-life parts of KDE/GNOME) would be fantastic.
Can any of the other macOS window controllers do that? Spectacle hasn't been maintained in years and the bug reports are piling up.
Disclaimer: I'm a sway dev.
So... KDE?
Maybe it's a mobile-only problem, but it was a weird placement choice nonetheless.