How do you install and configure Quickshell?
Updated
Quickshell is a toolkit for building desktop components — status bars, widgets, lockscreens, and similar — using QtQuick. You install it from the project's Install page, then write your configuration in QML. The workflow is unusually fast to iterate on because Quickshell reloads your changes as soon as you save them, so you can edit and see the result without restarting anything.
This guide covers what you need before starting, how to get Quickshell onto your system, how to write and test a first configuration, and where the common sticking points are.
What you need before you start
Quickshell is designed to run alongside a Wayland compositor or window manager, so you should already have one set up and working. It is not a compositor itself — it builds the desktop components that sit on top of one.
You will also want to be comfortable reading and editing plain text configuration files. No prior QML experience is strictly required, but the configuration language is QML, so some familiarity with declarative UI syntax helps.
Installing Quickshell
The project points to two primary entry points on its site: Install and Documentation. Start with Install — that page carries the current, authoritative instructions for your platform, which is the right place to check because packaging details change between releases.
The site notes that Quickshell 0.3.1 has been released, so confirm which version you are pulling and match your configuration to it if you run into syntax or API differences.
A general sequence that works for most Linux desktop tooling:
- Open the Install page from the Quickshell site.
- Follow the instructions for your distribution or build method.
- Verify the install by checking that the Quickshell binary or library is available on your system.
- Move on to configuration only after the install step completes cleanly.
If your distribution's package is older than the current release, the Install page is where you will find the alternative build or source instructions.
Writing your first configuration
Quickshell is configured in QML. The site's own example is a good starting template because it demonstrates the two things you will use constantly: objects with IDs, and properties that drive other properties.
// a standard desktop window
FloatingWindow {
Timer {
// assign an id to the object, which can be
// used to reference it
id: timer
property bool invert: false // a custom property
// change the value of invert every half second
running: true; repeat: true
interval: 500 // ms
onTriggered: timer.invert = !timer.invert
}
// change the window's color when timer.invert changes
color: timer.invert ? "purple" : "green"
}
Reading this example tells you the core mechanics:
FloatingWindowis a desktop window component.Timeris a child object that fires repeatedly.id: timergives the object a name so other properties can reference it.property bool invert: falsedeclares a custom property.color: timer.invert ? "purple" : "green"binds the window color to that property, so the color changes automatically wheninvertflips.
That last line is the key idea in QML: you declare relationships between values rather than writing update code. When timer.invert changes, anything bound to it re-evaluates.
Seeing your changes in real time
Quickshell loads changes as soon as they are saved. This means your edit-test loop is: change the file, save it, and watch the running desktop component update. You do not need to restart Quickshell or your compositor between edits.
This matters most when you are tuning layout, spacing, or colors, where you want to nudge a value and immediately judge the result.
Editor support
Quickshell has LSP support, so if your editor can talk to a language server you can get completion and diagnostics for QML while writing your configuration. Setting this up is worth doing before a configuration grows large.
Learning from existing configurations
The site lists several community configurations you can study or install, which is often faster than starting from an empty file:
| Author | What is linked |
|---|---|
| soramane | Configuration (install) |
| end_4 | Configuration (install) |
| outfoxxed | Configuration (source code) |
| pfaj and bdebiase | Configuration |
| flicko | Configuration (source code) |
| vaxry | Configuration |
Configurations marked with source code are the most useful for learning, because you can read the QML directly and see how the author structured their components. Those marked with install are quicker to try if you just want a working setup to modify.
Common sticking points
Editing without saving. The live reload triggers on save, not on keystroke. If nothing changes, check that your editor actually wrote the file.
Referencing an object before it has an id. The example assigns id: timer specifically so the color binding can reach it. If you bind to a name that does not exist, the binding will not resolve.
Assuming a configuration from an older release still applies. With 0.3.1 current, a configuration written against an earlier version may need adjustment. Check the Documentation when something behaves unexpectedly.
Treating Quickshell as a compositor. It builds desktop components that run alongside your Wayland compositor or window manager. If you have no compositor running, there is nothing for it to attach to.
Where to go next
Once a minimal FloatingWindow renders and responds to a property change, you have the full loop working: install, configure in QML, save, observe. From there, the Documentation is the reference for the integrations Quickshell ships with, and the community configurations above are the practical examples for building a complete desktop environment out of status bars, widgets, and lockscreens.