Posted by signa11 15 hours ago
> The final, particularly strong, objection from the tech community is "don't touch my stuff". People get angry when they have worked hard to get their desktop environment just as they like it and something changes to disrupt that. "And I get that. As I said before, I don't want to change everything." But the world is changing, "and we need to grow our way gently into some new things."
Unproven innovation shouldn't be forced on people who don't want it. It should start by proving itself with people who have an appetite for novelty and opt into experimentation. Winning their interest will be a lower bar anyway, generating better constructive feedback on half-baked ideas, with less risk of backlash. Then, as ideas are improved and vetted, they can work their way into the mainstream.
The fact that they're not describing any such process, and instead announcing that they're coming straight for the "don't touch my stuff" crowd, makes me very wary that they think the hardest part of UI innovation is forcing people to use it against their will until they accept it.
My own Linux desktop experience peaked with Compiz, and I have been on macOS ever since.
What we need (and to some extent we get in web, i.e. gmail is different based on resolution) is different UIs based on the interface one is using. a single app that can switch between UIs.
I strongly believe the lack of this is why convertibles have remained more of a gimmick than anything else, as in practice you either keep using the app the same way you always did as you switch usages or you use different apps in the the different usage scenarios because they are tailored to that specific usage scenario. Neither are things that really sell the convertible as something with strong usage.
The closest we've gotten is things like DeX on samsung and perhaps what google is rolling out with android.
If Englebart was right, then the open source desktop is already light-years ahead. It is the only place that provides the option to pick, choose, mix, match, & experiment. That, and the steep-curve GUI needed in one line of work may end up being entirely different from the steep-curve GUI needed in another. The move to "unify" desktop & mobile in the browsers & window managers (free or proprietary) is a glaring example of how one one size does not fit all. I cannot tell you how many people outside of our circle still mourn the loss of scrollbars.
It really is currently the time and chance for Linux to finally innovate again.
* Alternatives to tree filesystem UNIX introduced (see WinFS, or how Android/iphone manage it)
* Alterantives to WIMP as discussed, specially for large monitors (37" - like 57")
* Every App should provide a REST API to access its functionality remotely (for AI and data exchange. Think OLE/COM in Windows, but good)
* PLAN9 anyone?
Even if the desktop turns out to be done though, UX polish like that drag thing is still a good idea. Like why does no major desktop let you just put icons on your desktop the way classic Windows does?
KDE doesn't let you do it either. You can only put desktop widgets on your KDE desktop.
For what it's worth, I don't use the gnome app drawer either. I exclusively use the dock + search to launch applications, so in my workflow both are actually pointless. I would still argue that opening the app drawer to reach your application shortcuts is easier and more consistent than resizing/minimizing windows to un-obstruct the desktop until you can point and click to launch an application. But I suppose managing folders on your desktop could be viewed as a plus? I'm not sure if GNOME's app menu supports that.
>KDE doesn't let you do it either My bad. I'm not too familiar with KDE.
I agree with the other poster that it isn't really a good idea though.
Because that is a crappy UX where you need to minimize or move windows away to access them.
As I recall X11 doesn't really support that at all so there was no way to implement that on Linux. Doing it on mouse up seems sensible though. I couldn't find my bug report but I bet it was met with "I like it broken".
(Except of course the Gnome folks did they utmost to make that option unavailable back in the Gnome 2 days: Metacity's raise-on-click gconf setting was hobbled so that it could only be disabled in focus-follows-mouse mode. That bit of idiocy was patched out years ago, but the obnoxious text that accompanied it survived in Marco until earlier this year!)
Which is an appropriate response when you yourself don't even want to recognize that others might prefer raising on mouse down, e.g. for lower latency in a much more common operation.
For one, the ability to change how the desktop itself works while it's running, without restarting it... modifying the code on the fly. And if I manage to crash the window manager or some other desktop component, easily just restart it without having to log out or restart all the other programs.
And being able to pretty easily run and manage hundreds of windows. Log in, open one desktop for each project, and just leave it running until the project is done. Maybe reboot for upgrades once every year or two, but otherwise no disruptions.
NO DISRUPTIONS. I don't even have the underlying plumbing installed for notifications and stuff like that. They can try to interrupt me, but they'll find those API calls aren't plugged in to anything.
Freely mixing and matching tiled and floating windows, each of which can be its own tab group with multiple arbitrary windows sharing the same frame. Super handy having free-form placement and grouping of absolutely anything.
No minimized windows. No task bar. No icon tray. No desktop full of icons underneath the windows. The entire screen is one big canvas, to be used however you like. If you need more space, just hit a key to open another desktop.
Manage nearly everything with a keyboard. Mouse usable but not required.
Sloppy focus, of course. (i.e. focus follows mouse, but stays focused if mouse "falls out" of a window into empty space) Not click-to-focus. And definitely no raise-on-click or raise-on-focus.
Mouse keys built into the keyboard, for clicking, scrolling, and moving. Mouse warp too, to teleport the cursor, like having two mouse cursors and a key to swap between them.
A full set of launcher hotkeys which are easily configured and managed by making short shell scripts. Like, F1 to F12 run scripts from ~/bin named like "f1" to "f12", and "shift-f1" and "ctrl-f1" and "shift-alt-f1" and "hyper-shift-ctrl-f1", etc... if a script exists, the key is mapped. Ideally just symlink the named key to a program or script with a more descriptive name, like "shift-f3 -> open-todays-journal-in-vim.sh" or something like that. Easy to see exactly what each key does, with a "ls -l" or similar. (can send a normal f1-f12 event by holding Fn and hitting a number key or the two keys next to the numbers, but I barely ever have a reason to)
Network transparency for everything, of course. It's wild that newer desktops have chosen to remove such a useful feature.
Work at my desk with a notebook to either side, all using a single keyboard+mouse... just slide the cursor off one screen and onto the next. Pick up a notebook and move to the living room. Use its keyboard+mouse to control the notebook plus the television, in much the same way... slide the cursor off one screen and onto the next. Pack up and go to a coffee shop. Control the remote home computers from the local notebook, using their running desktop session. Or run programs natively on several remote computers, with the windows all opened together on one desktop on the notebook.
Automate inputs easily, whenever desired. Record and play macros which work in any program.
Configurations revision-controlled and synced across all my devices, privately, without any data leaking to a corporate cloud.
Organize data into a rich set of nested topic directories or project directories, instead of organizing things by file type into places like "~/Pictures", "~/Documents", etc.
But also, a directory for each day, to hold all the other misc stuff which doesn't fit elsewhere. And a key to easily access it.
Shell scripts can easily know what program I'm using in the GUI, and what directory the focused program is working in, so scripts can take context-sensitive actions.
Automatic private logging of what I do, with easy time tracking and arbitrary queries, using simple plain text log files which are small, easy to grep, and easy to build custom tooling around.
Human-readable plain text everywhere. Plain text files are versatile, powerful, portable, compact, timeless, accessible, and future-proofed.
No churn. No need to retool every few years. Long-lived tools which are mature and robust. Maybe not the flashiest or most fashionable tools, but "bells and whistles" and "useful life" are typically at odds with each other.
A rich vocabulary of small, simple tools which each do one thing well... makes for a powerful, expressive world of deep functionality thanks to the power of language. It empowers the user to do anything they can express. But a small set of huge tools, while initially a bit easier, tends to quickly become limiting and stifling.
I think a lot of the "right answers" for interface design have been figured out for a long time. That is not to say new interfaces are bad... but anything which throws out the old battle-tested solutions in favor of something radically different is going to take a long time to reach anywhere near the same level of usefulness.
The overall setup is X11 with a Sawfish window manager. X11 provides a lot of cool features like network transparency and automation and generally being wildly flexible. Sawfish is like the Emacs of window managers, written in a flavor of Lisp, and you can literally rewrite its code while it's running. So whenever I want something to work differently... I just find that part of the code, change it, and activate it.
If I manage to crash it, that's fine... Sawfish isn't the outer process for my session. For that, I have my .Xsession just do a simple loop. It keeps running until I touch a file called ~/.xlogout, and can restart the window manager or other tools if necessary.
I pretty much never log out or reboot unless it's time to do a dist-upgrade... which means once every couple years on average. Everything just stays running.
The main limit is that Xorg is usually compiled to use an 8-bit ID for each client, so it can only have 255 clients connected at once, which usually means a limit of 255 windows open at a time. But you can push this a bit using programs which do multiple windows in a single client connection, like "urxvtcd" in rxvt-unicode can have hundreds of terminals sharing just one client slot. I've occasionally had 500+ windows open on a single computer (though this is kind of a bad habit, and I try to keep it under 200).
I configured Sawfish to do soft tiling, and also to do tabbed windowing, and made all of it work via keyboard, including things like moving and resizing windows. Sawfish is also where I implemented the "every flavor of F1-F12" hotkeys thing, and implemented mouse warp, and it already had a lot of things built in like sloppy focus and the ability to add and remove desktops with a keypress.
I added another thing to it to save the contents of every desktop, every window, size and position and title and tab grouping, etc... every 15 seconds or so if it has changed since last time. This gets archived daily. So if the whole system crashes, or if I need to actually log out, or if something bugs out, I can restore things mostly how they were.
A lot of the stuff I don't have, like a task bar, or a desktop notifications system, is simple enough to do by just not installing one or not running any of the relevant programs or services.
As for traditional-ish desktop stuff, there's not much. I set the wallpaper using a small program I made decades ago, which basically just picks a file at random from a big nested directory structure of images I've accumulated over the years. I use a 2D grid style desktop pager in the corner of the screen to see which desktop I'm on, with Hyper+Arrows keys to navigate the grid, but I barely ever look at the widget and it sticks to the bottom stacking layer so other programs are free to draw over it. Similar story for a Conky instance configured in a thin vertical strip with all sorts of realtime system stats and any other info I care to put there. It's a quick, easy way to see what's going on, but I often cover it up and use that space for other things. It's basically just system stats rendered onto the wallpaper.
I mostly use keyboards with open-source firmware like QMK, with a pretty extensive personal keymap tailored to my needs and tastes. I also added some stuff to QMK, like a better MouseKeys motion mode called "inertia" mode, to make mouseless use easier. But on notebooks and legacy keyboards, I can at least use Kanata to get most of the same features.
Macros recording/playback is built into the keyboard, or X11 in general is pretty easy to automate with small programs or shell scripts or even one-liners. Like, with xdotool.
For remote controlling other systems, x2x is great. Ancient program which "just works". Or running remote programs on the local screen, ssh + normal X11 stuff. Or for a full remote desktop, there's VNC (there's a tigervnc xorg extension, and the tigervnc viewer is good too... I patched it to make it handle larger desktops better, and the patches are upstreamed).
(continued in next comment, my post was too long to fit in one comment)
I have my dotfiles and other stuff checked into Subversion, with different programs in different modules so I can build each host's config out of a set of modules, and not have to have everything checked out on every host. There's an article about the setup on my site. Git didn't exist at the time, but you could probably do something similar with git submodules. I run a revision control server of sorts in a lxc guest on one of my computers, to make it easy to sync things. Or depending on the nature of what I'm syncing, sometimes "unison" works better, or sometimes "syncthing", or sometimes git + github, or sometimes just rsync.
I have a little python program constantly monitor the title of the focused window, and look for anything which looks like a filesystem path. This gets saved to a ramdisk, like ~/ram/last-dir and ~/ram/focused-window-title, so other programs can use this info for context-sensitive things. Hotkeys which react in different ways in different programs, or always know what directory to work in, or whatever.
I also basically keylog myself, with another little python program I wrote. It monitors the title of the focused window, logs the timestamp when each window was focused, and logs the quantity of input events... but not the actual individual content of keystrokes. So I can tell which window was used when and how active I was, but not exactly what I was typing.
To make these title-based things work better, I make sure to put useful info into my window titles. Zsh is configured to put the command line (so far) into the title, along with the current host and path, or put the finished command line into the title while a program is running. I added a browser extension to put the current URL into the window title. I configured Vim to put useful info into the title. Etc. So the logs are very detailed. This info comes in handy quite often, and is also used for other things like generating a heat map graph of my erratic sleep schedule, and predicting when I'll be awake so I can schedule appointments more easily. Can also easily tell exactly how much time I spent working on pretty much anything, for invoicing clients or working toward productivity goals or whatever.
I've put together several things which work in a daily log directory... like ~/daily/YYYY/MM/DD/ . There's a key to open a shell in today's directory, or open a minimalist filemanager there. I made a screenshot program which saves things there... like, press a key, click or drag to select what I want to save onscreen, then it shows a preview I can edit if I want, and asks for a title, with recent titles available for easy recall or searching or tab completion so I can save a series of images without having to retype the title... and then it saves to a timestamped file in today's dir. Shift+Screenshot to do the whole screen, Ctrl+Screenshot to turn off all controls and just save automatically using the most recent title, Meta+Screenshot if I want to add metadata (like open "hacker-news.2026-09-24_11:59:23.png.md" in Vim to save extra notes). Or any combination of modifiers to combine effects.
And, of course, a nice terminal and shell. I've found rxvt-unicode is lightweight and can run hundreds of terminals with near zero resource use. And zsh is very powerful and customizable. But YMMV, use whatever you like. Build up your own vocabulary of tools over time, and the shell becomes incredibly powerful.
I've had the same $HOME, basically, since I first installed Linux in the 1900s. It occasionally gets moved from one hard drive to another, and now is scattered across an entire network of many hosts, with pretty much everything replicated and synced and backed up... but it's still the same data, collected and curated and organized and optimized over decades. When one's computing environment is stable and built for user empowerment instead of corporate growth... one can really settle in and get everything "just right".
I've also had mostly the same browser session for like 15 years. Even when switching between browsers. The session is much like my $HOME filesystem, just an organized hierarchy of arbitrary stuff, whatever I found useful or notable or worth keeping. At first, I did this using Tabs Outliner in Chrome, but it has degraded over the years and has a lot of the best features paywalled, and it doesn't work on Firefox, and it didn't adapt well to Manifest V3, and it's buggy and unreliable and awkward now... so I made my own replacement. I suck at naming things though, so I just called it "TK's Tree Style Tab Outliner". Still working on the feature to auto-sync between browsers, but at least it can export and import manually and do automatic backups, to make sure data won't be lost.
... which reminds me. It's also very helpful to run Chrome (or Firefox, or whatever) in a memory jail cgroup so it won't grow until it squeezes every other program into swap space. A cgroup like this also makes it easy to pause and unpause the entire browser session so it won't do anything while you're not actively using it. Slow down the memory leaking, reduce CPU use to zero to make the rest of the system run faster and cooler and make the battery last longer, and completely stop data leaking out to corporations while the browser is idle. Yet another thing I made a little script for.
And a ton of other things which didn't even come to mind, because I'm so accustomed to it that I don't even think about it any more.
Most of this is niche and weird and probably has very few users, and took a lot of time to discover and integrate... but a lot of the stuff people want in a desktop is already possible and has been for a long time, if you're willing to look around and try things until you find what works for you. Just try to use systems which are designed to be powerful and flexible, and you'll never hit the ceiling. It may be harder initially, compared to something mainstream, but you'll be able to go a lot farther with it.