Show HN: Komorebi – A tiling window manager for Windows 10/11 written in Rust
github.com
github.com
The official Win32 API for interacting with Virtual Desktops[1] is severely (deliberately?) lacking. There are some brave souls who are constantly reverse-engineering and figuring out how to interact with Virtual Desktops in all the ways that are missing from the official Win32 API, but this is a constant game of whack-a-mole because you never know when an update to Windows is going to break everything.[2]
If anyone working on the Virtual Desktops feature at Windows reads this: please give us a real, stable API for Virtual Desktops to develop against.
[1] https://learn.microsoft.com/en-us/windows/win32/api/shobjidl...
Just to state the obvious, "hardware-specific tweaks" are hardware-specific. It is not hard, these days, to buy hardware where everything just works out of the box. It doesn't make sense to say that in general Linux sucks for laptops when what you're complaining about is a problem caused by your hardware.
And Windows won't either because driver support ended a long time ago when you use old hardware.
Of course Linux sucks, but it only does so because it has the issue of trying to run anywhere with no default settings enforced, because those would fail anyways.
Or new hardware. I have an EliteBook 845 G8 (Zen 3) from December 2021. Windows doesn't recognize its webcam. Some issue with some USB chip along the way. No, HP's provided drivers don't help. Yes, HP recommends Windows 11.
I have its cousin, an EliteBook 840 G8 (Intel 11th gen), same vintage. Windows doesn't recognize its touchpad / trackpoint during install. It needs specific drivers from Windows Update. Luckily, the internal keyboard and an external USB mouse work fine.
I've even tried with the latest win 11 22h2, that's been recently released, no luck. On the webcam front, it actually works at first, then it figures it requires some "updates" which break things again.
Linux has worked perfectly from the beginning on both of them, no random tweaks required. And I'm not even running Ubuntu or similar, which you'd expect to do things automagically, just plain Arch.
HP likely chose to have a semi-custom part in those models and included the driver in the shipped build of Windows. They also likely make the driver available for download somewhere (though this "somewhere" is not always easy to find.)
Well, there's a big page with drivers available for download for this specific model on HP's website. They also offer a tool to check for missing / outdated drivers, similar to Intel's. According to both, everything is installed and up to date, but the USB part isn't working (has an exclamation mark in device manager).
I think the pre-installed Windows 10 did support the webcam, but then it had issues with the display backlight being extremely dim.
Anyway, in practice, this is only mildly annoying. I don't use Windows all that often, and the webcam even less.
This is unfortunately common among consumer-grade laptops. I've been bitten by this enough times that I will no longer purchase a consumer-grade laptop; I will only purchase models meant for business. They are usually 2 CPU generations behind, but importantly, everything works and works reliably.
Nah, it works perfectly on Linux.
> or simply a buggy Windows driver
This I can buy, but the point stands: it's not guaranteed that Windows will support new-ish laptops any better than Linux.
> consumer-grade laptops
HP EliteBooks are pretty much "laptops meant for business", and not even particularly low-end ones at that.
They have the price and (superficially) looks of a macbook pro, but come complete with ridiculously bad displays and shoddy assembly. Mine even have a smartcard reader!
One of the good parts, though, is they seem to be one of the rare AMD laptops with no soldered RAM.
on this very day, i had to disable tap-to-click on the trackpad. so no, comments like the above are true.
i would not recommend a linux laptop to anyone. the used Thinkpad and Dell folks are the exceptions, not the norm.
https://forums.lenovo.com/t5/ThinkCentre-A-E-M-S-Series/Fix-...
Then it stopped working on nearly every Windows Update after.
I'm not going to argue that under Linux there would be less problems or something crazy like that, but Windows has its own share of problems as well.
[1] https://cookie.engineer/weblog/articles/synaptics-touchpad-o...
(For everyone who thinks this is because Linux has much problems: I had no serious problems with the touchpad in my first 20 years but I hear it is a thing so I expect to see it sooner or later ;-)
Trying to understand how this relates to a tiling WM, I’m wondering if the virtual desktop in dedicated tiling WMs concept goes beyond multiple instances of the display and has arbitrary widths (or single dimension spaces)? That does sound nice for some ways I’d want a tiling WM, but it’s not what I’ve previously thought I’d want in one where I might have a grid with non-uniform x/y divisions.
Like it sounds very confusing to have a layout such as:
a a b b c
a a b b c
a a d d e
And to treat anything besides `a` as a “desktop” even if they’re variable width.It's because they let the user decide what layout and how many virtual desktops they need.
I usually have 10+ virtual desktops, because I use 3 screens, and each of them has a different set of virtual desktops - which are also not bound to a specific screen and can be moved to another screen just as easily. If I need a new virtual desktop on the fly, I just create one without any repercussions for the rest of the layout (or stack).
And I think that's the key concept of tiling WMs: user choice.
On MacOS and Windows, on the other hand, I don't see a chance of this working anyhow. The virtual desktops there are usually just a single stack behind the scenes, and they are not per screen, so working with those platforms and expensive window manager tools has been always a pain for me.
The fullscreen mode of Apps alone is just so botched, no way this is gonna work failsafe with a third-party window manager that is reverse engineering the unofficial, breaking, APIs.
I'm not using a mac anymore, but last time I checked, this wasn't true. You could have per-screen virtual desktops, meaning you could have screen 1's virtual desktop stay put while you switch desktops on screen 2. The setting was easily accessible, too. In Settings -> Mission Control IIRC.
The default animation is also a dealbraker if you plan on switching continuously desktop
The problem is that those window managers (in my opinion) is that they fail to do the basics well. You have to find the individual components like the bar if the WM comes with it and write your own scripts or hopefully find one that someone else wrote to get the things that are built into Gnome and KDE and work out of the box. You gotta set up your own notifications daemon. You need to configure how to launch applications through something like rofi or by configuring keybinds in your config. You need to configure your login windows. It can be enjoyable to a point but it can also just become really frustrating to deal with.
I think PopOS' tiling WM built on top of Gnome is pretty good but Gnome itself is frustrating trying to configure. KDE is highly configurable but its base configuration/experience is worse than Gnome.
The closest I've gotten to something that does both is replacing xfce's xfwm with i3 but ultimately it can easily break since it depends on turning off xfwm in sessions and making i3 an autolaunch item.
Linux is obviously the best for tiling WMs, but they have their own set of issues that traditional WMs on popular DEs in linux don't. Windows and MacOS have even more issues when attempting to implement them. I feel like there's just no winning here, regardless of what OS you're using.
A DE (e.g. Gnome, KDE) is a multi-part package that bundles up a given WM with the software suite necessary for running a conventional desktop. There exist plenty of DEs that bundle up tiling WMs for convenient use (for example: Regolith[1])
> You've inadvertently described the delineation between a DE and WM.
My problem is that the competently done DEs tend to have their own WM and are not designed to allow you to run a different WM on top of it. I understand that most tiling WMs expect that the user might also want to set up their own desktop picture service, notifications, status bars, etc. I just think that there should be one that ships with something sensible that it doesn't just feel like it's piping STDOUT to an html file overlayed on top of the desktop that you then have to create custom scripts to have reasonable functionality. Polybar comes to mind as one such example.
It just feels like the tradeoffs are so massive and I simply don't have the skill to create something that matches my own wants for a linux desktop. I love tinkering but I don't want to have to tinker with everything to get a solution that works for me.
Then I tried Arch with i3 and the slowness went away. It would even happily render blur effects via picom without any issue.
A lot of it just unreliable for reasons I can't discern. I have keybindings in my hammerspoon config to switch between applications based on their position on screen relative to the active window, but sometimes it just doesn't work and even when it does it's quite slow. It feels like it should not only work but should be extremely fast given that MacOS knows exactly where every window is placed and its dimensions that can be accessed by hammerspoon, but unfortunately it's neither fast nor reliable.
I'm currently using a mix of hammerspoon and amethyst which is working okay but not great and everything is a bit slow. Changing spaces is slow, modestly improved by reduce motion settings. Yabai can get rid of the delay between switching spaces but only if you disable SIP.
Glad they exist and I'm glad that third party applications can interact with MacOS' window management, but I do wish some of it were snappier. Moving single windows is quite fast but anything more than that it feels sluggish.
On Linux, it's totally stable on identical workloads.
Personally, I don't see reason anymore for the existence of Windows. For a long time it held its ground as a gaming OS, but Steam/Proton has taken that final advantage from it.
I was pulling my hair out trying to diagnose crashes on a laptop for someone else. A bonus is if you install docker or WSL, the alienware control software could no longer turn off the overclock. So that whole time I thought there was no way it was overclocked because the option to overclock wasn't even visible in their software. it was a 2022 Alienware with a 12900k 64GB ddr5 and a 3080ti
Asus Zephyr G14 with AMD insides. Could be that they are indeed overclocking it for some reason. I didn't seem to get it to be 100% stable even with removing some boosts et al.
But that doesn't matter. On Linux I don't have to tweak anything, it just works. Which is amusing.
I've noticed animations seem to be quicker in the win11 22h2 update, which makes them much less annoying, but I still prefer the instant change of i3.
My current way - I use Alt-Tab mostly and Win+<number> sometimes. In addition I have Powertoys Run (Window Walker) to search through terminals when number of terminals windows goes > 15 or 20.
Under Keyboard => Shortcuts => Mission Control it give you an option to assign hotkeys for them. I believe the default shortcuts to move left or right a space is ⌃← and ⌃→.
In my opinion, you have right there concisely expressed the real differentiator of using a Linux tiling WM. While I understand that there exist numerous incentives for adding animations to graphical user interfaces, such as increased consumer appeal and furnishing the computer program with a time interval in which it can (re)load data, I would also like user interface designers to consider that for some, speed really is paramount, really is second to nothing, and then that those would like to opt out of animations. I care not if the GUI freezes for half a second when switching into a different context, as long as it's lower than the one-second baseline delay introduced by the designer. This becomes so much more important when dealing with the operating system --- it's in use all the time, and the time spent waiting in it compounds and throws one off! It's the "No Child Left Behind", but for GUIs --- let's file down peak performance in order to obtain a more uniform result.
On Linux using i3, swapping your workspace costs exactly nothing. I often find myself rapidly and repeatedly switching to-and-fro between any two of them, as if I were performing a trill on a musical instrument, whenever I want to compare the output of two applications. The WM is my personal concierge there. In Mac OS, it feels like I'm stuck waiting in a crowded queue at the post office when there's only one tired and miserable worker around.
https://en.wiktionary.org/wiki/%E6%9C%A8%E6%BC%8F%E3%82%8C%E...
You can't even bind a shortcut to send a window to a specific zone.
For me, Windows must be used with mouse so Fancy Zones fits me well.
After using i3, anything else for productivity just doesn't feel right for me, although I've made do. I'm excited to dig deeper into this and to make it work for me.
https://gist.github.com/naikrovek/b13a77d169de0e192bcf48fec0...
it’s designed for a single high res monitor (1440p or better) and multiple monitors aren’t supported at all. i haven’t added that because i don’t need that.
the Windows 11 mouseover-the-maximize/restore-button beats my thing on usability, though.
By exposing all of the functionality (aka socket messages) via a cli (komorebic), I can use whatever I want to handle my shortcuts, which in turn makes it easy to configure my shortcuts to whatever I want. An added bonus is that exposing the functionality via the cli means that I can compose multiple commands to run sequentially with a single key bind.
That being said, I use it extensively every day myself so I'm constantly fixing any bugs that I come across myself in daily use, and similarly I'm always playing with new ideas and coming up with features that I have not seen present in other twms.
Honestly, this rabbit hole goes so deep. I started using Yabai on macOS, and when I switched to Windows, the experience of trying to interface with a computer without a tiling window manager was so frustrating that I had no alternative but to write my own tiling window manager (well actually I wrote two, komorebi is the second one).
* Rules to automatically change the layout depending on the number of windows on the screen[1]
* A custom layout definition format with an interactive custom layout generator[2]
* A subscription service so that applications that wish to do something with komorebi's state don't have to continuously poll[3]
* A frequently updated repository which contains configuration tweaks for problematic applications so that if someone fixes it once, it is fixed for good[4]
* A code generator that is able to consume the application-specific configuration tweaks mentioned in the last point and generate a valid configuration file[5]
* A more general library generator for the main configuration format preferred by the community[6]
Most interestingly for me, I used the subscription service to write an automatic application-aware keyboard layer-switcher[7], which means that I never have to store a key binding to switch between programmable keyboard layers ever again; whichever window I switch to with my tiling window manager, if there is an application-specific keyboard layer that I have defined with custom bindings or shortcuts etc specifically for that application, they get automatically applied without me even having to think about it.
It's such a huge productivity booster, a real "the future is now" moment for me personally.
[1] https://github.com/LGUG2Z/komorebi/#dynamically-changing-lay...
[2] https://lgug2z.github.io/komorebi-custom-layout-generator/
[3] https://github.com/LGUG2Z/komorebi/#window-manager-event-sub...
[4] https://github.com/LGUG2Z/komorebi-application-specific-conf...
[5] https://github.com/LGUG2Z/komorebi/#generating-common-applic...
[6] https://github.com/LGUG2Z/komorebi/#autohotkey-helper-librar...
In any layout, you can always use the `komorebic.exe move <OPERATION_DIRECTION>` command to place a window in the desired tile to achieve the desired size.
[1] https://lgug2z.github.io/komorebi-custom-layout-generator/
[2] https://github.com/LGUG2Z/komorebi/#dynamically-changing-lay...
- Win+Z brings up the layout menu
- number keys select the layout, then where in the chosen layout the current window should go
- arrow keys then let you select the other windows to complete the tiling
So if I want Firefox (current window) and Slack side by side - Win-Z inside FF
- 1 selects side-by-side
- 1 again snaps FF to the left (2 would snap to right, and so on for more complex layouts)
- Slack is the first suggested window (MRU), so Space to snap right
It's not as quick as the mouse interface yet - especially with the mouse improvements MS made - but seems like it could be easily automated with eg Autohotkey