Qtile
From http://qtile.org:
- Qtile is a full-featured, hackable tiling window manager written in Python. Qtile is simple, small, and extensible. It is easy to write your own layouts, widgets, and built-in commands. It is written and configured entirely in Python, which means you can leverage the full power and flexibility of the language to make it fit your needs.
Installation
Install one of the following packages:
In order to run Qtile as a Wayland compositor you will need to install python-pywlroots.
Starting
Wayland
Start Qtile as a Wayland compositor by running qtile start -b wayland
.
For the status of the Wayland development progress of Qtile, see https://github.com/qtile/qtile/discussions/2409.
Configuration
As described in Configuration Lookup, Qtile provides a default configuration file that will be used in absence of user-defined ones.
The default configuration includes the shortcut Super+Enter
to open a new terminal (selected from a hardcoded list), and to quit Qtile.
In order to start customizing Qtile, copy it to :
$ mkdir -p ~/.config/qtile/ $ cp /usr/share/doc/qtile_dir/default_config.py ~/.config/qtile/config.py
Where is the name of the package you installed.
Alternatively, the most recent default configuration file can be downloaded from the git repository at libqtile/resources/default_config.py.
Several more complete configuration file examples can be found in the qtile-examples repository.
The configuration is fully done in Python: for a very quick introduction to the language you can read this tutorial.
Before restarting Qtile you can test your configuration file for syntax errors using the command:
$ python -m py_compile ~/.config/qtile/config.py
If the command gives no output, your script is correct.
Groups
In Qtile, the workspaces (or views) are called Groups. They can be defined as following:
Keys
You can configure your shortcuts with the Key class.
Here is an example of the shortcut Alt+Shift+q
to quit the window manager.
from libqtile.config import Key from libqtile.command import lazy ... keys = [ Key( ["mod1", "shift"], "q", lazy.shutdown()) ] ...
You can find out which corresponds to which key with the command Xmodmap.
Sound
You can add shortcuts to easily control the sound volume and state by adding a user to the audio group and using the command-line interface, which can be installed through the package.
Language
You can add shortcuts to easily switch between keyboard layouts in different languages using setxkbmap for example :
Screens
Create one Screen class for every monitor you have. The bars of Qtile are configured in the Screen class as in the following example:
Bars and widgets
You can find a list of all the built-in widgets in the official documentation.
If you want to add a widget to your bar, just add it like in the example above (for the widget). For example, if we want to add a battery notification, we can use the widget:
from libqtile.config import Screen from libqtile import bar, widget ... screens = [ Screen(top=bar.Bar([ widget.GroupBox(), # display the current Group widget.Battery() # display the battery state ], 30)) ] ...
Startup
You can start up applications using hooks, specifically the hook. For a list of available hooks see the documentation.
Here is an example where an application starts only once:
Debugging
Qtile writes its log into
xinit
Starting Qtile on a different virtual screen can help diagnosing issues:
$ echo "exec qtile start" > /tmp/.start_qtile; xinit /tmp/.start_qtile -- :2
Xephyr
Qtile provides a Xephyr development script that can be easily modified to instantiate a system-installed package by replacing:
env DISPLAY=${XDISPLAY} QTILE_XEPHYR=1 ${PYTHON} "${HERE}"/../bin/qtile start -l ${LOG_LEVEL} $@ &
with
env DISPLAY=${XDISPLAY} QTILE_XEPHYR=1 qtile start -l ${LOG_LEVEL} $@ &