Hacker News new | past | comments | ask | show | jobs | submit login
Qtile – A hackable tiling window manager written in Python (qtile.org)
61 points by diogoleal on Sept 23, 2014 | hide | past | favorite | 43 comments

Used it before, felt like it needed a little more. Great otherwise. After being spoiled with the Windows 8 tiling system I can't seem to appreciate tiling managers on Linux as much as I should.

Are you serious? Going from tiling window managers to Windows 8, I was like... this could be the start of something great for Windows, but it's still way too basic for me. All Windows 8 seems to have is a split view with adjustable split widths but that's super easy in any sane tiling WM.

Or are you talking about Windows 8 apps being "responsive" in some sense?

Well I do understand it's basic, but I like how isolated the applications can be. For example, I can go full screen with flash on IE for Metro, or with other "full-screen" applications and it will only hijack the portion of the screen that is taken up by IE. I can keep using Skype or even the Desktop on the side and multi-task. If I try to fullscreen Flash elsewhere it hijacks the screen and even with a second monitor breaks my multi-tasking experience.

So if anyone made a Tiling Window Manager that isolates how much an application can control, and gets rid of this config it to make it work mentality, they would have me sold. I love having multiple desktops on Linux, one feature that Windows lacks to this day. Their tiling, although incomplete, it works for me and what I do.

Sorry if I offended anyone, I'm not a tiling guru, though I'd love to be. I just prefer applications that "just work" without too much effort on the end-users part, as opposed to getting in the way of the end-user.

Fullscreening applications in xmonad behaves exactly as you described.

Are you sure? On my machine, fullscreening, e.g., YouTube will:

- in FF, launch a new window, showing a fraction of the frame.

- in Chrome, replace the current window, showing a fraction of the frame.

In both cases, if I want to see the uncropped video, I have to manually switch to Full mode. I know there are hooks[0] to change this behavior to automatically launch a floating window (I don't use YouTube enough to bother), but I don't think there's a way to get the behavior GP described. Is there?

[0] http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-Ma...

I believe that that is an issue with Flash, not with xmonad. Xmonad only lets applications draw to as much of the screen as then are alloted.

If you fullscreen Firefox, it will simply hide UI elements, not take up the entire screen. It is not xmonads responsibility to automatically scale applications.

I'm not familiar with the Windows 8 system, anything interesting you don't see in most tiling window managers?

No, not to mention they're all hackable. This is just a shit-post about half-a-decade-old software.

Heh, I was toying with "...not implemented in most..".

I've been using stumpwm for a while.. Apart from the "python instead of lisp", what would be the main differences or advantages of Qtile?

Does anyone know how it handles multiple monitors? I recently switched from xmonad to awesome and while I'm happy with it, having a separate set of screens for each monitor is pretty annoying.

It's been said before but everyone writing a tiling window manager should make it work just like xmonad does for multiple screens, they really got it perfect.

Wingo[1] (a window manager I wrote in Go) will do it right like Xmonad. Like you, I hate how most WMs handle multiple monitors, and Xmonad got that right.

(Wingo is a true hybrid WM. I like to describe it as "Openbox meets Xmonad.")

[1] - https://github.com/BurntSushi/wingo

Cool, I'll give it a go and hope that it's as helpful in getting into Go as xmonad was haskell, nothing like having your basic interaction mechanisms bug you to motivate you to dig into the code.

I'll have to try it out, nice excuse to get beyond my toy program Go experience as well.

Hmm, so what is it about Xmonad that you like exactly? Reading the FAQ I see this:

> When xmonad starts, workspace 1 is on screen 1, workspace 2 is on screen 2, etc. When switching workspaces to one that is already visible, the current and visible workspaces are swapped.

I actually like how Awesome does things but I can see how it might be nice to have one set of screens. Though I feel like you could probably script the keybindings to achieve more or less that functionality yourself, it's really easy to mess around with that kind of thing in Lua. Personally I feel like usually since my monitors are of vastly different size (laptop vs external monitor) I actually prefer to have specific layouts on specific monitors.

Actually this one is not an easily scriptable thing. I dove deep on this one.

The main use case I miss is this one. I work with two monitors, either a 30" and a sideways 24" or a 30" and my laptop screen.

Gvim, terminal windows, etc on the primary and web browser on the secondary. Works fine in xmonad and awesome.

But then I have something unusual, maybe I have a screen with a mitm proxy and a detached chromium devtools or console and a repl all layed out nicely to debug something. Aha, I think I found it, let me look at the code ... shit, I layed these out on my primary.

With xmonad I can throw that whole screen over to the secondary, might have to adjust a bit because of the resolution difference but that's way easier than having to move each app over individually which just completely breaks flow.

I tried to script it but it just ends up a mess because you do have to move each application individually and they always require a lot of fiddling.

Lua is very easy to mess around with, my first day with awesome I couldn't find a battery monitor that I liked and that worked with my laptop so I just wrote one that's perfect. Took about 2 hours since I had never written Lua before. The docs were quite good.

Xmonad should take note, have some actual documentation. Auto-generated garbage consisting solely of type signatures doesn't count.

Qtile has a set of virtual desktops ("groups" in qtile lingo), and you can display any group on any monitor, rather than having one group that maps to your pair of monitors. I find this behavior very handy.

EDIT: to clarify, it functions in essentially the same fundamental way xmonad's does.

Excellent, between that and being written in Python I will definitely be trying this out.

The way awesome uses multiple monitors (stack of virtualbox desktops per monitor) really Worms for me and is why i'm sticking with awesome.

I really do'nt understand why people have huilt so Manu different tiling WM's and have not improved/extended existing ones. The fragmentation hurts the a adoption.

Interesting, I preferred awesome's model because it allows you to mix and match contexts.

That I will definitely miss if I moved away. Maybe it's just my years with XMonad but I don't use it that often, I mostly only want to move one window around, rarely groups.

The only time I move entire groups is to push it to the other monitor which is the one thing it can't do.

I'm not sure how Xmonad and AwesomeWM handle multiple monitors, but in Qtile you have a single set of groups (analagous to tags or workspaces) shared between your monitors, and each monitor displays one group.

There's core support for multiple screens it in the basic window management model, along with hooks for xrandr refreshes. Pretty much everything you need.

What made you switch? Xmonad's unified workspaces across monitors is my favorite feature.

Ease of configuration tweaks and number of plugin contributors. And I can write Haskell code well enough, I've even had some in production, but it was still a pain to try and navigate the types in the configuration, especially trying to get two separate plugins/libs to work together.

Mostly it was the plugin community, which is much larger for awesome and the shared philosophy of the community is very unix-y/small tools focused which is great and makes up for the copy/paste script-kiddy side of it.

Damn do I miss proper monitor support though, luckily I did kinda keep a separation between my main monitor and secondary naturally so it's not as painful for me as it would be for some.

Shameless tangentially-related-software plug: I've been working on Carlisle[0] for a while and I use it day-to-to day. I wrote it because I don't personally like using tiling WMs (and I'm quite happy with Xfce) but I wanted a highly configurable way to quickly move/arrange/resize windows.

If you've used Slate[1], it's like a (much simpler) version of that, for Linux (well, EWMH-compliant X window managers, specifically).

(Carlisle is a fairly simple wrapper on top of Andrew Gallant's amazing xgbutil libraries[2] for Go.)

[0] https://github.com/cespare/carlisle

[1] https://github.com/jigish/slate

[2] http://godoc.org/github.com/BurntSushi/xgbutil

I've looked at using Qtile before, but opted to go for I3 as it seemed to be a bit more mature. Would love to hear experiences/thoughts of anyone using this, I would love to switch to it and be able to leverage my existing python knowledge for customizing.

I started with Awesome in 2009 and switched to Qtile about a year later. Python is what I do all day every day, and it's really useful to be able to customize my environment in my favorite language. The other plus of Qtile being in Python is that it's much easier for me to contribute back to the project itself.

Qtile is great. I've been using it for years, after xmonad and awesome previously.

One of the things about i3 that is really compelling is the multi-monitor support.

Qtile has multi monitor support as well. Any thoughts on why i3's is more compelling?

I cannot get over the fact GUI apps (like firefox) look so bad on every screenshot with tiling WMs. Is it that users just don't care or you actually cannot make it look good ("good" is ambiguous, so let's say how it would normally look on Xfce with standard Xubuntu theme) easily enough? I saw something like Xmonad + Gnome 3, but it sounds pretty scary (I mean, one thing that is good about tiling WMs is that they are normally lightweight). It might sound funny, but it's one of the main reasons why I don't use tiling WM yet.

Chrome looks about the same everywhere, emacs is customized within itself and I turn off all the window dressing on the terminals I use (no menus, no scrollbar, nada). Since that sums up 99% of my typical day to day computer usage there's no visual downside to xmonad for me. What looks even better than customized widgets (and I've tweaked emacs theme and the terminal settings to my taste long ago) are nice layouts that arrange all my windows in more or less logical ways automatically. Few things look as bad to me as a mess of randomly sized windows partially overlapping each other!

Could you link an example? Some tiling window manager users just don't care much about appearances (my general approach to window decoration is to get rid of it), but it should be possible to approximate the appearance of windows under any desktop environment via configuration tweaking (eg Firefox themes, font settings, GTK/Qt themes).

You are likely to find that a stand-alone WM requires more manual configuration than a DE. Most DEs have more-or-less unified settings managers, but those settings are really for many disparate components of the environment that a WM won't even try to control. It might be possible to recover some convenience by using a third-party settings manager like the previously mentioned lxappearance (I find the Arch Linux wiki a useful resource in this regard even though I don't run Arch).

Alternatively, you can use xmonad with Xfce (or another DE). That's what I did before completely switching to xmonad and it does make settings management easier.

In my experience, window manager authors don't usually care if some other program looks bad. There's no real unity, and their attitude is just "not my program, not my problem".

It's the correct attitude. They are not responsible for you having the nouse to install a GTK Theme application like lxappearance and fixing how your Firefox looks.

You can make things look pretty decent by running some kind of a settings daemon so that apps that follow xsettings Do The Right Thing. Either run one from one of the DEs, or find a thing called xsettingsd that's more standalone but a bit more painful to use. But I actually like it better since it puts the settings in a text file, and it doesn't also hijack shortcuts and the like (like gnome-settings-manager does).

I guess you are referring to the GTK/QT/... theme used? Most tiling WMs don't set one by default, but you can easily do so by using a custom .gtkrc-2.0 or so[1]. [1] see, for example, https://wiki.archlinux.org/index.php/GTK%2B#Themes

This is exactly right. GNOME, KDE and other out-of-the-box solutions make sure to set the GTK and Qt themes so that everything looks pretty. When you use a WM (window manager) rather than a DE (desktop environment), it is up to you to setup all the ancillary things such as themes and daemons. This is why .xprofile exists!

Also, I find lxappearance an easy and quick way to set GTK themes via GUI rather than having to edit the .gtkrc files for every option.

Yep. I use Ubuntu and my .xsession starts unity-settings-daemon before firing up Qtile to give me a more pleasent desktop experience.

Having tried to write a window manager for X, I am always impressed by anyone who has enough followthrough to actually finish one. And I'm very eager to see if Wayland has a nicer and more sane API than X.

What have been people's experiences with Qtile? I've used ion, Xmonad, and more recently i3wm and would love to hear what's good and not so good about Qtile.

It being Python makes it easier to get the basics done, but for me there's not a lot of value in that fact, other than setting up initial login layouts and screens I'm not a great user of WM scripting, or at least what I do use (setting up workspaces at login and always pushing X app to screen Y, floating all mpv windows) there's not a lot of difficulty or difference in sticking it in a .py file or an xmonad.hs

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact