I3: Improved Tiling Window Manager
i3wm.org
i3wm.org
But then during my AI studies I wanted some beefier hardware, which was just not affordable for me within Apple’s ecosystem, plus they only used AMD graphics cards. I built a desktop computer that outperformed the top of the line Mac Pro for a fraction of the cost and turned it into a Hackintosh. Two weeks later Mojave came out, and Apple never approved any Nvidia drivers from then on.
My eyes opened to Linux and i3 in particular, which looked like Magnet taken to the extreme. What had taken me hours to install and configure on macOS (GPU-acceleration for PyTorch, for example) just worked with one package install on Linux. All my expensive apps were replaced with simple and free, much more configurable alternatives. At first I spent a day or two getting things just right. Since then not much has changed because not much needed changing, which I really like.
Now I look at macOS and iOS and cringe how locked down it all is. Users are very creative in their workarounds to make it work, but it is ultimately quite silly that you need to use special URL schemes and workflows to open a text file across different apps.
Thanks, i3!
I used to be all in on Apple, using their iMac G4 and later on the Intel iMacs at home, but needed a beefier machine. So when I started in a new job, instead of getting a macBook, I asked the company IT to build me a workstation (and been asking for it from the companies I worked for after that). Installed Arch Linux and i3 to it, and never looked back. Did run Linux and i3 in the macs I owned for a while, until I built myself a home desktop and replaced my laptop with a ThinkPad, all running Arch Linux and either i3 or sway as a window manager.
This is the end game for me. Emacs, Alacritty and Firefox with a rolling release distribution. The same configuration with even the same wallpaper for the past 10 years that follows me from Gitlab.
Thanks, i3 and sway!
Arch usually has more small "papercuts" I have to fix myself - often problems around suspend/power management or drivers, in my experience. Ubuntu and the likes I usually struggle either when I encounter some bug OOTB (meaning that won't get fixed in a timely manner because "stable") or once I need some package that's just not there. Having to figure out what are the damn dependency equivalents for some program I'm trying to compile that only has Arch instructions is never fun.
Obviously YMMV.
The advantage of stable distros is that you are not surprised with new bugs,feature removal or shiny redesigns.
When I needed a new driver to play some game I just installed an official PPA and got the driver and if I did not like it I could install the older version.
As a 10+ years long user of Ubuntu and its derivatives (currently Pop_OS!) I would say I know it is stable. Ubuntu still feels like a polished Debian for a typical computer user, which has many of pre-configuration made that non-techies and not-that-much-knowledgable persons will love. I don't like many decision they have made, e.g. favouring snap over apt, complete lack of a proper GUI for managing installed software/packages, sometimes missing packages that are on Debian but not on Ubuntu (though, the deb file can be downloaded and installed with a single command). After tremendous work done by GNOME users to tweak gnome-shell I have never had a freeze / hang up since three years on Ubuntu. I am also happy having recent drivers from Nvidia that works good enough to also never see any problem in 5+ year history related to GPU card. I also didn't have a problem to install drivers for my printer and scanner, which have a dedicated installer (deb file). I am just a happy user.
Calling kernel for a reason Ubuntu feels stable is wrong I think. I have tried many times Arch and I had many occasions to be not very convinced to its "stability". The most annoying issue I had on Arch was related to sound - when I was changing volume in Spotify client it was changing the system volume. Imagine the situation when you had a headphones with a volume level set at 3-4% and you have increased it by 20-50%, a nightmare for ears and hearth. After that "feature" I have completely removed Arch from my disk and I am not looking back to it nor other rolling distro.
These days I also don't see any unique selling point that Arch had in the past. It is still known for a best documentation and the most recent software. During last 2-3 years I don't remember if I had been complaining on outdated software in Ubuntu. If I would do then there are awesome projects like flatpak, xbps[0] or nix[1] that can be installed without changing my OS and they provide everything what I probably can win using Arch.
[1]: https://nixos.org/
I also like Ubuntu and I've used NixOS in the past. What I don't miss from Ubuntu are the PPA's, AUR is much much much nicer. If you plan to do any gaming in Linux, Arch is in the end much more convenient due to AUR.
And, I'm biased a bit because my installation is always quite minimal. I only have i3 and my tools for programming, and whatever is needed to run proton games.
I have just looked into the extra sources to see if I have any PPA there but I was surprised to see the only one, which come with a Pop_OS! to bring some custom tiling manager and other tweaks.
Frankly, era of PPAs has ended. I don't find many software packages shared on Launchpad nor I won't trust PPA owners to install anything from most of PPAs. There are better ways to share software and easier to set own APT server. Today, almost all software distributors I know (Microsoft, Slack, Sublime, Spotify, Hashicorp...) have their APT repository on also their server or on a packagecloud[0] / JFrog Artifcatory[1]
> If you plan to do any gaming in Linux.
To be honest, I find KVM with GPU pass-though a better idea overall (I can use software like Affinity Designer thanks to that). KVM is a really top-notch software if you know to configure it properly :) However, proton and wine can be installed without any problem on Ubuntu.
> And, I'm biased a bit because my installation is always quite minimal. I only have i3 and my tools for programming, and whatever is needed to run proton games.
I have a complete range of various programming tools and SDKs that hardly can be packed in 240GB disk. My current setup is rather small: Jetbrains IDEs, Unity3D, Qt Creator/Designer, emacs with orgmode, vim, various chat apps, Spotify, Syncthing, Sublime Text & Merge, rofi, pass, fossil, nginx, flutter, nimrod, nodejs, deno, zsh, golang, chicken-scheme, milena+ivona, orca, backup tools, terraform with terragrunt, multipass and some dotfiles and private scripts. It takes about 3h to complete format disk and install OS and provision all software I need (thanks to terraform). My DE is GNOME with a taskbar (Dash To Panel extension) instead of a dock. Is it minimal? Likely no, but it does its job.
Otherwise it's the distro I'm having the least amount of problems. Specifically don't miss the PPA's from Ubuntu. With dist upgrades they are quite painful.
I bought a beefy computer last year and installed Gentoo on it - it's obviously not for everyone, but its reputation as a hard to install distro is overstated, and if you have enough horsepower and ram, an emerge update isn't a big deal. Additionally, having the ability to tailor your builds to not include libraries you don't need AND to install the sources and debug information is huge. Mostly, though, it feels logically designed, and standard sysadmin tools allow you to do maintenance without much hassle.
I'd recommend at least looking into it to see if it fits your use case.
Never needed it yet, but it's good to have. I remember the problems in the past...
You can also do it with zfs, but I wanted to not have the filesystem as DKMS.
I also used it recently when I tried to get the new Assassin's Creed to run. I knew it was a bit of a crap shoot, so I took a snapshot before I started compiling and installing the Git versions of graphics and translations libraries. After a couple hours I realized it wasn't going to work and just rolled my root directory back to before I started throwing packages all over my system. It was very satisfying. :D
This was my experience with Arch as well. It left me feeling like I needed to check the wiki to see if there were any new warnings before updating.
I switched to distros that release ~6-12mo, and I have found my environment is much stable. Currently on Fedora, but considering trying out Suse Leap.
I've been using it a bit at work recently, and am probably going to move a personal machine or two over to it soon.
Both switches were for the same basic reason: packages broke just often enough that it wasn't worth the benefits of having a simple/clean system or bleeding edge libraries.
My switch to ubuntu was maybe 7-8 years ago, though, so I can't speak to whether this has changed. I just know that I used to need to spend 1-5 hours fixing an esoteric X.org problem (or similar) every few months on arch and that I don't need to do this on ubuntu.
I stay on ubuntu because of its critical mass of users. If there's a prebuilt package for something, it's probably a .deb that's compatible with ubuntu and debian. And PPAs are nice. I don't like where they're going with snap at all (I disabled snap and added flatpak support instead) and would probably switch if I thought another distro offered the same benefits.
My experience has been much the same switching from Windows after the past month. The Linux desktop is better.
It is better for you, me, and some others in this thread.
But if you make a statement like that you'll get Apple Enthusiasts to try it out just to prove you wrong.
And they will find reasons, because both osx and windows both have areas where they're superior.
But it is! And BSD's are even betterer. 9front and Inferno..pff nearly holy...but if you need applications..well that's another story ;)
I will never, ever forgive Apple for removing two-dimensional virtual desktops (I think they called it "spaces"). Then just to spite all of us, a few releases later they made it impossible for TotalSpaces (a hack that gave us back this functionality) to do the kernel code-injection wizardry that they sold for the incredible bargain price of $12 or something like that. Because, you know, "security".
That was the end of my Apple decade.
Now I use sway, which is an astonishingly-faithful (like, down to the config files) wayland clone of i3.
My AMD drivers, and a couple of sysadmins might want to have a talk.
It was better before as just spaces though. Windows does this right. If you add powertoys you can even go beyond the i3 tiling options but i'd argue i3 is a bit more naturally usable than the powertoys desktop stuff.
For very simple i3-like configurations (single workspace+monitor, always fullscreen or side-by-side), it's not bad. It's limited by poor support from Apple.
Curious what you mean by this? Which additional mechanism does Linux (or i3?) have for opening a text file between apps?
Is it easy to reconfigure keyboard shortcuts like cmd+C for Mac but ctrl+C on Linux? I have spent way too much time trying to do it on Ubuntu and it has made it hard for me to make the switch.
Now you can make the tweaks you need, and load them automatically next time with a call to xkb in your .xsession.
Linux and GNU and Xorg et al may be heterogenous and weird, but the joy of an open system is that if you want to take it apart and tweak it, you can.
In i3 you assign a $mod key, which then always and exclusively used for 'system and window management'. Opening, closing, moving and resizing windows, switching workspaces and showing toolbars is all done with some key combination that starts with $mod.
Since reading and writing the clipboard is done by the application, in my brain it should not involve $mod. So I use ctrl+c and ctrl+v for all applications. The one exception is the terminal, in which ctrl+c terminates programs. So there I use ctrl+shift+c. I also unified the register vim yanks to with the system clipboard, so for me most copying and pasting that happens in the terminal is done via `y` (yank) and `p` (paste).
A more straight answer to your question is: yes, you can remap everything to bits. You can modify what keypress each keycode should trigger, so there is really no limit to what you can do there.
Personally I find Apple's approach to key commands far and away the most well thought out and intuitive.
Biggest hurdle is finding a clean way to do application-specific overrides, because even if you can get the general case working right, there is a lot of per-app variation.
On Linux, almost all native applications keep their data in regular, non-proprietary files on the file system. This means your data always exists separate from the applications and you can do with it what you want. If you want to run a script every Monday at 3PM that sifts through your ~/downloads folder and uploads the top 10% largest files to a server, except in January, on Easter, when when your drive is below 70% capacity, if it's not hooked up to power, and also not if Kanye West tweeted something in all caps, you can do that. You can make it retry every 42 minutes if conditions weren't met, email Bob and message Alice in Slack about it. You can make it machine learn your behavior and pick a window within 3 hours after sunrise, log the bandwidth usage, and have it play a tune for your friend's MPD server on the other side of the country.
Why you would want to do all of this is beyond me, but odds are you want to do one of these things at some point. Then Hazel won't be able to do it because they didn't consider your use case, that functionality is only available in version 6 (pay up for the upgrade!), Apple didn't provide the right API, or they recently took it away in the name of security. Surely there's another app that can do it, but that one can't do the other thing! Oh well, maybe the next version?
On Linux, you dream up the code in the language of your choice and it will work forever. Your learned skills will transfer one-to-one to programming you do for your job or hobby, instead of being weirdly specific and locked down to this one, overpriced app's clickity click interface. The OSS mentality of interoperability and doing one thing well almost guarantees there are battle-tested tools available that can solve pieces of your specific puzzle, while not locking you in to their way of doing things.
Of course scripting is not exclusive to Linux, but it is the only OS that was and is built with it in mind.
> On Linux, you dream up the code in the language of your choice and it will work forever.
...I'm sorry, how is this exclusive to linux, exactly? You can do the exact same thing in MacOS, Windows, FreeBSD, etc. Also, maybe some people just don't want to fucking program every function and application they run on their operating system?
> Your learned skills will transfer one-to-one to programming you do for your job or hobby
While I understand that there exists a much higher population of programmers on HN than on other websites, please stop assuming that 1) everyone here is one and 2) that everyone wants to spend their time writing software in their spare time and 3) even if they do like programming in their spare time, that they want to spend it writing automation scripts.
> instead of being weirdly specific and locked down to this one, overpriced app's clickity click interface.
What is overpriced to you is potentially someone else's pennies. I don't really think the jab at GUI interfaces is appropriate, either.
> Of course scripting is not exclusive to Linux, but it is the only OS that was and is built with it in mind.
Again, this is just plain ignorance.
There was the opportunity to help someone make the switch from MacOS to Linux but instead it was used to call apps that the person probably likes "silly" and "clickity click". It's more interested in making a point than helping.
A wasted opportunity.
And then there are those surviving mainframes.
So no, nothing special about GNU/Linux.
I emphatically don't want to run any scripts. I have enough programming at my day job. The last thing I want is spend all of my free time programming and debugging scripts.
Give me a nice GUI with a few clicks any time.
I wrote and maintain a FOSS Hazel-like tool called pushbroom [1] that works on both macOS and Linux. It’s worked extremely well for me for several years.
Change your keyboard layout to one of your own? Eh maybe Xmodmaps, oh but then it gets reset every so often because $HISTORICAL_ARTIFACT. You have to change the actual xkb mapping, which is very much not a “happy path” in any DE.
The only graphical e-mail client that actually seems feature complete is Thunderbird, and for _years_ I have to race to disable the global search within 10 seconds of starting it. Otherwise the program just freezes up. I don’t even know what to use for calendar stuff.
I would really love it if Linux was viable for me as a desktop OS. It just isn’t, because of things like these.
Regarding email clients, again I'm not sure what you consider feature complete, but even some of the proprietary options like mailspring or hiri exist on linux.
For calendar it again depends on what you are trying to do. I've recently started using Minetime, which is not OSS but free and is working very well for me.
One of the weird phenomena that I find in these discussions, is that people are often happy for proprietary software (like OSX or windows) to restrict what they are able to do, and having to adjust their workflow to these systems, but when it comes to OSS suddenly not being able to match the previous workflow, makes the system unsuitable. (Note that this is not aimed at you directly, just a general observation).
In the end, I got a keyboard that incidentally had functionality to remap keys built in (I wanted the keyboard already anyway, but the remapping feature was a nice bonus). This ended up routing around the problem entirely, and seems like a generally better solution. Now my remaps survive all the way to Windows, for my rare trips over there.
Can't speak to your firebird issues, never used it, but as for keyboard issues?
Spouse uses my main machine for basic stuff, she has her own account. I use dvorak, she uses qwerty. About 75% of the time when the layout is switched back from qwerty to dvorak it becomes completly fubar, and all layouts output non-sense garbage until a restart. Because the layouts are broken, I can't save any of my terminal work.
I'm still pretty on the fence about things, but honestly I'd say linux and os-x are pretty even as far as shit breaking, and imo linux is a little bit better. I remember the old days when you sudo apt-get update && sudo apt-get upgrade & pray, but stuff is pretty stable even on distros like arch these days.
Every time there's a major update for os x, I already know it will definitely break something for me. Catalina broke most my game collection that could run on os x to begin with, and I'll be waiting at least another couple months before upgrading to big sur.
This isn't to try and invalidate your experience, but just saying that mine has been: Switched to OS X because things were more stable and I need a solid work machine, but linux is getting more stable while my faith in apple's software quality goes down dramatically every year.
For now, a Ryzen runs circles around M1 (at least with my workloads, C/C++/Rust compilation with needs for 64+ GB of RAM) if you're willing to use some more energy.
There are some tools (all $$) for Mac which attempt to replicate a tiling WM but Apple's support for it is extremely poor, affecting the quality of the tools.
I'll give it a shot! Thanks for the tip!
But on the flip side, it's a great testament to the power of tiling. You'll have to claw i3 out of my cold dead hands :)
Like you I used Magnet but wanting to get something more tiling window manager-like I switched to Amethyst[1] which while not as powerful is pretty good for what it is.
Sadly macOS has frustratingly laggy window resizing for a lot of things. Finder and Safari are usually fine but pretty much everything else feels laggy to resize and generally macOS just has absolutely terrible window manager so a tiling window manager is a god send.
I mostly use macOS because I have been doing iOS and macOS development and so what else you gonna use but I have to admit I want to move away from the platform. It is all 'very exciting' right now with all the Apple Silicon hype and yeah it genuinely is impressive but for me I kinda want to get back to something more open even if it doesn't have a lovely highly efficient and performant custom SoC driving it.
I am like 90% there in convincing myself to build a nice AMD desktop next year and moving away from macOS as my main OS. Luckily I am not dependent on any Apple services so switching shouldn't be that bad.
i3 sounds like a dream window manager to me, but in the meantime while I use Mac OS (& Windows), I've been using yabai, which is heavily inspired by i3 but limited by Mac OS.
Take away a lot of the chrome and it’s incredible how much can be achieved via simple text files and unfussy Linux tools.
As an example, my GTD workflow (before I switched to a physical bullet journal) went from a variety of apps to a single i3 workspace that auto opened with 5 terms with each containing a single markdown file opened in vim.
The leftmost column contained the processing file from top to bottom. The middle column had Doing and Follow up files.
The rightmost column had Done and Projects files.
My done would be archived each week with a script and a new done file opened for the upcoming week.
If there were any other major files I wanted (for example I would maintain a ling term projects file) that would be opened in a different buffer in the VIM app containing the projects file.
Moving items from one folder to another was as simple as quickly navigating to that folder, using a shortcut to yank or cut the line to the global clipboard, ans then pasting it to the file I wanted to move it to.
I suspect it would have been trivial to write a script that would have automatically moved the entire line over with a single shortcut.
There is absolutely no additional overhead and it works extremely fast and well.
It took me about 2 weeks to get kind-of used to the different modifier keys, but it did not feel the same.
But the thing that made me switch back is when I was buying a laptop. I was set on not going with Apple anymore after my previous macbook screen died 2.5 years in and they were asking almost 1000€ to fix it. But I could not find an option that would match the 16" macbook laptop. I was considering the build quality, screen size and its resolution, battery life, usb type-c charger, trackpad experience and the overall software support that I will expect from a daily driver to do my web development work. I was seriously considering the dell xps 15 9500 that launched this year, but I saw a lot of feedback about generally poor battery life on linux and some cases of trackpad problems.
I was thinking about getting a second, cheaper device like System76 Pangolin and see how it works and use this as a transition to a different platform instead of going all in by immediately switching the daily driver.
Example:
- Start i3 in tabbed mode
- Open a window for coding
- Open a browser to search for some coding question. It opens in a new i3 tab, filling the screen like it would in a non-tiling WM
- Open a terminal to try the sample code (new i3 tab)
- Google the error message you get (new i3 tab)
- Use rofi to search for "code" and press Enter. Your coding window tab is activated and the coding window fills the screen
- Realizing the sample code you found would be useful here, along with the test terminal, tile those windows alongside your coding window. Now you can quickly refer to them and switch between them with spatial keybindings
- Switch back to the error message browser using rofi to check something. It's not part of your core workflow right now, so don't worry about tiling it
That's probably obvious to anyone who's used a tiling WM for any length of time, but tiling was daunting to me until it clicked. I spent too much time thinking about optimal window arrangements. Thinking of tiling as an optional finishing touch rather than a focal point made it much more useful/practical.
To further illustrate: I primarily have an open Terminal+Tmux for editing on my main monitor. On my side, i have spacial but overlapping windows. They stick out a bit, such that it's primarily four tabs - left,up,right,down. For example my Slack is on the left tab, and i can always see my contact list, people typing to me, etc. My Browser is usually on the Up tab, as it allows me to see the browsers tabs themselves. I do the same with Zoom on the bottom, such that my Mic (mute/unmute) is always visible. And etc.
This arrangement perhaps isn't ideal, but it's better than a tile for me because in a tile, i lose so much real-estate that the window becomes near useless. I can't shrink Slack to 1/4 of my Monitor, it's got too many boarders/etc. Same goes for my Browser, most sites have non-collapsing sidebars and etc, a tiny 1/4 window is useless.
This method of spacial layout obscures ~90% of my windows but leaves some of it always visible. In some cases that's very useful. But this is something i manage through the day, and a WM to automate this positioning would be amazing.
http://kb.mozillazine.org/index.php?title=UserChrome.css
Here's a few simple examples:
https://github.com/Timvde/UserChrome-Tweaks/tree/master/tabs
And a more thorough one:
https://old.reddit.com/r/FirefoxCSS/comments/7emhsq/my_compa...
Do you use vim-like extensions, but hate how surface-level they become due to hard WebExtension limitations? Pining to recapture the days of Pentadactyl? Qutebrowser is built for vim-like navigation from the ground up:
* Hate getting stuck on about//:* / chrome://* pages? Every single page in qutebrowser works with your keybindings!
* Hate PDFs for the same reason? Qutebrowser will read PDFs and keeps your keybindings there, too!
* Wish you could have a dotfile configuration for your browser? Qutebrowser (optionally) does dotfiles (and they're Python!)
* Wish you had a real EX mode? Qutebrowser has one and it does not disappoint in terms of customization/functionality. It's actually the linchpin of the the entire UX, much like the Omnibar is for Chrome.
* Wish you had a keyboard-driven text selection mode? Qutebrowser has one!
* Hate file pickers forcing you to reach for the mouse? Qutebrowser implements its own keyboard-driven file picker (and it's actually really good!)
Have you considered other browsers in the past, but passed them up due to a lack of extension support? Well... Qutebrowser can't handle WebExtensions, but it does provide most features you would miss:
* Dark Mode? It exposes the same performant, engine-level dark mode that Chrome does
* Adblock? Qutebrowser supports hostlist-based adblocking (with auto-update) OR, if you want real Adblock, you can install jblock for qutebrowser, which is comparable functionality-wise to "uBlock"-type extensions (yes, including Youtube)
* Userscripts? Qutebrowser supports loading userscripts and is mostly compatible with the GreaseMonkey 3/4 APIs. This covers what most "minor" extensions (e.g. HTTPS Everywhere / Old Reddit redirectors / UI tweaks) can do
* Custom CSS? Most "userstyle"-type websites package a "Greasemonkey" version that will work just fine with the previously remarked userscript functionality
* Password management? Qutebrowser comes with scripting support that will allow you to interface with your desktop-side password manager. Out of the box, it comes pre-packaged with scripts for connecting to GNU pass, bitwarden, keepass, and lastpass.
I'm not saying vim-like extensions aren't worth using, but they are inherently less capable due to hamstringing by WebExtension APIs. If anything, it's proof of how much work and care goes into them, since they have to fight the limitations of a framework not designed for this type of UI overhaul
As for adblocking, I wouldn't recommend jblock (it's rather buggy from what I've seen so far) - but a built-in adblocker based on Brave's Rust library is almost ready now: https://github.com/qutebrowser/qutebrowser/pull/5317
Of course, as always, thanks for the excellent software!
Check out 2.2. Changing the container layout here: https://i3wm.org/docs/userguide.html
If you're an i3 user here are a couple cool things to check out:
- scratchpad [1]: Little known i3 feature. Let's you put individual windows in a scratch workspace and then pull them up quickly over your regular workspaces. Really useful docs and things like that, I keep my time tracker in a scratch workspace.
- rofi [2]: This is a dmenu replacement with a nicer interface that lets you combine lists of commands in a single search window. I have it configured so I can search through my open windows by title or run any program from the same interface.
> - scratchpad [1]: Little known i3 feature. Let's you put individual windows in a scratch workspace and then pull them up quickly over your regular workspaces. Really useful docs and things like that, I keep my time tracker in a scratch workspace.
Ah, this is nice. I used to use a similar feature with ion before I switched to i3 but I didn't realize that i3 had the same functionality built in.
If you wanna have a rofi-like interface (with it showing rows of results) you could use -l [lines] to show dmenu in vertical rows rather than in one row with many entries.
Just a PSA; your use case is very well suited to rofi and if I had that workflow I'd have a hard time translating that to dmenu.
[0]: https://www.youtube.com/watch?v=8E8sUNHdzG8
[1]: https://github.com/devenblake/dotfiles/blob/main/src/dmenu/c...
Workflow:
1. Arrange your windows how you like
2. Save the layout
3. Open the windows
4. Load the layout
Repeat 3 and 4.
Nicely done with rofi/dmenu.
Note, this is totally doable in dmenu. I have a script that combines output from wmctrl and dmenu_path. This is bound to M-space for me.
If you have a script or binary that outputs a list of newline-separated strings, you can easily combine these, and dmenu will happily return the selected thing.
Here's what that looks like:
present-options () {
windows # Function to list open windows
dmenu_path # dmenu script listing binaries
}The thing is? I never used much more than a simple L/R split that was available in any OS / WM forever. If I wanted to split more, it was usually in the terminal, and done via tmux or the term app.
Add to this, a full desktop environment will handle all sorts of things for you like brightness, volume controls, proper locking on sleep, a easily configurable toolbar, hot plugging an external display, etc. i3 handles none of these! It's left up to the user to google around and find a brightness command that actually works, or why pauctrl is muted on startup, or why the lock screen only locks on resume, not sleep, thus flashing your screen. It's death by a thousand cuts. I know i3 is a window manager, and it's 'not it's job' to handle this stuff, supposedly, but why could they not add the most common way people control brightness, volume, etc to the default config, and let people swap it all out if they wanted? It's a really frustrating experience.
For myself, I've went back to gnome. If someday I get a really massive display that benefits from complex tiling, I'll revisit i3, but I'll probably wind up using that awesome material shell for gnome and calling it a day.
https://old.reddit.com/r/unixporn/comments/c8le62/gnome_mate...
I haven't tried to set it up in a while, I'm sure you could get the same setup running with sway under wayland with some effort.
If you use your computer once a week to check your emails I understand that it's just a waste of time. If you do more, long-term investments such as these might be worth it.
Now I agree that a more integrated experience out of the box would make the learning curve more gentle. Some have mentioned Regolith, it looks like it would be better for you than plain i3 (I haven't tried it personally so I can't judge): https://regolith-linux.org/
I have tried regolith, but I found it to have weird conflicts between i3 and gnome. It may be worth another look though.
bindsym XF86AudioRaiseVolume exec --no-startup-id amixer sset 'Master' 2%+ bindsym XF86AudioLowerVolume exec --no-startup-id amixer sset 'Master' 2%-
but there's no guarantee that this would work everywhere depending on what's installed, I just know that it works in my case. It's easy enough to look up anyway ('linux change volume from terminal'), so users would just save 5 minutes if the default worked for them. I think the message is that i3 is not targeting the same people as Gnome, and it's fine. Different software for different needs and trade-offs.
The only difficult part for me, is that they change the i3 config defaults. So often, instead of checking the i3 docs, I have to read my local config first.
I use multi-displays too (XMonad; I assume i3 has the same!).
I use more complex splits occasionally for dev work I quite like it but I guess I could use something more conventional if it were keyboard-friendly.
or
regolith works only under ubuntu though but both should work under gnome.
You can easily run the Gnome or XFCE settings daemon without launching a session of their window manager.
i3 (and other tiling managers) let you more easily navigate between windows by using their location. I can switch to the window to the left, or to the right, or use i3's tabbed interface to navigate windows similar to a browser, or switch between workspaces. But the point is, the windows are always in the same order, in the same location (unless I move them), so I find it so much easier to quickly switch between them.
That said, in spite of my alignments with dwm's ui principles, for the last five years I've almost exclusively used i3. Unlike dwm, I don't have to modify C code in order to configure my window manager, and I don't have to pull in patches that haven't been upstreamed[1] in order to include basic features.
I think there's room for a window manager with the ease of configurability found in i3, but the dynamic tiling (i3 is _static tiling_, which means the wm will not assist you in positioning windows) and tagging features of dwm. I would move to it in a heartbeat.
[0]: https://dwm.suckless.org/ [1]: https://dwm.suckless.org/patches/
Edit: it is also lightweight, with proper power management (think TLP/Powertop) you can vastly improve your battery life.
It's made for "tilling incompatible" applications or stuff you want always on top, it's not made for a floating workflow.
As I get old, I started to look more toward simple Windows managers, like OpenBox. I really do like having the buttons, and a window border I can actually hit with my pointer.
Personally I think it would be fun if someone cloned Windows 3.11 and added a few ekstra keyboard shortcuts.
A few years ago I learned that most Linux WMs allow you to use ALT+RightMouse to resize your window from anywhere (sometimes WIN+RightMouse, usually configurable).
BetterTouchTool seems to allow the use of Super by itself to drag on mouse move, but in practice Super + click is way less prone to error.
I got way too used to Win+arrow keys for moving and resizing windows, inluding in multiple monitor setups. Any Linux WM that replicates these shortcuts?
Using Win+arrow I can minimize, maximize, make window stick to left or right half of screen or any of corners and move between desktops.
Ehm..thanks...thanks allot!
I tend to alternate between wanting to do everything from the keyboard and wanting to use my mouse heavily. I've never liked having to switch my hand between keyboard and mouse when I'm in the middle of something, so I usually have customizations for both input modes, eg FireFox addons for mouse gestures and vi-keys active simultaneously.
For window management I've always liked the idea of tiling wms, but they tend to have less mouse support than I'd like, or getting the support they do have to work the way I want is more involved. Ironically, I recall ratpoison being pretty good in that department, when I tried it years ago.
These days I use KWin (designed for a primarily floating workflow) with an addon script Krohnkite[0] to add automatic tiling layouts and hotkeys on top of the usual KWin behaviors. This lets me use all of KWins standard mouse features and extra niceties, but with decent tiling that required almost no configuration to get something that feels completely natural to me.
[1]: https://github.com/NsCDE/NsCDE [2]: https://www.reddit.com/r/unixporn/comments/jvnzkb/prismwm_in...
That's not true, i often just use the tab-mode.
Using tiling for a long time, i go berserk having to rearrange window's with the mouse, then one is over the other...etc, it a mess!
For the uninformed, use Mod-W to switch windows to tabbed mode in Sway/i3. You can also organize virtual desktops in "workspaces." I keep web/music on workspace 1, terminals and IDEs on workspace 2, and email/msteams/office on workspace 3.
Switched to i3 on a nixos box a few months ago - never leaving the tiling vm, or nixos for that matter.
I suddenly use workspaces which I never used to and I have coms in one space (mail/slack/teams), terms with vim etc in one, and web browser in a third.
Never looking around for windows and draging stuff around is magical for the workflow.
With fzf and a launcher & window switcher my workflow have never been more streamlined.
Nixos helps as well, but that’s a different topic. :)
I agree that the mouse can be great and effective. Plan9 / Acme editor is a great example. I also like the additional buttons when browsing, you know, prev/next.
That was fine for one project, but I had to maintain a fair few projects so I ended up having to create groups of workspaces. I used this patch: https://gist.github.com/woodensquares/c1afc4fb56b4d9d21fa261... that lets you hide workspaces from the bar if the ended with a prefix(I used _boop because I'm a child). So then all workspaces names become <group_num><ws_num>:<name>_boop apart from the active group, which is just <ws_num>:<name>. If you are in group 1 and switch to group 3, 1:dev would get renamed to 11:dev_boop and 31:name_boop would get renamed to 1:name and get automatically selected.
I also have a "scratch" workspace that is always visible regardless of group, I called it "i". Since it doesn't start with a number, it doesn't get affected by the workspace groups script and is always visible. I usually just stick irc there and my music player so I can access it regardless of which group/project I am working on.
I'm still waiting for this proposal to go through: https://github.com/i3/i3/issues/3818 so that I don't need to use a custom build of i3.
I hacked it all together in one afternoon and it's been working ever since. Before this I really struggled to context switch between all the different projects I was working on/supporting. This made it much more managable and got me a bunch of praise for how quickly I can fix problems/answer questions. I can't imagine trying to do my job without this setup anymore.
When I'm on a Windows machine I spend so much time alt tabbing and dragging and resizing, I didn't notice it until I started using i3 on my linux machine. Five workspaces, bound to Alt 1-5, fully using the screenspace, I can almost not stand working without it any more.
There's at least one tiling WM for Windows (don't recall the name off-hand, but someone here probably knows).
It's also possible to run i3 itself in Windows, under Cygwin, though of course it will only manage X applications.
A tiling WM not only enforces this (although it can switch to floating if needed), it handles positioning automatically so I don't need to fidget with positioning and sizing of multiple windows. It also minimizes useless fluff to make it easy to have even more windows operated in parallel.
Windows, macOS, GNOME and others do various degrees of tiling as a sign of the usefulness. Even fullscreen is just a special case of tiling with 1 window.
If you're a kind of person that always fullscreen things, you'll enjoy a tiling WM.
(I don't understand people that work with small floating windows. It's a waste of limited screen real estate, and means you don't get to see as much of what you're working on as you could. Suboptimal.)
I don’t know for the floating part, I guess it is a personal thing.
But for the many small windows shown at the same time, it’s pretty useful when exploring and comparing texts, data, code, logs...
Tiling many windows (some being small) is what tiling is about.
I use a tiling window manager at home, but when I'm at work I have to use a windows machine. I often use vim to do stuff and when I do I usually keep it to 80x24 or 80x48 (my preference is 80x24 unless what I'm working on has a lot of long function definitions). If I'm working out of a single vim window (which I've built my vimrc around to some extent), I don't need to see a lot of info at the same time, so I can put that window at exactly the part of the (enormous these days) screen which is most amenable to my neck angle, and don't have to jump around the screen much with my eyes, which helps me zone in. I'll only go full screen if I have to analyze a huge CSV dump or something, where the lines are not kept to a sensible length, or occasionally when I use vimdiff (but even then I have my defaults set so that I don't need more than 120 width to use a 2 way diff effectively). Spreading my info needlessly across the real estate feels less optimal to me I guess
Where dynamic WMs constantly rearrange all the windows with every change according to some fixed layout, the static ones work basically like Vim's windows and buffers. Meaning windows are stacked above each other by default with only the first one showing, but with some shortcuts you can split horizontally or vertically and change all split dimensions.
I have used many tiling window managers and over time I gravitated away from all the dynamic WMs because they're just not flexible enough for the real world. They tend to work on the assumption that the user needs all windows on the screen all the time, and this does not make sense in many scenarios.
Also, when I want to quickly open a terminal on dynamic WMs I have to setup a shortcut for a floating terminal if I don't want it to rearrange everything, while on a static WM I just open a terminal and it'll have no effect on the layout by default.
Ironically I find static window managers to be more comfortable to use the more dynamic my workflow and window arrangements are. i3wm isn't as bad because it doesn't enforce a fixed layout, but it's still more cumbersome once I want to quickly resize or swap around some windows on the screen.
Just press Super+w and all the window's (the new ones too) are arranged in a tab format.
It recognizes apps that I have open and I wrote an algorithm to place them on the screen the way I want.
It also creates what I call scenes, which allows me to select from couple different dynamic arrangements of windows depending on what I work on.
I can also able to instantly decide what windows are on both monitors by having a simple script when I select a desktop and it is being brought to primary monitor and contents of primary monitor is pushed to secondary monitor. By pressing two key shortcuts in short succession I can almost instantly set any arbitrary windows on both monitors without moving my mouse.
Now, this would be difficult to organize on another WM, but is a breeze on i3.
It works great both on a single laptop, and with 3 external monitors (of which one generally has a single workspace hardcoded). I fully utilize all 9/10 workspaces most days.
The only time it doesn't fit great is with e.g. GIMP that has several small windows for toolboxes and stuff - one can still target particular windows to be floating (either keybind at runtime or with static config targeting window names/classes/whatnot).
There's no way I'm switching away from Xmonad for my main workstation - but you do you!
You could try running GIMP in single-window mode (via GIMP's menu option: Windows -> Single-Window Mode).
It doesn't get rid of every little window GIMP has, as it'll still pop up windows for saving files, for example, but it's much better than multi-window mode, if you don't want to bother with lots of little windows.
These are manual tiling wms. So in exwm I can chose how to position and resize my windows any way I want. For example I can hit C-x 3 to split my screen in half vertically then C-x 2 to split one of the vertical splits horizontally. Now I have
+----------+-----------+
| | |
| | |
| +-----------+
| | |
| | |
+----------+-----------+
I can resize the vertical and horizontal splits, add or remove splits and cycle between the splits and the windows they display with regular emacs commands. The only thing you can't do is have windows overlap so you can only see part of their contents. i3 comes last in my preferences because it adds a bit more friction to this with it's concept of containers.It seems to me like that covers 99% of use cases. I don't see very much value in being able to only see some of a window when it is being overlapped. Especially when if I need to see only a few lines of a window it would only be a few keystrokes away. Maybe C-o 2 C-x 3 C-x - C-x b window title which looks crazy but if you are a heavy emacs user with ace-window and ivy mode it's very natural.
- macOS "Zoom" functionality already takes care of the optimal content size.
- For websites, above zoom functionality works fine, but I prefer to manually resize my browser, since nearly all websites today have responsive design, and resizing gets rid of all the unnecessary parts, like sidebars, large margins etc. All I have left is the content.
- Today most application GUIs are way too bloated. I usually disable whatever I do not need, and use the macOS global menu search functionality a lot. I can reach any feature I want with a few keyboard clack. This way I can use software with minimal screen estate.
- If things get a bit crowded, Mission Control (Exposé) feature allows me to see what's going on very easily. macOS trackpad features also help a lot, with intuitive multi-finger gestures to see MC, show desktop, or show individual application windows.
- As a personal taste, I like to take the desktop metaphor a tad more seriously. I like to have file clusters on my desktop without the limitations of a grid, and file them to a folder later on when I'm done. Imagining my desktop as a real desktop just makes me more productive. I really cannot imagine myself using any other system other than macOS or Haiku just for this reason.
If you've already reached this milestone of enlightenment and you're already using a tiling window manager elsewhere, I'd recommend you not make an exception for web browsing.
I don't even use a tiling window manager, just Gnome's rudimentary support for resizing a window and placing it to take up the left half of the screen or the right half, and I do easily 98+% of my browsing this way, with two half-width browser windows. (The rest involves temporarily maximizing a window because the website's layout is busted.) So browsing, too, is also very compatible with tiling.
For tiling terminal apps, I just use the tiling feature of KDE's Konsole, and used to use Terminator.
It’s just not the default.
If I want to work on N windows at a time, i3 handles their tiling semi-automatically. All windows that I’m not currently using are pushed into different workspaces.
I have no idea I, just told you I use emacs as my window manager. Pretty sure that I don't come even close to any definition of typical.
A few things though. Every window manager I listed can do floating windows if you want. (Maybe not ratpoison) In my opinion overlapping windows is an anti-feature but it's possible for people with differing opinions.
It's a matter of workflow I suppose. I want tiling first. When I open a new program I want it to open in my currently focused tile every time. If I have a window in another tile, or not visible, I want to hit a couple keys and bring it into my focused tile. Not have to faff around switch to make a different window active and then re-tile it.
So sure you can use a floating wm as a tiling wm, sorta. And you can use a tiling wm as a floating wm, kinda. Pick the method you are going to use the most start there and then maybe throw in a little floating/tiling if you like.
I just wanted to point out about manual tiling managers. It seems like when tiling wms come up people say they tried xmonad or awesome and didn't like it. I absolutely hate auto-tiling managers but I like other tiling window managers.
10 Workspaces. 2 GTD workspaces (Personal and Work...I know you shouldn’t separate them, but that’s how I liked it). That’s 10 Windows total.
3 main development workspaces, each with 2 terminals. 6 more.
2 Secondary development workspaces with 4 Windows each (for running search/git/tail, etc). 8 more.
2 browser workspaces with 3 browser Windows total.
1 other workspace for ad hoc tools. 1 window.
So about 28 Windows on a single monitor.
Often I'll find I need to make arbitrary layouts on the fly when debugging an issue or responding to an outage, I can do this without having to engage my brain or reach for my mouse.
Can you do the same with floating WMs? Absolutely but you will probably need to think about, breaking your thought process. For me the i3 just does what I need it to without having to engage my brain or reach for the mouse.
If you're already running Linux I'd highly suggest giving i3 a go, it's hard (for me) to explain how it changed the way I interact with my computer and how much it improved my workflow. I think about the closes I can get is that it's like learning vi, sure nano can get text into a file but once you're used to vi you're going to be far more efficient.
With i3 you can do exactly this by telling i3 to float a window. Windows can be floated automatically (by matching titles or other X properties) or manually through a keyboard shortcut.
It takes a bit of time to get used to it, especially since most tilling window manager I've used require a bit of customisation to bet to my taste but once I've been used to it, going back to clicking on menus, moving things around with a mouse or a touchpad is just not possible. I find this so inefficient, exhausting and, first and foremost, something that should be avoidable.
There are hybrid tiling window managers, like PopOS Shell. You can easily turn it on/off, including specific windows that you want to always cascade.
I use a rather heavily customized version of dwm myself, and I have things like custom placement rule: I want my editor to be in a specific "workspace" (or tag, in dwm parlance), I have keybindings to focus my editor, my terminal or my web browser in one single keystroke regardless of where I am (I always cringe a bit when I watch colleagues feverishly alt-tabbing to find the window they're looking for), I have added custom "sticky" windows that appear in all workspaces etc...
It takes a while to set up at first but I think it's well worth it in the long run. When I have to use a normal desktop environment on a different computer everything feels clunky and more complicated than it should be.
I tried out i3 for a while and generally liked it, but was never wizard-like with manipulating my tile stack. I could split horizontally and vertically, and swap around to a degree. Enough to get by and most importantly, line it all up and use all the space. ;)
These days, all the systems I use support the 98% use case I had for i3: either full screen, or vertical split (by dragging all the way right or left). I further discovered tmux so I can split a terminal window extra as needed. So, I haven't used i3 in a few years.
You mentioned you prefer lots of windows open? I'm 100% the opposite. I only want to see two at a time. At work I have two monitors and one is editor, the other is tmux'ed terminal, both maximized. Browser, maximized on one monitor. Document of some kind (pdf, etc.)? Maximized on the other monitor. At any time I'm selecting which two to see. Chat apps for group communication? I hide those because they are hugely distracting. (I check them now and then when I take a short break). At home I do something similar using virtual desktops, since I only have one monitor: browser in one virtual desktop, ebook or document in another, etc.
That's just way too fiddly and time-consuming for me. 99% of the time I want my windows maximized and stacked behind each other. i3 does this for me automatically, and requires absolutely no interaction from me to have them set up the way I want.
If I was using a floating window manager for that, I'd have to manually maximize them and manually stack them.
If I want windows to be positioned in some custom layout that I use one time and never again, there is no difference between i3 and floating window managers, because i3 lets me do exactly that in the same way as floating window managers do, as I can float any window in i3 and position and resize it normally.
However, if I want to repeat a particular window layout then I can configure i3 to automatically put windows in that layout. I used to do this with GIMP a long time ago, before it had single-window mode. Now I just use it as a single maximized window, and don't bother with that.
I make popup windows float, so those will appear centered and disappear without changing my window layout, as one would expect of popup windows.
Occasionally I'll manually float a window, when I want the kind of control you're talking about, or when I want it to overlap my default maximized window for some reason, but that's pretty rare.
At one point I had lots of windows open and positioned them how I wanted with the size I wanted, every time I used them. Then I realized that the positions and sizes actually didn't change for certain windows. And I hated having to move windows around all the time!
For example, my email program could always be in the same position with the same size, no need to make changes to this from one day to another.
Currently, I've got keyboard shortcuts to move the current window to a position/size I like. E.g. one keyboard shortcut for "covers 100% of the screen", another for "covers the right 75% (and 100% of the height) of the screen", and so on.
But this approach restricts you to specific arrangements of windows. E.g. if you want to have a "right 75%" window on top, with a "100%" window below it so that the left bit "peeks out", but the windows aren't always the same, then it gets more cumbersome to arrange it.
(In my case that doesn't apply because there is only one application that I run in "right 75%" mode and there are only two that I want to peek out from underneath.)
Tiling gives you convenient ways to have different arrangements without having to invest a lot of manual work, and for some people this is useful.
For example, dwm provides a layout of two columns, where a single tall window goes in the left column and the other windows go in the right column, stacked above each other. It is really easy to go through the windows, and it is also really easy to move one window into the left column. So you can have a main window that you are working in (in the left column) while you can watch the other windows on the right. And it's really convenient to to change the window you're working in, and you can always follow what is going on in the other windows.
I encourage you to try this different way of working for a bit. Maybe you can learn something from it. Perhaps it teaches you something new so that you an adapt the way you work.
The User is defining the way a tilling manager works, so all you do is conforming to your own way, but with a more efficient tool.
Manual window managment is not worth the timewaste in most usecases. And for the rare cases where it's still neccessary the better WMs still allow manual settings.
I find Windows and macOS painful to use. Constantly hunting around for applications I have open, that requires me to remove my fingers from my keyboard and play around with my mouse. I barely bother to use tabs for anything (terminal or browser), just switch to another workspace and pop up another instance of FireFox or a terminal.
TWM do ruin you though. Once you're comfortable in them, you'll never want to go back and so using somebody else's computer just feels alien.
Do you use the same NixOS configuration across machines?
Do you use i3 with another desktop environment or by itself?
I only use i3. Haven't found a reason to install another WM yet. I tend to use xrandr, pavucontrol and wpa_supplicant quite happily for most of the stuff people use a GUI WM for.
There is, it’s called home-manager [1] and it’s a pretty nice way to manage your config files and user packages even if you’re not on a NixOS system.
Changing my emacs configurations means restarting my emacs sessions in NixOS, and I don't want to have to do that if emacs is going to be my WM....
That's why I try my best to cope with the defaults and change when absolutely necessary. It spares a lot of frustration when you use another config since you can always go vanilla.
Edit: quoting
mv ~/.config/i3/config{,.old}
cp /etc/i3/config ~/.config/i3/configDo you mean that XWayland doesn't support HiDPI yet? I'm told it's coming ... some day (in a few months).
Meanwhile even Chromium got Wayland support so the last laggards on my machine are the JetBrains IDEs.
Correct. Emacs is my last regularly-in-use X program under Sway, and my god does it look horrid on a large HiDPI screen :-(
> I'm told it's coming ... some day (in a few months).
I remember reading that it's complicated and extremely un-sexy (because it's essential X work).
> We (@masm11 and @fejfighter) are going to push @fejfighter's fork to the fsf's repository, instead of my fork. @fejfighter's one is rebaseable and have English commit messages. See #23.
[1] https://github.com/fejfighter/emacs [2] https://github.com/masm11/emacs
How often do you actually use other people's computers?
I virtually never do, and in the rare cases that I do I'm ssh'ing in to them from my own computer which is running i3, so it's not an issue.
Overall it has been a good experience. Once you get muscle memory for the shortcuts to move between windows and workspaces, resize and toggle fullscreen windows you can start really flying. The built-in cheatsheet mentioned by the parent poster helps to get there.
Bonus: when I'm sharing my desktop with a work colleague (they all use Macs) I often get asked how I'm doing what I'm doing so fast.
I do sometimes still get a little frustrated when I want to reorder windows in a workspace. It can be done but feels a bit like solving a Rubik's Cube. It would be nice to be able to do things like:
1. Rotate the windows (either direction) that touch all the screen edges and then inherit the window size that the window moves into.
2. Be able to flip window sets that touch the side edges, eg swap all the windows on the left with the right.
In addition to that I have a semi transparent terminal and emacs in a floating window that I can move to the scratchpad with a global hotkey. This is much alike the visor console in Quake. Terminal has tmux. Very handy for a quick ping or htop without messing up the main window layout.
i3 config snippet for reference:
# Visor terminal
exec "st -c visor"
bindsym $mod+a [class="visor"] scratchpad show
for_window [class="visor"] move scratchpad;
for_window [class="visor"] scratchpad show;
for_window [class="visor"] floating enable;
for_window [class="visor"] resize set width 100 ppt;
for_window [class="visor"] sticky enable
for_window [class="visor"] move position center;
for_window [class="visor"] scratchpad show;
# Visor style emacs window toggled by Meta+ "less than key"
exec emacs -name emacs-server
bindsym $mod+less [instance="emacs-server"] scratchpad show
for_window [instance="emacs-server"] move scratchpad
for_window [instance="emacs-server"] floating enable
for_window [instance="emacs-server"] move position 450px 0px
for_window [instance="emacs-server"] sticky enable
for_window [instance="emacs-server"] scratchpad show
for_window [instance="emacs-server"] resize set 950 1055
for_window [instance="emacs-server"] scratchpad showThe productivity side of it is slightly exaggerated (in terms of tiling vs stacking manager), and i didn't find myself saving so much time. One thing i've always missed from the stacking manager is the window overlap - i do that quite often, especially when reading something while doing stuff on another window - most sites have side panels that don't react well to changing window sizes and with stacking window, you can just place them optimally and hide the stuff you don't want to see.
The only issue i've had with it is how it handled popups. For example the andoid emulator window was a pain, also some dialog windows.
I don't think i will be ever coming back to tiling WMs. It was nice infatuation.
But Zoom is a nightmare. It's clearly only designed to work with conventional windows. It opens new windows a lot, and each time it does that, i3 grabs the new window and puts it in whatever workspace my mouse is currently at. I'm constantly shifting Zoom windows between fullscreen and normal mode, and switching workspaces for them. Starting a breakout session immediately kills everything and I have to start moving everything around again.
I get that Zoom isn't optimising their application for Linux, and especially not for i3. Fair enough, I'm in a tiny market segment here. But it's annoying enough that I want to warn people who want to try i3 that (no fault of i3) some applications really don't work well with it.
• You could make Zoom windows float by default in your i3 config. I seem to recall there was some app I did that with on my old laptop where I used i3.
• Judging by Windows behaviour (which may or may not be the same), it’s Zoom’s fullscreen mode that’s the real problem, most readily triggered by screen sharing. Settings → Share Screen → Window size when screen sharing lets you change it so that this doesn’t throw it into fullscreen mode. This may well improve things. (I know the fullscreen mode when sharing is awful on Windows, given that I’m doing that multiple times a day at present I’ve been meaning to write some AutoHotkey to open the desired things and lay my screen out the way I want it, rather than wasting ten or twenty seconds each time. On i3 I would have done the equivalent of this long ago.)
Existing applications just remember where they're supposed to be, while new application windows float by default, and I can snap them into a tiled position on any monitor with a few keystrokes.
But my guess is if you are in the position where you can use something like i3 for your daily driver, you are in the position to use something better than Zoom.
My i3 is also set to open new windows in the workspace that triggered the new window so I never have to go fishing for any occasional pop-up, it's where it belongs.
You could probably float those windows to solve this problem right?
I do agree about overlap being useful. In some cases overlapping ends up being one of the most efficient ways to use a few tools together to create an optimized workflow.
I made a video about this recently around taking advantage of "always on top"[0]. It's not an example of using a tiled window manager, but it does show how overlapping windows on another window lets you comfortably use a few programs together in a nice way. All operating systems have tools to get this behavior.
[0]: https://nickjanetakis.com/blog/always-on-top-lets-you-pin-a-...
I did come close however...there's a hidden gem called Yabai[0] (formerly chunkwm) by koekeishiya on GitHub. For anyone looking for as close to i3 functionality as possible in MacOS, Yabai is definitely it. I'm really surprised I don't see more people recommend it as the developer has done an excellent job trying to bring the i3 experience to Mac.
> Sway is a tiling Wayland compositor and a drop-in replacement for the i3 window manager for X11. It works with your existing i3 configuration and supports most of i3's features, plus a few extras.
The only thing one needs to do is configure environment variables to start qt and gtk apps in wayland mode.
Given this failure (I still have no idea why we think our computers can't handle remembering where windows should be), it's better to have a tiling window manager, because at least one doesn't have to hunt for the window borders (which, in another failure of common sense, are becoming thinner and smaller every year) and resize the windows.
Also, i3/Sway handles external displays well, better than macOS IMO. When a display is disconnected, macOS merges the windows into the laptop display, but on tiling window managers they just stay in the same workspace number, which can be switched to on the laptop display, this is much more predictable and simpler.
[0]
I switched to Sway recently, the main reason being is that when you have an external display with a different DPI than your laptop display (which in my case is a HiDPI Retina Display), it's quite hacky to get it work under X, but it works flawlessly in Wayland. See my user config[1] for more, let me know of any questions regarding program compatibility under Wayland.
The configuration syntax is essentially compatible with i3 as well.
[1] https://github.com/siraben/dotfiles/blob/master/home-manager...
services.xserver = {
enable = true;
desktopManager = {
default = "xfce";
xterm.enable = false;
xfce = {
enable = true;
noDesktop = true;
enableXfwm = false;
};
};
windowManager.i3.enable = true;
displayManager.defaultSession = "xfce+i3";
};[1] https://feeblenerd.blogspot.com/2015/11/pretty-i3-with-xfce....
> let me know of any questions regarding program compatibility under Wayland.
What types of programs might not work in Sway?
I use alternate versions of Chromium, Firefox that are Wayland-compatible, see https://arewewaylandyet.com/ for more.
For example, I run my IDE in full screen and the console/log is in the bottom part of the window. My browser partially covers the IDE by occupying the right 75% of the screen. Then I can follow the console/log of the IDE. Even though only the beginning of each line is visible, that's enough to tell me when it is time to switch back to the IDE.
If I were to make the IDE window smaller, the console/log portion of it would be too tiny to see anything.
If the text editor has no side bars (such as a directory tree), then it makes sense to have a full-height text editor on the left and maybe to half-height terminals on the right.
But then I think that maybe some IDEs allow to pop out the console/log piece into a separate window, and perhaps that could work nicely with a tiling arrangement. I haven't tried.
Thoughts?
Looks like a side monitor will work wonders for you.
I have a setup with 3 monitors:
My main 4k monitor is used for coding only. I can have 5 open buffers, side by side, with close to 120 lines being displayed in each one of them.
I have a side monitor open with a terminal which shows me the logs of the running application, plus I can easily type any additional command there.
On the other monitor I have the browser open, usually with the documentation or stack overflow tab.
When I'm doing web development I have one monitor for the web app and another one for devtools.
It's amazing. No more fighting with screen space. I highly recommend it.
It works out really, really well and i'm super interested in finding a way to make that work with i3.
Sway looks somewhat better, but I've been told it's still somewhat flaky.
http://dotshare.it/public/images/uploads/8435.png
http://dotshare.it/public/images/uploads/8284.png
http://dotshare.it/category/wms/i3/
>Does it even allow for systray icons?
Yes.
>extremely bare-bones status bar.
You can config everything in it, or use polybar.
>Sway looks somewhat better
Sway is a drop-in replacement.
Still it retains the pretty utilitarian aesthetics common to most twm. I don’t mind it but some might prefer gui to terms, docks to panels, desktop icons, wallpaper and widgets to a dense grid of windows.
My wife tends to “shake” the windows she is unhappy with. The zoom client app mostly. I would not fare to suggest non shakable UI.
Also maybe check out Gnome Shell? Haven't tried it personally but tile-y and similar look and feel to modern GNOME/Unity, if that's what you're after.
The main pain point of stock ubuntu gnome for me right now is that when I open too many windows, my alt-tab becomes too cluttered, and it would be cool if there was a way to designate windows as background somehow (but not different workspace, I don't like workspaces), so that it would not show up in alt-tab. Ideally I would be able to have like 40 open windows of which just a handful are "active".
EDIT: The side bar could be used for bringing up windows if it didn't combine windows from the same program into one icon - a feature I absolutely loathe - seriously, I have a lot of empty screen real estate but instead you want to hide my windows behind a second click?
I use byobu(tmux) for managing my terminal splits, which is all i need. I also have removed any window decorations from my terminal. I have shortcuts configured in gnome which let me do the occasional side-by-side windows easily. I rarely use the mouse but I have the option.
Of course if you do a lot of crazy tiling like 3,3,2 or whatever, a tiling window manager might be a good idea. In my experience you just never need that. Maybe I am missing something.
The windows I have opened are: - the terminal (at most 4 tabs as well... but here my terminal allows me to easily switch to any numbered tab I want) - the IDE (sometimes). In most cases, my IDE can be run on my terminal (e.g., Vim) - a web browser (again, I try to keep the number of tabs to a minimum... but here it's harder to do so) - anything else (usually nothing)
Another reason to not use a tiling wms: yet another dependency I don't have to take care (as in: configuring and updating it).
In my experience, once you configure it correctly to your liking, you hardly have to touch it again. I had been carrying the same i3 configuration from Fedora 28 to Fedora 31, then switched to Sway. I had to make minor tweaks to adjust to Wayland and never modified it since then (now on Fedora 32).
But you're still using a desktop environment to open these windows? Which requires many more dependencies and breaks more often IME than a twm, while being a huge solution to the simple problem of 'open 4 x windows' in your case. One of the things I like about twm's is the massive reduction in dependencies on my machine since switching actually
Starting compton (which seems essential for i3 but the documentation doesn't mention it) didn't help. Enabling some Intel drivers fixed the screen tearing but broke my multimonitor setup.
Also dmenu is garbage compared to program search in modern desktop environments, it's just search for bash commands, half the results arent something you'd want to run from your desktop and it doesn't learn.
It makes sense that it's not popular, most people have better things to do than read a manual and learn a new configuration language with 100s of options just to move windows around.
Try rofi[1]. It learns.
One of the biggest gripes I had with i3 is things like volume, brightness, mute and so on. It's possible to configure everything to work again of course, but very painful. Other system related things that exist in gnome (wifi, bluetooth, sound, microphone) are also a pain to do without. Again, lots of tinkering needed to get things working anew.
Screenshots typically show terminals and video players and IDEs all neatly arranged in tiny squares, but I've never found that type of arrangement productive.
My current dev machine has been running ArchLinux + i3-gaps for a couple of years now. Very solid, and not a single update screwup so far.
The alternative for me was to migrate to sway[1] to have a similar environment in wayland.
The argument raised against this is that it should be used in conjunction with some measure of a sandboxing technique, and that X11 is “impossible to sandbox”, but X11 sandboxes exist: how they work is a proxy server that sits in between the sandboxed application and the real server that determines what to let through and what not, the sandboxed application thus believes it is the only thing running inside of it's own X11 server, which maps it onto the bigger one.
Then the counter argument is that that “doesn't count” and isn't “true sandboxing”, but that is the exact same technique that sandboxes that use Wayland use for say DBus, or PulseAudio, and has always been the standard way of sandboxing such daemons and servers.
That's always the highly theoretical argument that comes in to defend these promises that are false on a practical level “it doesn't count”, even though the practical result is the same.
All the ways to circumvent Wayland's security “don't count” even though they can all the same be used to compromise it.
I am quite convinced after having spoken with many a Wayland developer that nigh none of them actually care about the “security” they so often talk about: they care about a certain theoretical elegance of a “secure system" that only exists in theory but exists in no reality as something that actually has been practically realized. All the actual, effective, real world ways to pierce it are wished away with that they “don't count” as they don't exist in their theoretical dream world.
I have seen multiple such arguments that you can “sandbox” X11 access, with no proof or really bad compromises; I don’t believe it.
I addressed this in my very post and forgot no such thing.
Firejail can and does sandbox X11.
> I have seen multiple such arguments that you can “sandbox” X11 access, with no proof or really bad compromises; I don’t believe it.
How is there no proof? it exists in Firejail at this moment..
The compromises are those which one has to live with on Wayland per sē: naturally things that need access don't work, and Nvidia card acceleration does not work.
https://firejail.wordpress.com/documentation-2/x11-guide/
This existed and happened long ere Wayland was even conceived.
I consider having to use a nested X server, even one capable of forwarding, a huge compromise based on my experience with it.
Anyway, that did not exist before Wayland was even conceived. First of all, hardware acceleration in Xpra has been a relatively rocky story for a long time. Second of all, Firejail didn’t support using it until 2016.
If you want to keep buying borderline Linux-incompatible video cards and running an unmaintained display server, by all means try to jam a security model onto an inherently insecure client-server system to help justify it. As cold as it may be, the world will happily leave you behind. And if you don’t believe me, just keep waiting. Lots of people thought Macromedia Flash would stick around forever, too.
As in, a form of sandboxing.
> which are complicated
They are no more complicated than every other proxied daemon, as my original post very much explained.
> and often buggy.
Then I'm sure you can provide me with such a bug.
> Last I checked Firejail itself only recommended using X11 sandboxing when dealing with hostile situations.
Then I'm sure you can cite this recommendation.
> I consider having to use a nested X server, even one capable of forwarding, a huge compromise based on my experience with it.
I'm sure that you can come with an actual concrete example of a problem, because when I used it it simply appears as if the application normally ran in it's Window, and I would not be able to tell the difference had I not known.
> Anyway, that did not exist before Wayland was even conceived. First of all, hardware acceleration in Xpra has been a relatively rocky story for a long time. Second of all, Firejail didn’t support using it until 2016.
The first Firejail beta releases itself was in 2014, long after Wayland was first conceived.
The first Xpra release was in 2008, however.
> If you want to keep buying borderline Linux-incompatible video cards and running an unmaintained display server, by all means try to jam a security model onto an inherently insecure client-server system to help justify it. As cold as it may be, the world will happily leave you behind. And if you don’t believe me, just keep waiting. Lots of people thought Macromedia Flash would stick around forever, too.
I'm sure you'll tell the next man that proved you wrong that you “never saw proof” as well, and he will provide proof too, which you will just as dismiss with vague arguments of “It's buggy and a huge compromise, but I won't provide any specifics on which bugs, and which compromises.”
People that actually think that Wayland is the “future” that will replace X11 with this constant “features that many users need are insecure and they really don't need them.” are a laughter. As of this moment most user interfaces haven't even tried an attempt to make a Wayland port and aren't interested; the only noteable ports are KDE, GNOME, Sway, and Enlightenment, two of which had to add back many of the cut features to make their system work, but had to do so in incompatible, nonstandardized ways.
It must have been around 2013 when I first heard talk about how Wayland was ready and would leave X11 behind, and adoption hasn't increased much since then.
Well, there's ydotool for Wayland, but unfortunately it doesn't even have half the features of xdotool, and probably won't be improving much any time soon, since its README says "Since Jun, 2019, I have little time to maintain this project".
At this rate, it'll probably take another 10 or 20 years for Wayland to catch up to all the already-existing useful features of X.
I think projects like this should link each other as alternatives though, to aid in discovery. Since they are for different protocols, I don't think they will lose anything by linking their "competitor".
I can see that sway mentions and links to i3, but I can't see anything similar from i3. Not sure if they haven't noticed it or if they are not fond of it.
So it would be more accurate to say Nvidia does not do sway.
I love i3 and it was my first experience with tiling WM years ago. It is absolutely a radical break for me from all other WM's since tiling allows me to work in deep focus many desktops, 1 desktop per activity/task and my focus always on one thing not many.
Also wanting not to miss out on the future I moved to sway in parallel. I am literally in sway 90% of the time. The only difference is if I have to use video / webRTC screensharing or similar (usually in the browser), in which case sway will not work. This is why I maintain a dual system of both i3/sway.
Also I trust i3 to be more stable for when I am standing in front of a crowd or have to connect my system to a variety of different external beamers, monitors etc.
It sounds nuts to "maintain" 2 WM's but my configuration and workflow never deviates no matter which system I use even across upgrades of i3/sway.
When I plug in a new freshly installed machine I just fetch my dotfiles and have both i3/sway in exactly the same way as I'm used to ... It's incredibly easy keeping both around if one has to (or wants to). Bonus of sway is also that it has gaps support (which is cool on bigger screens, less important on laptops).
edit: both sway / i3 gave me no problems at all running them under restrictive environments such as LD_PRELOAD=libhardened_malloc.so (from GrapheneOS) and also work with under firejail without problems. I'll stop since it's anyway clear I am a big fan of both :)
Screensharing under sway works fine with firefox and chromium through xdpw.
Interesting, I do the same thing but just use startx. I find it hard to find convincing reasons to move from X apart from it 'being dead,' which isn't very convincing to me. What benefits to you get from sway in your setup? Is it compatible with things like ssh X forwarding?
I don't hink X is dead for a while. There is a lot of reasons for application devs not to support sway unless a strong enough user-base from that camp justifies the effort. Consider also that some of the heavy lifting previously done by X is being offloaded to Sway.
My motivation to switch to it was because Sway claims that you can just drop in your .config/i3/config and sway will be compatible to it. (it's pretty close).
What I wanted was transparency (not via a clunky workaround like compton). Also a system that takes less of my resources while in use to also roll it out on 10 or 15 year old machines I own. Sway delivers here and also has less issues with screen tearing than X with my card.
Literally everything I needed previously worked in Sway (often with different commands, e.g. wofi instead of rofi, or grim for screenshots, Waybar instead of Polybar, etc)
anything else like tmux, ssh-forwarding and all things in the terminal work perfectly.
The most difficult part was to find a good wayland terminal and I recommend “foot”, https://codeberg.org/dnkl/foot
I have also been using skhrdc (same maintainer I believe) for key bindings and it’s an absolute blast.
I really wish MacOS would just open up.
What are the specs on your machine? I realized that yabai ran like crap on my older macbook retina 15" but on my current macbook 16" it works great. Same amount of ram 16gb but a better graphics chip.
My wishlist would be to have this go further and be aware of inter-monitor, relative positioning as well. For example, I use the ⊢ layout (one rotated monitor on the left, one straight monitor right in front) and it's usually an unsatisfactory experience tiling windows for productivity.
Things I do on the vertically oriented monitor on the left are mostly reading documents or watching logs.
I’m interested to hear what you have in mind.
For me though, the two monitors are just one screen which I should have total flexibility over. And workspaces are a way to switch context -- to a different set of tasks.
The ⊢ shaped arrangement is the result of a tendency towards more squarish (than wide-screen) canvas. I still manage to find 16:10s (as opposed to 16:9s) in that vain.
However, I would highlight, that it's ability to work in multi-monitor is huge selling point.
You would like to show something from an another screen, plug the cable, press suitable hotkey, and the workspace, that you were just working on, jumps to the new display. No need to move windows.
You go back to your desk and plug in the laptop. The workspaces will automatically jump to the monitors, per your config.
Next, you run to a meeting, the very same workspaces collapse back to laptop's monitor automatically.
There was no need to touch windows in any of these scenarios, And no more "I forgot the browser windows to the attached display" that has happened with some other systems.
I used Xmonad and awesomewm before. I don't understand enough Haskell to configure Xmonad and awesomewm is a giant dependency mess (the irony being that it's a fork of dwm , the minimalist suckless wm)
Anyways: i3 has struck the perfect balance for me. Written in C, easy to modify, configuration is intuitive and obvious (I have no interest in spending weeks learning how to configure it), and best of all super stable and bug free.
Highly recommended!
I started using WSL2 on my windows machines just to run i3 on windows. That works too! (Basically you vnc to WSL to get i3)
- rofi: dynamic menu replacement for dmenu [though dmenu is suckless (https://suckless.org/)] - picom: compositor - feh or nitrogen: wallpaper management, nitrogen is gui-based - i3-gaps: add spaces between windows, I believe it's an entire package that replaces normal i3 - i3blocks or polybar: customize the status bar
Hope everyone has fun with i3!
I used Amethyst https://github.com/ianyh/Amethyst an auto-tiler on the mac for quite some time but finally gave it up recently. I loved the auto-sizing but there were little niggles on the Mac e.g. some windows really needed to be floating and layout oddities when certain windows expected more width.
I tended to find I was mostly just using spaces to keep apps I was interested full screen and using the occasional split. I was just cmd/alt-tab'ing between apps most of the time. When I did have content in multiple windows it was then a faff to try and get the two windows I wanted in the same space. I didn't feel like I was making the most of it.
I've since gone back to SizeUp https://www.irradiatedsoftware.com/sizeup/ and manually move windows to where I want them.
I feel like I wasn't and perhaps I'm still not using it as effectively as I could though hence the question.
I mostly put 1-3 windows per workspace, and generally use one workspace per task. My "main" browser window is always workspace 1. My todo lists are always workspace 2.
I then have one workspace set up to default to floating windows for apps that tends to go crazy with them, like e.g. gimp.
The other workspaces are usually split into 2 or 3 windows, usually two columns with one window taking a whole column by itself and the other column split in two "half-height". E.g. if I'm working on a web app, the browser will typically take up the biggest window. But I also have keybindings set up to let me easily move the active window left/right/up/down (it will swap places with the displaced window). I tend to move windows into a bigger space more often than I resize them.
Getting windows in the same space is easy for the most part - windows open on the space I have active, but I have keybindings set up to move the active window to a specific workspace, and you can also define rules for bspwm that sets up predefined slots for windows that "swallow" windows that match certain criteria, if there are certain apps you always want on certain workspace for example.
Switching windows to floating if the wm doesn't get it right is also just a keypress away.
bspwm can be fully controlled with a command line tool, so I also have scripts that will read a JSON file specifying a layout and recreate it and start the appropriate shells, browsers etc. I use the same plus an alias to change the name of the workspace based on the "nearest" project file working up from the last change of working directory on a given workspace. It's not perfect, but it means that e.g. if I "cd" into a project, the workspace name changes to reflect the project name, which does tend to make it easier to keep track of what I've put on which workspace.
That closest you can probably get to that is with Powertoys FancyZones. Its not exactly a tiling windows manager but its close enough.
https://github.com/microsoft/PowerToys/wiki/FancyZones-Overv...
It's no i3, but it covers a lot of usecases when I'm not on my linux box.
https://github.com/GGLucas/PyleWM
I use sway on Linux.
The other issue w/ i3/sway is you have to spend a lot of time arranging your workspace. It gives you all the power and also all of the work. In comparison, layout based tiling WMs like bspwm, awesomeWM, and xmonad intelligently place your windows in a certain way rather than requiring the user to always decide where it goes. It's largely personal preference which you like. I think I prefer the layout based WMs but sway is the only real option for wayland as far as I know.
The only exception are windows that need the entire screen, which get their own adjacent desktops. But for these I use the same desktop number always so it's easy to find.
This way I spend almost no time searching for stuff in i3. Switching between desktops is like doing a full screen grouped alt-tab. So much faster. In fact I do this even in non i3 desktop environments, but i3 makes it a lot easier.
However, I don't do things like email or document reading in i3, since I find that the less constrained traditional window environment is better for that.
The other great thing about i3 is that it's is fast over remote desktop sessions, because the ui itself is so minimal.
In my particular case I recently switched to https://www.herbstluftwm.org/ and haven't looked back. HBWM allows me to provide more rigid control over my layouts and then tile my windows in. Since switching I have found myself spending a lot less time messing around with relative sizes and a lot more time getting work done. Just one opinion - but the point is that you should do your own research.
If you are interested here is my current config https://github.com/carlsverre/config/tree/master/dotfiles/he... Visual: https://www.reddit.com/r/unixporn/comments/kcn16u/herbstluft...
And here is my i3 config https://github.com/carlsverre/config/tree/9f953365481cb96bec...
If you do decide on using i3, I encourage you to check out i3-gaps which gives windows a bit of breathing room which some people fine visually pleasant. And don't forget to join the ricing community at https://www.reddit.com/r/unixporn
1. Opacity follows the focus (see compton's "-i" option). If I look at a window and see my wallpaper showing through, I know that whatever I type won't be going there.
2. A generously sized terminal window lives in the scratchpad. Since I'm on a laptop, I sometimes find myself bouncing among workspaces fairly often--yet the same terminal is always a keystroke away.
Also, not i3-specific, but having a key binding for opening a specific notes file in an editor ensures that I make notes much more often.
There is a learning curve but once you've got it you feel like you can't go back.
When I was using mac, I had similar setup using snap and keyboard maestro, only I had to ctr-tab in iterm like crazy if I had several projects. Not anymore.
Overall I feel that I manage all of it way less and have to go through way less stuff to find what I need.
I would never use emacs as a window manager, because it's simply not stable enough for me -- it crashes and hangs quite a lot, and I have to restart it from time to time when I update my configuration and want to test it out from scratch, or when emacs get confused after running it for a long time.
i3, by contrast, has been 100% stable for me, and I almost never have to quit or restart it. So it's completely reliable, and I don't ever have to worry about it not working.
Regarding i3's config, it's really easy, and except for occasionally telling i3 the title of windows I'd like to float by default, I haven't touched my i3 config in decades.
As for how I use i3, I mostly have one full window taking up the entire screen, with other windows in the background, as tabs that I can switch to. That's 99% of my use. Occasionally I manually make a window float, when I want some odd-sized window or want it to overlap another window, and some windows I make float by default. These floating windows are all very temporary. Sometimes I'll also change my tiling configuration so that more than one window appears on the screen at the same time, but that's also pretty rare, but it's there when I want it.
Overall, I'm much happier with a tiling WM than with a floating WM, because with a tiling WM I don't have to manually fiddle with window resizing, stacking, or positioning. 99% of the time i3 just automatically does the right thing without requiring any interaction from me.
It would be nice to use emacs for this, but it's just not nearly stable enough or reliable enough for me.
Thanks for the POV!
The docs for i3 are great. The read well linearly as you are learning the ropes, but were also very searchable once you mostly knew what you were doing.
I already use tmux (since everything I do is on a remote machine) and vim for panes, and even with just two I get mixed up on which system is owning the pane that I want to switch to. Adding in the third system of i3 was really nifty, but lead to a lot of broken trains of thought. Does anyone have tmux+vim+i3? Should I just try to power through this awkward period?
https://github.com/GGLucas/PyleWM
The author has recently added some nice features - a fuzzy search launcher and a fuzzy search for open windows.
My only complaint is it only supports two workspaces per monitor (I think). There's some sort of temporary workspace, but I haven't really found a use for those and they aren't really documented. However, with the new fuzzy window finder, you can just minimize windows and than search to bring them up quickly and with minimal key strokes.
Another thing: the readme hasn't been updated since the last big changes, so you'll find that you're gonna have to install more dependencies then it says.
Once you i3, you iFree -- ha, ha, ha, long live Linux.
I would say the best technique depends on the situation. Sometimes column-oriented setup is more convenient for a given task/screen, and other times a tree is better.
The choice for jkl; for ←↑↓→ is quite unfortunate, since it is just off by one to the “standard” hjkl. Also many keyboard layouts have some other key on the place of “;”, so they have to reconfigure anyway.
With tiling window managers, for me it really is the predictability of where things are (e.g. emails are always on desktop 2 for me, browser on 1, etc.), keyboard navigation and the ability to configure all window related things in a single place / config file. Not requiring to think much about how to organize windows to quickly have a useful view lowers the cognitive load for me (possibly not a problem for others). It also allows me to quickly build pseudo-IDEs, e.g. have a left pane with vim to edit a latex file while having a split pane on the right where in the top terminal I'd call "lualatex <file>" and have the evince/zathura output of the file visible below and live-update.
Some random config details I use all the time:
# Lock screen with Ctrl+meta x, have background image
bindsym Control+$mod+x exec i3lock -i <path/to/image>
# Show a floating calc terminal with Mod+c
for_window [instance="termite" title="My Calculator"] floating enable
bindsym $mod+c exec termite -t "My Calculator" -e calc
# Show a floating units terminal with Mod+u
for_window [instance="termite" title="My Units"] floating enable
bindsym $mod+u exec termite -t "My Units" -e units
# Allow quick back and forth (First Meta+Workspace-ID goes there, second goes back)
workspace_auto_back_and_forth yes
# Use rofi to launch programs and find windows
bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu='rofi -i -show run -dmenu'
bindsym $mod+o exec --no-startup-id i3-dmenu-desktop --dmenu='rofi -i -show window'
# switch between the current and the previously focused workspace
bindsym $mod+b workspace back_and_forth
bindsym $mod+Tab workspace back_and_forth
# invert the screen with Mod+i
bindsym $mod+i exec xrandr-invert-colors
# toggle tiling / floating for window with Mod + Shift + Space
bindsym $mod+Shift+space floating toggle
# rename workspaces with Mod+t
bindsym $mod+t exec i3-input -F 'rename workspace to %s' -P ' New name: ' -f '-*-*-*-*-*-*-28-*-*-*-*-*-*-*'
# Gnome settings daemon helps us with keyrings and GTK themes
exec --no-startup-id /usr/lib/gnome-settings-daemon/gnome-settings-daemon
# calendar with Mod+p
bindsym $mod+p workspace calendar; exec termite -e 'ikhal
# Make the currently focused window a scratchpad (a hidden floating desktop) with Mod+Shift+Minus
bindsym $mod+Shift+minus move scratchpad
# Show the first scratchpad window (on any desktop show the first floating hidden window) with Mod+Minus
# Normally there is a floating terminal with vimwiki in the scratchpad
bindsym $mod+minus scratchpad showIs this actually true?
Inb4 "you waste ScrEen SpAcE", FVWM has a lovely pager and the tradition here is to not close any crap and put different work activities between pages, saving opening time. RAM issues? ZRAM handles that fine, and most of the time I don't even run X, just Tmux.
I now honestly believe mouse interfaces are overrated. They have their place in games and graphical applications. Anything that does NOT require precision is better done with a keyboard. The exception is websites. Mouse is used because it has very low learning curve and you can just click on stuff that interests you without thinking how to reach it.
The ability for one window to float over another was a later innovation and is of course more difficult to implement. The earliest versions of Windows were also tiling only, which is thus the traditional way.
I find it funny, because I would say I have seen more floating window manager, when I was browsing GitHub, so I assume it is also quite easy to create a new one from scratch. Such floating VMs usually have 200-1000 LOC and die after 1 month after initial commit. Recently, xwm has been on HN [0] and it is small in terms of SLOC. There is smaller one called tinywm[1]. When we would compare them to i3[2] and sway, we can see they have thousand times larger codebase but they also bring a lot more features.
I keep my fingers crossed for more sophisticated WMs like PaperWM[3], which is "tiled scrollable window manager" to take off. They might synthesize ideas from floating and tiling managers and provide a better tool to manage windows on a screen.
[0]: https://github.com/mcpcpc/xwm
That is because the X11 server handles the drawing of windows over each other.
Older display protocols simply had no support for it.
https://www.lifewire.com/thmb/4_wxRAsOvukqwxpkQ-2SAZTx4ro=/2...
2.0 added floating windows
https://www.lifewire.com/thmb/qXTZ7Mk9cLKSc3wpEP2wK14oT8I=/1...
The Xerox Alto was the first GUI, and it used floating windows.
Note there's a big trend of making fullscreen applications. Skype acts like you bought a computer just to run it. Slack wants it all. Gmail is crammed with icons and features and can't deal with half width screen. Media players have notions, they call your computer a library.
Instead, many applications subdivide themselves into smaller windows - for example IDEs.
It's as if people gave up arranging application windows. They alt-tab (switch) between fullscreen apps. Moving windows around is usually too much hassle. Unless you drag and drop some files from one folder to another, but even then many people prefer copy/paste.
No, why should they? Traditional mainly means what is established custom, not just what comes first or later. Floating Window Managment is around for decades, since the earliest generations of GUIs and everyone is using them today by default. Tilling back in the early days was a neccesarity, not a choice, and it was replaced fast, making it the loser of development. Later development made it a viable alternative to floating, but at this point floating was already dominating.
> The ability for one window to float over another was a later innovation
Kinda questionable. It seems MacOS had floating from the beginning. Windows was missing it in the first version, but added it in the second. But nur sure how widley used Windows was used at that time.