[HN Gopher] The Qtile Window Manager: A Python-Powered Tiling Ex...
       ___________________________________________________________________
        
       The Qtile Window Manager: A Python-Powered Tiling Experience
        
       Author : stonecharioteer
       Score  : 52 points
       Date   : 2025-11-21 07:41 UTC (15 hours ago)
        
 (HTM) web link (tech.stonecharioteer.com)
 (TXT) w3m dump (tech.stonecharioteer.com)
        
       | stonecharioteer wrote:
       | I've been using Qtile for over 4 years now, and I absolutely love
       | it. I'd written a while ago about my updated config, and thought
       | I'd share.
        
       | zahlman wrote:
       | > Additionally, I disagreed with the default way of installing
       | Qtile. As a principle, I never sudo pip install anything.
       | Instead, I asked my friend Karthikeyan Singaravel, who is a
       | Python core developer, and he recommended using the deadsnakes
       | PPA for Ubuntu to install any version of Python that I chose. I
       | tried compiling python 3.10 myself, installing to /opt/qtile/
       | using configure --prefix /opt/qtile/ during the configuration
       | stage of the source code. However, I admit that using deadsnakes
       | is a far better idea since I could create a virtual environment
       | based on python3.10 into /opt/qtile/ instead. I had to change the
       | owner of the folder to my user account. Note that I could store
       | the virtual environment in my home folder and just use that, but
       | I wanted to isolate this outside of my home folder.
       | 
       | Qtile doesn't appear to be tied to a specific Python version.
       | Could you not have made a virtual environment based off the
       | system Python? For that matter, could you not have made a virtual
       | environment from a local compiled-from-source Python? (I do that
       | all the time, because I'm interested in testing against specific
       | Python versions and comparing their performance characteristics.)
       | 
       | > Then, I changed the owner of the folder to my regular user
       | account.
       | 
       | > Then, it was time to install qtile.
       | 
       | > I created /usr/share/xsessions/qtile.desktop and filled it with
       | the following:
       | 
       | Doesn't this require the environment to be owned by root? Doesn't
       | it make more sense to leave things that are in /opt as root-owned
       | anyway? (Or at least, change them back after running the
       | installation as an unprivileged user.)
       | 
       | > After this, I logged out of my previous window manager and
       | switched to the new entry for Qtile.
       | 
       | Will any random greeter program just naturally pick up the
       | contents of /usr/share/xsessions, then?
       | 
       | > Qtile's config file rests at ~/.config/qtile/config.py
       | 
       | So does it just ignore all your other dotfiles? Can I safely just
       | try this out regardless of my usual WM/DE choices?
        
         | stonecharioteer wrote:
         | > Doesn't this require the environment to be owned by root?
         | Doesn't it make more sense to leave things that are in /opt as
         | root-owned anyway? (Or at least, change them back after running
         | the installation as an unprivileged user.)
         | 
         | I changed the permissions so everyone can run the binary.
         | 
         | You _can_ use a venv. I prefer a dedicated environment for
         | this. I've been using Mise-en-place lately, it's great.
         | 
         | > Will any random greeter program just naturally pick up the
         | contents of /usr/share/xsessions, then?
         | 
         | Yep. Your login manager will pick it up.
         | 
         | > So does it just ignore all your other dotfiles? Can I safely
         | just try this out regardless of my usual WM/DE choices?
         | 
         | Yeah, you can. It's self-contained. I even setup ansible-based
         | dotfile installation in
         | https://GitHub.com/stonecharioteer/distributed-dotfiles.
         | 
         | While qtile doesn't care about the python version, I do. I've
         | grown wary of environment clobbering, it's an issue that Python
         | has had, one that even Ruby does better than it, I've
         | discovered. I like isolating these, helps debug a lot. Now I
         | have added more shortcuts to my config using Rofi scripts, I
         | can see the Qtile log, access, the dunst notification history
         | and other stuff easily with rofi. Give Qtile a go if you've
         | been looking for a Tiling Window Manager. It's married to the
         | Qtile Bar, though, but the Bar can do almost everything.
        
           | kstrauser wrote:
           | > You _can_ use a venv. I prefer a dedicated environment for
           | this.
           | 
           | A venv is Python's built-in way to handle dedicated
           | environments. It's what mise and uv use.
           | 
           | > I've grown wary of environment clobbering, it's an issue
           | that Python has had, one that even Ruby does better than it,
           | I've discovered. I like isolating these, helps debug a lot.
           | 
           | That's a Python virtualenv. It's had these for many years. I
           | don't know if there's even any other way to get the same
           | isolation with Python, short of using a container or
           | something else at the OS level.
        
             | stonecharioteer wrote:
             | I compile python from source when I'm being particularly
             | anal about isolation. Used to have playbooks for that too.
        
               | kstrauser wrote:
               | That's totally a thing you can do, but I don't think it
               | gets you anything at all over just using the built-in
               | virtualenvs. (Although lots of people create them with uv
               | or mise or poetry or whatever, the feature is part of
               | Python itself, and all those tools do is create and
               | configure them for you.)
               | 
               | Also, pyenv and uv are wonderful ways to install whatever
               | version you want without having to compile them locally,
               | and you can have many versions installed at once and use
               | a different one for each virtualenv if you want to.
        
             | zahlman wrote:
             | > I don't know if there's even any other way to get the
             | same isolation with Python, short of using a container or
             | something else at the OS level.
             | 
             | You can, but you have to hack it together yourself, e.g. by
             | modifying sys.path or setting up hooks that will do so
             | (e.g. by creating a `usercustomize.py` or
             | `sitecustomize.py` that gets pulled in by the standard
             | library `site` module). And then it will amount to almost
             | the same thing anyway, because there's really no reason for
             | anything else.
             | 
             | The virtual environment itself is _really barely anything
             | at all_ : a place to put installed packages, and a
             | `pyvenv.cfg` config/marker file that Python uses to
             | automate said sys.path hacking at startup. Oh, and a bin/
             | subdirectory with symlinks (stub wrapper executables on
             | Windows) to Python, and also a place to put entry-point
             | wrapper scripts for the installed code. That's the main
             | thing that isn't necessary for isolation, but it's pretty
             | convenient. Oh, and some "activation" scripts that hack
             | some environment variables together to make the environment
             | easier to use (see, it's the use of those symlinks that
             | determines whether the venv's packages are used).
             | 
             | The built-in support (such that `pyvenv.cfg` files are
             | created and the Python binary directly cares about them)
             | has existed since 2012, and its third-party basis (which
             | automated the sys.path hacking in a somewhat more brutal
             | way; https://archive.org/details/pyvideo_568___reverse-
             | engineerin... is quite informative) since 2007.
        
               | kstrauser wrote:
               | My reply here is to people reading along. I know you know
               | this stuff.
               | 
               | Yeah, I can imagine hacking something together on my own
               | if I had to ("first run `zfs create tank/myproject`...")
               | but I'm glad I don't. I'm not referring to the person
               | here, but I've seen people go to great lengths to avoid
               | virtualenvs when they're about as lightweight as such a
               | thing can possibly be. Like, this is the entire process
               | for using one in a project:                 $ python -m
               | venv .venv       $ source .venv/bin/activate
               | 
               | Now if you run `pip install foo` in that shell, it'll
               | install the package inside that virtualenv. If your code
               | has `import foo` somewhere, it'll load the virtualenv's
               | package, no matter what versions of foo are installed
               | elsewhere. It's nearly identical in concept to Node's
               | ./node_modules directories, except that you have to
               | explicitly activate the virtualenv, which also gives you
               | the flexibility to easily use the same venv for multiple
               | projects if you really want to.
               | 
               | If you have something like mise or uv, you can ask them
               | to manage a venv for you, but they're conceptually just
               | wrappers around those steps.
        
           | clickety_clack wrote:
           | I use mise with uv, and it works great.
           | https://mise.jdx.dev/mise-cookbook/python.html
        
             | kstrauser wrote:
             | This is the way. Or even just plain uv, although I also use
             | it from within mise.
        
         | tych0 wrote:
         | [disclaimer, maintainer here]
         | 
         | > Doesn't this require the environment to be owned by root?
         | Doesn't it make more sense to leave things that are in /opt as
         | root-owned anyway? (Or at least, change them back after running
         | the installation as an unprivileged user.)
         | 
         | No, it doesn't require that, it just means your user-owned
         | binary will be exec'd by root. But if you want the root -> user
         | owned indirection, you can set `Exec=/etc/X11/xinit/Xsession`,
         | which will exec your ~/.xsession as your user, and then you can
         | keep a local install.
         | 
         | > Will any random greeter program just naturally pick up the
         | contents of /usr/share/xsessions, then?
         | 
         | Ones that support x11 do, yes.
         | 
         | > So does it just ignore all your other dotfiles? Can I safely
         | just try this out regardless of my usual WM/DE choices?
         | 
         | We try to read XDG_* things where relevant, e.g. themes and
         | icons. But generally yes, once you point your xsession at
         | qtile, we only use our config file.
        
       | slightwinder wrote:
       | How is the state of Wayland these days with QTile? I remember
       | some years ago it was somewhat running, but stalling. Did it
       | improve in the meanwhile?
        
         | icommentedtoday wrote:
         | Qtile Dev here (jwijenbergh on GitHub). We just rewrote the
         | Wayland backend in C and will do a new release hopefully this
         | weekend. Feedback welcome!
        
           | stonecharioteer wrote:
           | OP here.thank you so much for your work on Qtile. It is so
           | underrated, it is really really good and I absolutely love
           | it.
        
       | kstrauser wrote:
       | Way back when, I had a little trouble installing Qtile on Ubuntu
       | 10.10 or so, so I wrote up a little guide on how to do it. I
       | think that became part of the official docs somewhere along the
       | way? But anyway, I didn't think much about it.
       | 
       | I went to PyCon in Santa Clara with a coworker who was being a
       | little full of himself that morning. We were standing in the swag
       | line and idly chatting with people around us. The guy in front of
       | me was saying something, stopped to look at my name tag, and did
       | a double take. "Whoa, you're that kstrauser? Who wrote the Qtile
       | guide? Wow, thank you so much!" He shook my hand, then we got our
       | swag and went different ways. I don't recall anyone else ever
       | mentioning it to me, but from my coworker's POV, we'd talked to
       | about 10 people in a conference of 3,000 and one of them knew of
       | me, so clearly I must be quietly famous or something. He stopped
       | being a know-it-all, at least for the morning.
       | 
       | So thanks, Qtile. You gave me 20 seconds of fame while standing
       | in line once.
        
       | noobermin wrote:
       | blast from the past. I moved over from awesome to qtile as I
       | really didn't use lua probably a decade ago (and I still don't)
       | but unfortunately, over the years, I did the boring thing and
       | just stuck with the gnome 3 default installed by whatever distro
       | I use.
       | 
       | Does qtile work on fedora these days? Good to hear wayland
       | support is coming along, I often miss tiling wms.
        
         | kataklasm wrote:
         | Not sure about QTile but I'm using swaywm on Fedora 43, it's a
         | delight to use! I am using a mix of sway and hyprland utensils
         | for everything and I couldn't be happier. Wayland on Fedora is
         | a no-brainer, fixed so many annoyances after moving from X.
        
       | pydry wrote:
       | Looks really nice. It's a shame it isnt quite there with wayland.
       | I'd definitely use it if it were.
        
       | caminanteblanco wrote:
       | I've been using qtile as a replacement for hyprland for a few
       | months now, and I don't have any complaints at all. It's an
       | extremely functional piece of software, and at least for me it
       | seems to be more stable than hyprland was.
        
       ___________________________________________________________________
       (page generated 2025-11-21 23:01 UTC)