The i3-gaps project has been merged with i3
github.com
github.com
The story of this merge is not only several years long, but a true success story in OSS in my eyes.
I took on i3-gaps by taking an existing patch and rebasing it to the latest i3 HEAD. From there it became popular and I took on the maintainership, eventually contributing to i3 itself and finally becoming a maintainer there as well.
Whilst originally gaps were considered an "anti feature" for i3, years ago we already decided that we'd accept adding gaps into i3. Clearly the fork was popular, and as someone else pointed out here as well, the Wayland "port" of i3, sway, added gaps from the beginning on with great success.
However, the original gaps patch was focused on being small and easy to maintain. It caused a few issues and had some drawbacks. We made it a condition that porting gaps into i3 would have to resolve these issues. Alas, this could've meant a lot of work that no one took on for the years to follow.
Recently, however, the maintainers of i3 got together (a chance to meet arose randomly). During that meeting we decided that it'd be better to just merge the fork and improve it later. And as it happened, Michael, the author and main maintainer of i3, did all that work during the port as well.
What resulted is the end of almost a decade of i3-gaps, and a much better implementation thereof. I'm incredibly happy to see this happen after all this time, and a big shoutout to Michael here for all that work.
Edit: Hadn't realized Michael was commenting here already. I guess leaving the background and story from my side of things doesn't hurt regardless.
For me, i3 is one of those few pieces of software that is pretty much optimal – it is rock solid and stable, I wouldn't know how to improve it any further and I also couldn't imagine living without it. By now, my i3 keybindings are hard-wired into my brain and I despise having to work with any other window manager or desktop environment! Besides, for the few rare cases where you do forget to lock your screen, a tiling wm with custom key bindings is a great way to prevent your colleagues from messing with your machine, in particular: announcing free cake using your Slack account. :-)
Story time:
When I was still doing research in cosmology back in 2014/2015, one day there was this new guy in our research group and, as it so happens, we ended up sharing an office. A couple weeks in, we were both at our desks and he looked over my shoulder and said:
"Ahh, I see you're using i3!"
"Yup, been using it for quite a while and I absolutely love it!"
"Do you know who the maintainer is?", he replied, with a big smile on his face.
Turns out, Michael was his brother! So that's how I learned to remember the name "Stapelberg". :-)
[@secure: Please say Hi to him for me!]
A few years after that episode, one night I told a good friend of mine about i3 & i3-gaps and we both had a look at their Github repositories. My friend had recently started working at this IT consulting firm, and he went: "Wait a second, Airblader / Ingo Bürk? That's my colleague!"
Not long after that discovery, I started working for a startup in Munich and it just so happened that the startup had also hired that same consulting firm for their dev team. Aaaand Ingo was their consultant! I'm honored to say I learned a ton from Ingo during that time and I still look back fondly to pair-programming with him (i.e. mostly him telling me what to do or patiently explaining things to me). If I've ever seen one of those infamous unicorn rockstar 10x developers, it's definitely him!
Four years later, I ended up at that consulting firm, too, in no small part thanks to Ingo convincing me to join them.
All this is to say: The world is small. And: You guys have changed my life! Thank you! :)
I like i3 in principle, but the lack of vertical dock support is a dealbreaker for me. Things like swaybar taking up vertical space across the entirety of my wide desktop is just a shame.
I’m also happy we could complete this merge now!
Ironic, given that the default i3 configuration uses jkl; instead of hjkl for direction.
Off topic:
Sounds like an in-person meeting, as opposed to only being remote, facilitated a roadmap change that hadn’t happened without it.
On a more practical level, I’ve never been more efficient as I have been i3.
So a deep thank you to all the folks responsible for building such great software and making it accessible to so many so easily.
I'll die defending your right to do so, but dear god your taste is atrocious. It's like you finally got out of prison and decided to decorate your bedroom window with iron bars.
Alt tab with a long hold on alt lets you select another window, albeit from a linear list as you describe, by cycling through with tab and shift-tab.
Quickly typing alt-tab now cycles between the window you came from and the window you just selected. That’s the super useful value of the feature.
Is there an i3 command to (a) leap to another window from a selection and (b) leap back and forth between the window you came from and the window you just chose?
Not for windows as far as I know, but for workspaces, yes: https://i3wm.org/docs/userguide.html#back_and_forth https://i3wm.org/docs/userguide.html#workspace_auto_back_and...
For (b) I don't know what the best option is but I see some people posting their scripts in this thread: https://github.com/i3/i3/issues/838 I think I would bind some keys to mark and then focus by mark if I wanted to do this instead of having a toggle.
But grouping windows logically based on how they're used has always just felt right, so I've never really considered that you want to keep track of the order in which windows were previously selected (using alt-tab to navigate even just three or four windows can be quite a trick). It always seemed like a necessary evil since floating-only window managers can't handle the kind of spatial focus-navigation that i3 does.
---
Also, I feel bad using this thread for feature requests/questions. Lovely work guys, and I am very grateful!
You can find the release notes at https://i3wm.org/downloads/RELEASE-NOTES-4.22.txt
Documentation for the gaps feature is at https://i3wm.org/docs/userguide.html#gaps
At the time, I spent a minute or two on the patch (the code is simple, and the patch is a hack), ten minutes on documentation Ascii art and zero minute on choosing a name for it. “Useless” made it sound like a casus forki, and “gap” could probably been just “margin” as in css.
“Mal nommer un objet, c’est ajouter aux malheurs du monde” — Albert Camus ~”misnaming an object is adding to the world misery”
Happy merging anyway!
Stealing some tray icons (volume, clipboard, KTeaTime, network), I built the setup I'll probably use for another 7!
Thanks to everyone involved! Tiling WMs rule!
Settings panel? Check. Keyboard media keys? Check. Automatic display when plugging in monitors? Check.
I was a BIG fan of Regolith, super sensible defaults and smooth onboarding experience. But with the V2 it seems the config is now split in 100's of files (ok not 100 but more than one). I loved the fact that with original i3(Regolith) I had to back up 1 file for my i3. I now moved to Manjaro-i3. Been happy so far.
fedora lists a page of images with alternative desktop environments baked in and i3 is one
I have mint, using the xfce-based version. I can open xfce-panel whenever I dont know what to call on the cli (and then promply close it :P)
[Edit for context] I used Linux at home but was forced into a MacBook at work.
https://www.hammerspoon.org/docs/hs.application.html#launchO... was the primary method, though sometimes (such as teams) I had to get more creative.
That said, I believe https://github.com/szymonkaliski/hhtwm is quite popular, might be worth a shot if you want tiling.
Thanks, team. Congratulations on the merge. Take care.
Thanks to the maintainers -- a stripped down Linux distro + i3 is an incredibly powerful combination.
I like the idea of maximising screen space utility (original reason for gaps feature rejection), but disliked the visual "feel" of i3wm window borders. Eventually I realised this was due to the visual asymmetry in the tile borders, which are drawn independently even though they share geometric edges - this causes inner edges to be twice the width of outer edges which looks kind of clunky. If you look at most people's gaps setup, most people either equalize the space between the outer and inner edges, or have gaps so large that it doesn't feel like it's part of the tiles any more.
I also noticed that you don't get this feeling in tmux, where outer edges just don't exist... And that you can achieve the same in i3 by hiding outer edges and using 1 pixel borders, you end up with minimal 2 pixel "dividers" rather than borders:
new_window pixel 1
new_float pixel 1
hide_edge_borders both
Will be nice to have gaps available to play with in binary packages though.Does anyone know why i3 was so opposed to gaps to warrant a fork to begin with?
Unfortunately this state persisted for years, and it turns out gaps is a popular feature, so they both eventually decided to bite the bullet, merge it, and then work on cleaning things up rather than waiting indefinitely for a unicorn implementation that was likely never going to appear.
Eventually, because life circumstances permitted it, I was able to spend a few weeks, first getting gaps merged as-is (as discussed and communicated) and then even cleaned up, addressing all known limitations.
My instincts tell me that if that be the case, the code probably isn't very clean and itself full of hacks.
https://github.com/mikelward/conf/blob/main/config/compton.c...
Tried also transparency and it really does not work for me either.
I have always assumed i3-gaps was just an aesthetic thing. How does the gap let you know what window is focused?
I've spent at least the last 6 years removing i3 and installing i3-gaps on all my new machines (and having to comment out gaps in my dotfiles/i3config while I do it). I didn't think I'd ever see this merge. This is awesome!
What's the difference between borders and gaps?
<window> <active-border-color> <window>
it's not clear whether the border is "pointing" left or right. However if you see: <window> <active-border-color> <gap> <inactive-border-color> <window>
It is clear the active border belongs to the left window.e.g. see: https://www.reddit.com/r/unixporn/
This is not an invalid use-case. Not everybody wants to be 100% focused on productivity to the exclusion of absolutely everything else.
If you want to have something as simple as a background image, the only way you're going to be able to see it when using a tiling window manager is with gaps or transparency. Small gaps is arguably less intrusive than transparency.
Oh the horror!
It’s kind of weird to me that folks think that aesthetics don’t matter for something that’s so central to one’s life.
The legitimate complaint about/problem with aesthetics is when it becomes the priority and/or hampers functionality. The macOS calendar when it took its extremely skeuomorphic turn was the prime example of this (it was such a poster boy for aesthetics over functionality that Apple responded by getting rid of skeuomorphism altogether).
But aesthetic improvements don’t need to be like that at sll.
There's a small footnote to this, but I think it's true enough to say it like that.
When I came to Linux I quickly got into the unixporn community. After a bit of making Ubuntu look nice, I discovered i3. I then found the gaps patch and rebased it onto the latest version of i3 at the time. Lots of unixporn people liked that and asked me to create a repository for it, so I did -- and i3-gaps was born.
The reason I say it's true enough to say it was born on unixporn is that it's where "a gaps patch" turned into "i3-gaps", and also I reworked so much of that initial small patch that it became something new essentially.
I was using i3 until the very end though, and I do dearly miss proper window management. My shortcut setup now is an absolute mess. I technically did run i3-gaps because of some features, but not gaps. This was mostly because I actually mostly used a one window per workspace approach, and if more, then a tabbed layout, so no need for gaps there.
That and the "war on hackers" that Apple seem to wage last few years also did not help (breaking uBlock in Safari, inability to permanently disable some system services without having to disable SIP and thus losing ApplePay+disk encryption to name a few)
I will say though that I run Linux more than ever these days. I'd say the reason has more to do with Windows and macOS feeling like worse prospects than Linux actually improving as a desktop OS...
That said, I'd like to take this moment to tangent. I really, really despise the rise of SOC2 theater. It has largely killed Linux workstations at startups, and I am pretty close to quitting out of the industry due to the amount of stress this has cost me.
Edit: I realise some people are okay with the brutalist design due to it being the most efficient use of screen space possible, but my brain needs a "pleasing" environment, otherwise it affects my... Mood? I'm not quite sure what it is, but to not muddle the point, having a nice environment makes me more productive
Both Windows and MacOs do not such thing. How do gaps make a WM look like it belongs to this decade?
I mean if we use Windows as a standard, the way to tell which decade we’re in is by counting the number of totally different UI styles we have, right?
the same thing goes for desktop windows. a bit of space between them makes the interface less cramped. if you're staring at it for 12 hours a day it's nice not to have things so cramped and pushed up against one another.
I'm kind of amazed at the sheer vehemence of the anti-gaps people. they always have to say "it's useless, I don't know why anyone would want it --" [proceeds to ignore all explanation for why it isn't useless and why people do want it] "-- therefore it shouldn't exist and the people who want it are decadent". I've never seen bizarre attitude to any other (optional!) UI feature.
it reminds me of those 20th century modernists who denounced serifs on letters, or ornament on buildings. or idk puritans and icon-smashers or something. miserable tube-brained people.
these days with high resolution monitors it can be nice to have a background and some gaps / transparency.
Do you believe there is no merit to being able to set border size for windows?
I don't think it is that unbelievable that I'd like to look at something a little bit nicer than default i3. :shrug:
Very strange, makes me want to avoid i3 altogether. It's not like it requires a lot of code to support configurable, optional gaps.
Probably the rationale is something asinine like "I don't like gaps, gaps are dumb" or "buhu I don't like the completely negligible overhead"
I actively avoid projects whose maintainers are MDFLs rather than BDFLs.
In i3 we have always tried to weigh benefit against cost. We also really care about compatibility. It's easy to add a feature, difficult to maintain it, and impossible to remove it.
Also, saying “it’s not that many lines of code” comparing the before and after state is too simplistic: it doesn’t include the cost of changing the existing code into the desired state, which can be a significant effort, even if the number of lines doesn’t differ much before and after. See https://github.com/i3/i3/pulls?q=is%3Apr+author%3Astapelberg... to get an impression of how much work it was to merge gaps.
I never used i3 much beyond trialing it for embed stuff(went with dwm). I'm too much of a Lisp nerd not to use StumpWM. I like the fact that your stumpwmrc is essentially just a live patch for your WM. You can redefine arbitrary functions, classes, variables, define commands with arbitrary code in them. And you can patch the WM while running via Emacs.
How is i3 support for more obscure unices like OpenBSD, Illumos etc? StumpWM is kind of a pain to get working after they dropped support for all compilers except sbcl...
And I agree completely general in about the tradeoffs of adding features.
It's tough to do, though my philosophy in this specific case is also that customization is a core feature of any good tiling WM and should be priorited almost above all, except performance and minimalism.
i3 should definitely work on BSD, there are a few awesome folk that regularly send patches when we broke something. I don't have experience with it myself though.
I know I couldn't do it worth a damn, just thinking about it gives me an ulcer.
One other maintainer who I admire is Greg KH, maintainer of the Linux stable branch. 15 years ago I sent him this absolutely useless patch cleaning up the code style of a driver that was marked to be deleted and rewritten from scratch. 15 year old wannabe kernel hacker just finished his first read of K&R and wants to go straight for the damn linux kernel next.
In his reply he not only thanked me for what was basically a waste of his time, explained why there was no point taking the patch, then he went and reviewed the patch anyway! This was at least a couple kloc, and he voluntarily wasted even more of his no doubt precious time to teach me a few more things. He even responded to a follow up email asking for reading material. I'm not sure how he does it. My main hypothesis is Greg KH is secretly the identical triplets Greg, Karl and Harold and they're somehow all kernel maintainers.
That interaction, while just one in hundreds he engages in on any given day, to me was oddly enough life-changing. It let me know I was overreaching to an absurd degree, yet also inspired me to keep learning(big deal for a 15yo). And I did end up becoming a capable low level C programmer, doing some of the best work of my career in embed stuff during the brief windows my health has allowed me to be productive. It also helped me accept that I'm just not cut out for hacking on the kernel, which is fine, almost no one is.
I briefly (for about a year or so) developed i3 on NetBSD.
I have no knowledge of other more obscure variants, though.
Thank goodness for this. I would say you've succeeded at those goals - sometimes I go deep into tinkering and other times I am focused on something else. i3 is on the short list of software that I can tweak to my liking and then ignore for years without concern that my environment will mysteriously break from an update. I really, really appreciate that, kudos.
I'm incredibly thankful to the maintainers for doing the thankless job of keeping i3 stable and for doing it so well.
To maximise a window temporarily but keep your status bar or avoid your program going into "full screen mode" and hiding UI from you, you have to move it to some empty desktop and just deal with the fact that when you put it back on the original desktop it might not end up where it came from.
Edit: I've found iwd such a huge improvement over past wireless networking solutions. It's a big improvement.
Thank you.
I've been using it for years now. Started with plain i3 but quickly wanted something a bit more elegant and nicer to look at. I had 2 hi-res monitors so I was willing to sacrifice few pixels for an eye-candy. I spend most of my day looking at the thing after all :-)
Honestly it baffled me for a long time that i3 did not have such a "simple" thing as gaps. I could understand the anti-pattern theory in the good ol' era of 1024x768 but nowdays?
Anyway it is good to hear that it is merged. Thank you and Michael for the i3 experience, it is truly addictive. I was on MacOS for ~3 years and I missed it every single day there.
Thank you guys
When was the time this was written? I don't see a published date on the announcement.
It doesn't just implement this specific feature, though. It provides a more general approach for i3bar that enables this and many other use cases. This struck us as a good and flexible solution we can get behind.
(I know that an upgrade add the ability to disable the drag window feature, it's just not available in FreeBSD yet).
But, as with anything, this is a matter of personal taste.
For single window workspaces you just don't apply the gap (smart gaps).
Depends on the screen size and resolution but for the 1080p 14" laptop I'm finding these settings sufficient to do the job and not take much space:
gaps inner 8
gaps outer 3