Quickshell

TypesOpen Menu

Changelog

master

Documentation


Breaking Changes

Config paths are no longer canonicalized

This fixes nix configs changing shell-ids on rebuild as the shell id is now derived from the symlink path. Configs with a symlink in their path will have a different shell id.

Shell ids are used to derive the default config / state / cache folders, so those files will need to be manually moved if using a config behind a symlinked path without an explicitly set shell id.

New Features

  • Added support for creating Polkit agents.
  • Added support for creating wayland idle inhibitors.
  • Added support for wayland idle timeouts.
  • Added support for inhibiting wayland compositor shortcuts for focused windows.
  • Added the ability to override Quickshell.cacheDir with a custom path.
  • Added minimized, maximized, and fullscreen properties to FloatingWindow.
  • Added the ability to handle move and resize events to FloatingWindow.
  • Pipewire service now reconnects if pipewire dies or a protocol error occurs.
  • Added pipewire audio peak detection.
  • Added network management support.
  • Added support for grabbing focus from popup windows.
  • Added support for IPC signal listeners.
  • Added Quickshell version checking and version gated preprocessing.
  • Added a way to detect if an icon is from the system icon theme or not.
  • Added vulkan support to screencopy.
  • Added generic WindowManager interface implementing ext-workspace.
  • Added ext-background-effect window blur support.
  • Added per-corner radius support to Region.
  • Added ColorQuantizer region selection.
  • Added dialog window support to FloatingWindow.

Other Changes

  • FreeBSD is now partially supported.
  • IPC operations filter available instances to the current display connection by default.
  • PwNodeLinkTracker ignores sound level monitoring programs.
  • Replaced breakpad with cpptrace.
  • Reloads are prevented if no file content has changed.
  • Added QS_DISABLE_FILE_WATCHER environment variable to disable file watching.
  • Added QS_DISABLE_CRASH_HANDLER environment variable to disable crash handling.
  • Added QS_CRASHREPORT_URL environment variable to allow overriding the crash reporter link.
  • Added AppId pragma and QS_APP_ID environment variable to allow overriding the desktop application ID.
  • Added DropExpensiveFonts pragma and QS_DROP_EXPENSIVE_FONTS environment variable which avoids loading fonts which may cause lag and excessive memory usage if many variants are used.
  • Unrecognized pragmas are no longer a hard error for future backward compatibility.

Bug Fixes

  • Fixed volume control breaking with pipewire pro audio mode.
  • Fixed volume control breaking with bluez streams and potentially others.
  • Fixed volume control breaking for devices without route definitions.
  • Fixed escape sequence handling in desktop entries.
  • Fixed volumes not initializing if a pipewire device was already loaded before its node.
  • Fixed hyprland active toplevel not resetting after window closes.
  • Fixed hyprland ipc window names and titles being reversed.
  • Fixed a hyprland ipc crash when refreshing toplevels before workspaces.
  • Fixed missing signals for system tray item title and description updates.
  • Fixed asynchronous loaders not working after reload.
  • Fixed asynchronous loaders not working before window creation.
  • Fixed memory leak in IPC handlers.
  • Fixed ClippingRectangle related crashes.
  • Fixed crashes when monitors are unplugged.
  • Fixed crashes when default pipewire devices are lost.
  • Fixed ToplevelManager not clearing activeToplevel on deactivation.
  • Desktop action order is now preserved.
  • Fixed partial socket reads in greetd and hyprland on slow machines.
  • Worked around Qt bug causing crashes when plugging and unplugging monitors.
  • Fixed HyprlandFocusGrab crashing if windows were destroyed after being passed to it.
  • Fixed ScreencopyView pixelation when scaled.
  • Fixed JsonAdapter crashing and providing bad data on read when using JsonObject.
  • Fixed JsonAdapter sending unnecessary property changes for primitive values.
  • Fixed JsonAdapter serialization for lists.
  • Fixed pipewire crashes after hotplugging devices and changing default outputs.
  • Fixed launches failing for --daemonize on some systems.
  • Fixed screencopy crashing when used across GPUs.

Packaging Changes

  • glib and polkit have been added as dependencies when compiling with polkit agent support.
  • vulkan-headers has been added as a build-time dependency for screencopy (Vulkan backend support).
  • breakpad has been replaced by cpptrace, which is far easier to package, and the CRASH_REPORTER cmake variable has been replaced with CRASH_HANDLER to stop this from being easy to ignore.
  • DISTRIBUTOR_DEBUGINFO_AVAILABLE was removed as it is no longer important without breakpad.
  • libdrm is now unconditionally required as a direct dependency.

v0.2.1

Documentation


New Features

  • Changes to desktop entries are now tracked in real time.

Other Changes

  • Added support for Qt 6.10

Bug Fixes

  • Fixed volumes getting stuck on change for pipewire devices with few volume steps.
  • Fixed a crash when running out of disk space to write log files.
  • Fixed a rare crash when disconnecting a monitor.
  • Fixed build issues preventing cross compilation from working.
  • Fixed dekstop entries with lower priority than a hidden entry not being hidden.
  • Fixed desktop entry keys with mismatched modifier or country not being discarded.
  • Fixed greetd hanging when authenticating with a fingerprint.

v0.2.0

Documentation


Breaking Changes

  • Files outside of the shell directory can no longer be referenced with relative paths, e.g. ’../../foo.png’.
  • PanelWindow’s Automatic exclusion mode now adds an exclusion zone for panels with a single anchor.
  • QT_QUICK_CONTROLS_STYLE and QT_STYLE_OVERRIDE are ignored unless //@ pragma RespectSystemStyle is set.

New Features

Root-Relative Imports

Quickshell 0.2 comes with a new method to import QML modules which is supported by QMLLS. This replaces “root:/” imports for QML modules.

The new syntax is import qs.path.to.module, where path/to/module is the path to a module/subdirectory relative to the config root (qs).

Better LSP support

LSP support for Singletons and Root-Relative imports can be enabled by creating a file named .qmlls.ini in the shell root directory. Quickshell will detect this file and automatically populate it with an LSP configuration. This file should be gitignored in your configuration, as it is system dependent.

The generated configuration also includes QML import paths available to Quickshell, meaning QMLLS no longer requires the -E flag.

Bluetooth Module

Quickshell can now manage your bluetooth devices through BlueZ. While authenticated pairing has not landed in 0.2, support for connecting and disconnecting devices, basic device information, and non-authenticated pairing are now supported.

Other Features

  • Added HyprlandToplevel and related toplevel/window management APIs in the Hyprland module.
  • Added Quickshell.execDetached(), which spawns a detached process without a Process object.
  • Added Process.exec() for easier reconfiguration of process commands when starting them.
  • Added FloatingWindow.title, which allows changing the title of a floating window.
  • Added signal QsWindow.closed(), fired when a window is closed externally.
  • Added support for inline replies in notifications, when supported by applications.
  • Added DesktopEntry.startupWmClass and DesktopEntry.heuristicLookup() to better identify toplevels.
  • Added DesktopEntry.command which can be run as an alternative to DesktopEntry.execute().
  • Added //@ pragma Internal, which makes a QML component impossible to import outside of its module.
  • Added dead instance selection for some subcommands, such as qs log and qs list.

Other Changes

  • Quickshell.shellRoot has been renamed to Quickshell.shellDir.
  • PanelWindow margins opposite the window’s anchorpoint are now added to exclusion zone.
  • stdout/stderr or detached processes and executed desktop entries are now hidden by default.
  • Various warnings caused by other applications Quickshell communicates with over D-BUS have been hidden in logs.
  • Quickshell’s new logo is now shown in any floating windows.

Bug Fixes

  • Fixed pipewire device volume and mute states not updating before the device has been used.
  • Fixed a crash when changing the volume of any pipewire device on a sound card another removed device was using.
  • Fixed a crash when accessing a removed previous default pipewire node from the default sink/source changed signals.
  • Fixed session locks crashing if all monitors are disconnected.
  • Fixed session locks crashing if unsupported by the compositor.
  • Fixed a crash when creating a session lock and destroying it before acknowledged by the compositor.
  • Fixed window input masks not updating after a reload.
  • Fixed PanelWindows being unconfigurable unless screen was set under X11.
  • Fixed a crash when anchoring a popup to a zero sized Item.
  • Fixed FileView crashing if watchChanges was used.
  • Fixed SocketServer sockets disappearing after a reload.
  • Fixed ScreencopyView having incorrect rotation when displaying a rotated monitor.
  • Fixed MarginWrapperManager breaking pixel alignment of child items when centering.
  • Fixed IpcHandler, NotificationServer and GlobalShortcut not activating with certain QML structures.
  • Fixed tracking of QML incubator destruction and deregistration, which occasionally caused crashes.
  • Fixed FloatingWindows being constrained to the smallest window manager supported size unless max size was set.
  • Fixed MprisPlayer.lengthSupported not updating reactively.
  • Fixed normal tray icon being ignored when status is NeedsAttention and no attention icon is provided.
  • Fixed HyprlandWorkspace.activate() sending invalid commands to Hyprland for named or special workspaces.
  • Fixed file watcher occasionally breaking when using VSCode to edit QML files.
  • Fixed crashes when screencopy buffer creation fails.
  • Fixed a crash when wayland layer surfaces are recreated for the same window.
  • Fixed the QsWindow attached object not working when using WlrLayershell directly.
  • Fixed a crash when attempting to create a window without available VRAM.
  • Fixed OOM crash when failing to write to detailed log file.
  • Prevented distro logging configurations for Qt from interfering with Quickshell commands.
  • Removed the “QProcess destroyed for running process” warning when destroying Process objects.
  • Fixed ColorQuantizer printing a pointer to an error message instead of an error message.
  • Fixed notification pixmap rowstride warning showing for correct rowstrides.

v0.1.0

Documentation


Initial release